OSDN Git Service

PR c++/27582
[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  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 2, 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 COPYING.  If not, write to
21 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22 Boston, MA 02110-1301, USA.  */
23
24 /* Known bugs or deficiencies include:
25
26      all methods must be provided in header files; can't use a source
27      file that contains only the method templates and "just win".  */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "obstack.h"
34 #include "tree.h"
35 #include "pointer-set.h"
36 #include "flags.h"
37 #include "c-common.h"
38 #include "cp-tree.h"
39 #include "cp-objcp-common.h"
40 #include "tree-inline.h"
41 #include "decl.h"
42 #include "output.h"
43 #include "except.h"
44 #include "toplev.h"
45 #include "rtl.h"
46 #include "timevar.h"
47 #include "tree-iterator.h"
48 #include "vecprim.h"
49
50 /* The type of functions taking a tree, and some additional data, and
51    returning an int.  */
52 typedef int (*tree_fn_t) (tree, void*);
53
54 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
55    instantiations have been deferred, either because their definitions
56    were not yet available, or because we were putting off doing the work.
57    The TREE_PURPOSE of each entry is either a DECL (for a function or
58    static data member), or a TYPE (for a class) indicating what we are
59    hoping to instantiate.  The TREE_VALUE is not used.  */
60 static GTY(()) tree pending_templates;
61 static GTY(()) tree last_pending_template;
62
63 int processing_template_parmlist;
64 static int template_header_count;
65
66 static GTY(()) tree saved_trees;
67 static VEC(int,heap) *inline_parm_levels;
68
69 static GTY(()) tree current_tinst_level;
70
71 static GTY(()) tree saved_access_scope;
72
73 /* Live only within one (recursive) call to tsubst_expr.  We use
74    this to pass the statement expression node from the STMT_EXPR
75    to the EXPR_STMT that is its result.  */
76 static tree cur_stmt_expr;
77
78 /* A map from local variable declarations in the body of the template
79    presently being instantiated to the corresponding instantiated
80    local variables.  */
81 static htab_t local_specializations;
82
83 #define UNIFY_ALLOW_NONE 0
84 #define UNIFY_ALLOW_MORE_CV_QUAL 1
85 #define UNIFY_ALLOW_LESS_CV_QUAL 2
86 #define UNIFY_ALLOW_DERIVED 4
87 #define UNIFY_ALLOW_INTEGER 8
88 #define UNIFY_ALLOW_OUTER_LEVEL 16
89 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
90 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
91
92 static void push_access_scope (tree);
93 static void pop_access_scope (tree);
94 static int resolve_overloaded_unification (tree, tree, tree, tree,
95                                            unification_kind_t, int);
96 static int try_one_overload (tree, tree, tree, tree, tree,
97                              unification_kind_t, int, bool);
98 static int unify (tree, tree, tree, tree, int);
99 static void add_pending_template (tree);
100 static int push_tinst_level (tree);
101 static void pop_tinst_level (void);
102 static void reopen_tinst_level (tree);
103 static tree classtype_mangled_name (tree);
104 static char* mangle_class_name_for_template (const char *, tree, tree);
105 static tree tsubst_initializer_list (tree, tree);
106 static tree get_class_bindings (tree, tree, tree);
107 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t, 
108                                    bool, bool);
109 static void tsubst_enum (tree, tree, tree);
110 static tree add_to_template_args (tree, tree);
111 static tree add_outermost_template_args (tree, tree);
112 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
113 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*);
114 static int  type_unification_real (tree, tree, tree, tree,
115                                    int, unification_kind_t, int);
116 static void note_template_header (int);
117 static tree convert_nontype_argument_function (tree, tree);
118 static tree convert_nontype_argument (tree, tree);
119 static tree convert_template_argument (tree, tree, tree,
120                                        tsubst_flags_t, int, tree);
121 static int for_each_template_parm (tree, tree_fn_t, void*,
122                                    struct pointer_set_t*);
123 static tree build_template_parm_index (int, int, int, tree, tree);
124 static int inline_needs_template_parms (tree);
125 static void push_inline_template_parms_recursive (tree, int);
126 static tree retrieve_local_specialization (tree);
127 static void register_local_specialization (tree, tree);
128 static tree reduce_template_parm_level (tree, tree, int);
129 static int mark_template_parm (tree, void *);
130 static int template_parm_this_level_p (tree, void *);
131 static tree tsubst_friend_function (tree, tree);
132 static tree tsubst_friend_class (tree, tree);
133 static int can_complete_type_without_circularity (tree);
134 static tree get_bindings (tree, tree, tree, bool);
135 static int template_decl_level (tree);
136 static int check_cv_quals_for_unify (int, tree, tree);
137 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
138 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
139 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
140 static void regenerate_decl_from_template (tree, tree);
141 static tree most_specialized_class (tree, tree);
142 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
143 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
144 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
145 static void check_specialization_scope (void);
146 static tree process_partial_specialization (tree);
147 static void set_current_access_from_decl (tree);
148 static void check_default_tmpl_args (tree, tree, int, int);
149 static tree get_template_base (tree, tree, tree, tree);
150 static tree try_class_unification (tree, tree, tree, tree);
151 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
152                                            tree, tree);
153 static tree determine_specialization (tree, tree, tree *, int, int);
154 static int template_args_equal (tree, tree);
155 static void tsubst_default_arguments (tree);
156 static tree for_each_template_parm_r (tree *, int *, void *);
157 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
158 static void copy_default_args_to_explicit_spec (tree);
159 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
160 static int eq_local_specializations (const void *, const void *);
161 static bool dependent_type_p_r (tree);
162 static tree tsubst (tree, tree, tsubst_flags_t, tree);
163 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree);
164 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
165
166 /* Make the current scope suitable for access checking when we are
167    processing T.  T can be FUNCTION_DECL for instantiated function
168    template, or VAR_DECL for static member variable (need by
169    instantiate_decl).  */
170
171 static void
172 push_access_scope (tree t)
173 {
174   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
175               || TREE_CODE (t) == VAR_DECL);
176
177   if (DECL_FRIEND_CONTEXT (t))
178     push_nested_class (DECL_FRIEND_CONTEXT (t));
179   else if (DECL_CLASS_SCOPE_P (t))
180     push_nested_class (DECL_CONTEXT (t));
181   else
182     push_to_top_level ();
183
184   if (TREE_CODE (t) == FUNCTION_DECL)
185     {
186       saved_access_scope = tree_cons
187         (NULL_TREE, current_function_decl, saved_access_scope);
188       current_function_decl = t;
189     }
190 }
191
192 /* Restore the scope set up by push_access_scope.  T is the node we
193    are processing.  */
194
195 static void
196 pop_access_scope (tree t)
197 {
198   if (TREE_CODE (t) == FUNCTION_DECL)
199     {
200       current_function_decl = TREE_VALUE (saved_access_scope);
201       saved_access_scope = TREE_CHAIN (saved_access_scope);
202     }
203
204   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
205     pop_nested_class ();
206   else
207     pop_from_top_level ();
208 }
209
210 /* Do any processing required when DECL (a member template
211    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
212    to DECL, unless it is a specialization, in which case the DECL
213    itself is returned.  */
214
215 tree
216 finish_member_template_decl (tree decl)
217 {
218   if (decl == error_mark_node)
219     return error_mark_node;
220
221   gcc_assert (DECL_P (decl));
222
223   if (TREE_CODE (decl) == TYPE_DECL)
224     {
225       tree type;
226
227       type = TREE_TYPE (decl);
228       if (IS_AGGR_TYPE (type)
229           && CLASSTYPE_TEMPLATE_INFO (type)
230           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
231         {
232           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
233           check_member_template (tmpl);
234           return tmpl;
235         }
236       return NULL_TREE;
237     }
238   else if (TREE_CODE (decl) == FIELD_DECL)
239     error ("data member %qD cannot be a member template", decl);
240   else if (DECL_TEMPLATE_INFO (decl))
241     {
242       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
243         {
244           check_member_template (DECL_TI_TEMPLATE (decl));
245           return DECL_TI_TEMPLATE (decl);
246         }
247       else
248         return decl;
249     }
250   else
251     error ("invalid member template declaration %qD", decl);
252
253   return error_mark_node;
254 }
255
256 /* Returns the template nesting level of the indicated class TYPE.
257
258    For example, in:
259      template <class T>
260      struct A
261      {
262        template <class U>
263        struct B {};
264      };
265
266    A<T>::B<U> has depth two, while A<T> has depth one.
267    Both A<T>::B<int> and A<int>::B<U> have depth one, if
268    they are instantiations, not specializations.
269
270    This function is guaranteed to return 0 if passed NULL_TREE so
271    that, for example, `template_class_depth (current_class_type)' is
272    always safe.  */
273
274 int
275 template_class_depth (tree type)
276 {
277   int depth;
278
279   for (depth = 0;
280        type && TREE_CODE (type) != NAMESPACE_DECL;
281        type = (TREE_CODE (type) == FUNCTION_DECL)
282          ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
283     {
284       if (TREE_CODE (type) != FUNCTION_DECL)
285         {
286           if (CLASSTYPE_TEMPLATE_INFO (type)
287               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
288               && uses_template_parms (CLASSTYPE_TI_ARGS (type)))
289             ++depth;
290         }
291       else
292         {
293           if (DECL_TEMPLATE_INFO (type)
294               && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
295               && uses_template_parms (DECL_TI_ARGS (type)))
296             ++depth;
297         }
298     }
299
300   return depth;
301 }
302
303 /* Returns 1 if processing DECL as part of do_pending_inlines
304    needs us to push template parms.  */
305
306 static int
307 inline_needs_template_parms (tree decl)
308 {
309   if (! DECL_TEMPLATE_INFO (decl))
310     return 0;
311
312   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
313           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
314 }
315
316 /* Subroutine of maybe_begin_member_template_processing.
317    Push the template parms in PARMS, starting from LEVELS steps into the
318    chain, and ending at the beginning, since template parms are listed
319    innermost first.  */
320
321 static void
322 push_inline_template_parms_recursive (tree parmlist, int levels)
323 {
324   tree parms = TREE_VALUE (parmlist);
325   int i;
326
327   if (levels > 1)
328     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
329
330   ++processing_template_decl;
331   current_template_parms
332     = tree_cons (size_int (processing_template_decl),
333                  parms, current_template_parms);
334   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
335
336   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
337                NULL);
338   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
339     {
340       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
341       gcc_assert (DECL_P (parm));
342
343       switch (TREE_CODE (parm))
344         {
345         case TYPE_DECL:
346         case TEMPLATE_DECL:
347           pushdecl (parm);
348           break;
349
350         case PARM_DECL:
351           {
352             /* Make a CONST_DECL as is done in process_template_parm.
353                It is ugly that we recreate this here; the original
354                version built in process_template_parm is no longer
355                available.  */
356             tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
357                                     TREE_TYPE (parm));
358             DECL_ARTIFICIAL (decl) = 1;
359             TREE_CONSTANT (decl) = 1;
360             TREE_INVARIANT (decl) = 1;
361             TREE_READONLY (decl) = 1;
362             DECL_INITIAL (decl) = DECL_INITIAL (parm);
363             SET_DECL_TEMPLATE_PARM_P (decl);
364             pushdecl (decl);
365           }
366           break;
367
368         default:
369           gcc_unreachable ();
370         }
371     }
372 }
373
374 /* Restore the template parameter context for a member template or
375    a friend template defined in a class definition.  */
376
377 void
378 maybe_begin_member_template_processing (tree decl)
379 {
380   tree parms;
381   int levels = 0;
382
383   if (inline_needs_template_parms (decl))
384     {
385       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
386       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
387
388       if (DECL_TEMPLATE_SPECIALIZATION (decl))
389         {
390           --levels;
391           parms = TREE_CHAIN (parms);
392         }
393
394       push_inline_template_parms_recursive (parms, levels);
395     }
396
397   /* Remember how many levels of template parameters we pushed so that
398      we can pop them later.  */
399   VEC_safe_push (int, heap, inline_parm_levels, levels);
400 }
401
402 /* Undo the effects of maybe_begin_member_template_processing.  */
403
404 void
405 maybe_end_member_template_processing (void)
406 {
407   int i;
408   int last;
409
410   if (VEC_length (int, inline_parm_levels) == 0)
411     return;
412
413   last = VEC_pop (int, inline_parm_levels);
414   for (i = 0; i < last; ++i)
415     {
416       --processing_template_decl;
417       current_template_parms = TREE_CHAIN (current_template_parms);
418       poplevel (0, 0, 0);
419     }
420 }
421
422 /* Return a new template argument vector which contains all of ARGS,
423    but has as its innermost set of arguments the EXTRA_ARGS.  */
424
425 static tree
426 add_to_template_args (tree args, tree extra_args)
427 {
428   tree new_args;
429   int extra_depth;
430   int i;
431   int j;
432
433   extra_depth = TMPL_ARGS_DEPTH (extra_args);
434   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
435
436   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
437     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
438
439   for (j = 1; j <= extra_depth; ++j, ++i)
440     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
441
442   return new_args;
443 }
444
445 /* Like add_to_template_args, but only the outermost ARGS are added to
446    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
447    (EXTRA_ARGS) levels are added.  This function is used to combine
448    the template arguments from a partial instantiation with the
449    template arguments used to attain the full instantiation from the
450    partial instantiation.  */
451
452 static tree
453 add_outermost_template_args (tree args, tree extra_args)
454 {
455   tree new_args;
456
457   /* If there are more levels of EXTRA_ARGS than there are ARGS,
458      something very fishy is going on.  */
459   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
460
461   /* If *all* the new arguments will be the EXTRA_ARGS, just return
462      them.  */
463   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
464     return extra_args;
465
466   /* For the moment, we make ARGS look like it contains fewer levels.  */
467   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
468
469   new_args = add_to_template_args (args, extra_args);
470
471   /* Now, we restore ARGS to its full dimensions.  */
472   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
473
474   return new_args;
475 }
476
477 /* Return the N levels of innermost template arguments from the ARGS.  */
478
479 tree
480 get_innermost_template_args (tree args, int n)
481 {
482   tree new_args;
483   int extra_levels;
484   int i;
485
486   gcc_assert (n >= 0);
487
488   /* If N is 1, just return the innermost set of template arguments.  */
489   if (n == 1)
490     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
491
492   /* If we're not removing anything, just return the arguments we were
493      given.  */
494   extra_levels = TMPL_ARGS_DEPTH (args) - n;
495   gcc_assert (extra_levels >= 0);
496   if (extra_levels == 0)
497     return args;
498
499   /* Make a new set of arguments, not containing the outer arguments.  */
500   new_args = make_tree_vec (n);
501   for (i = 1; i <= n; ++i)
502     SET_TMPL_ARGS_LEVEL (new_args, i,
503                          TMPL_ARGS_LEVEL (args, i + extra_levels));
504
505   return new_args;
506 }
507
508 /* We've got a template header coming up; push to a new level for storing
509    the parms.  */
510
511 void
512 begin_template_parm_list (void)
513 {
514   /* We use a non-tag-transparent scope here, which causes pushtag to
515      put tags in this scope, rather than in the enclosing class or
516      namespace scope.  This is the right thing, since we want
517      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
518      global template class, push_template_decl handles putting the
519      TEMPLATE_DECL into top-level scope.  For a nested template class,
520      e.g.:
521
522        template <class T> struct S1 {
523          template <class T> struct S2 {};
524        };
525
526      pushtag contains special code to call pushdecl_with_scope on the
527      TEMPLATE_DECL for S2.  */
528   begin_scope (sk_template_parms, NULL);
529   ++processing_template_decl;
530   ++processing_template_parmlist;
531   note_template_header (0);
532 }
533
534 /* This routine is called when a specialization is declared.  If it is
535    invalid to declare a specialization here, an error is reported.  */
536
537 static void
538 check_specialization_scope (void)
539 {
540   tree scope = current_scope ();
541
542   /* [temp.expl.spec]
543
544      An explicit specialization shall be declared in the namespace of
545      which the template is a member, or, for member templates, in the
546      namespace of which the enclosing class or enclosing class
547      template is a member.  An explicit specialization of a member
548      function, member class or static data member of a class template
549      shall be declared in the namespace of which the class template
550      is a member.  */
551   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
552     error ("explicit specialization in non-namespace scope %qD", scope);
553
554   /* [temp.expl.spec]
555
556      In an explicit specialization declaration for a member of a class
557      template or a member template that appears in namespace scope,
558      the member template and some of its enclosing class templates may
559      remain unspecialized, except that the declaration shall not
560      explicitly specialize a class member template if its enclosing
561      class templates are not explicitly specialized as well.  */
562   if (current_template_parms)
563     error ("enclosing class templates are not explicitly specialized");
564 }
565
566 /* We've just seen template <>.  */
567
568 void
569 begin_specialization (void)
570 {
571   begin_scope (sk_template_spec, NULL);
572   note_template_header (1);
573   check_specialization_scope ();
574 }
575
576 /* Called at then end of processing a declaration preceded by
577    template<>.  */
578
579 void
580 end_specialization (void)
581 {
582   finish_scope ();
583   reset_specialization ();
584 }
585
586 /* Any template <>'s that we have seen thus far are not referring to a
587    function specialization.  */
588
589 void
590 reset_specialization (void)
591 {
592   processing_specialization = 0;
593   template_header_count = 0;
594 }
595
596 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
597    it was of the form template <>.  */
598
599 static void
600 note_template_header (int specialization)
601 {
602   processing_specialization = specialization;
603   template_header_count++;
604 }
605
606 /* We're beginning an explicit instantiation.  */
607
608 void
609 begin_explicit_instantiation (void)
610 {
611   gcc_assert (!processing_explicit_instantiation);
612   processing_explicit_instantiation = true;
613 }
614
615
616 void
617 end_explicit_instantiation (void)
618 {
619   gcc_assert (processing_explicit_instantiation);
620   processing_explicit_instantiation = false;
621 }
622
623 /* An explicit specialization or partial specialization TMPL is being
624    declared.  Check that the namespace in which the specialization is
625    occurring is permissible.  Returns false iff it is invalid to
626    specialize TMPL in the current namespace.  */
627
628 static bool
629 check_specialization_namespace (tree tmpl)
630 {
631   tree tpl_ns = decl_namespace_context (tmpl);
632
633   /* [tmpl.expl.spec]
634
635      An explicit specialization shall be declared in the namespace of
636      which the template is a member, or, for member templates, in the
637      namespace of which the enclosing class or enclosing class
638      template is a member.  An explicit specialization of a member
639      function, member class or static data member of a class template
640      shall be declared in the namespace of which the class template is
641      a member.  */
642   if (is_associated_namespace (current_namespace, tpl_ns))
643     /* Same or super-using namespace.  */
644     return true;
645   else
646     {
647       pedwarn ("specialization of %qD in different namespace", tmpl);
648       pedwarn ("  from definition of %q+#D", tmpl);
649       return false;
650     }
651 }
652
653 /* SPEC is an explicit instantiation.  Check that it is valid to
654    perform this explicit instantiation in the current namespace.  */
655
656 static void
657 check_explicit_instantiation_namespace (tree spec)
658 {
659   tree ns;
660
661   /* DR 275: An explicit instantiation shall appear in an enclosing
662      namespace of its template.  */ 
663   ns = decl_namespace_context (spec);
664   if (!is_ancestor (current_namespace, ns))
665     pedwarn ("explicit instantiation of %qD in namespace %qD "
666              "(which does not enclose namespace %qD)",
667              spec, current_namespace, ns);
668 }
669
670 /* The TYPE is being declared.  If it is a template type, that means it
671    is a partial specialization.  Do appropriate error-checking.  */
672
673 void
674 maybe_process_partial_specialization (tree type)
675 {
676   tree context;
677
678   if (type == error_mark_node)
679     return;
680
681   context = TYPE_CONTEXT (type);
682
683   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
684     {
685       /* This is for ordinary explicit specialization and partial
686          specialization of a template class such as:
687
688            template <> class C<int>;
689
690          or:
691
692            template <class T> class C<T*>;
693
694          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
695
696       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
697           && !COMPLETE_TYPE_P (type))
698         {
699           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
700           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
701           if (processing_template_decl)
702             push_template_decl (TYPE_MAIN_DECL (type));
703         }
704       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
705         error ("specialization of %qT after instantiation", type);
706     }
707   else if (CLASS_TYPE_P (type)
708            && !CLASSTYPE_USE_TEMPLATE (type)
709            && CLASSTYPE_TEMPLATE_INFO (type)
710            && context && CLASS_TYPE_P (context)
711            && CLASSTYPE_TEMPLATE_INFO (context))
712     {
713       /* This is for an explicit specialization of member class
714          template according to [temp.expl.spec/18]:
715
716            template <> template <class U> class C<int>::D;
717
718          The context `C<int>' must be an implicit instantiation.
719          Otherwise this is just a member class template declared
720          earlier like:
721
722            template <> class C<int> { template <class U> class D; };
723            template <> template <class U> class C<int>::D;
724
725          In the first case, `C<int>::D' is a specialization of `C<T>::D'
726          while in the second case, `C<int>::D' is a primary template
727          and `C<T>::D' may not exist.  */
728
729       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
730           && !COMPLETE_TYPE_P (type))
731         {
732           tree t;
733
734           if (current_namespace
735               != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
736             {
737               pedwarn ("specializing %q#T in different namespace", type);
738               pedwarn ("  from definition of %q+#D",
739                        CLASSTYPE_TI_TEMPLATE (type));
740             }
741
742           /* Check for invalid specialization after instantiation:
743
744                template <> template <> class C<int>::D<int>;
745                template <> template <class U> class C<int>::D;  */
746
747           for (t = DECL_TEMPLATE_INSTANTIATIONS
748                  (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
749                t; t = TREE_CHAIN (t))
750             if (TREE_VALUE (t) != type
751                 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
752               error ("specialization %qT after instantiation %qT",
753                      type, TREE_VALUE (t));
754
755           /* Mark TYPE as a specialization.  And as a result, we only
756              have one level of template argument for the innermost
757              class template.  */
758           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
759           CLASSTYPE_TI_ARGS (type)
760             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
761         }
762     }
763   else if (processing_specialization)
764     error ("explicit specialization of non-template %qT", type);
765 }
766
767 /* Returns nonzero if we can optimize the retrieval of specializations
768    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
769    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
770
771 static inline bool
772 optimize_specialization_lookup_p (tree tmpl)
773 {
774   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
775           && DECL_CLASS_SCOPE_P (tmpl)
776           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
777              parameter.  */
778           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
779           /* The optimized lookup depends on the fact that the
780              template arguments for the member function template apply
781              purely to the containing class, which is not true if the
782              containing class is an explicit or partial
783              specialization.  */
784           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
785           && !DECL_MEMBER_TEMPLATE_P (tmpl)
786           && !DECL_CONV_FN_P (tmpl)
787           /* It is possible to have a template that is not a member
788              template and is not a member of a template class:
789
790              template <typename T>
791              struct S { friend A::f(); };
792
793              Here, the friend function is a template, but the context does
794              not have template information.  The optimized lookup relies
795              on having ARGS be the template arguments for both the class
796              and the function template.  */
797           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
798 }
799
800 /* Retrieve the specialization (in the sense of [temp.spec] - a
801    specialization is either an instantiation or an explicit
802    specialization) of TMPL for the given template ARGS.  If there is
803    no such specialization, return NULL_TREE.  The ARGS are a vector of
804    arguments, or a vector of vectors of arguments, in the case of
805    templates with more than one level of parameters.
806
807    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
808    then we search for a partial specialization matching ARGS.  This
809    parameter is ignored if TMPL is not a class template.  */
810
811 static tree
812 retrieve_specialization (tree tmpl, tree args,
813                          bool class_specializations_p)
814 {
815   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
816
817   /* There should be as many levels of arguments as there are
818      levels of parameters.  */
819   gcc_assert (TMPL_ARGS_DEPTH (args)
820               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
821
822   if (optimize_specialization_lookup_p (tmpl))
823     {
824       tree class_template;
825       tree class_specialization;
826       VEC(tree,gc) *methods;
827       tree fns;
828       int idx;
829
830       /* The template arguments actually apply to the containing
831          class.  Find the class specialization with those
832          arguments.  */
833       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
834       class_specialization
835         = retrieve_specialization (class_template, args,
836                                    /*class_specializations_p=*/false);
837       if (!class_specialization)
838         return NULL_TREE;
839       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
840          for the specialization.  */
841       idx = class_method_index_for_fn (class_specialization, tmpl);
842       if (idx == -1)
843         return NULL_TREE;
844       /* Iterate through the methods with the indicated name, looking
845          for the one that has an instance of TMPL.  */
846       methods = CLASSTYPE_METHOD_VEC (class_specialization);
847       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
848         {
849           tree fn = OVL_CURRENT (fns);
850           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
851             return fn;
852         }
853       return NULL_TREE;
854     }
855   else
856     {
857       tree *sp;
858       tree *head;
859
860       /* Class templates store their instantiations on the
861          DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
862          DECL_TEMPLATE_SPECIALIZATIONS list.  */
863       if (!class_specializations_p
864           && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL)
865         sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
866       else
867         sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
868       head = sp;
869       /* Iterate through the list until we find a matching template.  */
870       while (*sp != NULL_TREE)
871         {
872           tree spec = *sp;
873
874           if (comp_template_args (TREE_PURPOSE (spec), args))
875             {
876               /* Use the move-to-front heuristic to speed up future
877                  searches.  */
878               if (spec != *head)
879                 {
880                   *sp = TREE_CHAIN (*sp);
881                   TREE_CHAIN (spec) = *head;
882                   *head = spec;
883                 }
884               return TREE_VALUE (spec);
885             }
886           sp = &TREE_CHAIN (spec);
887         }
888     }
889
890   return NULL_TREE;
891 }
892
893 /* Like retrieve_specialization, but for local declarations.  */
894
895 static tree
896 retrieve_local_specialization (tree tmpl)
897 {
898   tree spec = (tree) htab_find_with_hash (local_specializations, tmpl,
899                                           htab_hash_pointer (tmpl));
900   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
901 }
902
903 /* Returns nonzero iff DECL is a specialization of TMPL.  */
904
905 int
906 is_specialization_of (tree decl, tree tmpl)
907 {
908   tree t;
909
910   if (TREE_CODE (decl) == FUNCTION_DECL)
911     {
912       for (t = decl;
913            t != NULL_TREE;
914            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
915         if (t == tmpl)
916           return 1;
917     }
918   else
919     {
920       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
921
922       for (t = TREE_TYPE (decl);
923            t != NULL_TREE;
924            t = CLASSTYPE_USE_TEMPLATE (t)
925              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
926         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
927           return 1;
928     }
929
930   return 0;
931 }
932
933 /* Returns nonzero iff DECL is a specialization of friend declaration
934    FRIEND according to [temp.friend].  */
935
936 bool
937 is_specialization_of_friend (tree decl, tree friend)
938 {
939   bool need_template = true;
940   int template_depth;
941
942   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
943               || TREE_CODE (decl) == TYPE_DECL);
944
945   /* For [temp.friend/6] when FRIEND is an ordinary member function
946      of a template class, we want to check if DECL is a specialization
947      if this.  */
948   if (TREE_CODE (friend) == FUNCTION_DECL
949       && DECL_TEMPLATE_INFO (friend)
950       && !DECL_USE_TEMPLATE (friend))
951     {
952       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
953       friend = DECL_TI_TEMPLATE (friend);
954       need_template = false;
955     }
956   else if (TREE_CODE (friend) == TEMPLATE_DECL
957            && !PRIMARY_TEMPLATE_P (friend))
958     need_template = false;
959
960   /* There is nothing to do if this is not a template friend.  */
961   if (TREE_CODE (friend) != TEMPLATE_DECL)
962     return false;
963
964   if (is_specialization_of (decl, friend))
965     return true;
966
967   /* [temp.friend/6]
968      A member of a class template may be declared to be a friend of a
969      non-template class.  In this case, the corresponding member of
970      every specialization of the class template is a friend of the
971      class granting friendship.
972
973      For example, given a template friend declaration
974
975        template <class T> friend void A<T>::f();
976
977      the member function below is considered a friend
978
979        template <> struct A<int> {
980          void f();
981        };
982
983      For this type of template friend, TEMPLATE_DEPTH below will be
984      nonzero.  To determine if DECL is a friend of FRIEND, we first
985      check if the enclosing class is a specialization of another.  */
986
987   template_depth = template_class_depth (DECL_CONTEXT (friend));
988   if (template_depth
989       && DECL_CLASS_SCOPE_P (decl)
990       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
991                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
992     {
993       /* Next, we check the members themselves.  In order to handle
994          a few tricky cases, such as when FRIEND's are
995
996            template <class T> friend void A<T>::g(T t);
997            template <class T> template <T t> friend void A<T>::h();
998
999          and DECL's are
1000
1001            void A<int>::g(int);
1002            template <int> void A<int>::h();
1003
1004          we need to figure out ARGS, the template arguments from
1005          the context of DECL.  This is required for template substitution
1006          of `T' in the function parameter of `g' and template parameter
1007          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1008
1009       tree context = DECL_CONTEXT (decl);
1010       tree args = NULL_TREE;
1011       int current_depth = 0;
1012
1013       while (current_depth < template_depth)
1014         {
1015           if (CLASSTYPE_TEMPLATE_INFO (context))
1016             {
1017               if (current_depth == 0)
1018                 args = TYPE_TI_ARGS (context);
1019               else
1020                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1021               current_depth++;
1022             }
1023           context = TYPE_CONTEXT (context);
1024         }
1025
1026       if (TREE_CODE (decl) == FUNCTION_DECL)
1027         {
1028           bool is_template;
1029           tree friend_type;
1030           tree decl_type;
1031           tree friend_args_type;
1032           tree decl_args_type;
1033
1034           /* Make sure that both DECL and FRIEND are templates or
1035              non-templates.  */
1036           is_template = DECL_TEMPLATE_INFO (decl)
1037                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1038           if (need_template ^ is_template)
1039             return false;
1040           else if (is_template)
1041             {
1042               /* If both are templates, check template parameter list.  */
1043               tree friend_parms
1044                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1045                                          args, tf_none);
1046               if (!comp_template_parms
1047                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1048                       friend_parms))
1049                 return false;
1050
1051               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1052             }
1053           else
1054             decl_type = TREE_TYPE (decl);
1055
1056           friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1057                                               tf_none, NULL_TREE);
1058           if (friend_type == error_mark_node)
1059             return false;
1060
1061           /* Check if return types match.  */
1062           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1063             return false;
1064
1065           /* Check if function parameter types match, ignoring the
1066              `this' parameter.  */
1067           friend_args_type = TYPE_ARG_TYPES (friend_type);
1068           decl_args_type = TYPE_ARG_TYPES (decl_type);
1069           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1070             friend_args_type = TREE_CHAIN (friend_args_type);
1071           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1072             decl_args_type = TREE_CHAIN (decl_args_type);
1073
1074           return compparms (decl_args_type, friend_args_type);
1075         }
1076       else
1077         {
1078           /* DECL is a TYPE_DECL */
1079           bool is_template;
1080           tree decl_type = TREE_TYPE (decl);
1081
1082           /* Make sure that both DECL and FRIEND are templates or
1083              non-templates.  */
1084           is_template
1085             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1086               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1087
1088           if (need_template ^ is_template)
1089             return false;
1090           else if (is_template)
1091             {
1092               tree friend_parms;
1093               /* If both are templates, check the name of the two
1094                  TEMPLATE_DECL's first because is_friend didn't.  */
1095               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1096                   != DECL_NAME (friend))
1097                 return false;
1098
1099               /* Now check template parameter list.  */
1100               friend_parms
1101                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1102                                          args, tf_none);
1103               return comp_template_parms
1104                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1105                  friend_parms);
1106             }
1107           else
1108             return (DECL_NAME (decl)
1109                     == DECL_NAME (friend));
1110         }
1111     }
1112   return false;
1113 }
1114
1115 /* Register the specialization SPEC as a specialization of TMPL with
1116    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1117    is actually just a friend declaration.  Returns SPEC, or an
1118    equivalent prior declaration, if available.  */
1119
1120 static tree
1121 register_specialization (tree spec, tree tmpl, tree args, bool is_friend)
1122 {
1123   tree fn;
1124
1125   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1126
1127   if (TREE_CODE (spec) == FUNCTION_DECL
1128       && uses_template_parms (DECL_TI_ARGS (spec)))
1129     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1130        register it; we want the corresponding TEMPLATE_DECL instead.
1131        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1132        the more obvious `uses_template_parms (spec)' to avoid problems
1133        with default function arguments.  In particular, given
1134        something like this:
1135
1136           template <class T> void f(T t1, T t = T())
1137
1138        the default argument expression is not substituted for in an
1139        instantiation unless and until it is actually needed.  */
1140     return spec;
1141
1142   fn = retrieve_specialization (tmpl, args,
1143                                 /*class_specializations_p=*/false);
1144   /* We can sometimes try to re-register a specialization that we've
1145      already got.  In particular, regenerate_decl_from_template calls
1146      duplicate_decls which will update the specialization list.  But,
1147      we'll still get called again here anyhow.  It's more convenient
1148      to simply allow this than to try to prevent it.  */
1149   if (fn == spec)
1150     return spec;
1151   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1152     {
1153       if (DECL_TEMPLATE_INSTANTIATION (fn))
1154         {
1155           if (TREE_USED (fn)
1156               || DECL_EXPLICIT_INSTANTIATION (fn))
1157             {
1158               error ("specialization of %qD after instantiation",
1159                      fn);
1160               return spec;
1161             }
1162           else
1163             {
1164               tree clone;
1165               /* This situation should occur only if the first
1166                  specialization is an implicit instantiation, the
1167                  second is an explicit specialization, and the
1168                  implicit instantiation has not yet been used.  That
1169                  situation can occur if we have implicitly
1170                  instantiated a member function and then specialized
1171                  it later.
1172
1173                  We can also wind up here if a friend declaration that
1174                  looked like an instantiation turns out to be a
1175                  specialization:
1176
1177                    template <class T> void foo(T);
1178                    class S { friend void foo<>(int) };
1179                    template <> void foo(int);
1180
1181                  We transform the existing DECL in place so that any
1182                  pointers to it become pointers to the updated
1183                  declaration.
1184
1185                  If there was a definition for the template, but not
1186                  for the specialization, we want this to look as if
1187                  there were no definition, and vice versa.  */
1188               DECL_INITIAL (fn) = NULL_TREE;
1189               duplicate_decls (spec, fn, is_friend);
1190               /* The call to duplicate_decls will have applied
1191                  [temp.expl.spec]: 
1192
1193                    An explicit specialization of a function template
1194                    is inline only if it is explicitly declared to be,
1195                    and independently of whether its function template
1196                    is.
1197
1198                 to the primary function; now copy the inline bits to
1199                 the various clones.  */   
1200               FOR_EACH_CLONE (clone, fn)
1201                 {
1202                   DECL_DECLARED_INLINE_P (clone)
1203                     = DECL_DECLARED_INLINE_P (fn);
1204                   DECL_INLINE (clone)
1205                     = DECL_INLINE (fn);
1206                 }
1207               check_specialization_namespace (fn);
1208
1209               return fn;
1210             }
1211         }
1212       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1213         {
1214           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1215             /* Dup decl failed, but this is a new definition. Set the
1216                line number so any errors match this new
1217                definition.  */
1218             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1219
1220           return fn;
1221         }
1222     }
1223
1224   /* A specialization must be declared in the same namespace as the
1225      template it is specializing.  */
1226   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1227       && !check_specialization_namespace (tmpl))
1228     DECL_CONTEXT (spec) = decl_namespace_context (tmpl);
1229
1230   if (!optimize_specialization_lookup_p (tmpl))
1231     DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1232       = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1233
1234   return spec;
1235 }
1236
1237 /* Unregister the specialization SPEC as a specialization of TMPL.
1238    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1239    if the SPEC was listed as a specialization of TMPL.  */
1240
1241 bool
1242 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1243 {
1244   tree* s;
1245
1246   for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1247        *s != NULL_TREE;
1248        s = &TREE_CHAIN (*s))
1249     if (TREE_VALUE (*s) == spec)
1250       {
1251         if (!new_spec)
1252           *s = TREE_CHAIN (*s);
1253         else
1254           TREE_VALUE (*s) = new_spec;
1255         return 1;
1256       }
1257
1258   return 0;
1259 }
1260
1261 /* Compare an entry in the local specializations hash table P1 (which
1262    is really a pointer to a TREE_LIST) with P2 (which is really a
1263    DECL).  */
1264
1265 static int
1266 eq_local_specializations (const void *p1, const void *p2)
1267 {
1268   return TREE_VALUE ((tree) p1) == (tree) p2;
1269 }
1270
1271 /* Hash P1, an entry in the local specializations table.  */
1272
1273 static hashval_t
1274 hash_local_specialization (const void* p1)
1275 {
1276   return htab_hash_pointer (TREE_VALUE ((tree) p1));
1277 }
1278
1279 /* Like register_specialization, but for local declarations.  We are
1280    registering SPEC, an instantiation of TMPL.  */
1281
1282 static void
1283 register_local_specialization (tree spec, tree tmpl)
1284 {
1285   void **slot;
1286
1287   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1288                                    htab_hash_pointer (tmpl), INSERT);
1289   *slot = build_tree_list (spec, tmpl);
1290 }
1291
1292 /* Print the list of candidate FNS in an error message.  */
1293
1294 void
1295 print_candidates (tree fns)
1296 {
1297   tree fn;
1298
1299   const char *str = "candidates are:";
1300
1301   for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1302     {
1303       tree f;
1304
1305       for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1306         error ("%s %+#D", str, OVL_CURRENT (f));
1307       str = "               ";
1308     }
1309 }
1310
1311 /* Returns the template (one of the functions given by TEMPLATE_ID)
1312    which can be specialized to match the indicated DECL with the
1313    explicit template args given in TEMPLATE_ID.  The DECL may be
1314    NULL_TREE if none is available.  In that case, the functions in
1315    TEMPLATE_ID are non-members.
1316
1317    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1318    specialization of a member template.
1319
1320    The TEMPLATE_COUNT is the number of references to qualifying
1321    template classes that appeared in the name of the function. See
1322    check_explicit_specialization for a more accurate description.
1323
1324    The template args (those explicitly specified and those deduced)
1325    are output in a newly created vector *TARGS_OUT.
1326
1327    If it is impossible to determine the result, an error message is
1328    issued.  The error_mark_node is returned to indicate failure.  */
1329
1330 static tree
1331 determine_specialization (tree template_id,
1332                           tree decl,
1333                           tree* targs_out,
1334                           int need_member_template,
1335                           int template_count)
1336 {
1337   tree fns;
1338   tree targs;
1339   tree explicit_targs;
1340   tree candidates = NULL_TREE;
1341   /* A TREE_LIST of templates of which DECL may be a specialization.
1342      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1343      corresponding TREE_PURPOSE is the set of template arguments that,
1344      when used to instantiate the template, would produce a function
1345      with the signature of DECL.  */
1346   tree templates = NULL_TREE;
1347   int header_count;
1348   struct cp_binding_level *b;
1349
1350   *targs_out = NULL_TREE;
1351
1352   if (template_id == error_mark_node)
1353     return error_mark_node;
1354
1355   fns = TREE_OPERAND (template_id, 0);
1356   explicit_targs = TREE_OPERAND (template_id, 1);
1357
1358   if (fns == error_mark_node)
1359     return error_mark_node;
1360
1361   /* Check for baselinks.  */
1362   if (BASELINK_P (fns))
1363     fns = BASELINK_FUNCTIONS (fns);
1364
1365   if (!is_overloaded_fn (fns))
1366     {
1367       error ("%qD is not a function template", fns);
1368       return error_mark_node;
1369     }
1370
1371   /* Count the number of template headers specified for this
1372      specialization.  */
1373   header_count = 0;
1374   for (b = current_binding_level;
1375        b->kind == sk_template_parms;
1376        b = b->level_chain)
1377     ++header_count;
1378
1379   for (; fns; fns = OVL_NEXT (fns))
1380     {
1381       tree fn = OVL_CURRENT (fns);
1382
1383       if (TREE_CODE (fn) == TEMPLATE_DECL)
1384         {
1385           tree decl_arg_types;
1386           tree fn_arg_types;
1387
1388           /* DECL might be a specialization of FN.  */
1389
1390           /* Adjust the type of DECL in case FN is a static member.  */
1391           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1392           if (DECL_STATIC_FUNCTION_P (fn)
1393               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1394             decl_arg_types = TREE_CHAIN (decl_arg_types);
1395
1396           /* Check that the number of function parameters matches.
1397              For example,
1398                template <class T> void f(int i = 0);
1399                template <> void f<int>();
1400              The specialization f<int> is invalid but is not caught
1401              by get_bindings below.  */
1402
1403           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1404           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1405             continue;
1406
1407           /* For a non-static member function, we need to make sure that
1408              the const qualification is the same. This can be done by
1409              checking the 'this' in the argument list.  */
1410           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1411               && !same_type_p (TREE_VALUE (fn_arg_types),
1412                                TREE_VALUE (decl_arg_types)))
1413             continue;
1414
1415           /* In case of explicit specialization, we need to check if
1416              the number of template headers appearing in the specialization
1417              is correct. This is usually done in check_explicit_specialization,
1418              but the check done there cannot be exhaustive when specializing
1419              member functions. Consider the following code:
1420
1421              template <> void A<int>::f(int);
1422              template <> template <> void A<int>::f(int);
1423
1424              Assuming that A<int> is not itself an explicit specialization
1425              already, the first line specializes "f" which is a non-template
1426              member function, whilst the second line specializes "f" which
1427              is a template member function. So both lines are syntactically
1428              correct, and check_explicit_specialization does not reject
1429              them.
1430
1431              Here, we can do better, as we are matching the specialization
1432              against the declarations. We count the number of template
1433              headers, and we check if they match TEMPLATE_COUNT + 1
1434              (TEMPLATE_COUNT is the number of qualifying template classes,
1435              plus there must be another header for the member template
1436              itself).
1437
1438              Notice that if header_count is zero, this is not a
1439              specialization but rather a template instantiation, so there
1440              is no check we can perform here.  */
1441           if (header_count && header_count != template_count + 1)
1442             continue;
1443
1444           /* Check that the number of template arguments at the
1445              innermost level for DECL is the same as for FN.  */
1446           if (current_binding_level->kind == sk_template_parms
1447               && !current_binding_level->explicit_spec_p
1448               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1449                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS 
1450                                       (current_template_parms))))
1451             continue;
1452
1453           /* See whether this function might be a specialization of this
1454              template.  */
1455           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1456
1457           if (!targs)
1458             /* We cannot deduce template arguments that when used to
1459                specialize TMPL will produce DECL.  */
1460             continue;
1461
1462           /* Save this template, and the arguments deduced.  */
1463           templates = tree_cons (targs, fn, templates);
1464         }
1465       else if (need_member_template)
1466         /* FN is an ordinary member function, and we need a
1467            specialization of a member template.  */
1468         ;
1469       else if (TREE_CODE (fn) != FUNCTION_DECL)
1470         /* We can get IDENTIFIER_NODEs here in certain erroneous
1471            cases.  */
1472         ;
1473       else if (!DECL_FUNCTION_MEMBER_P (fn))
1474         /* This is just an ordinary non-member function.  Nothing can
1475            be a specialization of that.  */
1476         ;
1477       else if (DECL_ARTIFICIAL (fn))
1478         /* Cannot specialize functions that are created implicitly.  */
1479         ;
1480       else
1481         {
1482           tree decl_arg_types;
1483
1484           /* This is an ordinary member function.  However, since
1485              we're here, we can assume it's enclosing class is a
1486              template class.  For example,
1487
1488                template <typename T> struct S { void f(); };
1489                template <> void S<int>::f() {}
1490
1491              Here, S<int>::f is a non-template, but S<int> is a
1492              template class.  If FN has the same type as DECL, we
1493              might be in business.  */
1494
1495           if (!DECL_TEMPLATE_INFO (fn))
1496             /* Its enclosing class is an explicit specialization
1497                of a template class.  This is not a candidate.  */
1498             continue;
1499
1500           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1501                             TREE_TYPE (TREE_TYPE (fn))))
1502             /* The return types differ.  */
1503             continue;
1504
1505           /* Adjust the type of DECL in case FN is a static member.  */
1506           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1507           if (DECL_STATIC_FUNCTION_P (fn)
1508               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1509             decl_arg_types = TREE_CHAIN (decl_arg_types);
1510
1511           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1512                          decl_arg_types))
1513             /* They match!  */
1514             candidates = tree_cons (NULL_TREE, fn, candidates);
1515         }
1516     }
1517
1518   if (templates && TREE_CHAIN (templates))
1519     {
1520       /* We have:
1521
1522            [temp.expl.spec]
1523
1524            It is possible for a specialization with a given function
1525            signature to be instantiated from more than one function
1526            template.  In such cases, explicit specification of the
1527            template arguments must be used to uniquely identify the
1528            function template specialization being specialized.
1529
1530          Note that here, there's no suggestion that we're supposed to
1531          determine which of the candidate templates is most
1532          specialized.  However, we, also have:
1533
1534            [temp.func.order]
1535
1536            Partial ordering of overloaded function template
1537            declarations is used in the following contexts to select
1538            the function template to which a function template
1539            specialization refers:
1540
1541            -- when an explicit specialization refers to a function
1542               template.
1543
1544          So, we do use the partial ordering rules, at least for now.
1545          This extension can only serve to make invalid programs valid,
1546          so it's safe.  And, there is strong anecdotal evidence that
1547          the committee intended the partial ordering rules to apply;
1548          the EDG front-end has that behavior, and John Spicer claims
1549          that the committee simply forgot to delete the wording in
1550          [temp.expl.spec].  */
1551       tree tmpl = most_specialized_instantiation (templates);
1552       if (tmpl != error_mark_node)
1553         {
1554           templates = tmpl;
1555           TREE_CHAIN (templates) = NULL_TREE;
1556         }
1557     }
1558
1559   if (templates == NULL_TREE && candidates == NULL_TREE)
1560     {
1561       error ("template-id %qD for %q+D does not match any template "
1562              "declaration", template_id, decl);
1563       return error_mark_node;
1564     }
1565   else if ((templates && TREE_CHAIN (templates))
1566            || (candidates && TREE_CHAIN (candidates))
1567            || (templates && candidates))
1568     {
1569       error ("ambiguous template specialization %qD for %q+D",
1570              template_id, decl);
1571       chainon (candidates, templates);
1572       print_candidates (candidates);
1573       return error_mark_node;
1574     }
1575
1576   /* We have one, and exactly one, match.  */
1577   if (candidates)
1578     {
1579       /* It was a specialization of an ordinary member function in a
1580          template class.  */
1581       *targs_out = copy_node (DECL_TI_ARGS (TREE_VALUE (candidates)));
1582       return DECL_TI_TEMPLATE (TREE_VALUE (candidates));
1583     }
1584
1585   /* It was a specialization of a template.  */
1586   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1587   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1588     {
1589       *targs_out = copy_node (targs);
1590       SET_TMPL_ARGS_LEVEL (*targs_out,
1591                            TMPL_ARGS_DEPTH (*targs_out),
1592                            TREE_PURPOSE (templates));
1593     }
1594   else
1595     *targs_out = TREE_PURPOSE (templates);
1596   return TREE_VALUE (templates);
1597 }
1598
1599 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1600    but with the default argument values filled in from those in the
1601    TMPL_TYPES.  */
1602
1603 static tree
1604 copy_default_args_to_explicit_spec_1 (tree spec_types,
1605                                       tree tmpl_types)
1606 {
1607   tree new_spec_types;
1608
1609   if (!spec_types)
1610     return NULL_TREE;
1611
1612   if (spec_types == void_list_node)
1613     return void_list_node;
1614
1615   /* Substitute into the rest of the list.  */
1616   new_spec_types =
1617     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1618                                           TREE_CHAIN (tmpl_types));
1619
1620   /* Add the default argument for this parameter.  */
1621   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1622                          TREE_VALUE (spec_types),
1623                          new_spec_types);
1624 }
1625
1626 /* DECL is an explicit specialization.  Replicate default arguments
1627    from the template it specializes.  (That way, code like:
1628
1629      template <class T> void f(T = 3);
1630      template <> void f(double);
1631      void g () { f (); }
1632
1633    works, as required.)  An alternative approach would be to look up
1634    the correct default arguments at the call-site, but this approach
1635    is consistent with how implicit instantiations are handled.  */
1636
1637 static void
1638 copy_default_args_to_explicit_spec (tree decl)
1639 {
1640   tree tmpl;
1641   tree spec_types;
1642   tree tmpl_types;
1643   tree new_spec_types;
1644   tree old_type;
1645   tree new_type;
1646   tree t;
1647   tree object_type = NULL_TREE;
1648   tree in_charge = NULL_TREE;
1649   tree vtt = NULL_TREE;
1650
1651   /* See if there's anything we need to do.  */
1652   tmpl = DECL_TI_TEMPLATE (decl);
1653   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1654   for (t = tmpl_types; t; t = TREE_CHAIN (t))
1655     if (TREE_PURPOSE (t))
1656       break;
1657   if (!t)
1658     return;
1659
1660   old_type = TREE_TYPE (decl);
1661   spec_types = TYPE_ARG_TYPES (old_type);
1662
1663   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1664     {
1665       /* Remove the this pointer, but remember the object's type for
1666          CV quals.  */
1667       object_type = TREE_TYPE (TREE_VALUE (spec_types));
1668       spec_types = TREE_CHAIN (spec_types);
1669       tmpl_types = TREE_CHAIN (tmpl_types);
1670
1671       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1672         {
1673           /* DECL may contain more parameters than TMPL due to the extra
1674              in-charge parameter in constructors and destructors.  */
1675           in_charge = spec_types;
1676           spec_types = TREE_CHAIN (spec_types);
1677         }
1678       if (DECL_HAS_VTT_PARM_P (decl))
1679         {
1680           vtt = spec_types;
1681           spec_types = TREE_CHAIN (spec_types);
1682         }
1683     }
1684
1685   /* Compute the merged default arguments.  */
1686   new_spec_types =
1687     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1688
1689   /* Compute the new FUNCTION_TYPE.  */
1690   if (object_type)
1691     {
1692       if (vtt)
1693         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1694                                          TREE_VALUE (vtt),
1695                                          new_spec_types);
1696
1697       if (in_charge)
1698         /* Put the in-charge parameter back.  */
1699         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1700                                          TREE_VALUE (in_charge),
1701                                          new_spec_types);
1702
1703       new_type = build_method_type_directly (object_type,
1704                                              TREE_TYPE (old_type),
1705                                              new_spec_types);
1706     }
1707   else
1708     new_type = build_function_type (TREE_TYPE (old_type),
1709                                     new_spec_types);
1710   new_type = cp_build_type_attribute_variant (new_type,
1711                                               TYPE_ATTRIBUTES (old_type));
1712   new_type = build_exception_variant (new_type,
1713                                       TYPE_RAISES_EXCEPTIONS (old_type));
1714   TREE_TYPE (decl) = new_type;
1715 }
1716
1717 /* Check to see if the function just declared, as indicated in
1718    DECLARATOR, and in DECL, is a specialization of a function
1719    template.  We may also discover that the declaration is an explicit
1720    instantiation at this point.
1721
1722    Returns DECL, or an equivalent declaration that should be used
1723    instead if all goes well.  Issues an error message if something is
1724    amiss.  Returns error_mark_node if the error is not easily
1725    recoverable.
1726
1727    FLAGS is a bitmask consisting of the following flags:
1728
1729    2: The function has a definition.
1730    4: The function is a friend.
1731
1732    The TEMPLATE_COUNT is the number of references to qualifying
1733    template classes that appeared in the name of the function.  For
1734    example, in
1735
1736      template <class T> struct S { void f(); };
1737      void S<int>::f();
1738
1739    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
1740    classes are not counted in the TEMPLATE_COUNT, so that in
1741
1742      template <class T> struct S {};
1743      template <> struct S<int> { void f(); }
1744      template <> void S<int>::f();
1745
1746    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
1747    invalid; there should be no template <>.)
1748
1749    If the function is a specialization, it is marked as such via
1750    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
1751    is set up correctly, and it is added to the list of specializations
1752    for that template.  */
1753
1754 tree
1755 check_explicit_specialization (tree declarator,
1756                                tree decl,
1757                                int template_count,
1758                                int flags)
1759 {
1760   int have_def = flags & 2;
1761   int is_friend = flags & 4;
1762   int specialization = 0;
1763   int explicit_instantiation = 0;
1764   int member_specialization = 0;
1765   tree ctype = DECL_CLASS_CONTEXT (decl);
1766   tree dname = DECL_NAME (decl);
1767   tmpl_spec_kind tsk;
1768
1769   if (is_friend)
1770     {
1771       if (!processing_specialization)
1772         tsk = tsk_none;
1773       else
1774         tsk = tsk_excessive_parms;
1775     }
1776   else
1777     tsk = current_tmpl_spec_kind (template_count);
1778
1779   switch (tsk)
1780     {
1781     case tsk_none:
1782       if (processing_specialization)
1783         {
1784           specialization = 1;
1785           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1786         }
1787       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1788         {
1789           if (is_friend)
1790             /* This could be something like:
1791
1792                template <class T> void f(T);
1793                class S { friend void f<>(int); }  */
1794             specialization = 1;
1795           else
1796             {
1797               /* This case handles bogus declarations like template <>
1798                  template <class T> void f<int>(); */
1799
1800               error ("template-id %qD in declaration of primary template",
1801                      declarator);
1802               return decl;
1803             }
1804         }
1805       break;
1806
1807     case tsk_invalid_member_spec:
1808       /* The error has already been reported in
1809          check_specialization_scope.  */
1810       return error_mark_node;
1811
1812     case tsk_invalid_expl_inst:
1813       error ("template parameter list used in explicit instantiation");
1814
1815       /* Fall through.  */
1816
1817     case tsk_expl_inst:
1818       if (have_def)
1819         error ("definition provided for explicit instantiation");
1820
1821       explicit_instantiation = 1;
1822       break;
1823
1824     case tsk_excessive_parms:
1825     case tsk_insufficient_parms:
1826       if (tsk == tsk_excessive_parms)
1827         error ("too many template parameter lists in declaration of %qD",
1828                decl);
1829       else if (template_header_count)
1830         error("too few template parameter lists in declaration of %qD", decl);
1831       else
1832         error("explicit specialization of %qD must be introduced by "
1833               "%<template <>%>", decl);
1834
1835       /* Fall through.  */
1836     case tsk_expl_spec:
1837       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1838       if (ctype)
1839         member_specialization = 1;
1840       else
1841         specialization = 1;
1842       break;
1843
1844     case tsk_template:
1845       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1846         {
1847           /* This case handles bogus declarations like template <>
1848              template <class T> void f<int>(); */
1849
1850           if (uses_template_parms (declarator))
1851             error ("function template partial specialization %qD "
1852                    "is not allowed", declarator);
1853           else
1854             error ("template-id %qD in declaration of primary template",
1855                    declarator);
1856           return decl;
1857         }
1858
1859       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1860         /* This is a specialization of a member template, without
1861            specialization the containing class.  Something like:
1862
1863              template <class T> struct S {
1864                template <class U> void f (U);
1865              };
1866              template <> template <class U> void S<int>::f(U) {}
1867
1868            That's a specialization -- but of the entire template.  */
1869         specialization = 1;
1870       break;
1871
1872     default:
1873       gcc_unreachable ();
1874     }
1875
1876   if (specialization || member_specialization)
1877     {
1878       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1879       for (; t; t = TREE_CHAIN (t))
1880         if (TREE_PURPOSE (t))
1881           {
1882             pedwarn
1883               ("default argument specified in explicit specialization");
1884             break;
1885           }
1886     }
1887
1888   if (specialization || member_specialization || explicit_instantiation)
1889     {
1890       tree tmpl = NULL_TREE;
1891       tree targs = NULL_TREE;
1892
1893       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
1894       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
1895         {
1896           tree fns;
1897
1898           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
1899           if (ctype)
1900             fns = dname;
1901           else
1902             {
1903               /* If there is no class context, the explicit instantiation
1904                  must be at namespace scope.  */
1905               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
1906
1907               /* Find the namespace binding, using the declaration
1908                  context.  */
1909               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
1910                                            false, true);
1911               if (!fns || !is_overloaded_fn (fns))
1912                 {
1913                   error ("%qD is not a template function", dname);
1914                   fns = error_mark_node;
1915                 }
1916               else
1917                 {
1918                   tree fn = OVL_CURRENT (fns);
1919                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
1920                                                 CP_DECL_CONTEXT (fn)))
1921                     error ("%qD is not declared in %qD",
1922                            decl, current_namespace);
1923                 }
1924             }
1925
1926           declarator = lookup_template_function (fns, NULL_TREE);
1927         }
1928
1929       if (declarator == error_mark_node)
1930         return error_mark_node;
1931
1932       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
1933         {
1934           if (!explicit_instantiation)
1935             /* A specialization in class scope.  This is invalid,
1936                but the error will already have been flagged by
1937                check_specialization_scope.  */
1938             return error_mark_node;
1939           else
1940             {
1941               /* It's not valid to write an explicit instantiation in
1942                  class scope, e.g.:
1943
1944                    class C { template void f(); }
1945
1946                    This case is caught by the parser.  However, on
1947                    something like:
1948
1949                    template class C { void f(); };
1950
1951                    (which is invalid) we can get here.  The error will be
1952                    issued later.  */
1953               ;
1954             }
1955
1956           return decl;
1957         }
1958       else if (ctype != NULL_TREE
1959                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
1960                    IDENTIFIER_NODE))
1961         {
1962           /* Find the list of functions in ctype that have the same
1963              name as the declared function.  */
1964           tree name = TREE_OPERAND (declarator, 0);
1965           tree fns = NULL_TREE;
1966           int idx;
1967
1968           if (constructor_name_p (name, ctype))
1969             {
1970               int is_constructor = DECL_CONSTRUCTOR_P (decl);
1971
1972               if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
1973                   : !CLASSTYPE_DESTRUCTORS (ctype))
1974                 {
1975                   /* From [temp.expl.spec]:
1976
1977                      If such an explicit specialization for the member
1978                      of a class template names an implicitly-declared
1979                      special member function (clause _special_), the
1980                      program is ill-formed.
1981
1982                      Similar language is found in [temp.explicit].  */
1983                   error ("specialization of implicitly-declared special member function");
1984                   return error_mark_node;
1985                 }
1986
1987               name = is_constructor ? ctor_identifier : dtor_identifier;
1988             }
1989
1990           if (!DECL_CONV_FN_P (decl))
1991             {
1992               idx = lookup_fnfields_1 (ctype, name);
1993               if (idx >= 0)
1994                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
1995             }
1996           else
1997             {
1998               VEC(tree,gc) *methods;
1999               tree ovl;
2000
2001               /* For a type-conversion operator, we cannot do a
2002                  name-based lookup.  We might be looking for `operator
2003                  int' which will be a specialization of `operator T'.
2004                  So, we find *all* the conversion operators, and then
2005                  select from them.  */
2006               fns = NULL_TREE;
2007
2008               methods = CLASSTYPE_METHOD_VEC (ctype);
2009               if (methods)
2010                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2011                      VEC_iterate (tree, methods, idx, ovl);
2012                      ++idx)
2013                   {
2014                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2015                       /* There are no more conversion functions.  */
2016                       break;
2017
2018                     /* Glue all these conversion functions together
2019                        with those we already have.  */
2020                     for (; ovl; ovl = OVL_NEXT (ovl))
2021                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2022                   }
2023             }
2024
2025           if (fns == NULL_TREE)
2026             {
2027               error ("no member function %qD declared in %qT", name, ctype);
2028               return error_mark_node;
2029             }
2030           else
2031             TREE_OPERAND (declarator, 0) = fns;
2032         }
2033
2034       /* Figure out what exactly is being specialized at this point.
2035          Note that for an explicit instantiation, even one for a
2036          member function, we cannot tell apriori whether the
2037          instantiation is for a member template, or just a member
2038          function of a template class.  Even if a member template is
2039          being instantiated, the member template arguments may be
2040          elided if they can be deduced from the rest of the
2041          declaration.  */
2042       tmpl = determine_specialization (declarator, decl,
2043                                        &targs,
2044                                        member_specialization,
2045                                        template_count);
2046
2047       if (!tmpl || tmpl == error_mark_node)
2048         /* We couldn't figure out what this declaration was
2049            specializing.  */
2050         return error_mark_node;
2051       else
2052         {
2053           tree gen_tmpl = most_general_template (tmpl);
2054
2055           if (explicit_instantiation)
2056             {
2057               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2058                  is done by do_decl_instantiation later.  */
2059
2060               int arg_depth = TMPL_ARGS_DEPTH (targs);
2061               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2062
2063               if (arg_depth > parm_depth)
2064                 {
2065                   /* If TMPL is not the most general template (for
2066                      example, if TMPL is a friend template that is
2067                      injected into namespace scope), then there will
2068                      be too many levels of TARGS.  Remove some of them
2069                      here.  */
2070                   int i;
2071                   tree new_targs;
2072
2073                   new_targs = make_tree_vec (parm_depth);
2074                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2075                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2076                       = TREE_VEC_ELT (targs, i);
2077                   targs = new_targs;
2078                 }
2079
2080               return instantiate_template (tmpl, targs, tf_error);
2081             }
2082
2083           /* If we thought that the DECL was a member function, but it
2084              turns out to be specializing a static member function,
2085              make DECL a static member function as well.  */
2086           if (DECL_STATIC_FUNCTION_P (tmpl)
2087               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2088             revert_static_member_fn (decl);
2089
2090           /* If this is a specialization of a member template of a
2091              template class.  In we want to return the TEMPLATE_DECL,
2092              not the specialization of it.  */
2093           if (tsk == tsk_template)
2094             {
2095               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2096               DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2097               if (have_def)
2098                 {
2099                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2100                   DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2101                     = DECL_SOURCE_LOCATION (decl);
2102                   /* We want to use the argument list specified in the
2103                      definition, not in the original declaration.  */
2104                   DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2105                     = DECL_ARGUMENTS (decl);
2106                 }
2107               return tmpl;
2108             }
2109
2110           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2111           DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2112
2113           /* Inherit default function arguments from the template
2114              DECL is specializing.  */
2115           copy_default_args_to_explicit_spec (decl);
2116
2117           /* This specialization has the same protection as the
2118              template it specializes.  */
2119           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2120           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2121           /* The specialization has the same visibility as the
2122              template it specializes.  */
2123           if (DECL_VISIBILITY_SPECIFIED (gen_tmpl))
2124             {
2125               DECL_VISIBILITY_SPECIFIED (decl) = 1;
2126               DECL_VISIBILITY (decl) = DECL_VISIBILITY (gen_tmpl);
2127             }
2128           /* If DECL is a friend declaration, declared using an
2129              unqualified name, the namespace associated with DECL may
2130              have been set incorrectly.  For example, in:
2131              
2132                template <typename T> void f(T); 
2133                namespace N {
2134                  struct S { friend void f<int>(int); }
2135                }
2136
2137              we will have set the DECL_CONTEXT for the friend
2138              declaration to N, rather than to the global namespace.  */
2139           if (DECL_NAMESPACE_SCOPE_P (decl))
2140             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2141
2142           if (is_friend && !have_def)
2143             /* This is not really a declaration of a specialization.
2144                It's just the name of an instantiation.  But, it's not
2145                a request for an instantiation, either.  */
2146             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2147           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2148             /* This is indeed a specialization.  In case of constructors
2149                and destructors, we need in-charge and not-in-charge
2150                versions in V3 ABI.  */
2151             clone_function_decl (decl, /*update_method_vec_p=*/0);
2152
2153           /* Register this specialization so that we can find it
2154              again.  */
2155           decl = register_specialization (decl, gen_tmpl, targs, is_friend);
2156         }
2157     }
2158
2159   return decl;
2160 }
2161
2162 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2163    parameters.  These are represented in the same format used for
2164    DECL_TEMPLATE_PARMS.  */
2165
2166 int
2167 comp_template_parms (tree parms1, tree parms2)
2168 {
2169   tree p1;
2170   tree p2;
2171
2172   if (parms1 == parms2)
2173     return 1;
2174
2175   for (p1 = parms1, p2 = parms2;
2176        p1 != NULL_TREE && p2 != NULL_TREE;
2177        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2178     {
2179       tree t1 = TREE_VALUE (p1);
2180       tree t2 = TREE_VALUE (p2);
2181       int i;
2182
2183       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2184       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2185
2186       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2187         return 0;
2188
2189       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2190         {
2191           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2192           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2193
2194           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2195             return 0;
2196
2197           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM)
2198             continue;
2199           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2200             return 0;
2201         }
2202     }
2203
2204   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2205     /* One set of parameters has more parameters lists than the
2206        other.  */
2207     return 0;
2208
2209   return 1;
2210 }
2211
2212 /* Complain if DECL shadows a template parameter.
2213
2214    [temp.local]: A template-parameter shall not be redeclared within its
2215    scope (including nested scopes).  */
2216
2217 void
2218 check_template_shadow (tree decl)
2219 {
2220   tree olddecl;
2221
2222   /* If we're not in a template, we can't possibly shadow a template
2223      parameter.  */
2224   if (!current_template_parms)
2225     return;
2226
2227   /* Figure out what we're shadowing.  */
2228   if (TREE_CODE (decl) == OVERLOAD)
2229     decl = OVL_CURRENT (decl);
2230   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2231
2232   /* If there's no previous binding for this name, we're not shadowing
2233      anything, let alone a template parameter.  */
2234   if (!olddecl)
2235     return;
2236
2237   /* If we're not shadowing a template parameter, we're done.  Note
2238      that OLDDECL might be an OVERLOAD (or perhaps even an
2239      ERROR_MARK), so we can't just blithely assume it to be a _DECL
2240      node.  */
2241   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2242     return;
2243
2244   /* We check for decl != olddecl to avoid bogus errors for using a
2245      name inside a class.  We check TPFI to avoid duplicate errors for
2246      inline member templates.  */
2247   if (decl == olddecl
2248       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2249     return;
2250
2251   error ("declaration of %q+#D", decl);
2252   error (" shadows template parm %q+#D", olddecl);
2253 }
2254
2255 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2256    ORIG_LEVEL, DECL, and TYPE.  */
2257
2258 static tree
2259 build_template_parm_index (int index,
2260                            int level,
2261                            int orig_level,
2262                            tree decl,
2263                            tree type)
2264 {
2265   tree t = make_node (TEMPLATE_PARM_INDEX);
2266   TEMPLATE_PARM_IDX (t) = index;
2267   TEMPLATE_PARM_LEVEL (t) = level;
2268   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2269   TEMPLATE_PARM_DECL (t) = decl;
2270   TREE_TYPE (t) = type;
2271   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2272   TREE_INVARIANT (t) = TREE_INVARIANT (decl);
2273   TREE_READONLY (t) = TREE_READONLY (decl);
2274
2275   return t;
2276 }
2277
2278 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2279    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
2280    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2281    new one is created.  */
2282
2283 static tree
2284 reduce_template_parm_level (tree index, tree type, int levels)
2285 {
2286   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2287       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2288           != TEMPLATE_PARM_LEVEL (index) - levels))
2289     {
2290       tree orig_decl = TEMPLATE_PARM_DECL (index);
2291       tree decl, t;
2292
2293       decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2294       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2295       TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
2296       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2297       DECL_ARTIFICIAL (decl) = 1;
2298       SET_DECL_TEMPLATE_PARM_P (decl);
2299
2300       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2301                                      TEMPLATE_PARM_LEVEL (index) - levels,
2302                                      TEMPLATE_PARM_ORIG_LEVEL (index),
2303                                      decl, type);
2304       TEMPLATE_PARM_DESCENDANTS (index) = t;
2305
2306         /* Template template parameters need this.  */
2307       if (TREE_CODE (decl) != CONST_DECL)
2308         DECL_TEMPLATE_PARMS (decl)
2309           = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
2310     }
2311
2312   return TEMPLATE_PARM_DESCENDANTS (index);
2313 }
2314
2315 /* Process information from new template parameter PARM and append it to the
2316    LIST being built.  This new parameter is a non-type parameter iff
2317    IS_NON_TYPE is true.  */
2318
2319 tree
2320 process_template_parm (tree list, tree parm, bool is_non_type)
2321 {
2322   tree decl = 0;
2323   tree defval;
2324   int idx;
2325
2326   gcc_assert (TREE_CODE (parm) == TREE_LIST);
2327   defval = TREE_PURPOSE (parm);
2328
2329   if (list)
2330     {
2331       tree p = TREE_VALUE (tree_last (list));
2332
2333       if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2334         idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2335       else
2336         idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2337       ++idx;
2338     }
2339   else
2340     idx = 0;
2341
2342   if (is_non_type)
2343     {
2344       parm = TREE_VALUE (parm);
2345
2346       SET_DECL_TEMPLATE_PARM_P (parm);
2347
2348       if (TREE_TYPE (parm) == error_mark_node)
2349         TREE_TYPE (parm) = void_type_node;
2350       else
2351       {
2352         /* [temp.param]
2353
2354            The top-level cv-qualifiers on the template-parameter are
2355            ignored when determining its type.  */
2356         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
2357         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
2358           TREE_TYPE (parm) = void_type_node;
2359       }
2360
2361       /* A template parameter is not modifiable.  */
2362       TREE_CONSTANT (parm) = 1;
2363       TREE_INVARIANT (parm) = 1;
2364       TREE_READONLY (parm) = 1;
2365       decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
2366       TREE_CONSTANT (decl) = 1;
2367       TREE_INVARIANT (decl) = 1;
2368       TREE_READONLY (decl) = 1;
2369       DECL_INITIAL (parm) = DECL_INITIAL (decl)
2370         = build_template_parm_index (idx, processing_template_decl,
2371                                      processing_template_decl,
2372                                      decl, TREE_TYPE (parm));
2373     }
2374   else
2375     {
2376       tree t;
2377       parm = TREE_VALUE (TREE_VALUE (parm));
2378
2379       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
2380         {
2381           t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
2382           /* This is for distinguishing between real templates and template
2383              template parameters */
2384           TREE_TYPE (parm) = t;
2385           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
2386           decl = parm;
2387         }
2388       else
2389         {
2390           t = make_aggr_type (TEMPLATE_TYPE_PARM);
2391           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
2392           decl = build_decl (TYPE_DECL, parm, t);
2393         }
2394
2395       TYPE_NAME (t) = decl;
2396       TYPE_STUB_DECL (t) = decl;
2397       parm = decl;
2398       TEMPLATE_TYPE_PARM_INDEX (t)
2399         = build_template_parm_index (idx, processing_template_decl,
2400                                      processing_template_decl,
2401                                      decl, TREE_TYPE (parm));
2402     }
2403   DECL_ARTIFICIAL (decl) = 1;
2404   SET_DECL_TEMPLATE_PARM_P (decl);
2405   pushdecl (decl);
2406   parm = build_tree_list (defval, parm);
2407   return chainon (list, parm);
2408 }
2409
2410 /* The end of a template parameter list has been reached.  Process the
2411    tree list into a parameter vector, converting each parameter into a more
2412    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
2413    as PARM_DECLs.  */
2414
2415 tree
2416 end_template_parm_list (tree parms)
2417 {
2418   int nparms;
2419   tree parm, next;
2420   tree saved_parmlist = make_tree_vec (list_length (parms));
2421
2422   current_template_parms
2423     = tree_cons (size_int (processing_template_decl),
2424                  saved_parmlist, current_template_parms);
2425
2426   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
2427     {
2428       next = TREE_CHAIN (parm);
2429       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
2430       TREE_CHAIN (parm) = NULL_TREE;
2431     }
2432
2433   --processing_template_parmlist;
2434
2435   return saved_parmlist;
2436 }
2437
2438 /* end_template_decl is called after a template declaration is seen.  */
2439
2440 void
2441 end_template_decl (void)
2442 {
2443   reset_specialization ();
2444
2445   if (! processing_template_decl)
2446     return;
2447
2448   /* This matches the pushlevel in begin_template_parm_list.  */
2449   finish_scope ();
2450
2451   --processing_template_decl;
2452   current_template_parms = TREE_CHAIN (current_template_parms);
2453 }
2454
2455 /* Given a template argument vector containing the template PARMS.
2456    The innermost PARMS are given first.  */
2457
2458 static tree
2459 current_template_args (void)
2460 {
2461   tree header;
2462   tree args = NULL_TREE;
2463   int length = TMPL_PARMS_DEPTH (current_template_parms);
2464   int l = length;
2465
2466   /* If there is only one level of template parameters, we do not
2467      create a TREE_VEC of TREE_VECs.  Instead, we return a single
2468      TREE_VEC containing the arguments.  */
2469   if (length > 1)
2470     args = make_tree_vec (length);
2471
2472   for (header = current_template_parms; header; header = TREE_CHAIN (header))
2473     {
2474       tree a = copy_node (TREE_VALUE (header));
2475       int i;
2476
2477       TREE_TYPE (a) = NULL_TREE;
2478       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
2479         {
2480           tree t = TREE_VEC_ELT (a, i);
2481
2482           /* T will be a list if we are called from within a
2483              begin/end_template_parm_list pair, but a vector directly
2484              if within a begin/end_member_template_processing pair.  */
2485           if (TREE_CODE (t) == TREE_LIST)
2486             {
2487               t = TREE_VALUE (t);
2488
2489               if (TREE_CODE (t) == TYPE_DECL
2490                   || TREE_CODE (t) == TEMPLATE_DECL)
2491                 t = TREE_TYPE (t);
2492               else
2493                 t = DECL_INITIAL (t);
2494               TREE_VEC_ELT (a, i) = t;
2495             }
2496         }
2497
2498       if (length > 1)
2499         TREE_VEC_ELT (args, --l) = a;
2500       else
2501         args = a;
2502     }
2503
2504   return args;
2505 }
2506
2507 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
2508    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
2509    a member template.  Used by push_template_decl below.  */
2510
2511 static tree
2512 build_template_decl (tree decl, tree parms, bool member_template_p)
2513 {
2514   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
2515   DECL_TEMPLATE_PARMS (tmpl) = parms;
2516   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
2517   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
2518   if (DECL_LANG_SPECIFIC (decl))
2519     {
2520       DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
2521       DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
2522       DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
2523       DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
2524       DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
2525       if (DECL_OVERLOADED_OPERATOR_P (decl))
2526         SET_OVERLOADED_OPERATOR_CODE (tmpl,
2527                                       DECL_OVERLOADED_OPERATOR_P (decl));
2528     }
2529
2530   return tmpl;
2531 }
2532
2533 struct template_parm_data
2534 {
2535   /* The level of the template parameters we are currently
2536      processing.  */
2537   int level;
2538
2539   /* The index of the specialization argument we are currently
2540      processing.  */
2541   int current_arg;
2542
2543   /* An array whose size is the number of template parameters.  The
2544      elements are nonzero if the parameter has been used in any one
2545      of the arguments processed so far.  */
2546   int* parms;
2547
2548   /* An array whose size is the number of template arguments.  The
2549      elements are nonzero if the argument makes use of template
2550      parameters of this level.  */
2551   int* arg_uses_template_parms;
2552 };
2553
2554 /* Subroutine of push_template_decl used to see if each template
2555    parameter in a partial specialization is used in the explicit
2556    argument list.  If T is of the LEVEL given in DATA (which is
2557    treated as a template_parm_data*), then DATA->PARMS is marked
2558    appropriately.  */
2559
2560 static int
2561 mark_template_parm (tree t, void* data)
2562 {
2563   int level;
2564   int idx;
2565   struct template_parm_data* tpd = (struct template_parm_data*) data;
2566
2567   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2568     {
2569       level = TEMPLATE_PARM_LEVEL (t);
2570       idx = TEMPLATE_PARM_IDX (t);
2571     }
2572   else
2573     {
2574       level = TEMPLATE_TYPE_LEVEL (t);
2575       idx = TEMPLATE_TYPE_IDX (t);
2576     }
2577
2578   if (level == tpd->level)
2579     {
2580       tpd->parms[idx] = 1;
2581       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
2582     }
2583
2584   /* Return zero so that for_each_template_parm will continue the
2585      traversal of the tree; we want to mark *every* template parm.  */
2586   return 0;
2587 }
2588
2589 /* Process the partial specialization DECL.  */
2590
2591 static tree
2592 process_partial_specialization (tree decl)
2593 {
2594   tree type = TREE_TYPE (decl);
2595   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
2596   tree specargs = CLASSTYPE_TI_ARGS (type);
2597   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
2598   tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
2599   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
2600   int nargs = TREE_VEC_LENGTH (inner_args);
2601   int ntparms = TREE_VEC_LENGTH (inner_parms);
2602   int  i;
2603   int did_error_intro = 0;
2604   struct template_parm_data tpd;
2605   struct template_parm_data tpd2;
2606
2607   /* We check that each of the template parameters given in the
2608      partial specialization is used in the argument list to the
2609      specialization.  For example:
2610
2611        template <class T> struct S;
2612        template <class T> struct S<T*>;
2613
2614      The second declaration is OK because `T*' uses the template
2615      parameter T, whereas
2616
2617        template <class T> struct S<int>;
2618
2619      is no good.  Even trickier is:
2620
2621        template <class T>
2622        struct S1
2623        {
2624           template <class U>
2625           struct S2;
2626           template <class U>
2627           struct S2<T>;
2628        };
2629
2630      The S2<T> declaration is actually invalid; it is a
2631      full-specialization.  Of course,
2632
2633           template <class U>
2634           struct S2<T (*)(U)>;
2635
2636      or some such would have been OK.  */
2637   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
2638   tpd.parms = (int *) alloca (sizeof (int) * ntparms);
2639   memset (tpd.parms, 0, sizeof (int) * ntparms);
2640
2641   tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
2642   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
2643   for (i = 0; i < nargs; ++i)
2644     {
2645       tpd.current_arg = i;
2646       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
2647                               &mark_template_parm,
2648                               &tpd,
2649                               NULL);
2650     }
2651   for (i = 0; i < ntparms; ++i)
2652     if (tpd.parms[i] == 0)
2653       {
2654         /* One of the template parms was not used in the
2655            specialization.  */
2656         if (!did_error_intro)
2657           {
2658             error ("template parameters not used in partial specialization:");
2659             did_error_intro = 1;
2660           }
2661
2662         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
2663       }
2664
2665   /* [temp.class.spec]
2666
2667      The argument list of the specialization shall not be identical to
2668      the implicit argument list of the primary template.  */
2669   if (comp_template_args
2670       (inner_args,
2671        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
2672                                                    (maintmpl)))))
2673     error ("partial specialization %qT does not specialize any template arguments", type);
2674
2675   /* [temp.class.spec]
2676
2677      A partially specialized non-type argument expression shall not
2678      involve template parameters of the partial specialization except
2679      when the argument expression is a simple identifier.
2680
2681      The type of a template parameter corresponding to a specialized
2682      non-type argument shall not be dependent on a parameter of the
2683      specialization.  */
2684   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
2685   tpd2.parms = 0;
2686   for (i = 0; i < nargs; ++i)
2687     {
2688       tree arg = TREE_VEC_ELT (inner_args, i);
2689       if (/* These first two lines are the `non-type' bit.  */
2690           !TYPE_P (arg)
2691           && TREE_CODE (arg) != TEMPLATE_DECL
2692           /* This next line is the `argument expression is not just a
2693              simple identifier' condition and also the `specialized
2694              non-type argument' bit.  */
2695           && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
2696         {
2697           if (tpd.arg_uses_template_parms[i])
2698             error ("template argument %qE involves template parameter(s)", arg);
2699           else
2700             {
2701               /* Look at the corresponding template parameter,
2702                  marking which template parameters its type depends
2703                  upon.  */
2704               tree type =
2705                 TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (main_inner_parms,
2706                                                      i)));
2707
2708               if (!tpd2.parms)
2709                 {
2710                   /* We haven't yet initialized TPD2.  Do so now.  */
2711                   tpd2.arg_uses_template_parms
2712                     = (int *) alloca (sizeof (int) * nargs);
2713                   /* The number of parameters here is the number in the
2714                      main template, which, as checked in the assertion
2715                      above, is NARGS.  */
2716                   tpd2.parms = (int *) alloca (sizeof (int) * nargs);
2717                   tpd2.level =
2718                     TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
2719                 }
2720
2721               /* Mark the template parameters.  But this time, we're
2722                  looking for the template parameters of the main
2723                  template, not in the specialization.  */
2724               tpd2.current_arg = i;
2725               tpd2.arg_uses_template_parms[i] = 0;
2726               memset (tpd2.parms, 0, sizeof (int) * nargs);
2727               for_each_template_parm (type,
2728                                       &mark_template_parm,
2729                                       &tpd2,
2730                                       NULL);
2731
2732               if (tpd2.arg_uses_template_parms [i])
2733                 {
2734                   /* The type depended on some template parameters.
2735                      If they are fully specialized in the
2736                      specialization, that's OK.  */
2737                   int j;
2738                   for (j = 0; j < nargs; ++j)
2739                     if (tpd2.parms[j] != 0
2740                         && tpd.arg_uses_template_parms [j])
2741                       {
2742                         error ("type %qT of template argument %qE depends "
2743                                "on template parameter(s)",
2744                                type,
2745                                arg);
2746                         break;
2747                       }
2748                 }
2749             }
2750         }
2751     }
2752
2753   if (retrieve_specialization (maintmpl, specargs,
2754                                /*class_specializations_p=*/true))
2755     /* We've already got this specialization.  */
2756     return decl;
2757
2758   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
2759     = tree_cons (specargs, inner_parms,
2760                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
2761   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
2762   return decl;
2763 }
2764
2765 /* Check that a template declaration's use of default arguments is not
2766    invalid.  Here, PARMS are the template parameters.  IS_PRIMARY is
2767    nonzero if DECL is the thing declared by a primary template.
2768    IS_PARTIAL is nonzero if DECL is a partial specialization.  */
2769
2770 static void
2771 check_default_tmpl_args (tree decl, tree parms, int is_primary, int is_partial)
2772 {
2773   const char *msg;
2774   int last_level_to_check;
2775   tree parm_level;
2776
2777   /* [temp.param]
2778
2779      A default template-argument shall not be specified in a
2780      function template declaration or a function template definition, nor
2781      in the template-parameter-list of the definition of a member of a
2782      class template.  */
2783
2784   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
2785     /* You can't have a function template declaration in a local
2786        scope, nor you can you define a member of a class template in a
2787        local scope.  */
2788     return;
2789
2790   if (current_class_type
2791       && !TYPE_BEING_DEFINED (current_class_type)
2792       && DECL_LANG_SPECIFIC (decl)
2793       /* If this is either a friend defined in the scope of the class
2794          or a member function.  */
2795       && (DECL_FUNCTION_MEMBER_P (decl)
2796           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
2797           : DECL_FRIEND_CONTEXT (decl)
2798           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
2799           : false)
2800       /* And, if it was a member function, it really was defined in
2801          the scope of the class.  */
2802       && (!DECL_FUNCTION_MEMBER_P (decl)
2803           || DECL_INITIALIZED_IN_CLASS_P (decl)))
2804     /* We already checked these parameters when the template was
2805        declared, so there's no need to do it again now.  This function
2806        was defined in class scope, but we're processing it's body now
2807        that the class is complete.  */
2808     return;
2809
2810   /* [temp.param]
2811
2812      If a template-parameter has a default template-argument, all
2813      subsequent template-parameters shall have a default
2814      template-argument supplied.  */
2815   for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
2816     {
2817       tree inner_parms = TREE_VALUE (parm_level);
2818       int ntparms = TREE_VEC_LENGTH (inner_parms);
2819       int seen_def_arg_p = 0;
2820       int i;
2821
2822       for (i = 0; i < ntparms; ++i)
2823         {
2824           tree parm = TREE_VEC_ELT (inner_parms, i);
2825           if (TREE_PURPOSE (parm))
2826             seen_def_arg_p = 1;
2827           else if (seen_def_arg_p)
2828             {
2829               error ("no default argument for %qD", TREE_VALUE (parm));
2830               /* For better subsequent error-recovery, we indicate that
2831                  there should have been a default argument.  */
2832               TREE_PURPOSE (parm) = error_mark_node;
2833             }
2834         }
2835     }
2836
2837   if (TREE_CODE (decl) != TYPE_DECL || is_partial || !is_primary)
2838     /* For an ordinary class template, default template arguments are
2839        allowed at the innermost level, e.g.:
2840          template <class T = int>
2841          struct S {};
2842        but, in a partial specialization, they're not allowed even
2843        there, as we have in [temp.class.spec]:
2844
2845          The template parameter list of a specialization shall not
2846          contain default template argument values.
2847
2848        So, for a partial specialization, or for a function template,
2849        we look at all of them.  */
2850     ;
2851   else
2852     /* But, for a primary class template that is not a partial
2853        specialization we look at all template parameters except the
2854        innermost ones.  */
2855     parms = TREE_CHAIN (parms);
2856
2857   /* Figure out what error message to issue.  */
2858   if (TREE_CODE (decl) == FUNCTION_DECL)
2859     msg = "default template arguments may not be used in function templates";
2860   else if (is_partial)
2861     msg = "default template arguments may not be used in partial specializations";
2862   else
2863     msg = "default argument for template parameter for class enclosing %qD";
2864
2865   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
2866     /* If we're inside a class definition, there's no need to
2867        examine the parameters to the class itself.  On the one
2868        hand, they will be checked when the class is defined, and,
2869        on the other, default arguments are valid in things like:
2870          template <class T = double>
2871          struct S { template <class U> void f(U); };
2872        Here the default argument for `S' has no bearing on the
2873        declaration of `f'.  */
2874     last_level_to_check = template_class_depth (current_class_type) + 1;
2875   else
2876     /* Check everything.  */
2877     last_level_to_check = 0;
2878
2879   for (parm_level = parms;
2880        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
2881        parm_level = TREE_CHAIN (parm_level))
2882     {
2883       tree inner_parms = TREE_VALUE (parm_level);
2884       int i;
2885       int ntparms;
2886
2887       ntparms = TREE_VEC_LENGTH (inner_parms);
2888       for (i = 0; i < ntparms; ++i)
2889         if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
2890           {
2891             if (msg)
2892               {
2893                 error (msg, decl);
2894                 msg = 0;
2895               }
2896
2897             /* Clear out the default argument so that we are not
2898                confused later.  */
2899             TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
2900           }
2901
2902       /* At this point, if we're still interested in issuing messages,
2903          they must apply to classes surrounding the object declared.  */
2904       if (msg)
2905         msg = "default argument for template parameter for class enclosing %qD";
2906     }
2907 }
2908
2909 /* Worker for push_template_decl_real, called via
2910    for_each_template_parm.  DATA is really an int, indicating the
2911    level of the parameters we are interested in.  If T is a template
2912    parameter of that level, return nonzero.  */
2913
2914 static int
2915 template_parm_this_level_p (tree t, void* data)
2916 {
2917   int this_level = *(int *)data;
2918   int level;
2919
2920   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2921     level = TEMPLATE_PARM_LEVEL (t);
2922   else
2923     level = TEMPLATE_TYPE_LEVEL (t);
2924   return level == this_level;
2925 }
2926
2927 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
2928    parameters given by current_template_args, or reuses a
2929    previously existing one, if appropriate.  Returns the DECL, or an
2930    equivalent one, if it is replaced via a call to duplicate_decls.
2931
2932    If IS_FRIEND is true, DECL is a friend declaration.  */
2933
2934 tree
2935 push_template_decl_real (tree decl, bool is_friend)
2936 {
2937   tree tmpl;
2938   tree args;
2939   tree info;
2940   tree ctx;
2941   int primary;
2942   int is_partial;
2943   int new_template_p = 0;
2944   /* True if the template is a member template, in the sense of
2945      [temp.mem].  */
2946   bool member_template_p = false;
2947
2948   if (decl == error_mark_node)
2949     return decl;
2950
2951   /* See if this is a partial specialization.  */
2952   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
2953                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
2954                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
2955
2956   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
2957     is_friend = true;
2958
2959   if (is_friend)
2960     /* For a friend, we want the context of the friend function, not
2961        the type of which it is a friend.  */
2962     ctx = DECL_CONTEXT (decl);
2963   else if (CP_DECL_CONTEXT (decl)
2964            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
2965     /* In the case of a virtual function, we want the class in which
2966        it is defined.  */
2967     ctx = CP_DECL_CONTEXT (decl);
2968   else
2969     /* Otherwise, if we're currently defining some class, the DECL
2970        is assumed to be a member of the class.  */
2971     ctx = current_scope ();
2972
2973   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
2974     ctx = NULL_TREE;
2975
2976   if (!DECL_CONTEXT (decl))
2977     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2978
2979   /* See if this is a primary template.  */
2980   primary = template_parm_scope_p ();
2981
2982   if (primary)
2983     {
2984       if (DECL_CLASS_SCOPE_P (decl))
2985         member_template_p = true;
2986       if (TREE_CODE (decl) == TYPE_DECL
2987           && ANON_AGGRNAME_P (DECL_NAME (decl)))
2988         error ("template class without a name");
2989       else if (TREE_CODE (decl) == FUNCTION_DECL)
2990         {
2991           if (DECL_DESTRUCTOR_P (decl))
2992             {
2993               /* [temp.mem]
2994
2995                  A destructor shall not be a member template.  */
2996               error ("destructor %qD declared as member template", decl);
2997               return error_mark_node;
2998             }
2999           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3000               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3001                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3002                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3003                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3004                       == void_list_node)))
3005             {
3006               /* [basic.stc.dynamic.allocation]
3007
3008                  An allocation function can be a function
3009                  template. ... Template allocation functions shall
3010                  have two or more parameters.  */
3011               error ("invalid template declaration of %qD", decl);
3012               return error_mark_node;
3013             }
3014         }
3015       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3016                && CLASS_TYPE_P (TREE_TYPE (decl)))
3017         /* OK */;
3018       else
3019         {
3020           error ("template declaration of %q#D", decl);
3021           return error_mark_node;
3022         }
3023     }
3024
3025   /* Check to see that the rules regarding the use of default
3026      arguments are not being violated.  */
3027   check_default_tmpl_args (decl, current_template_parms,
3028                            primary, is_partial);
3029
3030   if (is_partial)
3031     return process_partial_specialization (decl);
3032
3033   args = current_template_args ();
3034
3035   if (!ctx
3036       || TREE_CODE (ctx) == FUNCTION_DECL
3037       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3038       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3039     {
3040       if (DECL_LANG_SPECIFIC (decl)
3041           && DECL_TEMPLATE_INFO (decl)
3042           && DECL_TI_TEMPLATE (decl))
3043         tmpl = DECL_TI_TEMPLATE (decl);
3044       /* If DECL is a TYPE_DECL for a class-template, then there won't
3045          be DECL_LANG_SPECIFIC.  The information equivalent to
3046          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
3047       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3048                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3049                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3050         {
3051           /* Since a template declaration already existed for this
3052              class-type, we must be redeclaring it here.  Make sure
3053              that the redeclaration is valid.  */
3054           redeclare_class_template (TREE_TYPE (decl),
3055                                     current_template_parms);
3056           /* We don't need to create a new TEMPLATE_DECL; just use the
3057              one we already had.  */
3058           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3059         }
3060       else
3061         {
3062           tmpl = build_template_decl (decl, current_template_parms,
3063                                       member_template_p);
3064           new_template_p = 1;
3065
3066           if (DECL_LANG_SPECIFIC (decl)
3067               && DECL_TEMPLATE_SPECIALIZATION (decl))
3068             {
3069               /* A specialization of a member template of a template
3070                  class.  */
3071               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3072               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3073               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3074             }
3075         }
3076     }
3077   else
3078     {
3079       tree a, t, current, parms;
3080       int i;
3081
3082       if (TREE_CODE (decl) == TYPE_DECL)
3083         {
3084           if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
3085                || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
3086               && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3087               && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3088             tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3089           else
3090             {
3091               error ("%qD does not declare a template type", decl);
3092               return decl;
3093             }
3094         }
3095       else if (!DECL_LANG_SPECIFIC (decl) || !DECL_TEMPLATE_INFO (decl))
3096         {
3097           error ("template definition of non-template %q#D", decl);
3098           return decl;
3099         }
3100       else
3101         tmpl = DECL_TI_TEMPLATE (decl);
3102
3103       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3104           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3105           && DECL_TEMPLATE_SPECIALIZATION (decl)
3106           && DECL_MEMBER_TEMPLATE_P (tmpl))
3107         {
3108           tree new_tmpl;
3109
3110           /* The declaration is a specialization of a member
3111              template, declared outside the class.  Therefore, the
3112              innermost template arguments will be NULL, so we
3113              replace them with the arguments determined by the
3114              earlier call to check_explicit_specialization.  */
3115           args = DECL_TI_ARGS (decl);
3116
3117           new_tmpl
3118             = build_template_decl (decl, current_template_parms,
3119                                    member_template_p);
3120           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3121           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3122           DECL_TI_TEMPLATE (decl) = new_tmpl;
3123           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3124           DECL_TEMPLATE_INFO (new_tmpl)
3125             = tree_cons (tmpl, args, NULL_TREE);
3126
3127           register_specialization (new_tmpl,
3128                                    most_general_template (tmpl),
3129                                    args,
3130                                    is_friend);
3131           return decl;
3132         }
3133
3134       /* Make sure the template headers we got make sense.  */
3135
3136       parms = DECL_TEMPLATE_PARMS (tmpl);
3137       i = TMPL_PARMS_DEPTH (parms);
3138       if (TMPL_ARGS_DEPTH (args) != i)
3139         {
3140           error ("expected %d levels of template parms for %q#D, got %d",
3141                  i, decl, TMPL_ARGS_DEPTH (args));
3142         }
3143       else
3144         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3145           {
3146             a = TMPL_ARGS_LEVEL (args, i);
3147             t = INNERMOST_TEMPLATE_PARMS (parms);
3148
3149             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3150               {
3151                 if (current == decl)
3152                   error ("got %d template parameters for %q#D",
3153                          TREE_VEC_LENGTH (a), decl);
3154                 else
3155                   error ("got %d template parameters for %q#T",
3156                          TREE_VEC_LENGTH (a), current);
3157                 error ("  but %d required", TREE_VEC_LENGTH (t));
3158                 return error_mark_node;
3159               }
3160
3161             /* Perhaps we should also check that the parms are used in the
3162                appropriate qualifying scopes in the declarator?  */
3163
3164             if (current == decl)
3165               current = ctx;
3166             else
3167               current = TYPE_CONTEXT (current);
3168           }
3169     }
3170
3171   DECL_TEMPLATE_RESULT (tmpl) = decl;
3172   TREE_TYPE (tmpl) = TREE_TYPE (decl);
3173
3174   /* Push template declarations for global functions and types.  Note
3175      that we do not try to push a global template friend declared in a
3176      template class; such a thing may well depend on the template
3177      parameters of the class.  */
3178   if (new_template_p && !ctx
3179       && !(is_friend && template_class_depth (current_class_type) > 0))
3180     {
3181       tmpl = pushdecl_namespace_level (tmpl, is_friend);
3182       if (tmpl == error_mark_node)
3183         return error_mark_node;
3184
3185       /* Hide template friend classes that haven't been declared yet.  */
3186       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
3187         {
3188           DECL_ANTICIPATED (tmpl) = 1;
3189           DECL_FRIEND_P (tmpl) = 1;
3190         }
3191     }
3192
3193   if (primary)
3194     {
3195       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
3196       if (DECL_CONV_FN_P (tmpl))
3197         {
3198           int depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
3199
3200           /* It is a conversion operator. See if the type converted to
3201              depends on innermost template operands.  */
3202
3203           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
3204                                          depth))
3205             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
3206         }
3207     }
3208
3209   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
3210      back to its most general template.  If TMPL is a specialization,
3211      ARGS may only have the innermost set of arguments.  Add the missing
3212      argument levels if necessary.  */
3213   if (DECL_TEMPLATE_INFO (tmpl))
3214     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
3215
3216   info = tree_cons (tmpl, args, NULL_TREE);
3217
3218   if (DECL_IMPLICIT_TYPEDEF_P (decl))
3219     {
3220       SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
3221       if ((!ctx || TREE_CODE (ctx) != FUNCTION_DECL)
3222           && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3223           /* Don't change the name if we've already set it up.  */
3224           && !IDENTIFIER_TEMPLATE (DECL_NAME (decl)))
3225         DECL_NAME (decl) = classtype_mangled_name (TREE_TYPE (decl));
3226     }
3227   else if (DECL_LANG_SPECIFIC (decl))
3228     DECL_TEMPLATE_INFO (decl) = info;
3229
3230   return DECL_TEMPLATE_RESULT (tmpl);
3231 }
3232
3233 tree
3234 push_template_decl (tree decl)
3235 {
3236   return push_template_decl_real (decl, false);
3237 }
3238
3239 /* Called when a class template TYPE is redeclared with the indicated
3240    template PARMS, e.g.:
3241
3242      template <class T> struct S;
3243      template <class T> struct S {};  */
3244
3245 void
3246 redeclare_class_template (tree type, tree parms)
3247 {
3248   tree tmpl;
3249   tree tmpl_parms;
3250   int i;
3251
3252   if (!TYPE_TEMPLATE_INFO (type))
3253     {
3254       error ("%qT is not a template type", type);
3255       return;
3256     }
3257
3258   tmpl = TYPE_TI_TEMPLATE (type);
3259   if (!PRIMARY_TEMPLATE_P (tmpl))
3260     /* The type is nested in some template class.  Nothing to worry
3261        about here; there are no new template parameters for the nested
3262        type.  */
3263     return;
3264
3265   if (!parms)
3266     {
3267       error ("template specifiers not specified in declaration of %qD",
3268              tmpl);
3269       return;
3270     }
3271
3272   parms = INNERMOST_TEMPLATE_PARMS (parms);
3273   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
3274
3275   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
3276     {
3277       error ("previous declaration %q+D", tmpl);
3278       error ("used %d template parameter(s) instead of %d",
3279              TREE_VEC_LENGTH (tmpl_parms),
3280              TREE_VEC_LENGTH (parms));
3281       return;
3282     }
3283
3284   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
3285     {
3286       tree tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
3287       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
3288       tree tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
3289       tree parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
3290
3291       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
3292          TEMPLATE_DECL.  */
3293       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
3294           || (TREE_CODE (tmpl_parm) != TYPE_DECL
3295               && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm))))
3296         {
3297           error ("template parameter %q+#D", tmpl_parm);
3298           error ("redeclared here as %q#D", parm);
3299           return;
3300         }
3301
3302       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
3303         {
3304           /* We have in [temp.param]:
3305
3306              A template-parameter may not be given default arguments
3307              by two different declarations in the same scope.  */
3308           error ("redefinition of default argument for %q#D", parm);
3309           error ("%J  original definition appeared here", tmpl_parm);
3310           return;
3311         }
3312
3313       if (parm_default != NULL_TREE)
3314         /* Update the previous template parameters (which are the ones
3315            that will really count) with the new default value.  */
3316         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
3317       else if (tmpl_default != NULL_TREE)
3318         /* Update the new parameters, too; they'll be used as the
3319            parameters for any members.  */
3320         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
3321     }
3322 }
3323
3324 /* Simplify EXPR if it is a non-dependent expression.  Returns the
3325    (possibly simplified) expression.  */
3326
3327 tree
3328 fold_non_dependent_expr (tree expr)
3329 {
3330   /* If we're in a template, but EXPR isn't value dependent, simplify
3331      it.  We're supposed to treat:
3332
3333        template <typename T> void f(T[1 + 1]);
3334        template <typename T> void f(T[2]);
3335
3336      as two declarations of the same function, for example.  */
3337   if (processing_template_decl
3338       && !type_dependent_expression_p (expr)
3339       && !value_dependent_expression_p (expr))
3340     {
3341       HOST_WIDE_INT saved_processing_template_decl;
3342
3343       saved_processing_template_decl = processing_template_decl;
3344       processing_template_decl = 0;
3345       expr = tsubst_copy_and_build (expr,
3346                                     /*args=*/NULL_TREE,
3347                                     tf_error,
3348                                     /*in_decl=*/NULL_TREE,
3349                                     /*function_p=*/false);
3350       processing_template_decl = saved_processing_template_decl;
3351     }
3352   return expr;
3353 }
3354
3355 /* EXPR is an expression which is used in a constant-expression context.
3356    For instance, it could be a VAR_DECL with a constant initializer.
3357    Extract the innest constant expression.
3358
3359    This is basically a more powerful version of
3360    integral_constant_value, which can be used also in templates where
3361    initializers can maintain a syntactic rather than semantic form
3362    (even if they are non-dependent, for access-checking purposes).  */
3363
3364 static tree
3365 fold_decl_constant_value (tree expr)
3366 {
3367   tree const_expr = expr;
3368   do
3369     {
3370       expr = fold_non_dependent_expr (const_expr);
3371       const_expr = integral_constant_value (expr);
3372     }
3373   while (expr != const_expr);
3374
3375   return expr;
3376 }
3377
3378 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
3379    must be a function or a pointer-to-function type, as specified
3380    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
3381    and check that the resulting function has external linkage.  */
3382
3383 static tree
3384 convert_nontype_argument_function (tree type, tree expr)
3385 {
3386   tree fns = expr;
3387   tree fn, fn_no_ptr;
3388
3389   fn = instantiate_type (type, fns, tf_none);
3390   if (fn == error_mark_node)
3391     return error_mark_node;
3392
3393   fn_no_ptr = fn;
3394   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
3395     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
3396
3397   /* [temp.arg.nontype]/1
3398
3399      A template-argument for a non-type, non-template template-parameter
3400      shall be one of:
3401      [...]
3402      -- the address of an object or function with external linkage.  */
3403   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
3404     {
3405       error ("%qE is not a valid template argument for type %qT "
3406              "because function %qD has not external linkage",
3407              expr, type, fn_no_ptr);
3408       return NULL_TREE;
3409     }
3410
3411   return fn;
3412 }
3413
3414 /* Attempt to convert the non-type template parameter EXPR to the
3415    indicated TYPE.  If the conversion is successful, return the
3416    converted value.  If the conversion is unsuccessful, return
3417    NULL_TREE if we issued an error message, or error_mark_node if we
3418    did not.  We issue error messages for out-and-out bad template
3419    parameters, but not simply because the conversion failed, since we
3420    might be just trying to do argument deduction.  Both TYPE and EXPR
3421    must be non-dependent.
3422
3423    The conversion follows the special rules described in
3424    [temp.arg.nontype], and it is much more strict than an implicit
3425    conversion.
3426
3427    This function is called twice for each template argument (see
3428    lookup_template_class for a more accurate description of this
3429    problem). This means that we need to handle expressions which
3430    are not valid in a C++ source, but can be created from the
3431    first call (for instance, casts to perform conversions). These
3432    hacks can go away after we fix the double coercion problem.  */
3433
3434 static tree
3435 convert_nontype_argument (tree type, tree expr)
3436 {
3437   tree expr_type;
3438
3439   /* Detect immediately string literals as invalid non-type argument.
3440      This special-case is not needed for correctness (we would easily
3441      catch this later), but only to provide better diagnostic for this
3442      common user mistake. As suggested by DR 100, we do not mention
3443      linkage issues in the diagnostic as this is not the point.  */
3444   if (TREE_CODE (expr) == STRING_CST)
3445     {
3446       error ("%qE is not a valid template argument for type %qT "
3447              "because string literals can never be used in this context",
3448              expr, type);
3449       return NULL_TREE;
3450     }
3451
3452   /* If we are in a template, EXPR may be non-dependent, but still
3453      have a syntactic, rather than semantic, form.  For example, EXPR
3454      might be a SCOPE_REF, rather than the VAR_DECL to which the
3455      SCOPE_REF refers.  Preserving the qualifying scope is necessary
3456      so that access checking can be performed when the template is
3457      instantiated -- but here we need the resolved form so that we can
3458      convert the argument.  */
3459   expr = fold_non_dependent_expr (expr);
3460   if (error_operand_p (expr))
3461     return error_mark_node;
3462   expr_type = TREE_TYPE (expr);
3463
3464   /* HACK: Due to double coercion, we can get a
3465      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
3466      which is the tree that we built on the first call (see
3467      below when coercing to reference to object or to reference to
3468      function). We just strip everything and get to the arg.
3469      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
3470      for examples.  */
3471   if (TREE_CODE (expr) == NOP_EXPR)
3472     {
3473       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
3474         {
3475           /* ??? Maybe we could use convert_from_reference here, but we
3476              would need to relax its constraints because the NOP_EXPR
3477              could actually change the type to something more cv-qualified,
3478              and this is not folded by convert_from_reference.  */
3479           tree addr = TREE_OPERAND (expr, 0);
3480           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
3481           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
3482           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
3483           gcc_assert (same_type_ignoring_top_level_qualifiers_p
3484                       (TREE_TYPE (expr_type),
3485                        TREE_TYPE (TREE_TYPE (addr))));
3486
3487           expr = TREE_OPERAND (addr, 0);
3488           expr_type = TREE_TYPE (expr);
3489         }
3490
3491       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
3492          parameter is a pointer to object, through decay and
3493          qualification conversion. Let's strip everything.  */
3494       else if (TYPE_PTROBV_P (type))
3495         {
3496           STRIP_NOPS (expr);
3497           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
3498           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
3499           /* Skip the ADDR_EXPR only if it is part of the decay for
3500              an array. Otherwise, it is part of the original argument
3501              in the source code.  */
3502           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
3503             expr = TREE_OPERAND (expr, 0);
3504           expr_type = TREE_TYPE (expr);
3505         }
3506     }
3507
3508   /* [temp.arg.nontype]/5, bullet 1
3509
3510      For a non-type template-parameter of integral or enumeration type,
3511      integral promotions (_conv.prom_) and integral conversions
3512      (_conv.integral_) are applied.  */
3513   if (INTEGRAL_TYPE_P (type))
3514     {
3515       if (!INTEGRAL_TYPE_P (expr_type))
3516         return error_mark_node;
3517
3518       expr = fold_decl_constant_value (expr);
3519       /* Notice that there are constant expressions like '4 % 0' which
3520          do not fold into integer constants.  */
3521       if (TREE_CODE (expr) != INTEGER_CST)
3522         {
3523           error ("%qE is not a valid template argument for type %qT "
3524                  "because it is a non-constant expression", expr, type);
3525           return NULL_TREE;
3526         }
3527
3528       /* At this point, an implicit conversion does what we want,
3529          because we already know that the expression is of integral
3530          type.  */
3531       expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
3532       if (expr == error_mark_node)
3533         return error_mark_node;
3534
3535       /* Conversion was allowed: fold it to a bare integer constant.  */
3536       expr = fold (expr);
3537     }
3538   /* [temp.arg.nontype]/5, bullet 2
3539
3540      For a non-type template-parameter of type pointer to object,
3541      qualification conversions (_conv.qual_) and the array-to-pointer
3542      conversion (_conv.array_) are applied.  */
3543   else if (TYPE_PTROBV_P (type))
3544     {
3545       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
3546
3547          A template-argument for a non-type, non-template template-parameter
3548          shall be one of: [...]
3549
3550          -- the name of a non-type template-parameter;
3551          -- the address of an object or function with external linkage, [...]
3552             expressed as "& id-expression" where the & is optional if the name
3553             refers to a function or array, or if the corresponding
3554             template-parameter is a reference.
3555
3556         Here, we do not care about functions, as they are invalid anyway
3557         for a parameter of type pointer-to-object.  */
3558       bool constant_address_p =
3559         (TREE_CODE (expr) == ADDR_EXPR
3560          || TREE_CODE (expr_type) == ARRAY_TYPE
3561          || (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr)));
3562
3563       expr = decay_conversion (expr);
3564       if (expr == error_mark_node)
3565         return error_mark_node;
3566
3567       expr = perform_qualification_conversions (type, expr);
3568       if (expr == error_mark_node)
3569         return error_mark_node;
3570
3571       if (!constant_address_p)
3572         {
3573             error ("%qE is not a valid template argument for type %qT "
3574                   "because it is not a constant pointer", expr, type);
3575             return NULL_TREE;
3576         }
3577     }
3578   /* [temp.arg.nontype]/5, bullet 3
3579
3580      For a non-type template-parameter of type reference to object, no
3581      conversions apply. The type referred to by the reference may be more
3582      cv-qualified than the (otherwise identical) type of the
3583      template-argument. The template-parameter is bound directly to the
3584      template-argument, which must be an lvalue.  */
3585   else if (TYPE_REF_OBJ_P (type))
3586     {
3587       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
3588                                                       expr_type))
3589         return error_mark_node;
3590
3591       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
3592         {
3593           error ("%qE is not a valid template argument for type %qT "
3594                  "because of conflicts in cv-qualification", expr, type);
3595           return NULL_TREE;
3596         }
3597
3598       if (!real_lvalue_p (expr))
3599         {
3600           error ("%qE is not a valid template argument for type %qT "
3601                  "because it is not a lvalue", expr, type);
3602           return NULL_TREE;
3603         }
3604
3605       /* [temp.arg.nontype]/1
3606
3607          A template-argument for a non-type, non-template template-parameter
3608          shall be one of: [...]
3609
3610          -- the address of an object or function with external linkage.  */
3611       if (!DECL_EXTERNAL_LINKAGE_P (expr))
3612         {
3613           error ("%qE is not a valid template argument for type %qT "
3614                  "because object %qD has not external linkage",
3615                  expr, type, expr);
3616           return NULL_TREE;
3617         }
3618
3619       expr = build_nop (type, build_address (expr));
3620     }
3621   /* [temp.arg.nontype]/5, bullet 4
3622
3623      For a non-type template-parameter of type pointer to function, only
3624      the function-to-pointer conversion (_conv.func_) is applied. If the
3625      template-argument represents a set of overloaded functions (or a
3626      pointer to such), the matching function is selected from the set
3627      (_over.over_).  */
3628   else if (TYPE_PTRFN_P (type))
3629     {
3630       /* If the argument is a template-id, we might not have enough
3631          context information to decay the pointer.  */
3632       if (!type_unknown_p (expr_type))
3633         {
3634           expr = decay_conversion (expr);
3635           if (expr == error_mark_node)
3636             return error_mark_node;
3637         }
3638
3639       expr = convert_nontype_argument_function (type, expr);
3640       if (!expr || expr == error_mark_node)
3641         return expr;
3642     }
3643   /* [temp.arg.nontype]/5, bullet 5
3644
3645      For a non-type template-parameter of type reference to function, no
3646      conversions apply. If the template-argument represents a set of
3647      overloaded functions, the matching function is selected from the set
3648      (_over.over_).  */
3649   else if (TYPE_REFFN_P (type))
3650     {
3651       if (TREE_CODE (expr) == ADDR_EXPR)
3652         {
3653           error ("%qE is not a valid template argument for type %qT "
3654                  "because it is a pointer", expr, type);
3655           inform ("try using %qE instead", TREE_OPERAND (expr, 0));
3656           return NULL_TREE;
3657         }
3658
3659       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
3660       if (!expr || expr == error_mark_node)
3661         return expr;
3662
3663       expr = build_nop (type, build_address (expr));
3664     }
3665   /* [temp.arg.nontype]/5, bullet 6
3666
3667      For a non-type template-parameter of type pointer to member function,
3668      no conversions apply. If the template-argument represents a set of
3669      overloaded member functions, the matching member function is selected
3670      from the set (_over.over_).  */
3671   else if (TYPE_PTRMEMFUNC_P (type))
3672     {
3673       expr = instantiate_type (type, expr, tf_none);
3674       if (expr == error_mark_node)
3675         return error_mark_node;
3676
3677       /* There is no way to disable standard conversions in
3678          resolve_address_of_overloaded_function (called by
3679          instantiate_type). It is possible that the call succeeded by
3680          converting &B::I to &D::I (where B is a base of D), so we need
3681          to reject this conversion here.
3682
3683          Actually, even if there was a way to disable standard conversions,
3684          it would still be better to reject them here so that we can
3685          provide a superior diagnostic.  */
3686       if (!same_type_p (TREE_TYPE (expr), type))
3687         {
3688           /* Make sure we are just one standard conversion off.  */
3689           gcc_assert (can_convert (type, TREE_TYPE (expr)));
3690           error ("%qE is not a valid template argument for type %qT "
3691                  "because it is of type %qT", expr, type,
3692                  TREE_TYPE (expr));
3693           inform ("standard conversions are not allowed in this context");
3694           return NULL_TREE;
3695         }
3696     }
3697   /* [temp.arg.nontype]/5, bullet 7
3698
3699      For a non-type template-parameter of type pointer to data member,
3700      qualification conversions (_conv.qual_) are applied.  */
3701   else if (TYPE_PTRMEM_P (type))
3702     {
3703       expr = perform_qualification_conversions (type, expr);
3704       if (expr == error_mark_node)
3705         return expr;
3706     }
3707   /* A template non-type parameter must be one of the above.  */
3708   else
3709     gcc_unreachable ();
3710
3711   /* Sanity check: did we actually convert the argument to the
3712      right type?  */
3713   gcc_assert (same_type_p (type, TREE_TYPE (expr)));
3714   return expr;
3715 }
3716
3717
3718 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
3719    template template parameters.  Both PARM_PARMS and ARG_PARMS are
3720    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
3721    or PARM_DECL.
3722
3723    Consider the example:
3724      template <class T> class A;
3725      template<template <class U> class TT> class B;
3726
3727    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
3728    the parameters to A, and OUTER_ARGS contains A.  */
3729
3730 static int
3731 coerce_template_template_parms (tree parm_parms,
3732                                 tree arg_parms,
3733                                 tsubst_flags_t complain,
3734                                 tree in_decl,
3735                                 tree outer_args)
3736 {
3737   int nparms, nargs, i;
3738   tree parm, arg;
3739
3740   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
3741   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
3742
3743   nparms = TREE_VEC_LENGTH (parm_parms);
3744   nargs = TREE_VEC_LENGTH (arg_parms);
3745
3746   if (nargs != nparms)
3747     return 0;
3748
3749   for (i = 0; i < nparms; ++i)
3750     {
3751       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
3752       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
3753
3754       if (arg == NULL_TREE || arg == error_mark_node
3755           || parm == NULL_TREE || parm == error_mark_node)
3756         return 0;
3757
3758       if (TREE_CODE (arg) != TREE_CODE (parm))
3759         return 0;
3760
3761       switch (TREE_CODE (parm))
3762         {
3763         case TYPE_DECL:
3764           break;
3765
3766         case TEMPLATE_DECL:
3767           /* We encounter instantiations of templates like
3768                template <template <template <class> class> class TT>
3769                class C;  */
3770           {
3771             tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3772             tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3773
3774             if (!coerce_template_template_parms
3775                 (parmparm, argparm, complain, in_decl, outer_args))
3776               return 0;
3777           }
3778           break;
3779
3780         case PARM_DECL:
3781           /* The tsubst call is used to handle cases such as
3782
3783                template <int> class C {};
3784                template <class T, template <T> class TT> class D {};
3785                D<int, C> d;
3786
3787              i.e. the parameter list of TT depends on earlier parameters.  */
3788           if (!dependent_type_p (TREE_TYPE (arg))
3789               && !same_type_p
3790                     (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
3791                              TREE_TYPE (arg)))
3792             return 0;
3793           break;
3794
3795         default:
3796           gcc_unreachable ();
3797         }
3798     }
3799   return 1;
3800 }
3801
3802 /* Convert the indicated template ARG as necessary to match the
3803    indicated template PARM.  Returns the converted ARG, or
3804    error_mark_node if the conversion was unsuccessful.  Error and
3805    warning messages are issued under control of COMPLAIN.  This
3806    conversion is for the Ith parameter in the parameter list.  ARGS is
3807    the full set of template arguments deduced so far.  */
3808
3809 static tree
3810 convert_template_argument (tree parm,
3811                            tree arg,
3812                            tree args,
3813                            tsubst_flags_t complain,
3814                            int i,
3815                            tree in_decl)
3816 {
3817   tree val;
3818   tree inner_args;
3819   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
3820
3821   inner_args = INNERMOST_TEMPLATE_ARGS (args);
3822
3823   if (TREE_CODE (arg) == TREE_LIST
3824       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
3825     {
3826       /* The template argument was the name of some
3827          member function.  That's usually
3828          invalid, but static members are OK.  In any
3829          case, grab the underlying fields/functions
3830          and issue an error later if required.  */
3831       arg = TREE_VALUE (arg);
3832       TREE_TYPE (arg) = unknown_type_node;
3833     }
3834
3835   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
3836   requires_type = (TREE_CODE (parm) == TYPE_DECL
3837                    || requires_tmpl_type);
3838
3839   is_tmpl_type = ((TREE_CODE (arg) == TEMPLATE_DECL
3840                    && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
3841                   || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3842                   || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
3843
3844   if (is_tmpl_type
3845       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3846           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
3847     arg = TYPE_STUB_DECL (arg);
3848
3849   is_type = TYPE_P (arg) || is_tmpl_type;
3850
3851   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
3852       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
3853     {
3854       pedwarn ("to refer to a type member of a template parameter, "
3855                "use %<typename %E%>", arg);
3856
3857       arg = make_typename_type (TREE_OPERAND (arg, 0),
3858                                 TREE_OPERAND (arg, 1),
3859                                 typename_type,
3860                                 complain & tf_error);
3861       is_type = 1;
3862     }
3863   if (is_type != requires_type)
3864     {
3865       if (in_decl)
3866         {
3867           if (complain & tf_error)
3868             {
3869               error ("type/value mismatch at argument %d in template "
3870                      "parameter list for %qD",
3871                      i + 1, in_decl);
3872               if (is_type)
3873                 error ("  expected a constant of type %qT, got %qT",
3874                        TREE_TYPE (parm),
3875                        (is_tmpl_type ? DECL_NAME (arg) : arg));
3876               else if (requires_tmpl_type)
3877                 error ("  expected a class template, got %qE", arg);
3878               else
3879                 error ("  expected a type, got %qE", arg);
3880             }
3881         }
3882       return error_mark_node;
3883     }
3884   if (is_tmpl_type ^ requires_tmpl_type)
3885     {
3886       if (in_decl && (complain & tf_error))
3887         {
3888           error ("type/value mismatch at argument %d in template "
3889                  "parameter list for %qD",
3890                  i + 1, in_decl);
3891           if (is_tmpl_type)
3892             error ("  expected a type, got %qT", DECL_NAME (arg));
3893           else
3894             error ("  expected a class template, got %qT", arg);
3895         }
3896       return error_mark_node;
3897     }
3898
3899   if (is_type)
3900     {
3901       if (requires_tmpl_type)
3902         {
3903           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
3904             /* The number of argument required is not known yet.
3905                Just accept it for now.  */
3906             val = TREE_TYPE (arg);
3907           else
3908             {
3909               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3910               tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3911
3912               if (coerce_template_template_parms (parmparm, argparm,
3913                                                   complain, in_decl,
3914                                                   inner_args))
3915                 {
3916                   val = arg;
3917
3918                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
3919                      TEMPLATE_DECL.  */
3920                   if (val != error_mark_node
3921                       && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
3922                     val = TREE_TYPE (val);
3923                 }
3924               else
3925                 {
3926                   if (in_decl && (complain & tf_error))
3927                     {
3928                       error ("type/value mismatch at argument %d in "
3929                              "template parameter list for %qD",
3930                              i + 1, in_decl);
3931                       error ("  expected a template of type %qD, got %qD",
3932                              parm, arg);
3933                     }
3934
3935                   val = error_mark_node;
3936                 }
3937             }
3938         }
3939       else
3940         val = arg;
3941       /* We only form one instance of each template specialization.
3942          Therefore, if we use a non-canonical variant (i.e., a
3943          typedef), any future messages referring to the type will use 
3944          the typedef, which is confusing if those future uses do not
3945          themselves also use the typedef.  */
3946       if (TYPE_P (val))
3947         val = canonical_type_variant (val);
3948     }
3949   else
3950     {
3951       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
3952
3953       if (invalid_nontype_parm_type_p (t, complain))
3954         return error_mark_node;
3955
3956       if (!uses_template_parms (arg) && !uses_template_parms (t))
3957         /* We used to call digest_init here.  However, digest_init
3958            will report errors, which we don't want when complain
3959            is zero.  More importantly, digest_init will try too
3960            hard to convert things: for example, `0' should not be
3961            converted to pointer type at this point according to
3962            the standard.  Accepting this is not merely an
3963            extension, since deciding whether or not these
3964            conversions can occur is part of determining which
3965            function template to call, or whether a given explicit
3966            argument specification is valid.  */
3967         val = convert_nontype_argument (t, arg);
3968       else
3969         val = arg;
3970
3971       if (val == NULL_TREE)
3972         val = error_mark_node;
3973       else if (val == error_mark_node && (complain & tf_error))
3974         error ("could not convert template argument %qE to %qT",  arg, t);
3975     }
3976
3977   return val;
3978 }
3979
3980 /* Convert all template arguments to their appropriate types, and
3981    return a vector containing the innermost resulting template
3982    arguments.  If any error occurs, return error_mark_node. Error and
3983    warning messages are issued under control of COMPLAIN.
3984
3985    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
3986    for arguments not specified in ARGS.  Otherwise, if
3987    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
3988    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
3989    USE_DEFAULT_ARGS is false, then all arguments must be specified in
3990    ARGS.  */
3991
3992 static tree
3993 coerce_template_parms (tree parms,
3994                        tree args,
3995                        tree in_decl,
3996                        tsubst_flags_t complain,
3997                        bool require_all_args,
3998                        bool use_default_args)
3999 {
4000   int nparms, nargs, i, lost = 0;
4001   tree inner_args;
4002   tree new_args;
4003   tree new_inner_args;
4004
4005   inner_args = INNERMOST_TEMPLATE_ARGS (args);
4006   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
4007   nparms = TREE_VEC_LENGTH (parms);
4008
4009   if (nargs > nparms
4010       || (nargs < nparms
4011           && require_all_args
4012           && (!use_default_args
4013               || !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs)))))
4014     {
4015       if (complain & tf_error)
4016         {
4017           error ("wrong number of template arguments (%d, should be %d)",
4018                  nargs, nparms);
4019
4020           if (in_decl)
4021             error ("provided for %q+D", in_decl);
4022         }
4023
4024       return error_mark_node;
4025     }
4026
4027   new_inner_args = make_tree_vec (nparms);
4028   new_args = add_outermost_template_args (args, new_inner_args);
4029   for (i = 0; i < nparms; i++)
4030     {
4031       tree arg;
4032       tree parm;
4033
4034       /* Get the Ith template parameter.  */
4035       parm = TREE_VEC_ELT (parms, i);
4036
4037       /* Calculate the Ith argument.  */
4038       if (i < nargs)
4039         arg = TREE_VEC_ELT (inner_args, i);
4040       else if (require_all_args)
4041         /* There must be a default arg in this case.  */
4042         arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
4043                                    complain, in_decl);
4044       else
4045         break;
4046
4047       gcc_assert (arg);
4048       if (arg == error_mark_node)
4049         {
4050           if (complain & tf_error)
4051             error ("template argument %d is invalid", i + 1);
4052         }
4053       else
4054         arg = convert_template_argument (TREE_VALUE (parm),
4055                                          arg, new_args, complain, i,
4056                                          in_decl);
4057
4058       if (arg == error_mark_node)
4059         lost++;
4060       TREE_VEC_ELT (new_inner_args, i) = arg;
4061     }
4062
4063   if (lost)
4064     return error_mark_node;
4065
4066   return new_inner_args;
4067 }
4068
4069 /* Returns 1 if template args OT and NT are equivalent.  */
4070
4071 static int
4072 template_args_equal (tree ot, tree nt)
4073 {
4074   if (nt == ot)
4075     return 1;
4076
4077   if (TREE_CODE (nt) == TREE_VEC)
4078     /* For member templates */
4079     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
4080   else if (TYPE_P (nt))
4081     return TYPE_P (ot) && same_type_p (ot, nt);
4082   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
4083     return 0;
4084   else
4085     return cp_tree_equal (ot, nt);
4086 }
4087
4088 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
4089    of template arguments.  Returns 0 otherwise.  */
4090
4091 int
4092 comp_template_args (tree oldargs, tree newargs)
4093 {
4094   int i;
4095
4096   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
4097     return 0;
4098
4099   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
4100     {
4101       tree nt = TREE_VEC_ELT (newargs, i);
4102       tree ot = TREE_VEC_ELT (oldargs, i);
4103
4104       if (! template_args_equal (ot, nt))
4105         return 0;
4106     }
4107   return 1;
4108 }
4109
4110 /* Given class template name and parameter list, produce a user-friendly name
4111    for the instantiation.  */
4112
4113 static char *
4114 mangle_class_name_for_template (const char* name, tree parms, tree arglist)
4115 {
4116   static struct obstack scratch_obstack;
4117   static char *scratch_firstobj;
4118   int i, nparms;
4119
4120   if (!scratch_firstobj)
4121     gcc_obstack_init (&scratch_obstack);
4122   else
4123     obstack_free (&scratch_obstack, scratch_firstobj);
4124   scratch_firstobj = (char *) obstack_alloc (&scratch_obstack, 1);
4125
4126 #define ccat(C) obstack_1grow (&scratch_obstack, (C));
4127 #define cat(S)  obstack_grow (&scratch_obstack, (S), strlen (S))
4128
4129   cat (name);
4130   ccat ('<');
4131   nparms = TREE_VEC_LENGTH (parms);
4132   arglist = INNERMOST_TEMPLATE_ARGS (arglist);
4133   gcc_assert (nparms == TREE_VEC_LENGTH (arglist));
4134   for (i = 0; i < nparms; i++)
4135     {
4136       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4137       tree arg = TREE_VEC_ELT (arglist, i);
4138
4139       if (i)
4140         ccat (',');
4141
4142       if (TREE_CODE (parm) == TYPE_DECL)
4143         {
4144           cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
4145           continue;
4146         }
4147       else if (TREE_CODE (parm) == TEMPLATE_DECL)
4148         {
4149           if (TREE_CODE (arg) == TEMPLATE_DECL)
4150             {
4151               /* Already substituted with real template.  Just output
4152                  the template name here */
4153               tree context = DECL_CONTEXT (arg);
4154               if (context)
4155                 {
4156                   /* The template may be defined in a namespace, or
4157                      may be a member template.  */
4158                   gcc_assert (TREE_CODE (context) == NAMESPACE_DECL
4159                               || CLASS_TYPE_P (context));
4160                   cat (decl_as_string (DECL_CONTEXT (arg),
4161                                       TFF_PLAIN_IDENTIFIER));
4162                   cat ("::");
4163                 }
4164               cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
4165             }
4166           else
4167             /* Output the parameter declaration.  */
4168             cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
4169           continue;
4170         }
4171       else
4172         gcc_assert (TREE_CODE (parm) == PARM_DECL);
4173
4174       /* No need to check arglist against parmlist here; we did that
4175          in coerce_template_parms, called from lookup_template_class.  */
4176       cat (expr_as_string (arg, TFF_PLAIN_IDENTIFIER));
4177     }
4178   {
4179     char *bufp = obstack_next_free (&scratch_obstack);
4180     int offset = 0;
4181     while (bufp[offset - 1] == ' ')
4182       offset--;
4183     obstack_blank_fast (&scratch_obstack, offset);
4184
4185     /* B<C<char> >, not B<C<char>> */
4186     if (bufp[offset - 1] == '>')
4187       ccat (' ');
4188   }
4189   ccat ('>');
4190   ccat ('\0');
4191   return (char *) obstack_base (&scratch_obstack);
4192 }
4193
4194 static tree
4195 classtype_mangled_name (tree t)
4196 {
4197   if (CLASSTYPE_TEMPLATE_INFO (t)
4198       /* Specializations have already had their names set up in
4199          lookup_template_class.  */
4200       && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
4201     {
4202       tree tmpl = most_general_template (CLASSTYPE_TI_TEMPLATE (t));
4203
4204       /* For non-primary templates, the template parameters are
4205          implicit from their surrounding context.  */
4206       if (PRIMARY_TEMPLATE_P (tmpl))
4207         {
4208           tree name = DECL_NAME (tmpl);
4209           char *mangled_name = mangle_class_name_for_template
4210             (IDENTIFIER_POINTER (name),
4211              DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
4212              CLASSTYPE_TI_ARGS (t));
4213           tree id = get_identifier (mangled_name);
4214           IDENTIFIER_TEMPLATE (id) = name;
4215           return id;
4216         }
4217     }
4218
4219   return TYPE_IDENTIFIER (t);
4220 }
4221
4222 static void
4223 add_pending_template (tree d)
4224 {
4225   tree ti = (TYPE_P (d)
4226              ? CLASSTYPE_TEMPLATE_INFO (d)
4227              : DECL_TEMPLATE_INFO (d));
4228   tree pt;
4229   int level;
4230
4231   if (TI_PENDING_TEMPLATE_FLAG (ti))
4232     return;
4233
4234   /* We are called both from instantiate_decl, where we've already had a
4235      tinst_level pushed, and instantiate_template, where we haven't.
4236      Compensate.  */
4237   level = !(current_tinst_level && TINST_DECL (current_tinst_level) == d);
4238
4239   if (level)
4240     push_tinst_level (d);
4241
4242   pt = tree_cons (current_tinst_level, d, NULL_TREE);
4243   if (last_pending_template)
4244     TREE_CHAIN (last_pending_template) = pt;
4245   else
4246     pending_templates = pt;
4247
4248   last_pending_template = pt;
4249
4250   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
4251
4252   if (level)
4253     pop_tinst_level ();
4254 }
4255
4256
4257 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
4258    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
4259    documentation for TEMPLATE_ID_EXPR.  */
4260
4261 tree
4262 lookup_template_function (tree fns, tree arglist)
4263 {
4264   tree type;
4265
4266   if (fns == error_mark_node || arglist == error_mark_node)
4267     return error_mark_node;
4268
4269   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
4270   gcc_assert (fns && (is_overloaded_fn (fns)
4271                       || TREE_CODE (fns) == IDENTIFIER_NODE));
4272
4273   if (BASELINK_P (fns))
4274     {
4275       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
4276                                          unknown_type_node,
4277                                          BASELINK_FUNCTIONS (fns),
4278                                          arglist);
4279       return fns;
4280     }
4281
4282   type = TREE_TYPE (fns);
4283   if (TREE_CODE (fns) == OVERLOAD || !type)
4284     type = unknown_type_node;
4285
4286   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
4287 }
4288
4289 /* Within the scope of a template class S<T>, the name S gets bound
4290    (in build_self_reference) to a TYPE_DECL for the class, not a
4291    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
4292    or one of its enclosing classes, and that type is a template,
4293    return the associated TEMPLATE_DECL.  Otherwise, the original
4294    DECL is returned.  */
4295
4296 tree
4297 maybe_get_template_decl_from_type_decl (tree decl)
4298 {
4299   return (decl != NULL_TREE
4300           && TREE_CODE (decl) == TYPE_DECL
4301           && DECL_ARTIFICIAL (decl)
4302           && CLASS_TYPE_P (TREE_TYPE (decl))
4303           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
4304     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
4305 }
4306
4307 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
4308    parameters, find the desired type.
4309
4310    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
4311
4312    IN_DECL, if non-NULL, is the template declaration we are trying to
4313    instantiate.
4314
4315    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
4316    the class we are looking up.
4317
4318    Issue error and warning messages under control of COMPLAIN.
4319
4320    If the template class is really a local class in a template
4321    function, then the FUNCTION_CONTEXT is the function in which it is
4322    being instantiated.
4323
4324    ??? Note that this function is currently called *twice* for each
4325    template-id: the first time from the parser, while creating the
4326    incomplete type (finish_template_type), and the second type during the
4327    real instantiation (instantiate_template_class). This is surely something
4328    that we want to avoid. It also causes some problems with argument
4329    coercion (see convert_nontype_argument for more information on this).  */
4330
4331 tree
4332 lookup_template_class (tree d1,
4333                        tree arglist,
4334                        tree in_decl,
4335                        tree context,
4336                        int entering_scope,
4337                        tsubst_flags_t complain)
4338 {
4339   tree template = NULL_TREE, parmlist;
4340   tree t;
4341
4342   timevar_push (TV_NAME_LOOKUP);
4343
4344   if (TREE_CODE (d1) == IDENTIFIER_NODE)
4345     {
4346       tree value = innermost_non_namespace_value (d1);
4347       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
4348         template = value;
4349       else
4350         {
4351           if (context)
4352             push_decl_namespace (context);
4353           template = lookup_name (d1);
4354           template = maybe_get_template_decl_from_type_decl (template);
4355           if (context)
4356             pop_decl_namespace ();
4357         }
4358       if (template)
4359         context = DECL_CONTEXT (template);
4360     }
4361   else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
4362     {
4363       tree type = TREE_TYPE (d1);
4364
4365       /* If we are declaring a constructor, say A<T>::A<T>, we will get
4366          an implicit typename for the second A.  Deal with it.  */
4367       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
4368         type = TREE_TYPE (type);
4369
4370       if (CLASSTYPE_TEMPLATE_INFO (type))
4371         {
4372           template = CLASSTYPE_TI_TEMPLATE (type);
4373           d1 = DECL_NAME (template);
4374         }
4375     }
4376   else if (TREE_CODE (d1) == ENUMERAL_TYPE
4377            || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
4378     {
4379       template = TYPE_TI_TEMPLATE (d1);
4380       d1 = DECL_NAME (template);
4381     }
4382   else if (TREE_CODE (d1) == TEMPLATE_DECL
4383            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
4384     {
4385       template = d1;
4386       d1 = DECL_NAME (template);
4387       context = DECL_CONTEXT (template);
4388     }
4389
4390   /* Issue an error message if we didn't find a template.  */
4391   if (! template)
4392     {
4393       if (complain & tf_error)
4394         error ("%qT is not a template", d1);
4395       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4396     }
4397
4398   if (TREE_CODE (template) != TEMPLATE_DECL
4399          /* Make sure it's a user visible template, if it was named by
4400             the user.  */
4401       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
4402           && !PRIMARY_TEMPLATE_P (template)))
4403     {
4404       if (complain & tf_error)
4405         {
4406           error ("non-template type %qT used as a template", d1);
4407           if (in_decl)
4408             error ("for template declaration %q+D", in_decl);
4409         }
4410       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4411     }
4412
4413   complain &= ~tf_user;
4414
4415   if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
4416     {
4417       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
4418          template arguments */
4419
4420       tree parm;
4421       tree arglist2;
4422
4423       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
4424
4425       /* Consider an example where a template template parameter declared as
4426
4427            template <class T, class U = std::allocator<T> > class TT
4428
4429          The template parameter level of T and U are one level larger than
4430          of TT.  To proper process the default argument of U, say when an
4431          instantiation `TT<int>' is seen, we need to build the full
4432          arguments containing {int} as the innermost level.  Outer levels,
4433          available when not appearing as default template argument, can be
4434          obtained from `current_template_args ()'.
4435
4436          Suppose that TT is later substituted with std::vector.  The above
4437          instantiation is `TT<int, std::allocator<T> >' with TT at
4438          level 1, and T at level 2, while the template arguments at level 1
4439          becomes {std::vector} and the inner level 2 is {int}.  */
4440
4441       if (current_template_parms)
4442         arglist = add_to_template_args (current_template_args (), arglist);
4443
4444       arglist2 = coerce_template_parms (parmlist, arglist, template,
4445                                         complain, 
4446                                         /*require_all_args=*/true,
4447                                         /*use_default_args=*/true);
4448       if (arglist2 == error_mark_node
4449           || (!uses_template_parms (arglist2)
4450               && check_instantiated_args (template, arglist2, complain)))
4451         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4452
4453       parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
4454       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
4455     }
4456   else
4457     {
4458       tree template_type = TREE_TYPE (template);
4459       tree gen_tmpl;
4460       tree type_decl;
4461       tree found = NULL_TREE;
4462       int arg_depth;
4463       int parm_depth;
4464       int is_partial_instantiation;
4465
4466       gen_tmpl = most_general_template (template);
4467       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
4468       parm_depth = TMPL_PARMS_DEPTH (parmlist);
4469       arg_depth = TMPL_ARGS_DEPTH (arglist);
4470
4471       if (arg_depth == 1 && parm_depth > 1)
4472         {
4473           /* We've been given an incomplete set of template arguments.
4474              For example, given:
4475
4476                template <class T> struct S1 {
4477                  template <class U> struct S2 {};
4478                  template <class U> struct S2<U*> {};
4479                 };
4480
4481              we will be called with an ARGLIST of `U*', but the
4482              TEMPLATE will be `template <class T> template
4483              <class U> struct S1<T>::S2'.  We must fill in the missing
4484              arguments.  */
4485           arglist
4486             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
4487                                            arglist);
4488           arg_depth = TMPL_ARGS_DEPTH (arglist);
4489         }
4490
4491       /* Now we should have enough arguments.  */
4492       gcc_assert (parm_depth == arg_depth);
4493
4494       /* From here on, we're only interested in the most general
4495          template.  */
4496       template = gen_tmpl;
4497
4498       /* Calculate the BOUND_ARGS.  These will be the args that are
4499          actually tsubst'd into the definition to create the
4500          instantiation.  */
4501       if (parm_depth > 1)
4502         {
4503           /* We have multiple levels of arguments to coerce, at once.  */
4504           int i;
4505           int saved_depth = TMPL_ARGS_DEPTH (arglist);
4506
4507           tree bound_args = make_tree_vec (parm_depth);
4508
4509           for (i = saved_depth,
4510                  t = DECL_TEMPLATE_PARMS (template);
4511                i > 0 && t != NULL_TREE;
4512                --i, t = TREE_CHAIN (t))
4513             {
4514               tree a = coerce_template_parms (TREE_VALUE (t),
4515                                               arglist, template,
4516                                               complain, 
4517                                               /*require_all_args=*/true,
4518                                               /*use_default_args=*/true);
4519
4520               /* Don't process further if one of the levels fails.  */
4521               if (a == error_mark_node)
4522                 {
4523                   /* Restore the ARGLIST to its full size.  */
4524                   TREE_VEC_LENGTH (arglist) = saved_depth;
4525                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4526                 }
4527
4528               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
4529
4530               /* We temporarily reduce the length of the ARGLIST so
4531                  that coerce_template_parms will see only the arguments
4532                  corresponding to the template parameters it is
4533                  examining.  */
4534               TREE_VEC_LENGTH (arglist)--;
4535             }
4536
4537           /* Restore the ARGLIST to its full size.  */
4538           TREE_VEC_LENGTH (arglist) = saved_depth;
4539
4540           arglist = bound_args;
4541         }
4542       else
4543         arglist
4544           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
4545                                    INNERMOST_TEMPLATE_ARGS (arglist),
4546                                    template,
4547                                    complain, 
4548                                    /*require_all_args=*/true,
4549                                    /*use_default_args=*/true);
4550
4551       if (arglist == error_mark_node)
4552         /* We were unable to bind the arguments.  */
4553         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4554
4555       /* In the scope of a template class, explicit references to the
4556          template class refer to the type of the template, not any
4557          instantiation of it.  For example, in:
4558
4559            template <class T> class C { void f(C<T>); }
4560
4561          the `C<T>' is just the same as `C'.  Outside of the
4562          class, however, such a reference is an instantiation.  */
4563       if (comp_template_args (TYPE_TI_ARGS (template_type),
4564                               arglist))
4565         {
4566           found = template_type;
4567
4568           if (!entering_scope && PRIMARY_TEMPLATE_P (template))
4569             {
4570               tree ctx;
4571
4572               for (ctx = current_class_type;
4573                    ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
4574                    ctx = (TYPE_P (ctx)
4575                           ? TYPE_CONTEXT (ctx)
4576                           : DECL_CONTEXT (ctx)))
4577                 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
4578                   goto found_ctx;
4579
4580               /* We're not in the scope of the class, so the
4581                  TEMPLATE_TYPE is not the type we want after all.  */
4582               found = NULL_TREE;
4583             found_ctx:;
4584             }
4585         }
4586       if (found)
4587         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4588
4589       /* If we already have this specialization, return it.  */
4590       found = retrieve_specialization (template, arglist,
4591                                        /*class_specializations_p=*/false);
4592       if (found)
4593         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4594
4595       /* This type is a "partial instantiation" if any of the template
4596          arguments still involve template parameters.  Note that we set
4597          IS_PARTIAL_INSTANTIATION for partial specializations as
4598          well.  */
4599       is_partial_instantiation = uses_template_parms (arglist);
4600
4601       /* If the deduced arguments are invalid, then the binding
4602          failed.  */
4603       if (!is_partial_instantiation
4604           && check_instantiated_args (template,
4605                                       INNERMOST_TEMPLATE_ARGS (arglist),
4606                                       complain))
4607         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4608
4609       if (!is_partial_instantiation
4610           && !PRIMARY_TEMPLATE_P (template)
4611           && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
4612         {
4613           found = xref_tag_from_type (TREE_TYPE (template),
4614                                       DECL_NAME (template),
4615                                       /*tag_scope=*/ts_global);
4616           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4617         }
4618
4619       context = tsubst (DECL_CONTEXT (template), arglist,
4620                         complain, in_decl);
4621       if (!context)
4622         context = global_namespace;
4623
4624       /* Create the type.  */
4625       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
4626         {
4627           if (!is_partial_instantiation)
4628             {
4629               set_current_access_from_decl (TYPE_NAME (template_type));
4630               t = start_enum (TYPE_IDENTIFIER (template_type));
4631             }
4632           else
4633             /* We don't want to call start_enum for this type, since
4634                the values for the enumeration constants may involve
4635                template parameters.  And, no one should be interested
4636                in the enumeration constants for such a type.  */
4637             t = make_node (ENUMERAL_TYPE);
4638         }
4639       else
4640         {
4641           t = make_aggr_type (TREE_CODE (template_type));
4642           CLASSTYPE_DECLARED_CLASS (t)
4643             = CLASSTYPE_DECLARED_CLASS (template_type);
4644           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
4645           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
4646
4647           /* A local class.  Make sure the decl gets registered properly.  */
4648           if (context == current_function_decl)
4649             pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
4650         }
4651
4652       /* If we called start_enum or pushtag above, this information
4653          will already be set up.  */
4654       if (!TYPE_NAME (t))
4655         {
4656           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
4657
4658           type_decl = create_implicit_typedef (DECL_NAME (template), t);
4659           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
4660           TYPE_STUB_DECL (t) = type_decl;
4661           DECL_SOURCE_LOCATION (type_decl)
4662             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
4663         }
4664       else
4665         type_decl = TYPE_NAME (t);
4666
4667       TREE_PRIVATE (type_decl)
4668         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
4669       TREE_PROTECTED (type_decl)
4670         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
4671       DECL_IN_SYSTEM_HEADER (type_decl)
4672         = DECL_IN_SYSTEM_HEADER (template);
4673       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
4674         {
4675           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
4676           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
4677         }
4678
4679       /* Set up the template information.  We have to figure out which
4680          template is the immediate parent if this is a full
4681          instantiation.  */
4682       if (parm_depth == 1 || is_partial_instantiation
4683           || !PRIMARY_TEMPLATE_P (template))
4684         /* This case is easy; there are no member templates involved.  */
4685         found = template;
4686       else
4687         {
4688           /* This is a full instantiation of a member template.  Look
4689              for a partial instantiation of which this is an instance.  */
4690
4691           for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
4692                found; found = TREE_CHAIN (found))
4693             {
4694               int success;
4695               tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
4696
4697               /* We only want partial instantiations, here, not
4698                  specializations or full instantiations.  */
4699               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
4700                   || !uses_template_parms (TREE_VALUE (found)))
4701                 continue;
4702
4703               /* Temporarily reduce by one the number of levels in the
4704                  ARGLIST and in FOUND so as to avoid comparing the
4705                  last set of arguments.  */
4706               TREE_VEC_LENGTH (arglist)--;
4707               TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
4708
4709               /* See if the arguments match.  If they do, then TMPL is
4710                  the partial instantiation we want.  */
4711               success = comp_template_args (TREE_PURPOSE (found), arglist);
4712
4713               /* Restore the argument vectors to their full size.  */
4714               TREE_VEC_LENGTH (arglist)++;
4715               TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
4716
4717               if (success)
4718                 {
4719                   found = tmpl;
4720                   break;
4721                 }
4722             }
4723
4724           if (!found)
4725             {
4726               /* There was no partial instantiation. This happens
4727                  where C<T> is a member template of A<T> and it's used
4728                  in something like
4729
4730                   template <typename T> struct B { A<T>::C<int> m; };
4731                   B<float>;
4732
4733                  Create the partial instantiation.
4734                */
4735               TREE_VEC_LENGTH (arglist)--;
4736               found = tsubst (template, arglist, complain, NULL_TREE);
4737               TREE_VEC_LENGTH (arglist)++;
4738             }
4739         }
4740
4741       SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
4742       DECL_TEMPLATE_INSTANTIATIONS (template)
4743         = tree_cons (arglist, t,
4744                      DECL_TEMPLATE_INSTANTIATIONS (template));
4745
4746       if (TREE_CODE (t) == ENUMERAL_TYPE
4747           && !is_partial_instantiation)
4748         /* Now that the type has been registered on the instantiations
4749            list, we set up the enumerators.  Because the enumeration
4750            constants may involve the enumeration type itself, we make
4751            sure to register the type first, and then create the
4752            constants.  That way, doing tsubst_expr for the enumeration
4753            constants won't result in recursive calls here; we'll find
4754            the instantiation and exit above.  */
4755         tsubst_enum (template_type, t, arglist);
4756
4757       /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
4758          is set up.  */
4759       if (TREE_CODE (t) != ENUMERAL_TYPE)
4760         DECL_NAME (type_decl) = classtype_mangled_name (t);
4761       if (is_partial_instantiation)
4762         /* If the type makes use of template parameters, the
4763            code that generates debugging information will crash.  */
4764         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
4765
4766       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4767     }
4768   timevar_pop (TV_NAME_LOOKUP);
4769 }
4770 \f
4771 struct pair_fn_data
4772 {
4773   tree_fn_t fn;
4774   void *data;
4775   struct pointer_set_t *visited;
4776 };
4777
4778 /* Called from for_each_template_parm via walk_tree.  */
4779
4780 static tree
4781 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
4782 {
4783   tree t = *tp;
4784   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
4785   tree_fn_t fn = pfd->fn;
4786   void *data = pfd->data;
4787
4788   if (TYPE_P (t)
4789       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
4790     return error_mark_node;
4791
4792   switch (TREE_CODE (t))
4793     {
4794     case RECORD_TYPE:
4795       if (TYPE_PTRMEMFUNC_P (t))
4796         break;
4797       /* Fall through.  */
4798
4799     case UNION_TYPE:
4800     case ENUMERAL_TYPE:
4801       if (!TYPE_TEMPLATE_INFO (t))
4802         *walk_subtrees = 0;
4803       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
4804                                        fn, data, pfd->visited))
4805         return error_mark_node;
4806       break;
4807
4808     case METHOD_TYPE:
4809       /* Since we're not going to walk subtrees, we have to do this
4810          explicitly here.  */
4811       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
4812                                   pfd->visited))
4813         return error_mark_node;
4814       /* Fall through.  */
4815
4816     case FUNCTION_TYPE:
4817       /* Check the return type.  */
4818       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4819         return error_mark_node;
4820
4821       /* Check the parameter types.  Since default arguments are not
4822          instantiated until they are needed, the TYPE_ARG_TYPES may
4823          contain expressions that involve template parameters.  But,
4824          no-one should be looking at them yet.  And, once they're
4825          instantiated, they don't contain template parameters, so
4826          there's no point in looking at them then, either.  */
4827       {
4828         tree parm;
4829
4830         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4831           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
4832                                       pfd->visited))
4833             return error_mark_node;
4834
4835         /* Since we've already handled the TYPE_ARG_TYPES, we don't
4836            want walk_tree walking into them itself.  */
4837         *walk_subtrees = 0;
4838       }
4839       break;
4840
4841     case TYPEOF_TYPE:
4842       if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
4843                                   pfd->visited))
4844         return error_mark_node;
4845       break;
4846
4847     case FUNCTION_DECL:
4848     case VAR_DECL:
4849       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
4850           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
4851                                      pfd->visited))
4852         return error_mark_node;
4853       /* Fall through.  */
4854
4855     case PARM_DECL:
4856     case CONST_DECL:
4857       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
4858           && for_each_template_parm (DECL_INITIAL (t), fn, data,
4859                                      pfd->visited))
4860         return error_mark_node;
4861       if (DECL_CONTEXT (t)
4862           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
4863                                      pfd->visited))
4864         return error_mark_node;
4865       break;
4866
4867     case BOUND_TEMPLATE_TEMPLATE_PARM:
4868       /* Record template parameters such as `T' inside `TT<T>'.  */
4869       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
4870         return error_mark_node;
4871       /* Fall through.  */
4872
4873     case TEMPLATE_TEMPLATE_PARM:
4874     case TEMPLATE_TYPE_PARM:
4875     case TEMPLATE_PARM_INDEX:
4876       if (fn && (*fn)(t, data))
4877         return error_mark_node;
4878       else if (!fn)
4879         return error_mark_node;
4880       break;
4881
4882     case TEMPLATE_DECL:
4883       /* A template template parameter is encountered.  */
4884       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
4885           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4886         return error_mark_node;
4887
4888       /* Already substituted template template parameter */
4889       *walk_subtrees = 0;
4890       break;
4891
4892     case TYPENAME_TYPE:
4893       if (!fn
4894           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
4895                                      data, pfd->visited))
4896         return error_mark_node;
4897       break;
4898
4899     case CONSTRUCTOR:
4900       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
4901           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4902                                      (TREE_TYPE (t)), fn, data,
4903                                      pfd->visited))
4904         return error_mark_node;
4905       break;
4906
4907     case INDIRECT_REF:
4908     case COMPONENT_REF:
4909       /* If there's no type, then this thing must be some expression
4910          involving template parameters.  */
4911       if (!fn && !TREE_TYPE (t))
4912         return error_mark_node;
4913       break;
4914
4915     case MODOP_EXPR:
4916     case CAST_EXPR:
4917     case REINTERPRET_CAST_EXPR:
4918     case CONST_CAST_EXPR:
4919     case STATIC_CAST_EXPR:
4920     case DYNAMIC_CAST_EXPR:
4921     case ARROW_EXPR:
4922     case DOTSTAR_EXPR:
4923     case TYPEID_EXPR:
4924     case PSEUDO_DTOR_EXPR:
4925       if (!fn)
4926         return error_mark_node;
4927       break;
4928
4929     case BASELINK:
4930       /* If we do not handle this case specially, we end up walking
4931          the BINFO hierarchy, which is circular, and therefore
4932          confuses walk_tree.  */
4933       *walk_subtrees = 0;
4934       if (for_each_template_parm (BASELINK_FUNCTIONS (*tp), fn, data,
4935                                   pfd->visited))
4936         return error_mark_node;
4937       break;
4938
4939     default:
4940       break;
4941     }
4942
4943   /* We didn't find any template parameters we liked.  */
4944   return NULL_TREE;
4945 }
4946
4947 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
4948    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
4949    call FN with the parameter and the DATA.
4950    If FN returns nonzero, the iteration is terminated, and
4951    for_each_template_parm returns 1.  Otherwise, the iteration
4952    continues.  If FN never returns a nonzero value, the value
4953    returned by for_each_template_parm is 0.  If FN is NULL, it is
4954    considered to be the function which always returns 1.  */
4955
4956 static int
4957 for_each_template_parm (tree t, tree_fn_t fn, void* data,
4958                         struct pointer_set_t *visited)
4959 {
4960   struct pair_fn_data pfd;
4961   int result;
4962
4963   /* Set up.  */
4964   pfd.fn = fn;
4965   pfd.data = data;
4966
4967   /* Walk the tree.  (Conceptually, we would like to walk without
4968      duplicates, but for_each_template_parm_r recursively calls
4969      for_each_template_parm, so we would need to reorganize a fair
4970      bit to use walk_tree_without_duplicates, so we keep our own
4971      visited list.)  */
4972   if (visited)
4973     pfd.visited = visited;
4974   else
4975     pfd.visited = pointer_set_create ();
4976   result = walk_tree (&t,
4977                       for_each_template_parm_r,
4978                       &pfd,
4979                       pfd.visited) != NULL_TREE;
4980
4981   /* Clean up.  */
4982   if (!visited)
4983     {
4984       pointer_set_destroy (pfd.visited);
4985       pfd.visited = 0;
4986     }
4987
4988   return result;
4989 }
4990
4991 /* Returns true if T depends on any template parameter.  */
4992
4993 int
4994 uses_template_parms (tree t)
4995 {
4996   bool dependent_p;
4997   int saved_processing_template_decl;
4998
4999   saved_processing_template_decl = processing_template_decl;
5000   if (!saved_processing_template_decl)
5001     processing_template_decl = 1;
5002   if (TYPE_P (t))
5003     dependent_p = dependent_type_p (t);
5004   else if (TREE_CODE (t) == TREE_VEC)
5005     dependent_p = any_dependent_template_arguments_p (t);
5006   else if (TREE_CODE (t) == TREE_LIST)
5007     dependent_p = (uses_template_parms (TREE_VALUE (t))
5008                    || uses_template_parms (TREE_CHAIN (t)));
5009   else if (TREE_CODE (t) == TYPE_DECL)
5010     dependent_p = dependent_type_p (TREE_TYPE (t));
5011   else if (DECL_P (t)
5012            || EXPR_P (t)
5013            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
5014            || TREE_CODE (t) == OVERLOAD
5015            || TREE_CODE (t) == BASELINK
5016            || TREE_CODE (t) == IDENTIFIER_NODE
5017            || CONSTANT_CLASS_P (t))
5018     dependent_p = (type_dependent_expression_p (t)
5019                    || value_dependent_expression_p (t));
5020   else
5021     {
5022       gcc_assert (t == error_mark_node);
5023       dependent_p = false;
5024     }
5025
5026   processing_template_decl = saved_processing_template_decl;
5027
5028   return dependent_p;
5029 }
5030
5031 /* Returns true if T depends on any template parameter with level LEVEL.  */
5032
5033 int
5034 uses_template_parms_level (tree t, int level)
5035 {
5036   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
5037 }
5038
5039 static int tinst_depth;
5040 extern int max_tinst_depth;
5041 #ifdef GATHER_STATISTICS
5042 int depth_reached;
5043 #endif
5044 static int tinst_level_tick;
5045 static int last_template_error_tick;
5046
5047 /* We're starting to instantiate D; record the template instantiation context
5048    for diagnostics and to restore it later.  */
5049
5050 static int
5051 push_tinst_level (tree d)
5052 {
5053   tree new;
5054
5055   if (tinst_depth >= max_tinst_depth)
5056     {
5057       /* If the instantiation in question still has unbound template parms,
5058          we don't really care if we can't instantiate it, so just return.
5059          This happens with base instantiation for implicit `typename'.  */
5060       if (uses_template_parms (d))
5061         return 0;
5062
5063       last_template_error_tick = tinst_level_tick;
5064       error ("template instantiation depth exceeds maximum of %d (use "
5065              "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
5066              max_tinst_depth, d);
5067
5068       print_instantiation_context ();
5069
5070       return 0;
5071     }
5072
5073   new = make_node (TINST_LEVEL);
5074   TINST_DECL (new) = d;
5075   TINST_LOCATION (new) = input_location;
5076   TINST_IN_SYSTEM_HEADER_P (new) = in_system_header;
5077   TREE_CHAIN (new) = current_tinst_level;
5078   current_tinst_level = new;
5079
5080   ++tinst_depth;
5081 #ifdef GATHER_STATISTICS
5082   if (tinst_depth > depth_reached)
5083     depth_reached = tinst_depth;
5084 #endif
5085
5086   ++tinst_level_tick;
5087   return 1;
5088 }
5089
5090 /* We're done instantiating this template; return to the instantiation
5091    context.  */
5092
5093 static void
5094 pop_tinst_level (void)
5095 {
5096   tree old = current_tinst_level;
5097
5098   /* Restore the filename and line number stashed away when we started
5099      this instantiation.  */
5100   input_location = TINST_LOCATION (old);
5101   in_system_header = TINST_IN_SYSTEM_HEADER_P (old);
5102   current_tinst_level = TREE_CHAIN (old);
5103   --tinst_depth;
5104   ++tinst_level_tick;
5105 }
5106
5107 /* We're instantiating a deferred template; restore the template
5108    instantiation context in which the instantiation was requested, which
5109    is one step out from LEVEL.  */
5110
5111 static void
5112 reopen_tinst_level (tree level)
5113 {
5114   tree t;
5115
5116   tinst_depth = 0;
5117   for (t = level; t; t = TREE_CHAIN (t))
5118     ++tinst_depth;
5119
5120   current_tinst_level = level;
5121   pop_tinst_level ();
5122 }
5123
5124 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
5125    vector of template arguments, as for tsubst.
5126
5127    Returns an appropriate tsubst'd friend declaration.  */
5128
5129 static tree
5130 tsubst_friend_function (tree decl, tree args)
5131 {
5132   tree new_friend;
5133
5134   if (TREE_CODE (decl) == FUNCTION_DECL
5135       && DECL_TEMPLATE_INSTANTIATION (decl)
5136       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
5137     /* This was a friend declared with an explicit template
5138        argument list, e.g.:
5139
5140        friend void f<>(T);
5141
5142        to indicate that f was a template instantiation, not a new
5143        function declaration.  Now, we have to figure out what
5144        instantiation of what template.  */
5145     {
5146       tree template_id, arglist, fns;
5147       tree new_args;
5148       tree tmpl;
5149       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
5150
5151       /* Friend functions are looked up in the containing namespace scope.
5152          We must enter that scope, to avoid finding member functions of the
5153          current cless with same name.  */
5154       push_nested_namespace (ns);
5155       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
5156                          tf_warning_or_error, NULL_TREE);
5157       pop_nested_namespace (ns);
5158       arglist = tsubst (DECL_TI_ARGS (decl), args,
5159                         tf_warning_or_error, NULL_TREE);
5160       template_id = lookup_template_function (fns, arglist);
5161
5162       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
5163       tmpl = determine_specialization (template_id, new_friend,
5164                                        &new_args,
5165                                        /*need_member_template=*/0,
5166                                        TREE_VEC_LENGTH (args));
5167       return instantiate_template (tmpl, new_args, tf_error);
5168     }
5169
5170   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
5171
5172   /* The NEW_FRIEND will look like an instantiation, to the
5173      compiler, but is not an instantiation from the point of view of
5174      the language.  For example, we might have had:
5175
5176      template <class T> struct S {
5177        template <class U> friend void f(T, U);
5178      };
5179
5180      Then, in S<int>, template <class U> void f(int, U) is not an
5181      instantiation of anything.  */
5182   if (new_friend == error_mark_node)
5183     return error_mark_node;
5184
5185   DECL_USE_TEMPLATE (new_friend) = 0;
5186   if (TREE_CODE (decl) == TEMPLATE_DECL)
5187     {
5188       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
5189       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
5190         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
5191     }
5192
5193   /* The mangled name for the NEW_FRIEND is incorrect.  The function
5194      is not a template instantiation and should not be mangled like
5195      one.  Therefore, we forget the mangling here; we'll recompute it
5196      later if we need it.  */
5197   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
5198     {
5199       SET_DECL_RTL (new_friend, NULL_RTX);
5200       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
5201     }
5202
5203   if (DECL_NAMESPACE_SCOPE_P (new_friend))
5204     {
5205       tree old_decl;
5206       tree new_friend_template_info;
5207       tree new_friend_result_template_info;
5208       tree ns;
5209       int  new_friend_is_defn;
5210
5211       /* We must save some information from NEW_FRIEND before calling
5212          duplicate decls since that function will free NEW_FRIEND if
5213          possible.  */
5214       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
5215       new_friend_is_defn =
5216             (DECL_INITIAL (DECL_TEMPLATE_RESULT
5217                            (template_for_substitution (new_friend)))
5218              != NULL_TREE);
5219       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
5220         {
5221           /* This declaration is a `primary' template.  */
5222           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
5223
5224           new_friend_result_template_info
5225             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
5226         }
5227       else
5228         new_friend_result_template_info = NULL_TREE;
5229
5230       /* Inside pushdecl_namespace_level, we will push into the
5231          current namespace. However, the friend function should go
5232          into the namespace of the template.  */
5233       ns = decl_namespace_context (new_friend);
5234       push_nested_namespace (ns);
5235       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
5236       pop_nested_namespace (ns);
5237
5238       if (old_decl == error_mark_node)
5239         return error_mark_node;
5240
5241       if (old_decl != new_friend)
5242         {
5243           /* This new friend declaration matched an existing
5244              declaration.  For example, given:
5245
5246                template <class T> void f(T);
5247                template <class U> class C {
5248                  template <class T> friend void f(T) {}
5249                };
5250
5251              the friend declaration actually provides the definition
5252              of `f', once C has been instantiated for some type.  So,
5253              old_decl will be the out-of-class template declaration,
5254              while new_friend is the in-class definition.
5255
5256              But, if `f' was called before this point, the
5257              instantiation of `f' will have DECL_TI_ARGS corresponding
5258              to `T' but not to `U', references to which might appear
5259              in the definition of `f'.  Previously, the most general
5260              template for an instantiation of `f' was the out-of-class
5261              version; now it is the in-class version.  Therefore, we
5262              run through all specialization of `f', adding to their
5263              DECL_TI_ARGS appropriately.  In particular, they need a
5264              new set of outer arguments, corresponding to the
5265              arguments for this class instantiation.
5266
5267              The same situation can arise with something like this:
5268
5269                friend void f(int);
5270                template <class T> class C {
5271                  friend void f(T) {}
5272                };
5273
5274              when `C<int>' is instantiated.  Now, `f(int)' is defined
5275              in the class.  */
5276
5277           if (!new_friend_is_defn)
5278             /* On the other hand, if the in-class declaration does
5279                *not* provide a definition, then we don't want to alter
5280                existing definitions.  We can just leave everything
5281                alone.  */
5282             ;
5283           else
5284             {
5285               /* Overwrite whatever template info was there before, if
5286                  any, with the new template information pertaining to
5287                  the declaration.  */
5288               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
5289
5290               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
5291                 reregister_specialization (new_friend,
5292                                            most_general_template (old_decl),
5293                                            old_decl);
5294               else
5295                 {
5296                   tree t;
5297                   tree new_friend_args;
5298
5299                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
5300                     = new_friend_result_template_info;
5301
5302                   new_friend_args = TI_ARGS (new_friend_template_info);
5303                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
5304                        t != NULL_TREE;
5305                        t = TREE_CHAIN (t))
5306                     {
5307                       tree spec = TREE_VALUE (t);
5308
5309                       DECL_TI_ARGS (spec)
5310                         = add_outermost_template_args (new_friend_args,
5311                                                        DECL_TI_ARGS (spec));
5312                     }
5313
5314                   /* Now, since specializations are always supposed to
5315                      hang off of the most general template, we must move
5316                      them.  */
5317                   t = most_general_template (old_decl);
5318                   if (t != old_decl)
5319                     {
5320                       DECL_TEMPLATE_SPECIALIZATIONS (t)
5321                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
5322                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
5323                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
5324                     }
5325                 }
5326             }
5327
5328           /* The information from NEW_FRIEND has been merged into OLD_DECL
5329              by duplicate_decls.  */
5330           new_friend = old_decl;
5331         }
5332     }
5333   else
5334     {
5335       tree context = DECL_CONTEXT (new_friend);
5336       bool dependent_p;
5337
5338       /* In the code
5339            template <class T> class C {
5340              template <class U> friend void C1<U>::f (); // case 1
5341              friend void C2<T>::f ();                    // case 2
5342            };
5343          we only need to make sure CONTEXT is a complete type for
5344          case 2.  To distinguish between the two cases, we note that
5345          CONTEXT of case 1 remains dependent type after tsubst while
5346          this isn't true for case 2.  */
5347       ++processing_template_decl;
5348       dependent_p = dependent_type_p (context);
5349       --processing_template_decl;
5350
5351       if (!dependent_p
5352           && !complete_type_or_else (context, NULL_TREE))
5353         return error_mark_node;
5354
5355       if (COMPLETE_TYPE_P (context))
5356         {
5357           /* Check to see that the declaration is really present, and,
5358              possibly obtain an improved declaration.  */
5359           tree fn = check_classfn (context,
5360                                    new_friend, NULL_TREE);
5361
5362           if (fn)
5363             new_friend = fn;
5364         }
5365     }
5366
5367   return new_friend;
5368 }
5369
5370 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
5371    template arguments, as for tsubst.
5372
5373    Returns an appropriate tsubst'd friend type or error_mark_node on
5374    failure.  */
5375
5376 static tree
5377 tsubst_friend_class (tree friend_tmpl, tree args)
5378 {
5379   tree friend_type;
5380   tree tmpl;
5381   tree context;
5382
5383   context = DECL_CONTEXT (friend_tmpl);
5384
5385   if (context)
5386     {
5387       if (TREE_CODE (context) == NAMESPACE_DECL)
5388         push_nested_namespace (context);
5389       else
5390         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
5391     }
5392
5393   /* First, we look for a class template.  */
5394   tmpl = lookup_name (DECL_NAME (friend_tmpl));
5395
5396   /* But, if we don't find one, it might be because we're in a
5397      situation like this:
5398
5399        template <class T>
5400        struct S {
5401          template <class U>
5402          friend struct S;
5403        };
5404
5405      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
5406      for `S<int>', not the TEMPLATE_DECL.  */
5407   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5408     {
5409       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
5410       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
5411     }
5412
5413   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
5414     {
5415       /* The friend template has already been declared.  Just
5416          check to see that the declarations match, and install any new
5417          default parameters.  We must tsubst the default parameters,
5418          of course.  We only need the innermost template parameters
5419          because that is all that redeclare_class_template will look
5420          at.  */
5421       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
5422           > TMPL_ARGS_DEPTH (args))
5423         {
5424           tree parms;
5425           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
5426                                          args, tf_warning_or_error);
5427           redeclare_class_template (TREE_TYPE (tmpl), parms);
5428         }
5429
5430       friend_type = TREE_TYPE (tmpl);
5431     }
5432   else
5433     {
5434       /* The friend template has not already been declared.  In this
5435          case, the instantiation of the template class will cause the
5436          injection of this template into the global scope.  */
5437       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
5438       if (tmpl == error_mark_node)
5439         return error_mark_node;
5440
5441       /* The new TMPL is not an instantiation of anything, so we
5442          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
5443          the new type because that is supposed to be the corresponding
5444          template decl, i.e., TMPL.  */
5445       DECL_USE_TEMPLATE (tmpl) = 0;
5446       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
5447       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
5448       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
5449         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
5450
5451       /* Inject this template into the global scope.  */
5452       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
5453     }
5454
5455   if (context)
5456     {
5457       if (TREE_CODE (context) == NAMESPACE_DECL)
5458         pop_nested_namespace (context);
5459       else
5460         pop_nested_class ();
5461     }
5462
5463   return friend_type;
5464 }
5465
5466 /* Returns zero if TYPE cannot be completed later due to circularity.
5467    Otherwise returns one.  */
5468
5469 static int
5470 can_complete_type_without_circularity (tree type)
5471 {
5472   if (type == NULL_TREE || type == error_mark_node)
5473     return 0;
5474   else if (COMPLETE_TYPE_P (type))
5475     return 1;
5476   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
5477     return can_complete_type_without_circularity (TREE_TYPE (type));
5478   else if (CLASS_TYPE_P (type)
5479            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
5480     return 0;
5481   else
5482     return 1;
5483 }
5484
5485 tree
5486 instantiate_class_template (tree type)
5487 {
5488   tree template, args, pattern, t, member;
5489   tree typedecl;
5490   tree pbinfo;
5491   tree base_list;
5492
5493   if (type == error_mark_node)
5494     return error_mark_node;
5495
5496   if (TYPE_BEING_DEFINED (type)
5497       || COMPLETE_TYPE_P (type)
5498       || dependent_type_p (type))
5499     return type;
5500
5501   /* Figure out which template is being instantiated.  */
5502   template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
5503   gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
5504
5505   /* Determine what specialization of the original template to
5506      instantiate.  */
5507   t = most_specialized_class (type, template);
5508   if (t == error_mark_node)
5509     {
5510       TYPE_BEING_DEFINED (type) = 1;
5511       return error_mark_node;
5512     }
5513   else if (t)
5514     {
5515       /* This TYPE is actually an instantiation of a partial
5516          specialization.  We replace the innermost set of ARGS with
5517          the arguments appropriate for substitution.  For example,
5518          given:
5519        
5520            template <class T> struct S {};
5521            template <class T> struct S<T*> {};
5522
5523          and supposing that we are instantiating S<int*>, ARGS will
5524          presently be {int*} -- but we need {int}.  */
5525       pattern = TREE_TYPE (t);
5526       args = TREE_PURPOSE (t);
5527     }
5528   else
5529     {
5530       pattern = TREE_TYPE (template);
5531       args = CLASSTYPE_TI_ARGS (type);
5532     }
5533
5534   /* If the template we're instantiating is incomplete, then clearly
5535      there's nothing we can do.  */
5536   if (!COMPLETE_TYPE_P (pattern))
5537     return type;
5538
5539   /* If we've recursively instantiated too many templates, stop.  */
5540   if (! push_tinst_level (type))
5541     return type;
5542
5543   /* Now we're really doing the instantiation.  Mark the type as in
5544      the process of being defined.  */
5545   TYPE_BEING_DEFINED (type) = 1;
5546
5547   /* We may be in the middle of deferred access check.  Disable
5548      it now.  */
5549   push_deferring_access_checks (dk_no_deferred);
5550
5551   push_to_top_level ();
5552
5553   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
5554
5555   /* Set the input location to the template definition. This is needed
5556      if tsubsting causes an error.  */
5557   typedecl = TYPE_MAIN_DECL (type);
5558   input_location = DECL_SOURCE_LOCATION (typedecl);
5559   in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
5560
5561   TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
5562   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
5563   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
5564   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
5565   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
5566   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
5567   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
5568   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
5569   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
5570   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
5571   TYPE_PACKED (type) = TYPE_PACKED (pattern);
5572   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
5573   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
5574   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
5575   if (ANON_AGGR_TYPE_P (pattern))
5576     SET_ANON_AGGR_TYPE_P (type);
5577   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
5578     {
5579       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
5580       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
5581     }
5582
5583   pbinfo = TYPE_BINFO (pattern);
5584
5585   /* We should never instantiate a nested class before its enclosing
5586      class; we need to look up the nested class by name before we can
5587      instantiate it, and that lookup should instantiate the enclosing
5588      class.  */
5589   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
5590               || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
5591               || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
5592
5593   base_list = NULL_TREE;
5594   if (BINFO_N_BASE_BINFOS (pbinfo))
5595     {
5596       tree pbase_binfo;
5597       tree context = TYPE_CONTEXT (type);
5598       tree pushed_scope;
5599       int i;
5600
5601       /* We must enter the scope containing the type, as that is where
5602          the accessibility of types named in dependent bases are
5603          looked up from.  */
5604       pushed_scope = push_scope (context ? context : global_namespace);
5605
5606       /* Substitute into each of the bases to determine the actual
5607          basetypes.  */
5608       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
5609         {
5610           tree base;
5611           tree access = BINFO_BASE_ACCESS (pbinfo, i);
5612
5613           /* Substitute to figure out the base class.  */
5614           base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, NULL_TREE);
5615           if (base == error_mark_node)
5616             continue;
5617
5618           base_list = tree_cons (access, base, base_list);
5619           if (BINFO_VIRTUAL_P (pbase_binfo))
5620             TREE_TYPE (base_list) = integer_type_node;
5621         }
5622
5623       /* The list is now in reverse order; correct that.  */
5624       base_list = nreverse (base_list);
5625
5626       if (pushed_scope)
5627         pop_scope (pushed_scope);
5628     }
5629   /* Now call xref_basetypes to set up all the base-class
5630      information.  */
5631   xref_basetypes (type, base_list);
5632
5633
5634   /* Now that our base classes are set up, enter the scope of the
5635      class, so that name lookups into base classes, etc. will work
5636      correctly.  This is precisely analogous to what we do in
5637      begin_class_definition when defining an ordinary non-template
5638      class.  */
5639   pushclass (type);
5640
5641   /* Now members are processed in the order of declaration.  */
5642   for (member = CLASSTYPE_DECL_LIST (pattern);
5643        member; member = TREE_CHAIN (member))
5644     {
5645       tree t = TREE_VALUE (member);
5646
5647       if (TREE_PURPOSE (member))
5648         {
5649           if (TYPE_P (t))
5650             {
5651               /* Build new CLASSTYPE_NESTED_UTDS.  */
5652
5653               tree newtag;
5654               bool class_template_p;
5655
5656               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
5657                                   && TYPE_LANG_SPECIFIC (t)
5658                                   && CLASSTYPE_IS_TEMPLATE (t));
5659               /* If the member is a class template, then -- even after
5660                  substitution -- there may be dependent types in the
5661                  template argument list for the class.  We increment
5662                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
5663                  that function will assume that no types are dependent
5664                  when outside of a template.  */
5665               if (class_template_p)
5666                 ++processing_template_decl;
5667               newtag = tsubst (t, args, tf_error, NULL_TREE);
5668               if (class_template_p)
5669                 --processing_template_decl;
5670               if (newtag == error_mark_node)
5671                 continue;
5672
5673               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
5674                 {
5675                   tree name = TYPE_IDENTIFIER (t);
5676
5677                   if (class_template_p)
5678                     /* Unfortunately, lookup_template_class sets
5679                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
5680                        instantiation (i.e., for the type of a member
5681                        template class nested within a template class.)
5682                        This behavior is required for
5683                        maybe_process_partial_specialization to work
5684                        correctly, but is not accurate in this case;
5685                        the TAG is not an instantiation of anything.
5686                        (The corresponding TEMPLATE_DECL is an
5687                        instantiation, but the TYPE is not.) */
5688                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
5689
5690                   /* Now, we call pushtag to put this NEWTAG into the scope of
5691                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
5692                      pushtag calling push_template_decl.  We don't have to do
5693                      this for enums because it will already have been done in
5694                      tsubst_enum.  */
5695                   if (name)
5696                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
5697                   pushtag (name, newtag, /*tag_scope=*/ts_current);
5698                 }
5699             }
5700           else if (TREE_CODE (t) == FUNCTION_DECL
5701                    || DECL_FUNCTION_TEMPLATE_P (t))
5702             {
5703               /* Build new TYPE_METHODS.  */
5704               tree r;
5705
5706               if (TREE_CODE (t) == TEMPLATE_DECL)
5707                 ++processing_template_decl;
5708               r = tsubst (t, args, tf_error, NULL_TREE);
5709               if (TREE_CODE (t) == TEMPLATE_DECL)
5710                 --processing_template_decl;
5711               set_current_access_from_decl (r);
5712               finish_member_declaration (r);
5713             }
5714           else
5715             {
5716               /* Build new TYPE_FIELDS.  */
5717
5718               if (TREE_CODE (t) != CONST_DECL)
5719                 {
5720                   tree r;
5721
5722                   /* The the file and line for this declaration, to
5723                      assist in error message reporting.  Since we
5724                      called push_tinst_level above, we don't need to
5725                      restore these.  */
5726                   input_location = DECL_SOURCE_LOCATION (t);
5727
5728                   if (TREE_CODE (t) == TEMPLATE_DECL)
5729                     ++processing_template_decl;
5730                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
5731                   if (TREE_CODE (t) == TEMPLATE_DECL)
5732                     --processing_template_decl;
5733                   if (TREE_CODE (r) == VAR_DECL)
5734                     {
5735                       /* In [temp.inst]:
5736
5737                            [t]he initialization (and any associated
5738                            side-effects) of a static data member does
5739                            not occur unless the static data member is
5740                            itself used in a way that requires the
5741                            definition of the static data member to
5742                            exist.  
5743
5744                          Therefore, we do not substitute into the
5745                          initialized for the static data member here.  */
5746                       finish_static_data_member_decl 
5747                         (r, 
5748                          /*init=*/NULL_TREE, 
5749                          /*init_const_expr_p=*/false,
5750                          /*asmspec_tree=*/NULL_TREE, 
5751                          /*flags=*/0);
5752                       if (DECL_INITIALIZED_IN_CLASS_P (r))
5753                         check_static_variable_definition (r, TREE_TYPE (r));
5754                     }
5755                   else if (TREE_CODE (r) == FIELD_DECL)
5756                     {
5757                       /* Determine whether R has a valid type and can be
5758                          completed later.  If R is invalid, then it is
5759                          replaced by error_mark_node so that it will not be
5760                          added to TYPE_FIELDS.  */
5761                       tree rtype = TREE_TYPE (r);
5762                       if (can_complete_type_without_circularity (rtype))
5763                         complete_type (rtype);
5764
5765                       if (!COMPLETE_TYPE_P (rtype))
5766                         {
5767                           cxx_incomplete_type_error (r, rtype);
5768                           r = error_mark_node;
5769                         }
5770                     }
5771
5772                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
5773                      such a thing will already have been added to the field
5774                      list by tsubst_enum in finish_member_declaration in the
5775                      CLASSTYPE_NESTED_UTDS case above.  */
5776                   if (!(TREE_CODE (r) == TYPE_DECL
5777                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
5778                         && DECL_ARTIFICIAL (r)))
5779                     {
5780                       set_current_access_from_decl (r);
5781                       finish_member_declaration (r);
5782                     }
5783                 }
5784             }
5785         }
5786       else
5787         {
5788           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
5789             {
5790               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
5791
5792               tree friend_type = t;
5793               bool adjust_processing_template_decl = false;
5794
5795               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5796                 {
5797                   /* template <class T> friend class C;  */
5798                   friend_type = tsubst_friend_class (friend_type, args);
5799                   adjust_processing_template_decl = true;
5800                 }
5801               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
5802                 {
5803                   /* template <class T> friend class C::D;  */
5804                   friend_type = tsubst (friend_type, args,
5805                                         tf_warning_or_error, NULL_TREE);
5806                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5807                     friend_type = TREE_TYPE (friend_type);
5808                   adjust_processing_template_decl = true;
5809                 }
5810               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
5811                 {
5812                   /* This could be either
5813
5814                        friend class T::C;
5815
5816                      when dependent_type_p is false or
5817
5818                        template <class U> friend class T::C;
5819
5820                      otherwise.  */
5821                   friend_type = tsubst (friend_type, args,
5822                                         tf_warning_or_error, NULL_TREE);
5823                   /* Bump processing_template_decl for correct
5824                      dependent_type_p calculation.  */
5825                   ++processing_template_decl;
5826                   if (dependent_type_p (friend_type))
5827                     adjust_processing_template_decl = true;
5828                   --processing_template_decl;
5829                 }
5830               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
5831                        && hidden_name_p (TYPE_NAME (friend_type)))
5832                 {
5833                   /* friend class C;
5834
5835                      where C hasn't been declared yet.  Let's lookup name
5836                      from namespace scope directly, bypassing any name that
5837                      come from dependent base class.  */
5838                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
5839
5840                   /* The call to xref_tag_from_type does injection for friend
5841                      classes.  */
5842                   push_nested_namespace (ns);
5843                   friend_type =
5844                     xref_tag_from_type (friend_type, NULL_TREE,
5845                                         /*tag_scope=*/ts_current);
5846                   pop_nested_namespace (ns);
5847                 }
5848               else if (uses_template_parms (friend_type))
5849                 /* friend class C<T>;  */
5850                 friend_type = tsubst (friend_type, args,
5851                                       tf_warning_or_error, NULL_TREE);
5852               /* Otherwise it's
5853
5854                    friend class C;
5855
5856                  where C is already declared or
5857
5858                    friend class C<int>;
5859
5860                  We don't have to do anything in these cases.  */
5861
5862               if (adjust_processing_template_decl)
5863                 /* Trick make_friend_class into realizing that the friend
5864                    we're adding is a template, not an ordinary class.  It's
5865                    important that we use make_friend_class since it will
5866                    perform some error-checking and output cross-reference
5867                    information.  */
5868                 ++processing_template_decl;
5869
5870               if (friend_type != error_mark_node)
5871                 make_friend_class (type, friend_type, /*complain=*/false);
5872
5873               if (adjust_processing_template_decl)
5874                 --processing_template_decl;
5875             }
5876           else
5877             {
5878               /* Build new DECL_FRIENDLIST.  */
5879               tree r;
5880
5881               /* The the file and line for this declaration, to
5882                  assist in error message reporting.  Since we
5883                  called push_tinst_level above, we don't need to
5884                  restore these.  */
5885               input_location = DECL_SOURCE_LOCATION (t);
5886
5887               if (TREE_CODE (t) == TEMPLATE_DECL)
5888                 {
5889                   ++processing_template_decl;
5890                   push_deferring_access_checks (dk_no_check);
5891                 }
5892
5893               r = tsubst_friend_function (t, args);
5894               add_friend (type, r, /*complain=*/false);
5895               if (TREE_CODE (t) == TEMPLATE_DECL)
5896                 {
5897                   pop_deferring_access_checks ();
5898                   --processing_template_decl;
5899                 }
5900             }
5901         }
5902     }
5903
5904   /* Set the file and line number information to whatever is given for
5905      the class itself.  This puts error messages involving generated
5906      implicit functions at a predictable point, and the same point
5907      that would be used for non-template classes.  */
5908   input_location = DECL_SOURCE_LOCATION (typedecl);
5909
5910   unreverse_member_declarations (type);
5911   finish_struct_1 (type);
5912   TYPE_BEING_DEFINED (type) = 0;
5913
5914   /* Now that the class is complete, instantiate default arguments for
5915      any member functions.  We don't do this earlier because the
5916      default arguments may reference members of the class.  */
5917   if (!PRIMARY_TEMPLATE_P (template))
5918     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
5919       if (TREE_CODE (t) == FUNCTION_DECL
5920           /* Implicitly generated member functions will not have template
5921              information; they are not instantiations, but instead are
5922              created "fresh" for each instantiation.  */
5923           && DECL_TEMPLATE_INFO (t))
5924         tsubst_default_arguments (t);
5925
5926   popclass ();
5927   pop_from_top_level ();
5928   pop_deferring_access_checks ();
5929   pop_tinst_level ();
5930
5931   /* The vtable for a template class can be emitted in any translation
5932      unit in which the class is instantiated.  When there is no key
5933      method, however, finish_struct_1 will already have added TYPE to
5934      the keyed_classes list.  */
5935   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
5936     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
5937
5938   return type;
5939 }
5940
5941 static tree
5942 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5943 {
5944   tree r;
5945
5946   if (!t)
5947     r = t;
5948   else if (TYPE_P (t))
5949     r = tsubst (t, args, complain, in_decl);
5950   else
5951     {
5952       r = tsubst_expr (t, args, complain, in_decl);
5953       r = fold_non_dependent_expr (r);
5954     }
5955   return r;
5956 }
5957
5958 /* Substitute ARGS into the vector or list of template arguments T.  */
5959
5960 static tree
5961 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5962 {
5963   int len = TREE_VEC_LENGTH (t);
5964   int need_new = 0, i;
5965   tree *elts = (tree *) alloca (len * sizeof (tree));
5966
5967   for (i = 0; i < len; i++)
5968     {
5969       tree orig_arg = TREE_VEC_ELT (t, i);
5970       tree new_arg;
5971
5972       if (TREE_CODE (orig_arg) == TREE_VEC)
5973         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
5974       else
5975         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
5976
5977       if (new_arg == error_mark_node)
5978         return error_mark_node;
5979
5980       elts[i] = new_arg;
5981       if (new_arg != orig_arg)
5982         need_new = 1;
5983     }
5984
5985   if (!need_new)
5986     return t;
5987
5988   t = make_tree_vec (len);
5989   for (i = 0; i < len; i++)
5990     TREE_VEC_ELT (t, i) = elts[i];
5991
5992   return t;
5993 }
5994
5995 /* Return the result of substituting ARGS into the template parameters
5996    given by PARMS.  If there are m levels of ARGS and m + n levels of
5997    PARMS, then the result will contain n levels of PARMS.  For
5998    example, if PARMS is `template <class T> template <class U>
5999    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
6000    result will be `template <int*, double, class V>'.  */
6001
6002 static tree
6003 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
6004 {
6005   tree r = NULL_TREE;
6006   tree* new_parms;
6007
6008   /* When substituting into a template, we must set
6009      PROCESSING_TEMPLATE_DECL as the template parameters may be
6010      dependent if they are based on one-another, and the dependency
6011      predicates are short-circuit outside of templates.  */
6012   ++processing_template_decl;
6013
6014   for (new_parms = &r;
6015        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
6016        new_parms = &(TREE_CHAIN (*new_parms)),
6017          parms = TREE_CHAIN (parms))
6018     {
6019       tree new_vec =
6020         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
6021       int i;
6022
6023       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
6024         {
6025           tree tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
6026           tree default_value = TREE_PURPOSE (tuple);
6027           tree parm_decl = TREE_VALUE (tuple);
6028
6029           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
6030           if (TREE_CODE (parm_decl) == PARM_DECL
6031               && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
6032             parm_decl = error_mark_node;
6033           default_value = tsubst_template_arg (default_value, args,
6034                                                complain, NULL_TREE);
6035
6036           tuple = build_tree_list (default_value, parm_decl);
6037           TREE_VEC_ELT (new_vec, i) = tuple;
6038         }
6039
6040       *new_parms =
6041         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
6042                              - TMPL_ARGS_DEPTH (args)),
6043                    new_vec, NULL_TREE);
6044     }
6045
6046   --processing_template_decl;
6047
6048   return r;
6049 }
6050
6051 /* Substitute the ARGS into the indicated aggregate (or enumeration)
6052    type T.  If T is not an aggregate or enumeration type, it is
6053    handled as if by tsubst.  IN_DECL is as for tsubst.  If
6054    ENTERING_SCOPE is nonzero, T is the context for a template which
6055    we are presently tsubst'ing.  Return the substituted value.  */
6056
6057 static tree
6058 tsubst_aggr_type (tree t,
6059                   tree args,
6060                   tsubst_flags_t complain,
6061                   tree in_decl,
6062                   int entering_scope)
6063 {
6064   if (t == NULL_TREE)
6065     return NULL_TREE;
6066
6067   switch (TREE_CODE (t))
6068     {
6069     case RECORD_TYPE:
6070       if (TYPE_PTRMEMFUNC_P (t))
6071         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
6072
6073       /* Else fall through.  */
6074     case ENUMERAL_TYPE:
6075     case UNION_TYPE:
6076       if (TYPE_TEMPLATE_INFO (t))
6077         {
6078           tree argvec;
6079           tree context;
6080           tree r;
6081           bool saved_skip_evaluation;
6082
6083           /* In "sizeof(X<I>)" we need to evaluate "I".  */
6084           saved_skip_evaluation = skip_evaluation;
6085           skip_evaluation = false;
6086
6087           /* First, determine the context for the type we are looking
6088              up.  */
6089           context = TYPE_CONTEXT (t);
6090           if (context)
6091             context = tsubst_aggr_type (context, args, complain,
6092                                         in_decl, /*entering_scope=*/1);
6093
6094           /* Then, figure out what arguments are appropriate for the
6095              type we are trying to find.  For example, given:
6096
6097                template <class T> struct S;
6098                template <class T, class U> void f(T, U) { S<U> su; }
6099
6100              and supposing that we are instantiating f<int, double>,
6101              then our ARGS will be {int, double}, but, when looking up
6102              S we only want {double}.  */
6103           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
6104                                          complain, in_decl);
6105           if (argvec == error_mark_node)
6106             r = error_mark_node;
6107           else
6108             {
6109               r = lookup_template_class (t, argvec, in_decl, context,
6110                                          entering_scope, complain);
6111               r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
6112             }
6113           
6114           skip_evaluation = saved_skip_evaluation;
6115
6116           return r;
6117         }
6118       else
6119         /* This is not a template type, so there's nothing to do.  */
6120         return t;
6121
6122     default:
6123       return tsubst (t, args, complain, in_decl);
6124     }
6125 }
6126
6127 /* Substitute into the default argument ARG (a default argument for
6128    FN), which has the indicated TYPE.  */
6129
6130 tree
6131 tsubst_default_argument (tree fn, tree type, tree arg)
6132 {
6133   tree saved_class_ptr = NULL_TREE;
6134   tree saved_class_ref = NULL_TREE;
6135
6136   /* This default argument came from a template.  Instantiate the
6137      default argument here, not in tsubst.  In the case of
6138      something like:
6139
6140        template <class T>
6141        struct S {
6142          static T t();
6143          void f(T = t());
6144        };
6145
6146      we must be careful to do name lookup in the scope of S<T>,
6147      rather than in the current class.  */
6148   push_access_scope (fn);
6149   /* The "this" pointer is not valid in a default argument.  */
6150   if (cfun)
6151     {
6152       saved_class_ptr = current_class_ptr;
6153       cp_function_chain->x_current_class_ptr = NULL_TREE;
6154       saved_class_ref = current_class_ref;
6155       cp_function_chain->x_current_class_ref = NULL_TREE;
6156     }
6157
6158   push_deferring_access_checks(dk_no_deferred);
6159   /* The default argument expression may cause implicitly defined
6160      member functions to be synthesized, which will result in garbage
6161      collection.  We must treat this situation as if we were within
6162      the body of function so as to avoid collecting live data on the
6163      stack.  */
6164   ++function_depth;
6165   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
6166                      tf_warning_or_error, NULL_TREE);
6167   --function_depth;
6168   pop_deferring_access_checks();
6169
6170   /* Restore the "this" pointer.  */
6171   if (cfun)
6172     {
6173       cp_function_chain->x_current_class_ptr = saved_class_ptr;
6174       cp_function_chain->x_current_class_ref = saved_class_ref;
6175     }
6176
6177   pop_access_scope (fn);
6178
6179   /* Make sure the default argument is reasonable.  */
6180   arg = check_default_argument (type, arg);
6181
6182   return arg;
6183 }
6184
6185 /* Substitute into all the default arguments for FN.  */
6186
6187 static void
6188 tsubst_default_arguments (tree fn)
6189 {
6190   tree arg;
6191   tree tmpl_args;
6192
6193   tmpl_args = DECL_TI_ARGS (fn);
6194
6195   /* If this function is not yet instantiated, we certainly don't need
6196      its default arguments.  */
6197   if (uses_template_parms (tmpl_args))
6198     return;
6199
6200   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
6201        arg;
6202        arg = TREE_CHAIN (arg))
6203     if (TREE_PURPOSE (arg))
6204       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
6205                                                     TREE_VALUE (arg),
6206                                                     TREE_PURPOSE (arg));
6207 }
6208
6209 /* Substitute the ARGS into the T, which is a _DECL.  Return the
6210    result of the substitution.  Issue error and warning messages under
6211    control of COMPLAIN.  */
6212
6213 static tree
6214 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
6215 {
6216   location_t saved_loc;
6217   tree r = NULL_TREE;
6218   tree in_decl = t;
6219
6220   /* Set the filename and linenumber to improve error-reporting.  */
6221   saved_loc = input_location;
6222   input_location = DECL_SOURCE_LOCATION (t);
6223
6224   switch (TREE_CODE (t))
6225     {
6226     case TEMPLATE_DECL:
6227       {
6228         /* We can get here when processing a member function template,
6229            member class template, and template template parameter of
6230            a template class.  */
6231         tree decl = DECL_TEMPLATE_RESULT (t);
6232         tree spec;
6233         tree tmpl_args;
6234         tree full_args;
6235
6236         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
6237           {
6238             /* Template template parameter is treated here.  */
6239             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6240             if (new_type == error_mark_node)
6241               return error_mark_node;
6242
6243             r = copy_decl (t);
6244             TREE_CHAIN (r) = NULL_TREE;
6245             TREE_TYPE (r) = new_type;
6246             DECL_TEMPLATE_RESULT (r)
6247               = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
6248             DECL_TEMPLATE_PARMS (r)
6249               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
6250                                        complain);
6251             TYPE_NAME (new_type) = r;
6252             break;
6253           }
6254
6255         /* We might already have an instance of this template.
6256            The ARGS are for the surrounding class type, so the
6257            full args contain the tsubst'd args for the context,
6258            plus the innermost args from the template decl.  */
6259         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
6260           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
6261           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
6262         /* Because this is a template, the arguments will still be
6263            dependent, even after substitution.  If
6264            PROCESSING_TEMPLATE_DECL is not set, the dependency
6265            predicates will short-circuit.  */
6266         ++processing_template_decl;
6267         full_args = tsubst_template_args (tmpl_args, args,
6268                                           complain, in_decl);
6269         --processing_template_decl;
6270         if (full_args == error_mark_node)
6271           return error_mark_node;
6272
6273         /* tsubst_template_args doesn't copy the vector if
6274            nothing changed.  But, *something* should have
6275            changed.  */
6276         gcc_assert (full_args != tmpl_args);
6277
6278         spec = retrieve_specialization (t, full_args,
6279                                         /*class_specializations_p=*/true);
6280         if (spec != NULL_TREE)
6281           {
6282             r = spec;
6283             break;
6284           }
6285
6286         /* Make a new template decl.  It will be similar to the
6287            original, but will record the current template arguments.
6288            We also create a new function declaration, which is just
6289            like the old one, but points to this new template, rather
6290            than the old one.  */
6291         r = copy_decl (t);
6292         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
6293         TREE_CHAIN (r) = NULL_TREE;
6294
6295         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
6296
6297         if (TREE_CODE (decl) == TYPE_DECL)
6298           {
6299             tree new_type;
6300             ++processing_template_decl;
6301             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6302             --processing_template_decl; 
6303             if (new_type == error_mark_node)
6304               return error_mark_node;
6305
6306             TREE_TYPE (r) = new_type;
6307             CLASSTYPE_TI_TEMPLATE (new_type) = r;
6308             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
6309             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
6310             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
6311           }
6312         else
6313           {
6314             tree new_decl;
6315             ++processing_template_decl;
6316             new_decl = tsubst (decl, args, complain, in_decl);
6317             --processing_template_decl;
6318             if (new_decl == error_mark_node)
6319               return error_mark_node;
6320
6321             DECL_TEMPLATE_RESULT (r) = new_decl;
6322             DECL_TI_TEMPLATE (new_decl) = r;
6323             TREE_TYPE (r) = TREE_TYPE (new_decl);
6324             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
6325             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl); 
6326           }
6327
6328         SET_DECL_IMPLICIT_INSTANTIATION (r);
6329         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
6330         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
6331
6332         /* The template parameters for this new template are all the
6333            template parameters for the old template, except the
6334            outermost level of parameters.  */
6335         DECL_TEMPLATE_PARMS (r)
6336           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
6337                                    complain);
6338
6339         if (PRIMARY_TEMPLATE_P (t))
6340           DECL_PRIMARY_TEMPLATE (r) = r;
6341
6342         if (TREE_CODE (decl) != TYPE_DECL)
6343           /* Record this non-type partial instantiation.  */
6344           register_specialization (r, t,
6345                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
6346                                    false);
6347       }
6348       break;
6349
6350     case FUNCTION_DECL:
6351       {
6352         tree ctx;
6353         tree argvec = NULL_TREE;
6354         tree *friends;
6355         tree gen_tmpl;
6356         tree type;
6357         int member;
6358         int args_depth;
6359         int parms_depth;
6360
6361         /* Nobody should be tsubst'ing into non-template functions.  */
6362         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
6363
6364         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
6365           {
6366             tree spec;
6367             bool dependent_p;
6368
6369             /* If T is not dependent, just return it.  We have to
6370                increment PROCESSING_TEMPLATE_DECL because
6371                value_dependent_expression_p assumes that nothing is
6372                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
6373             ++processing_template_decl;
6374             dependent_p = value_dependent_expression_p (t);
6375             --processing_template_decl;
6376             if (!dependent_p)
6377               return t;
6378
6379             /* Calculate the most general template of which R is a
6380                specialization, and the complete set of arguments used to
6381                specialize R.  */
6382             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
6383             argvec = tsubst_template_args (DECL_TI_ARGS
6384                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
6385                                            args, complain, in_decl);
6386
6387             /* Check to see if we already have this specialization.  */
6388             spec = retrieve_specialization (gen_tmpl, argvec,
6389                                             /*class_specializations_p=*/false);
6390
6391             if (spec)
6392               {
6393                 r = spec;
6394                 break;
6395               }
6396
6397             /* We can see more levels of arguments than parameters if
6398                there was a specialization of a member template, like
6399                this:
6400
6401                  template <class T> struct S { template <class U> void f(); }
6402                  template <> template <class U> void S<int>::f(U);
6403
6404                Here, we'll be substituting into the specialization,
6405                because that's where we can find the code we actually
6406                want to generate, but we'll have enough arguments for
6407                the most general template.
6408
6409                We also deal with the peculiar case:
6410
6411                  template <class T> struct S {
6412                    template <class U> friend void f();
6413                  };
6414                  template <class U> void f() {}
6415                  template S<int>;
6416                  template void f<double>();
6417
6418                Here, the ARGS for the instantiation of will be {int,
6419                double}.  But, we only need as many ARGS as there are
6420                levels of template parameters in CODE_PATTERN.  We are
6421                careful not to get fooled into reducing the ARGS in
6422                situations like:
6423
6424                  template <class T> struct S { template <class U> void f(U); }
6425                  template <class T> template <> void S<T>::f(int) {}
6426
6427                which we can spot because the pattern will be a
6428                specialization in this case.  */
6429             args_depth = TMPL_ARGS_DEPTH (args);
6430             parms_depth =
6431               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
6432             if (args_depth > parms_depth
6433                 && !DECL_TEMPLATE_SPECIALIZATION (t))
6434               args = get_innermost_template_args (args, parms_depth);
6435           }
6436         else
6437           {
6438             /* This special case arises when we have something like this:
6439
6440                  template <class T> struct S {
6441                    friend void f<int>(int, double);
6442                  };
6443
6444                Here, the DECL_TI_TEMPLATE for the friend declaration
6445                will be an IDENTIFIER_NODE.  We are being called from
6446                tsubst_friend_function, and we want only to create a
6447                new decl (R) with appropriate types so that we can call
6448                determine_specialization.  */
6449             gen_tmpl = NULL_TREE;
6450           }
6451
6452         if (DECL_CLASS_SCOPE_P (t))
6453           {
6454             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
6455               member = 2;
6456             else
6457               member = 1;
6458             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
6459                                     complain, t, /*entering_scope=*/1);
6460           }
6461         else
6462           {
6463             member = 0;
6464             ctx = DECL_CONTEXT (t);
6465           }
6466         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6467         if (type == error_mark_node)
6468           return error_mark_node;
6469
6470         /* We do NOT check for matching decls pushed separately at this
6471            point, as they may not represent instantiations of this
6472            template, and in any case are considered separate under the
6473            discrete model.  */
6474         r = copy_decl (t);
6475         DECL_USE_TEMPLATE (r) = 0;
6476         TREE_TYPE (r) = type;
6477         /* Clear out the mangled name and RTL for the instantiation.  */
6478         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6479         SET_DECL_RTL (r, NULL_RTX);
6480         DECL_INITIAL (r) = NULL_TREE;
6481         DECL_CONTEXT (r) = ctx;
6482
6483         if (member && DECL_CONV_FN_P (r))
6484           /* Type-conversion operator.  Reconstruct the name, in
6485              case it's the name of one of the template's parameters.  */
6486           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
6487
6488         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
6489                                      complain, t);
6490         DECL_RESULT (r) = NULL_TREE;
6491
6492         TREE_STATIC (r) = 0;
6493         TREE_PUBLIC (r) = TREE_PUBLIC (t);
6494         DECL_EXTERNAL (r) = 1;
6495         /* If this is an instantiation of a function with internal
6496            linkage, we already know what object file linkage will be
6497            assigned to the instantiation.  */
6498         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
6499         DECL_DEFER_OUTPUT (r) = 0;
6500         TREE_CHAIN (r) = NULL_TREE;
6501         DECL_PENDING_INLINE_INFO (r) = 0;
6502         DECL_PENDING_INLINE_P (r) = 0;
6503         DECL_SAVED_TREE (r) = NULL_TREE;
6504         TREE_USED (r) = 0;
6505         if (DECL_CLONED_FUNCTION (r))
6506           {
6507             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
6508                                                args, complain, t);
6509             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
6510             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
6511           }
6512
6513         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
6514            this in the special friend case mentioned above where
6515            GEN_TMPL is NULL.  */
6516         if (gen_tmpl)
6517           {
6518             DECL_TEMPLATE_INFO (r)
6519               = tree_cons (gen_tmpl, argvec, NULL_TREE);
6520             SET_DECL_IMPLICIT_INSTANTIATION (r);
6521             register_specialization (r, gen_tmpl, argvec, false);
6522
6523             /* We're not supposed to instantiate default arguments
6524                until they are called, for a template.  But, for a
6525                declaration like:
6526
6527                  template <class T> void f ()
6528                  { extern void g(int i = T()); }
6529
6530                we should do the substitution when the template is
6531                instantiated.  We handle the member function case in
6532                instantiate_class_template since the default arguments
6533                might refer to other members of the class.  */
6534             if (!member
6535                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
6536                 && !uses_template_parms (argvec))
6537               tsubst_default_arguments (r);
6538           }
6539         else
6540           DECL_TEMPLATE_INFO (r) = NULL_TREE;
6541
6542         /* Copy the list of befriending classes.  */
6543         for (friends = &DECL_BEFRIENDING_CLASSES (r);
6544              *friends;
6545              friends = &TREE_CHAIN (*friends))
6546           {
6547             *friends = copy_node (*friends);
6548             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
6549                                             args, complain,
6550                                             in_decl);
6551           }
6552
6553         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
6554           {
6555             maybe_retrofit_in_chrg (r);
6556             if (DECL_CONSTRUCTOR_P (r))
6557               grok_ctor_properties (ctx, r);
6558             /* If this is an instantiation of a member template, clone it.
6559                If it isn't, that'll be handled by
6560                clone_constructors_and_destructors.  */
6561             if (PRIMARY_TEMPLATE_P (gen_tmpl))
6562               clone_function_decl (r, /*update_method_vec_p=*/0);
6563           }
6564         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r)))
6565           grok_op_properties (r, (complain & tf_error) != 0);
6566
6567         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
6568           SET_DECL_FRIEND_CONTEXT (r,
6569                                    tsubst (DECL_FRIEND_CONTEXT (t),
6570                                             args, complain, in_decl));
6571       }
6572       break;
6573
6574     case PARM_DECL:
6575       {
6576         tree type;
6577
6578         r = copy_node (t);
6579         if (DECL_TEMPLATE_PARM_P (t))
6580           SET_DECL_TEMPLATE_PARM_P (r);
6581
6582         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6583         type = type_decays_to (type);
6584         TREE_TYPE (r) = type;
6585         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
6586
6587         if (DECL_INITIAL (r))
6588           {
6589             if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
6590               DECL_INITIAL (r) = TREE_TYPE (r);
6591             else
6592               DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
6593                                          complain, in_decl);
6594           }
6595
6596         DECL_CONTEXT (r) = NULL_TREE;
6597
6598         if (!DECL_TEMPLATE_PARM_P (r))
6599           DECL_ARG_TYPE (r) = type_passed_as (type);
6600         if (TREE_CHAIN (t))
6601           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
6602                                    complain, TREE_CHAIN (t));
6603       }
6604       break;
6605
6606     case FIELD_DECL:
6607       {
6608         tree type;
6609
6610         r = copy_decl (t);
6611         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6612         if (type == error_mark_node)
6613           return error_mark_node;
6614         TREE_TYPE (r) = type;
6615         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
6616
6617         /* We don't have to set DECL_CONTEXT here; it is set by
6618            finish_member_declaration.  */
6619         DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args,
6620                                         complain, in_decl);
6621         TREE_CHAIN (r) = NULL_TREE;
6622         if (VOID_TYPE_P (type))
6623           error ("instantiation of %q+D as type %qT", r, type);
6624       }
6625       break;
6626
6627     case USING_DECL:
6628       /* We reach here only for member using decls.  */
6629       if (DECL_DEPENDENT_P (t))
6630         {
6631           r = do_class_using_decl
6632             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
6633              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
6634           if (!r)
6635             r = error_mark_node;
6636         }
6637       else
6638         {
6639           r = copy_node (t);
6640           TREE_CHAIN (r) = NULL_TREE;
6641         }
6642       break;
6643
6644     case TYPE_DECL:
6645     case VAR_DECL:
6646       {
6647         tree argvec = NULL_TREE;
6648         tree gen_tmpl = NULL_TREE;
6649         tree spec;
6650         tree tmpl = NULL_TREE;
6651         tree ctx;
6652         tree type = NULL_TREE;
6653         int local_p;
6654
6655         if (TREE_CODE (t) == TYPE_DECL)
6656           {
6657             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6658             if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
6659                 || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
6660               {
6661                 /* If this is the canonical decl, we don't have to
6662                    mess with instantiations, and often we can't (for
6663                    typename, template type parms and such).  Note that
6664                    TYPE_NAME is not correct for the above test if
6665                    we've copied the type for a typedef.  */
6666                 r = TYPE_NAME (type);
6667                 break;
6668               }
6669           }
6670
6671         /* Assume this is a non-local variable.  */
6672         local_p = 0;
6673
6674         if (TYPE_P (CP_DECL_CONTEXT (t)))
6675           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
6676                                   complain,
6677                                   in_decl, /*entering_scope=*/1);
6678         else if (DECL_NAMESPACE_SCOPE_P (t))
6679           ctx = DECL_CONTEXT (t);
6680         else
6681           {
6682             /* Subsequent calls to pushdecl will fill this in.  */
6683             ctx = NULL_TREE;
6684             local_p = 1;
6685           }
6686
6687         /* Check to see if we already have this specialization.  */
6688         if (!local_p)
6689           {
6690             tmpl = DECL_TI_TEMPLATE (t);
6691             gen_tmpl = most_general_template (tmpl);
6692             argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
6693             spec = retrieve_specialization (gen_tmpl, argvec,
6694                                             /*class_specializations_p=*/false);
6695           }
6696         else
6697           spec = retrieve_local_specialization (t);
6698
6699         if (spec)
6700           {
6701             r = spec;
6702             break;
6703           }
6704
6705         r = copy_decl (t);
6706         if (TREE_CODE (r) == VAR_DECL)
6707           {
6708             /* Even if the original location is out of scope, the
6709                newly substituted one is not.  */
6710             DECL_DEAD_FOR_LOCAL (r) = 0;
6711             DECL_INITIALIZED_P (r) = 0;
6712             DECL_TEMPLATE_INSTANTIATED (r) = 0;
6713             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6714             if (type == error_mark_node)
6715               return error_mark_node;
6716             type = complete_type (type);
6717             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
6718               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
6719             type = check_var_type (DECL_NAME (r), type);
6720
6721             if (DECL_HAS_VALUE_EXPR_P (t))
6722               {
6723                 tree ve = DECL_VALUE_EXPR (t);
6724                 ve = tsubst_expr (ve, args, complain, in_decl);
6725                 SET_DECL_VALUE_EXPR (r, ve);
6726               }
6727           }
6728         else if (DECL_SELF_REFERENCE_P (t))
6729           SET_DECL_SELF_REFERENCE_P (r);
6730         TREE_TYPE (r) = type;
6731         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
6732         DECL_CONTEXT (r) = ctx;
6733         /* Clear out the mangled name and RTL for the instantiation.  */
6734         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6735         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
6736           SET_DECL_RTL (r, NULL_RTX);
6737         /* The initializer must not be expanded until it is required;
6738            see [temp.inst].  */
6739         DECL_INITIAL (r) = NULL_TREE;
6740         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
6741           SET_DECL_RTL (r, NULL_RTX);
6742         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
6743
6744         if (!local_p)
6745           {
6746             /* A static data member declaration is always marked
6747                external when it is declared in-class, even if an
6748                initializer is present.  We mimic the non-template
6749                processing here.  */
6750             DECL_EXTERNAL (r) = 1;
6751
6752             register_specialization (r, gen_tmpl, argvec, false);
6753             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
6754             SET_DECL_IMPLICIT_INSTANTIATION (r);
6755           }
6756         else
6757           register_local_specialization (r, t);
6758
6759         TREE_CHAIN (r) = NULL_TREE;
6760         layout_decl (r, 0);
6761       }
6762       break;
6763
6764     default:
6765       gcc_unreachable ();
6766     }
6767
6768   /* Restore the file and line information.  */
6769   input_location = saved_loc;
6770
6771   return r;
6772 }
6773
6774 /* Substitute into the ARG_TYPES of a function type.  */
6775
6776 static tree
6777 tsubst_arg_types (tree arg_types,
6778                   tree args,
6779                   tsubst_flags_t complain,
6780                   tree in_decl)
6781 {
6782   tree remaining_arg_types;
6783   tree type;
6784   tree default_arg;
6785   tree result = NULL_TREE;
6786
6787   if (!arg_types || arg_types == void_list_node)
6788     return arg_types;
6789
6790   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
6791                                           args, complain, in_decl);
6792   if (remaining_arg_types == error_mark_node)
6793     return error_mark_node;
6794
6795   type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
6796   if (type == error_mark_node)
6797     return error_mark_node;
6798   if (VOID_TYPE_P (type))
6799     {
6800       if (complain & tf_error)
6801         {
6802           error ("invalid parameter type %qT", type);
6803           if (in_decl)
6804             error ("in declaration %q+D", in_decl);
6805         }
6806       return error_mark_node;
6807     }
6808
6809   /* Do array-to-pointer, function-to-pointer conversion, and ignore
6810      top-level qualifiers as required.  */
6811   type = TYPE_MAIN_VARIANT (type_decays_to (type));
6812
6813   /* We do not substitute into default arguments here.  The standard
6814      mandates that they be instantiated only when needed, which is
6815      done in build_over_call.  */
6816   default_arg = TREE_PURPOSE (arg_types);
6817
6818   if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
6819     {
6820       /* We've instantiated a template before its default arguments
6821          have been parsed.  This can happen for a nested template
6822          class, and is not an error unless we require the default
6823          argument in a call of this function.  */
6824       result = tree_cons (default_arg, type, remaining_arg_types);
6825       VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), result);
6826     }
6827   else
6828     result = hash_tree_cons (default_arg, type, remaining_arg_types);
6829
6830   return result;
6831 }
6832
6833 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
6834    *not* handle the exception-specification for FNTYPE, because the
6835    initial substitution of explicitly provided template parameters
6836    during argument deduction forbids substitution into the
6837    exception-specification:
6838
6839      [temp.deduct]
6840
6841      All references in the function type of the function template to  the
6842      corresponding template parameters are replaced by the specified tem-
6843      plate argument values.  If a substitution in a template parameter or
6844      in  the function type of the function template results in an invalid
6845      type, type deduction fails.  [Note: The equivalent  substitution  in
6846      exception specifications is done only when the function is instanti-
6847      ated, at which point a program is  ill-formed  if  the  substitution
6848      results in an invalid type.]  */
6849
6850 static tree
6851 tsubst_function_type (tree t,
6852                       tree args,
6853                       tsubst_flags_t complain,
6854                       tree in_decl)
6855 {
6856   tree return_type;
6857   tree arg_types;
6858   tree fntype;
6859
6860   /* The TYPE_CONTEXT is not used for function/method types.  */
6861   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
6862
6863   /* Substitute the return type.  */
6864   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6865   if (return_type == error_mark_node)
6866     return error_mark_node;
6867   /* The standard does not presently indicate that creation of a
6868      function type with an invalid return type is a deduction failure.
6869      However, that is clearly analogous to creating an array of "void"
6870      or a reference to a reference.  This is core issue #486.  */
6871   if (TREE_CODE (return_type) == ARRAY_TYPE
6872       || TREE_CODE (return_type) == FUNCTION_TYPE)
6873     {
6874       if (complain & tf_error)
6875         {
6876           if (TREE_CODE (return_type) == ARRAY_TYPE)
6877             error ("function returning an array");
6878           else
6879             error ("function returning a function");
6880         }
6881       return error_mark_node;
6882     }
6883
6884   /* Substitute the argument types.  */
6885   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
6886                                 complain, in_decl);
6887   if (arg_types == error_mark_node)
6888     return error_mark_node;
6889
6890   /* Construct a new type node and return it.  */
6891   if (TREE_CODE (t) == FUNCTION_TYPE)
6892     fntype = build_function_type (return_type, arg_types);
6893   else
6894     {
6895       tree r = TREE_TYPE (TREE_VALUE (arg_types));
6896       if (! IS_AGGR_TYPE (r))
6897         {
6898           /* [temp.deduct]
6899
6900              Type deduction may fail for any of the following
6901              reasons:
6902
6903              -- Attempting to create "pointer to member of T" when T
6904              is not a class type.  */
6905           if (complain & tf_error)
6906             error ("creating pointer to member function of non-class type %qT",
6907                       r);
6908           return error_mark_node;
6909         }
6910
6911       fntype = build_method_type_directly (r, return_type,
6912                                            TREE_CHAIN (arg_types));
6913     }
6914   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
6915   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
6916
6917   return fntype;
6918 }
6919
6920 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
6921    ARGS into that specification, and return the substituted
6922    specification.  If there is no specification, return NULL_TREE.  */
6923
6924 static tree
6925 tsubst_exception_specification (tree fntype,
6926                                 tree args,
6927                                 tsubst_flags_t complain,
6928                                 tree in_decl)
6929 {
6930   tree specs;
6931   tree new_specs;
6932
6933   specs = TYPE_RAISES_EXCEPTIONS (fntype);
6934   new_specs = NULL_TREE;
6935   if (specs)
6936     {
6937       if (! TREE_VALUE (specs))
6938         new_specs = specs;
6939       else
6940         while (specs)
6941           {
6942             tree spec;
6943             spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
6944             if (spec == error_mark_node)
6945               return spec;
6946             new_specs = add_exception_specifier (new_specs, spec, complain);
6947             specs = TREE_CHAIN (specs);
6948           }
6949     }
6950   return new_specs;
6951 }
6952
6953 /* Take the tree structure T and replace template parameters used
6954    therein with the argument vector ARGS.  IN_DECL is an associated
6955    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
6956    Issue error and warning messages under control of COMPLAIN.  Note
6957    that we must be relatively non-tolerant of extensions here, in
6958    order to preserve conformance; if we allow substitutions that
6959    should not be allowed, we may allow argument deductions that should
6960    not succeed, and therefore report ambiguous overload situations
6961    where there are none.  In theory, we could allow the substitution,
6962    but indicate that it should have failed, and allow our caller to
6963    make sure that the right thing happens, but we don't try to do this
6964    yet.
6965
6966    This function is used for dealing with types, decls and the like;
6967    for expressions, use tsubst_expr or tsubst_copy.  */
6968
6969 static tree
6970 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
6971 {
6972   tree type, r;
6973
6974   if (t == NULL_TREE || t == error_mark_node
6975       || t == integer_type_node
6976       || t == void_type_node
6977       || t == char_type_node
6978       || t == unknown_type_node
6979       || TREE_CODE (t) == NAMESPACE_DECL)
6980     return t;
6981
6982   if (DECL_P (t))
6983     return tsubst_decl (t, args, complain);
6984
6985   if (TREE_CODE (t) == IDENTIFIER_NODE)
6986     type = IDENTIFIER_TYPE_VALUE (t);
6987   else
6988     type = TREE_TYPE (t);
6989
6990   gcc_assert (type != unknown_type_node);
6991
6992   if (type
6993       && TREE_CODE (t) != TYPENAME_TYPE
6994       && TREE_CODE (t) != IDENTIFIER_NODE
6995       && TREE_CODE (t) != FUNCTION_TYPE
6996       && TREE_CODE (t) != METHOD_TYPE)
6997     type = tsubst (type, args, complain, in_decl);
6998   if (type == error_mark_node)
6999     return error_mark_node;
7000
7001   switch (TREE_CODE (t))
7002     {
7003     case RECORD_TYPE:
7004     case UNION_TYPE:
7005     case ENUMERAL_TYPE:
7006       return tsubst_aggr_type (t, args, complain, in_decl,
7007                                /*entering_scope=*/0);
7008
7009     case ERROR_MARK:
7010     case IDENTIFIER_NODE:
7011     case VOID_TYPE:
7012     case REAL_TYPE:
7013     case COMPLEX_TYPE:
7014     case VECTOR_TYPE:
7015     case BOOLEAN_TYPE:
7016     case INTEGER_CST:
7017     case REAL_CST:
7018     case STRING_CST:
7019       return t;
7020
7021     case INTEGER_TYPE:
7022       if (t == integer_type_node)
7023         return t;
7024
7025       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
7026           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
7027         return t;
7028
7029       {
7030         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
7031
7032         /* The array dimension behaves like a non-type template arg,
7033            in that we want to fold it as much as possible.  */
7034         max = tsubst_template_arg (omax, args, complain, in_decl);
7035         max = fold_decl_constant_value (max);
7036
7037         /* [temp.deduct]
7038
7039            Type deduction may fail for any of the following
7040            reasons:
7041
7042              Attempting to create an array with a size that is
7043              zero or negative.  */
7044         if (integer_zerop (max) && !(complain & tf_error))
7045           /* We must fail if performing argument deduction (as
7046              indicated by the state of complain), so that
7047              another substitution can be found.  */
7048           return error_mark_node;
7049
7050         else if (TREE_CODE (max) == INTEGER_CST
7051                  && INT_CST_LT (max, integer_zero_node))
7052           {
7053             if (complain & tf_error)
7054               error ("creating array with negative size (%qE)", max);
7055
7056             return error_mark_node;
7057           }
7058
7059         return compute_array_index_type (NULL_TREE, max);
7060       }
7061
7062     case TEMPLATE_TYPE_PARM:
7063     case TEMPLATE_TEMPLATE_PARM:
7064     case BOUND_TEMPLATE_TEMPLATE_PARM:
7065     case TEMPLATE_PARM_INDEX:
7066       {
7067         int idx;
7068         int level;
7069         int levels;
7070         tree arg = NULL_TREE;
7071
7072         r = NULL_TREE;
7073
7074         gcc_assert (TREE_VEC_LENGTH (args) > 0);
7075         if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
7076             || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
7077             || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7078           {
7079             idx = TEMPLATE_TYPE_IDX (t);
7080             level = TEMPLATE_TYPE_LEVEL (t);
7081           }
7082         else
7083           {
7084             idx = TEMPLATE_PARM_IDX (t);
7085             level = TEMPLATE_PARM_LEVEL (t);
7086           }
7087
7088         levels = TMPL_ARGS_DEPTH (args);
7089         if (level <= levels)
7090           arg = TMPL_ARG (args, level, idx);
7091
7092         if (arg == error_mark_node)
7093           return error_mark_node;
7094         else if (arg != NULL_TREE)
7095           {
7096             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
7097               {
7098                 gcc_assert (TYPE_P (arg));
7099                 return cp_build_qualified_type_real
7100                   (arg, cp_type_quals (arg) | cp_type_quals (t),
7101                    complain | tf_ignore_bad_quals);
7102               }
7103             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7104               {
7105                 /* We are processing a type constructed from a
7106                    template template parameter.  */
7107                 tree argvec = tsubst (TYPE_TI_ARGS (t),
7108                                       args, complain, in_decl);
7109                 if (argvec == error_mark_node)
7110                   return error_mark_node;
7111
7112                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
7113                    are resolving nested-types in the signature of a
7114                    member function templates.  Otherwise ARG is a
7115                    TEMPLATE_DECL and is the real template to be
7116                    instantiated.  */
7117                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
7118                   arg = TYPE_NAME (arg);
7119
7120                 r = lookup_template_class (arg,
7121                                            argvec, in_decl,
7122                                            DECL_CONTEXT (arg),
7123                                             /*entering_scope=*/0,
7124                                            complain);
7125                 return cp_build_qualified_type_real
7126                   (r, TYPE_QUALS (t), complain);
7127               }
7128             else
7129               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
7130               return arg;
7131           }
7132
7133         if (level == 1)
7134           /* This can happen during the attempted tsubst'ing in
7135              unify.  This means that we don't yet have any information
7136              about the template parameter in question.  */
7137           return t;
7138
7139         /* If we get here, we must have been looking at a parm for a
7140            more deeply nested template.  Make a new version of this
7141            template parameter, but with a lower level.  */
7142         switch (TREE_CODE (t))
7143           {
7144           case TEMPLATE_TYPE_PARM:
7145           case TEMPLATE_TEMPLATE_PARM:
7146           case BOUND_TEMPLATE_TEMPLATE_PARM:
7147             if (cp_type_quals (t))
7148               {
7149                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
7150                 r = cp_build_qualified_type_real
7151                   (r, cp_type_quals (t),
7152                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
7153                                ? tf_ignore_bad_quals : 0));
7154               }
7155             else
7156               {
7157                 r = copy_type (t);
7158                 TEMPLATE_TYPE_PARM_INDEX (r)
7159                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
7160                                                 r, levels);
7161                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
7162                 TYPE_MAIN_VARIANT (r) = r;
7163                 TYPE_POINTER_TO (r) = NULL_TREE;
7164                 TYPE_REFERENCE_TO (r) = NULL_TREE;
7165
7166                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7167                   {
7168                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
7169                                           complain, in_decl);
7170                     if (argvec == error_mark_node)
7171                       return error_mark_node;
7172
7173                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
7174                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
7175                   }
7176               }
7177             break;
7178
7179           case TEMPLATE_PARM_INDEX:
7180             r = reduce_template_parm_level (t, type, levels);
7181             break;
7182
7183           default:
7184             gcc_unreachable ();
7185           }
7186
7187         return r;
7188       }
7189
7190     case TREE_LIST:
7191       {
7192         tree purpose, value, chain;
7193
7194         if (t == void_list_node)
7195           return t;
7196
7197         purpose = TREE_PURPOSE (t);
7198         if (purpose)
7199           {
7200             purpose = tsubst (purpose, args, complain, in_decl);
7201             if (purpose == error_mark_node)
7202               return error_mark_node;
7203           }
7204         value = TREE_VALUE (t);
7205         if (value)
7206           {
7207             value = tsubst (value, args, complain, in_decl);
7208             if (value == error_mark_node)
7209               return error_mark_node;
7210           }
7211         chain = TREE_CHAIN (t);
7212         if (chain && chain != void_type_node)
7213           {
7214             chain = tsubst (chain, args, complain, in_decl);
7215             if (chain == error_mark_node)
7216               return error_mark_node;
7217           }
7218         if (purpose == TREE_PURPOSE (t)
7219             && value == TREE_VALUE (t)
7220             && chain == TREE_CHAIN (t))
7221           return t;
7222         return hash_tree_cons (purpose, value, chain);
7223       }
7224
7225     case TREE_BINFO:
7226       /* We should never be tsubsting a binfo.  */
7227       gcc_unreachable ();
7228
7229     case TREE_VEC:
7230       /* A vector of template arguments.  */
7231       gcc_assert (!type);
7232       return tsubst_template_args (t, args, complain, in_decl);
7233
7234     case POINTER_TYPE:
7235     case REFERENCE_TYPE:
7236       {
7237         enum tree_code code;
7238
7239         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
7240           return t;
7241
7242         code = TREE_CODE (t);
7243
7244
7245         /* [temp.deduct]
7246
7247            Type deduction may fail for any of the following
7248            reasons:
7249
7250            -- Attempting to create a pointer to reference type.
7251            -- Attempting to create a reference to a reference type or
7252               a reference to void.  */
7253         if (TREE_CODE (type) == REFERENCE_TYPE
7254             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
7255           {
7256             static location_t last_loc;
7257
7258             /* We keep track of the last time we issued this error
7259                message to avoid spewing a ton of messages during a
7260                single bad template instantiation.  */
7261             if (complain & tf_error
7262 #ifdef USE_MAPPED_LOCATION
7263                 && last_loc != input_location
7264 #else
7265                 && (last_loc.line != input_line
7266                     || last_loc.file != input_filename)
7267 #endif
7268                   )
7269               {
7270                 if (TREE_CODE (type) == VOID_TYPE)
7271                   error ("forming reference to void");
7272                 else
7273                   error ("forming %s to reference type %qT",
7274                          (code == POINTER_TYPE) ? "pointer" : "reference",
7275                          type);
7276                 last_loc = input_location;
7277               }
7278
7279             return error_mark_node;
7280           }
7281         else if (code == POINTER_TYPE)
7282           {
7283             r = build_pointer_type (type);
7284             if (TREE_CODE (type) == METHOD_TYPE)
7285               r = build_ptrmemfunc_type (r);
7286           }
7287         else
7288           r = build_reference_type (type);
7289         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7290
7291         if (r != error_mark_node)
7292           /* Will this ever be needed for TYPE_..._TO values?  */
7293           layout_type (r);
7294
7295         return r;
7296       }
7297     case OFFSET_TYPE:
7298       {
7299         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
7300         if (r == error_mark_node || !IS_AGGR_TYPE (r))
7301           {
7302             /* [temp.deduct]
7303
7304                Type deduction may fail for any of the following
7305                reasons:
7306
7307                -- Attempting to create "pointer to member of T" when T
7308                   is not a class type.  */
7309             if (complain & tf_error)
7310               error ("creating pointer to member of non-class type %qT", r);
7311             return error_mark_node;
7312           }
7313         if (TREE_CODE (type) == REFERENCE_TYPE)
7314           {
7315             if (complain & tf_error)
7316               error ("creating pointer to member reference type %qT", type);
7317             return error_mark_node;
7318           }
7319         if (TREE_CODE (type) == VOID_TYPE)
7320           {
7321             if (complain & tf_error)
7322               error ("creating pointer to member of type void");
7323             return error_mark_node;
7324           }
7325         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
7326         if (TREE_CODE (type) == FUNCTION_TYPE)
7327           {
7328             /* The type of the implicit object parameter gets its
7329                cv-qualifiers from the FUNCTION_TYPE. */
7330             tree method_type;
7331             tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
7332                                                       cp_type_quals (type));
7333             tree memptr;
7334             method_type = build_method_type_directly (this_type,
7335                                                       TREE_TYPE (type),
7336                                                       TYPE_ARG_TYPES (type));
7337             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
7338             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
7339                                                  complain);
7340           }
7341         else
7342           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
7343                                                TYPE_QUALS (t),
7344                                                complain);
7345       }
7346     case FUNCTION_TYPE:
7347     case METHOD_TYPE:
7348       {
7349         tree fntype;
7350         tree specs;
7351         fntype = tsubst_function_type (t, args, complain, in_decl);
7352         if (fntype == error_mark_node)
7353           return error_mark_node;
7354
7355         /* Substitute the exception specification.  */
7356         specs = tsubst_exception_specification (t, args, complain,
7357                                                 in_decl);
7358         if (specs == error_mark_node)
7359           return error_mark_node;
7360         if (specs)
7361           fntype = build_exception_variant (fntype, specs);
7362         return fntype;
7363       }
7364     case ARRAY_TYPE:
7365       {
7366         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
7367         if (domain == error_mark_node)
7368           return error_mark_node;
7369
7370         /* As an optimization, we avoid regenerating the array type if
7371            it will obviously be the same as T.  */
7372         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
7373           return t;
7374
7375         /* These checks should match the ones in grokdeclarator.
7376
7377            [temp.deduct]
7378
7379            The deduction may fail for any of the following reasons:
7380
7381            -- Attempting to create an array with an element type that
7382               is void, a function type, or a reference type, or [DR337]
7383               an abstract class type.  */
7384         if (TREE_CODE (type) == VOID_TYPE
7385             || TREE_CODE (type) == FUNCTION_TYPE
7386             || TREE_CODE (type) == REFERENCE_TYPE)
7387           {
7388             if (complain & tf_error)
7389               error ("creating array of %qT", type);
7390             return error_mark_node;
7391           }
7392         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
7393           {
7394             if (complain & tf_error)
7395               error ("creating array of %qT, which is an abstract class type",
7396                      type);
7397             return error_mark_node;
7398           }
7399
7400         r = build_cplus_array_type (type, domain);
7401         return r;
7402       }
7403
7404     case PLUS_EXPR:
7405     case MINUS_EXPR:
7406       {
7407         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7408         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7409
7410         if (e1 == error_mark_node || e2 == error_mark_node)
7411           return error_mark_node;
7412
7413         return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
7414       }
7415
7416     case NEGATE_EXPR:
7417     case NOP_EXPR:
7418       {
7419         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7420         if (e == error_mark_node)
7421           return error_mark_node;
7422
7423         return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
7424       }
7425
7426     case TYPENAME_TYPE:
7427       {
7428         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7429                                      in_decl, /*entering_scope=*/1);
7430         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
7431                               complain, in_decl);
7432
7433         if (ctx == error_mark_node || f == error_mark_node)
7434           return error_mark_node;
7435
7436         if (!IS_AGGR_TYPE (ctx))
7437           {
7438             if (complain & tf_error)
7439               error ("%qT is not a class, struct, or union type", ctx);
7440             return error_mark_node;
7441           }
7442         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
7443           {
7444             /* Normally, make_typename_type does not require that the CTX
7445                have complete type in order to allow things like:
7446
7447                  template <class T> struct S { typename S<T>::X Y; };
7448
7449                But, such constructs have already been resolved by this
7450                point, so here CTX really should have complete type, unless
7451                it's a partial instantiation.  */
7452             ctx = complete_type (ctx);
7453             if (!COMPLETE_TYPE_P (ctx))
7454               {
7455                 if (complain & tf_error)
7456                   cxx_incomplete_type_error (NULL_TREE, ctx);
7457                 return error_mark_node;
7458               }
7459           }
7460
7461         f = make_typename_type (ctx, f, typename_type,
7462                                 (complain & tf_error) | tf_keep_type_decl);
7463         if (f == error_mark_node)
7464           return f;
7465         if (TREE_CODE (f) == TYPE_DECL)
7466           {
7467             complain |= tf_ignore_bad_quals;
7468             f = TREE_TYPE (f);
7469           }
7470
7471         if (TREE_CODE (f) != TYPENAME_TYPE)
7472           {
7473             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
7474               error ("%qT resolves to %qT, which is not an enumeration type",
7475                      t, f);
7476             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
7477               error ("%qT resolves to %qT, which is is not a class type",
7478                      t, f);
7479           }
7480
7481         return cp_build_qualified_type_real
7482           (f, cp_type_quals (f) | cp_type_quals (t), complain);
7483       }
7484
7485     case UNBOUND_CLASS_TEMPLATE:
7486       {
7487         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7488                                      in_decl, /*entering_scope=*/1);
7489         tree name = TYPE_IDENTIFIER (t);
7490         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
7491
7492         if (ctx == error_mark_node || name == error_mark_node)
7493           return error_mark_node;
7494
7495         if (parm_list)
7496           parm_list = tsubst_template_parms (parm_list, args, complain);
7497         return make_unbound_class_template (ctx, name, parm_list, complain);
7498       }
7499
7500     case INDIRECT_REF:
7501     case ADDR_EXPR:
7502     case CALL_EXPR:
7503       gcc_unreachable ();
7504
7505     case ARRAY_REF:
7506       {
7507         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7508         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl);
7509         if (e1 == error_mark_node || e2 == error_mark_node)
7510           return error_mark_node;
7511
7512         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
7513       }
7514
7515     case SCOPE_REF:
7516       {
7517         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7518         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7519         if (e1 == error_mark_node || e2 == error_mark_node)
7520           return error_mark_node;
7521
7522         return build_qualified_name (/*type=*/NULL_TREE,
7523                                      e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
7524       }
7525
7526     case TYPEOF_TYPE:
7527       {
7528         tree type;
7529
7530         type = finish_typeof (tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
7531                                            complain, in_decl));
7532         return cp_build_qualified_type_real (type,
7533                                              cp_type_quals (t)
7534                                              | cp_type_quals (type),
7535                                              complain);
7536       }
7537
7538     default:
7539       sorry ("use of %qs in template",
7540              tree_code_name [(int) TREE_CODE (t)]);
7541       return error_mark_node;
7542     }
7543 }
7544
7545 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
7546    type of the expression on the left-hand side of the "." or "->"
7547    operator.  */
7548
7549 static tree
7550 tsubst_baselink (tree baselink, tree object_type,
7551                  tree args, tsubst_flags_t complain, tree in_decl)
7552 {
7553     tree name;
7554     tree qualifying_scope;
7555     tree fns;
7556     tree template_args = 0;
7557     bool template_id_p = false;
7558
7559     /* A baselink indicates a function from a base class.  The
7560        BASELINK_ACCESS_BINFO and BASELINK_BINFO are going to have
7561        non-dependent types; otherwise, the lookup could not have
7562        succeeded.  However, they may indicate bases of the template
7563        class, rather than the instantiated class.
7564
7565        In addition, lookups that were not ambiguous before may be
7566        ambiguous now.  Therefore, we perform the lookup again.  */
7567     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
7568     fns = BASELINK_FUNCTIONS (baselink);
7569     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7570       {
7571         template_id_p = true;
7572         template_args = TREE_OPERAND (fns, 1);
7573         fns = TREE_OPERAND (fns, 0);
7574         if (template_args)
7575           template_args = tsubst_template_args (template_args, args,
7576                                                 complain, in_decl);
7577       }
7578     name = DECL_NAME (get_first_fn (fns));
7579     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
7580
7581     /* If lookup found a single function, mark it as used at this
7582        point.  (If it lookup found multiple functions the one selected
7583        later by overload resolution will be marked as used at that
7584        point.)  */
7585     if (BASELINK_P (baselink))
7586       fns = BASELINK_FUNCTIONS (baselink);
7587     if (!template_id_p && !really_overloaded_fn (fns))
7588       mark_used (OVL_CURRENT (fns));
7589
7590     /* Add back the template arguments, if present.  */
7591     if (BASELINK_P (baselink) && template_id_p)
7592       BASELINK_FUNCTIONS (baselink)
7593         = build_nt (TEMPLATE_ID_EXPR,
7594                     BASELINK_FUNCTIONS (baselink),
7595                     template_args);
7596
7597     if (!object_type)
7598       object_type = current_class_type;
7599     return adjust_result_of_qualified_name_lookup (baselink,
7600                                                    qualifying_scope,
7601                                                    object_type);
7602 }
7603
7604 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
7605    true if the qualified-id will be a postfix-expression in-and-of
7606    itself; false if more of the postfix-expression follows the
7607    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
7608    of "&".  */
7609
7610 static tree
7611 tsubst_qualified_id (tree qualified_id, tree args,
7612                      tsubst_flags_t complain, tree in_decl,
7613                      bool done, bool address_p)
7614 {
7615   tree expr;
7616   tree scope;
7617   tree name;
7618   bool is_template;
7619   tree template_args;
7620
7621   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
7622
7623   /* Figure out what name to look up.  */
7624   name = TREE_OPERAND (qualified_id, 1);
7625   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
7626     {
7627       is_template = true;
7628       template_args = TREE_OPERAND (name, 1);
7629       if (template_args)
7630         template_args = tsubst_template_args (template_args, args,
7631                                               complain, in_decl);
7632       name = TREE_OPERAND (name, 0);
7633     }
7634   else
7635     {
7636       is_template = false;
7637       template_args = NULL_TREE;
7638     }
7639
7640   /* Substitute into the qualifying scope.  When there are no ARGS, we
7641      are just trying to simplify a non-dependent expression.  In that
7642      case the qualifying scope may be dependent, and, in any case,
7643      substituting will not help.  */
7644   scope = TREE_OPERAND (qualified_id, 0);
7645   if (args)
7646     {
7647       scope = tsubst (scope, args, complain, in_decl);
7648       expr = tsubst_copy (name, args, complain, in_decl);
7649     }
7650   else
7651     expr = name;
7652
7653   if (dependent_type_p (scope))
7654     return build_qualified_name (/*type=*/NULL_TREE, 
7655                                  scope, expr, 
7656                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
7657
7658   if (!BASELINK_P (name) && !DECL_P (expr))
7659     {
7660       if (TREE_CODE (expr) == BIT_NOT_EXPR)
7661         /* If this were actually a destructor call, it would have been
7662            parsed as such by the parser.  */
7663         expr = error_mark_node;
7664       else
7665         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
7666       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
7667                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
7668         {
7669           if (complain & tf_error)
7670             {
7671               error ("dependent-name %qE is parsed as a non-type, but "
7672                      "instantiation yields a type", qualified_id);
7673               inform ("say %<typename %E%> if a type is meant", qualified_id);
7674             }
7675           return error_mark_node;
7676         }
7677     }
7678
7679   if (DECL_P (expr))
7680     {
7681       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
7682                                            scope);
7683       /* Remember that there was a reference to this entity.  */
7684       mark_used (expr);
7685     }
7686
7687   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
7688     {
7689       if (complain & tf_error)
7690         qualified_name_lookup_error (scope,
7691                                      TREE_OPERAND (qualified_id, 1),
7692                                      expr);
7693       return error_mark_node;
7694     }
7695
7696   if (is_template)
7697     expr = lookup_template_function (expr, template_args);
7698
7699   if (expr == error_mark_node && complain & tf_error)
7700     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
7701                                  expr);
7702   else if (TYPE_P (scope))
7703     {
7704       expr = (adjust_result_of_qualified_name_lookup
7705               (expr, scope, current_class_type));
7706       expr = (finish_qualified_id_expr 
7707               (scope, expr, done, address_p,
7708                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
7709                /*template_arg_p=*/false));
7710     }
7711
7712   if (TREE_CODE (expr) != SCOPE_REF)
7713     expr = convert_from_reference (expr);
7714
7715   return expr;
7716 }
7717
7718 /* Like tsubst, but deals with expressions.  This function just replaces
7719    template parms; to finish processing the resultant expression, use
7720    tsubst_expr.  */
7721
7722 static tree
7723 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7724 {
7725   enum tree_code code;
7726   tree r;
7727
7728   if (t == NULL_TREE || t == error_mark_node)
7729     return t;
7730
7731   code = TREE_CODE (t);
7732
7733   switch (code)
7734     {
7735     case PARM_DECL:
7736       r = retrieve_local_specialization (t);
7737       gcc_assert (r != NULL);
7738       mark_used (r);
7739       return r;
7740
7741     case CONST_DECL:
7742       {
7743         tree enum_type;
7744         tree v;
7745
7746         if (DECL_TEMPLATE_PARM_P (t))
7747           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
7748         /* There is no need to substitute into namespace-scope
7749            enumerators.  */
7750         if (DECL_NAMESPACE_SCOPE_P (t))
7751           return t;
7752         /* If ARGS is NULL, then T is known to be non-dependent.  */
7753         if (args == NULL_TREE)
7754           return integral_constant_value (t);
7755
7756         /* Unfortunately, we cannot just call lookup_name here.
7757            Consider:
7758
7759              template <int I> int f() {
7760              enum E { a = I };
7761              struct S { void g() { E e = a; } };
7762              };
7763
7764            When we instantiate f<7>::S::g(), say, lookup_name is not
7765            clever enough to find f<7>::a.  */
7766         enum_type
7767           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
7768                               /*entering_scope=*/0);
7769
7770         for (v = TYPE_VALUES (enum_type);
7771              v != NULL_TREE;
7772              v = TREE_CHAIN (v))
7773           if (TREE_PURPOSE (v) == DECL_NAME (t))
7774             return TREE_VALUE (v);
7775
7776           /* We didn't find the name.  That should never happen; if
7777              name-lookup found it during preliminary parsing, we
7778              should find it again here during instantiation.  */
7779         gcc_unreachable ();
7780       }
7781       return t;
7782
7783     case FIELD_DECL:
7784       if (DECL_CONTEXT (t))
7785         {
7786           tree ctx;
7787
7788           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
7789                                   /*entering_scope=*/1);
7790           if (ctx != DECL_CONTEXT (t))
7791             {
7792               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
7793               if (!r)
7794                 {
7795                   if (complain & tf_error)
7796                     error ("using invalid field %qD", t);
7797                   return error_mark_node;
7798                 }
7799               return r;
7800             }
7801         }
7802
7803       return t;
7804
7805     case VAR_DECL:
7806     case FUNCTION_DECL:
7807       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
7808           || local_variable_p (t))
7809         t = tsubst (t, args, complain, in_decl);
7810       mark_used (t);
7811       return t;
7812
7813     case BASELINK:
7814       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
7815
7816     case TEMPLATE_DECL:
7817       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7818         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
7819                        args, complain, in_decl);
7820       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
7821         return tsubst (t, args, complain, in_decl);
7822       else if (DECL_CLASS_SCOPE_P (t)
7823                && uses_template_parms (DECL_CONTEXT (t)))
7824         {
7825           /* Template template argument like the following example need
7826              special treatment:
7827
7828                template <template <class> class TT> struct C {};
7829                template <class T> struct D {
7830                  template <class U> struct E {};
7831                  C<E> c;                                // #1
7832                };
7833                D<int> d;                                // #2
7834
7835              We are processing the template argument `E' in #1 for
7836              the template instantiation #2.  Originally, `E' is a
7837              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
7838              have to substitute this with one having context `D<int>'.  */
7839
7840           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
7841           return lookup_field (context, DECL_NAME(t), 0, false);
7842         }
7843       else
7844         /* Ordinary template template argument.  */
7845         return t;
7846
7847     case CAST_EXPR:
7848     case REINTERPRET_CAST_EXPR:
7849     case CONST_CAST_EXPR:
7850     case STATIC_CAST_EXPR:
7851     case DYNAMIC_CAST_EXPR:
7852     case NOP_EXPR:
7853       return build1
7854         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7855          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7856
7857     case INDIRECT_REF:
7858     case NEGATE_EXPR:
7859     case TRUTH_NOT_EXPR:
7860     case BIT_NOT_EXPR:
7861     case ADDR_EXPR:
7862     case UNARY_PLUS_EXPR:      /* Unary + */
7863     case SIZEOF_EXPR:
7864     case ALIGNOF_EXPR:
7865     case ARROW_EXPR:
7866     case THROW_EXPR:
7867     case TYPEID_EXPR:
7868     case REALPART_EXPR:
7869     case IMAGPART_EXPR:
7870       return build1
7871         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7872          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7873
7874     case COMPONENT_REF:
7875       {
7876         tree object;
7877         tree name;
7878
7879         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
7880         name = TREE_OPERAND (t, 1);
7881         if (TREE_CODE (name) == BIT_NOT_EXPR)
7882           {
7883             name = tsubst_copy (TREE_OPERAND (name, 0), args,
7884                                 complain, in_decl);
7885             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7886           }
7887         else if (TREE_CODE (name) == SCOPE_REF
7888                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
7889           {
7890             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
7891                                      complain, in_decl);
7892             name = TREE_OPERAND (name, 1);
7893             name = tsubst_copy (TREE_OPERAND (name, 0), args,
7894                                 complain, in_decl);
7895             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7896             name = build_qualified_name (/*type=*/NULL_TREE,
7897                                          base, name, 
7898                                          /*template_p=*/false);
7899           }
7900         else if (TREE_CODE (name) == BASELINK)
7901           name = tsubst_baselink (name,
7902                                   non_reference (TREE_TYPE (object)),
7903                                   args, complain,
7904                                   in_decl);
7905         else
7906           name = tsubst_copy (name, args, complain, in_decl);
7907         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
7908       }
7909
7910     case PLUS_EXPR:
7911     case MINUS_EXPR:
7912     case MULT_EXPR:
7913     case TRUNC_DIV_EXPR:
7914     case CEIL_DIV_EXPR:
7915     case FLOOR_DIV_EXPR:
7916     case ROUND_DIV_EXPR:
7917     case EXACT_DIV_EXPR:
7918     case BIT_AND_EXPR:
7919     case BIT_IOR_EXPR:
7920     case BIT_XOR_EXPR:
7921     case TRUNC_MOD_EXPR:
7922     case FLOOR_MOD_EXPR:
7923     case TRUTH_ANDIF_EXPR:
7924     case TRUTH_ORIF_EXPR:
7925     case TRUTH_AND_EXPR:
7926     case TRUTH_OR_EXPR:
7927     case RSHIFT_EXPR:
7928     case LSHIFT_EXPR:
7929     case RROTATE_EXPR:
7930     case LROTATE_EXPR:
7931     case EQ_EXPR:
7932     case NE_EXPR:
7933     case MAX_EXPR:
7934     case MIN_EXPR:
7935     case LE_EXPR:
7936     case GE_EXPR:
7937     case LT_EXPR:
7938     case GT_EXPR:
7939     case COMPOUND_EXPR:
7940     case DOTSTAR_EXPR:
7941     case MEMBER_REF:
7942     case PREDECREMENT_EXPR:
7943     case PREINCREMENT_EXPR:
7944     case POSTDECREMENT_EXPR:
7945     case POSTINCREMENT_EXPR:
7946       return build_nt
7947         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7948          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7949
7950     case SCOPE_REF:
7951       return build_qualified_name (/*type=*/NULL_TREE,
7952                                    tsubst_copy (TREE_OPERAND (t, 0),
7953                                                 args, complain, in_decl),
7954                                    tsubst_copy (TREE_OPERAND (t, 1),
7955                                                 args, complain, in_decl),
7956                                    QUALIFIED_NAME_IS_TEMPLATE (t));
7957
7958     case ARRAY_REF:
7959       return build_nt
7960         (ARRAY_REF,
7961          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7962          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7963          NULL_TREE, NULL_TREE);
7964
7965     case CALL_EXPR:
7966       return build_nt (code,
7967                        tsubst_copy (TREE_OPERAND (t, 0), args,
7968                                     complain, in_decl),
7969                        tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7970                                     in_decl),
7971                        NULL_TREE);
7972
7973     case COND_EXPR:
7974     case MODOP_EXPR:
7975     case PSEUDO_DTOR_EXPR:
7976       {
7977         r = build_nt
7978           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7979            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7980            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7981         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
7982         return r;
7983       }
7984
7985     case NEW_EXPR:
7986       {
7987         r = build_nt
7988         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7989          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7990          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7991         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
7992         return r;
7993       }
7994
7995     case DELETE_EXPR:
7996       {
7997         r = build_nt
7998         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7999          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
8000         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
8001         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
8002         return r;
8003       }
8004
8005     case TEMPLATE_ID_EXPR:
8006       {
8007         /* Substituted template arguments */
8008         tree fn = TREE_OPERAND (t, 0);
8009         tree targs = TREE_OPERAND (t, 1);
8010
8011         fn = tsubst_copy (fn, args, complain, in_decl);
8012         if (targs)
8013           targs = tsubst_template_args (targs, args, complain, in_decl);
8014
8015         return lookup_template_function (fn, targs);
8016       }
8017
8018     case TREE_LIST:
8019       {
8020         tree purpose, value, chain;
8021
8022         if (t == void_list_node)
8023           return t;
8024
8025         purpose = TREE_PURPOSE (t);
8026         if (purpose)
8027           purpose = tsubst_copy (purpose, args, complain, in_decl);
8028         value = TREE_VALUE (t);
8029         if (value)
8030           value = tsubst_copy (value, args, complain, in_decl);
8031         chain = TREE_CHAIN (t);
8032         if (chain && chain != void_type_node)
8033           chain = tsubst_copy (chain, args, complain, in_decl);
8034         if (purpose == TREE_PURPOSE (t)
8035             && value == TREE_VALUE (t)
8036             && chain == TREE_CHAIN (t))
8037           return t;
8038         return tree_cons (purpose, value, chain);
8039       }
8040
8041     case RECORD_TYPE:
8042     case UNION_TYPE:
8043     case ENUMERAL_TYPE:
8044     case INTEGER_TYPE:
8045     case TEMPLATE_TYPE_PARM:
8046     case TEMPLATE_TEMPLATE_PARM:
8047     case BOUND_TEMPLATE_TEMPLATE_PARM:
8048     case TEMPLATE_PARM_INDEX:
8049     case POINTER_TYPE:
8050     case REFERENCE_TYPE:
8051     case OFFSET_TYPE:
8052     case FUNCTION_TYPE:
8053     case METHOD_TYPE:
8054     case ARRAY_TYPE:
8055     case TYPENAME_TYPE:
8056     case UNBOUND_CLASS_TEMPLATE:
8057     case TYPEOF_TYPE:
8058     case TYPE_DECL:
8059       return tsubst (t, args, complain, in_decl);
8060
8061     case IDENTIFIER_NODE:
8062       if (IDENTIFIER_TYPENAME_P (t))
8063         {
8064           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8065           return mangle_conv_op_name_for_type (new_type);
8066         }
8067       else
8068         return t;
8069
8070     case CONSTRUCTOR:
8071       /* This is handled by tsubst_copy_and_build.  */
8072       gcc_unreachable ();
8073
8074     case VA_ARG_EXPR:
8075       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
8076                                           in_decl),
8077                              tsubst (TREE_TYPE (t), args, complain, in_decl));
8078
8079     case CLEANUP_POINT_EXPR:
8080       /* We shouldn't have built any of these during initial template
8081          generation.  Instead, they should be built during instantiation
8082          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
8083       gcc_unreachable ();
8084
8085     case OFFSET_REF:
8086       mark_used (TREE_OPERAND (t, 1));
8087       return t;
8088
8089     default:
8090       return t;
8091     }
8092 }
8093
8094 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
8095
8096 static tree
8097 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
8098                     tree in_decl)
8099 {
8100   tree new_clauses = NULL, nc, oc;
8101
8102   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
8103     {
8104       nc = copy_node (oc);
8105       OMP_CLAUSE_CHAIN (nc) = new_clauses;
8106       new_clauses = nc;
8107
8108       switch (OMP_CLAUSE_CODE (nc))
8109         {
8110         case OMP_CLAUSE_PRIVATE:
8111         case OMP_CLAUSE_SHARED:
8112         case OMP_CLAUSE_FIRSTPRIVATE:
8113         case OMP_CLAUSE_LASTPRIVATE:
8114         case OMP_CLAUSE_REDUCTION:
8115         case OMP_CLAUSE_COPYIN:
8116         case OMP_CLAUSE_COPYPRIVATE:
8117         case OMP_CLAUSE_IF:
8118         case OMP_CLAUSE_NUM_THREADS:
8119         case OMP_CLAUSE_SCHEDULE:
8120           OMP_CLAUSE_OPERAND (nc, 0)
8121             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, in_decl);
8122           break;
8123         case OMP_CLAUSE_NOWAIT:
8124         case OMP_CLAUSE_ORDERED:
8125         case OMP_CLAUSE_DEFAULT:
8126           break;
8127         default:
8128           gcc_unreachable ();
8129         }
8130     }
8131
8132   return finish_omp_clauses (nreverse (new_clauses));
8133 }
8134
8135 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
8136
8137 static tree
8138 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
8139                           tree in_decl)
8140 {
8141 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
8142
8143   tree purpose, value, chain;
8144
8145   if (t == NULL)
8146     return t;
8147
8148   if (TREE_CODE (t) != TREE_LIST)
8149     return tsubst_copy_and_build (t, args, complain, in_decl,
8150                                   /*function_p=*/false);
8151
8152   if (t == void_list_node)
8153     return t;
8154
8155   purpose = TREE_PURPOSE (t);
8156   if (purpose)
8157     purpose = RECUR (purpose);
8158   value = TREE_VALUE (t);
8159   if (value)
8160     value = RECUR (value);
8161   chain = TREE_CHAIN (t);
8162   if (chain && chain != void_type_node)
8163     chain = RECUR (chain);
8164   return tree_cons (purpose, value, chain);
8165 #undef RECUR
8166 }
8167
8168 /* Like tsubst_copy for expressions, etc. but also does semantic
8169    processing.  */
8170
8171 static tree
8172 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8173 {
8174   tree stmt, tmp;
8175
8176   if (t == NULL_TREE || t == error_mark_node)
8177     return t;
8178
8179   if (EXPR_HAS_LOCATION (t))
8180     input_location = EXPR_LOCATION (t);
8181   if (STATEMENT_CODE_P (TREE_CODE (t)))
8182     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
8183
8184   switch (TREE_CODE (t))
8185     {
8186     case STATEMENT_LIST:
8187       {
8188         tree_stmt_iterator i;
8189         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
8190           tsubst_expr (tsi_stmt (i), args, complain, in_decl);
8191         break;
8192       }
8193
8194     case CTOR_INITIALIZER:
8195       finish_mem_initializers (tsubst_initializer_list
8196                                (TREE_OPERAND (t, 0), args));
8197       break;
8198
8199     case RETURN_EXPR:
8200       finish_return_stmt (tsubst_expr (TREE_OPERAND (t, 0),
8201                                        args, complain, in_decl));
8202       break;
8203
8204     case EXPR_STMT:
8205       tmp = tsubst_expr (EXPR_STMT_EXPR (t), args, complain, in_decl);
8206       if (EXPR_STMT_STMT_EXPR_RESULT (t))
8207         finish_stmt_expr_expr (tmp, cur_stmt_expr);
8208       else
8209         finish_expr_stmt (tmp);
8210       break;
8211
8212     case USING_STMT:
8213       do_using_directive (tsubst_expr (USING_STMT_NAMESPACE (t),
8214                                        args, complain, in_decl));
8215       break;
8216
8217     case DECL_EXPR:
8218       {
8219         tree decl;
8220         tree init;
8221
8222         decl = DECL_EXPR_DECL (t);
8223         if (TREE_CODE (decl) == LABEL_DECL)
8224           finish_label_decl (DECL_NAME (decl));
8225         else if (TREE_CODE (decl) == USING_DECL)
8226           {
8227             tree scope = USING_DECL_SCOPE (decl);
8228             tree name = DECL_NAME (decl);
8229             tree decl;
8230
8231             scope = tsubst_expr (scope, args, complain, in_decl);
8232             decl = lookup_qualified_name (scope, name,
8233                                           /*is_type_p=*/false,
8234                                           /*complain=*/false);
8235             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
8236               qualified_name_lookup_error (scope, name, decl);
8237             else
8238               do_local_using_decl (decl, scope, name);
8239           }
8240         else
8241           {
8242             init = DECL_INITIAL (decl);
8243             decl = tsubst (decl, args, complain, in_decl);
8244             if (decl != error_mark_node)
8245               {
8246                 if (init)
8247                   DECL_INITIAL (decl) = error_mark_node;
8248                 /* By marking the declaration as instantiated, we avoid
8249                    trying to instantiate it.  Since instantiate_decl can't
8250                    handle local variables, and since we've already done
8251                    all that needs to be done, that's the right thing to
8252                    do.  */
8253                 if (TREE_CODE (decl) == VAR_DECL)
8254                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
8255                 if (TREE_CODE (decl) == VAR_DECL
8256                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
8257                   /* Anonymous aggregates are a special case.  */
8258                   finish_anon_union (decl);
8259                 else
8260                   {
8261                     maybe_push_decl (decl);
8262                     if (TREE_CODE (decl) == VAR_DECL
8263                         && DECL_PRETTY_FUNCTION_P (decl))
8264                       {
8265                         /* For __PRETTY_FUNCTION__ we have to adjust the
8266                            initializer.  */
8267                         const char *const name
8268                           = cxx_printable_name (current_function_decl, 2);
8269                         init = cp_fname_init (name, &TREE_TYPE (decl));
8270                       }
8271                     else
8272                       init = tsubst_expr (init, args, complain, in_decl);
8273                     finish_decl (decl, init, NULL_TREE);
8274                   }
8275               }
8276           }
8277
8278         /* A DECL_EXPR can also be used as an expression, in the condition
8279            clause of an if/for/while construct.  */
8280         return decl;
8281       }
8282
8283     case FOR_STMT:
8284       stmt = begin_for_stmt ();
8285       tsubst_expr (FOR_INIT_STMT (t), args, complain, in_decl);
8286       finish_for_init_stmt (stmt);
8287       tmp = tsubst_expr (FOR_COND (t), args, complain, in_decl);
8288       finish_for_cond (tmp, stmt);
8289       tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
8290       finish_for_expr (tmp, stmt);
8291       tsubst_expr (FOR_BODY (t), args, complain, in_decl);
8292       finish_for_stmt (stmt);
8293       break;
8294
8295     case WHILE_STMT:
8296       stmt = begin_while_stmt ();
8297       tmp = tsubst_expr (WHILE_COND (t), args, complain, in_decl);
8298       finish_while_stmt_cond (tmp, stmt);
8299       tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
8300       finish_while_stmt (stmt);
8301       break;
8302
8303     case DO_STMT:
8304       stmt = begin_do_stmt ();
8305       tsubst_expr (DO_BODY (t), args, complain, in_decl);
8306       finish_do_body (stmt);
8307       tmp = tsubst_expr (DO_COND (t), args, complain, in_decl);
8308       finish_do_stmt (tmp, stmt);
8309       break;
8310
8311     case IF_STMT:
8312       stmt = begin_if_stmt ();
8313       tmp = tsubst_expr (IF_COND (t), args, complain, in_decl);
8314       finish_if_stmt_cond (tmp, stmt);
8315       tsubst_expr (THEN_CLAUSE (t), args, complain, in_decl);
8316       finish_then_clause (stmt);
8317
8318       if (ELSE_CLAUSE (t))
8319         {
8320           begin_else_clause (stmt);
8321           tsubst_expr (ELSE_CLAUSE (t), args, complain, in_decl);
8322           finish_else_clause (stmt);
8323         }
8324
8325       finish_if_stmt (stmt);
8326       break;
8327
8328     case BIND_EXPR:
8329       if (BIND_EXPR_BODY_BLOCK (t))
8330         stmt = begin_function_body ();
8331       else
8332         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
8333                                     ? BCS_TRY_BLOCK : 0);
8334
8335       tsubst_expr (BIND_EXPR_BODY (t), args, complain, in_decl);
8336
8337       if (BIND_EXPR_BODY_BLOCK (t))
8338         finish_function_body (stmt);
8339       else
8340         finish_compound_stmt (stmt);
8341       break;
8342
8343     case BREAK_STMT:
8344       finish_break_stmt ();
8345       break;
8346
8347     case CONTINUE_STMT:
8348       finish_continue_stmt ();
8349       break;
8350
8351     case SWITCH_STMT:
8352       stmt = begin_switch_stmt ();
8353       tmp = tsubst_expr (SWITCH_STMT_COND (t), args, complain, in_decl);
8354       finish_switch_cond (tmp, stmt);
8355       tsubst_expr (SWITCH_STMT_BODY (t), args, complain, in_decl);
8356       finish_switch_stmt (stmt);
8357       break;
8358
8359     case CASE_LABEL_EXPR:
8360       finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
8361                          tsubst_expr (CASE_HIGH (t), args, complain,
8362                                       in_decl));
8363       break;
8364
8365     case LABEL_EXPR:
8366       finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
8367       break;
8368
8369     case GOTO_EXPR:
8370       tmp = GOTO_DESTINATION (t);
8371       if (TREE_CODE (tmp) != LABEL_DECL)
8372         /* Computed goto's must be tsubst'd into.  On the other hand,
8373            non-computed gotos must not be; the identifier in question
8374            will have no binding.  */
8375         tmp = tsubst_expr (tmp, args, complain, in_decl);
8376       else
8377         tmp = DECL_NAME (tmp);
8378       finish_goto_stmt (tmp);
8379       break;
8380
8381     case ASM_EXPR:
8382       tmp = finish_asm_stmt
8383         (ASM_VOLATILE_P (t),
8384          tsubst_expr (ASM_STRING (t), args, complain, in_decl),
8385          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
8386          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
8387          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
8388       {
8389         tree asm_expr = tmp;
8390         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
8391           asm_expr = TREE_OPERAND (asm_expr, 0);
8392         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
8393       }
8394       break;
8395
8396     case TRY_BLOCK:
8397       if (CLEANUP_P (t))
8398         {
8399           stmt = begin_try_block ();
8400           tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8401           finish_cleanup_try_block (stmt);
8402           finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
8403                                        complain, in_decl),
8404                           stmt);
8405         }
8406       else
8407         {
8408           if (FN_TRY_BLOCK_P (t))
8409             stmt = begin_function_try_block ();
8410           else
8411             stmt = begin_try_block ();
8412
8413           tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8414
8415           if (FN_TRY_BLOCK_P (t))
8416             finish_function_try_block (stmt);
8417           else
8418             finish_try_block (stmt);
8419
8420           tsubst_expr (TRY_HANDLERS (t), args, complain, in_decl);
8421           if (FN_TRY_BLOCK_P (t))
8422             finish_function_handler_sequence (stmt);
8423           else
8424             finish_handler_sequence (stmt);
8425         }
8426       break;
8427
8428     case HANDLER:
8429       {
8430         tree decl;
8431
8432         stmt = begin_handler ();
8433         if (HANDLER_PARMS (t))
8434           {
8435             decl = HANDLER_PARMS (t);
8436             decl = tsubst (decl, args, complain, in_decl);
8437             /* Prevent instantiate_decl from trying to instantiate
8438                this variable.  We've already done all that needs to be
8439                done.  */
8440             DECL_TEMPLATE_INSTANTIATED (decl) = 1;
8441           }
8442         else
8443           decl = NULL_TREE;
8444         finish_handler_parms (decl, stmt);
8445         tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
8446         finish_handler (stmt);
8447       }
8448       break;
8449
8450     case TAG_DEFN:
8451       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
8452       break;
8453
8454     case OMP_PARALLEL:
8455       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
8456                                 args, complain, in_decl);
8457       stmt = begin_omp_parallel ();
8458       tsubst_expr (OMP_PARALLEL_BODY (t), args, complain, in_decl);
8459       finish_omp_parallel (tmp, stmt);
8460       break;
8461
8462     case OMP_FOR:
8463       {
8464         tree clauses, decl, init, cond, incr, body, pre_body;
8465
8466         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
8467                                       args, complain, in_decl);
8468         init = OMP_FOR_INIT (t);
8469         gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
8470         decl = tsubst_expr (TREE_OPERAND (init, 0), args, complain, in_decl);
8471         init = tsubst_expr (TREE_OPERAND (init, 1), args, complain, in_decl);
8472         cond = tsubst_expr (OMP_FOR_COND (t), args, complain, in_decl);
8473         incr = tsubst_expr (OMP_FOR_INCR (t), args, complain, in_decl);
8474
8475         stmt = begin_omp_structured_block ();
8476
8477         pre_body = push_stmt_list ();
8478         tsubst_expr (OMP_FOR_PRE_BODY (t), args, complain, in_decl);
8479         pre_body = pop_stmt_list (pre_body);
8480
8481         body = push_stmt_list ();
8482         tsubst_expr (OMP_FOR_BODY (t), args, complain, in_decl);
8483         body = pop_stmt_list (body);
8484
8485         t = finish_omp_for (EXPR_LOCATION (t), decl, init, cond, incr, body,
8486                             pre_body);
8487         if (t)
8488           OMP_FOR_CLAUSES (t) = clauses;
8489
8490         add_stmt (finish_omp_structured_block (stmt));
8491       }
8492       break;
8493
8494     case OMP_SECTIONS:
8495     case OMP_SINGLE:
8496       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
8497       stmt = push_stmt_list ();
8498       tsubst_expr (OMP_BODY (t), args, complain, in_decl);
8499       stmt = pop_stmt_list (stmt);
8500
8501       t = copy_node (t);
8502       OMP_BODY (t) = stmt;
8503       OMP_CLAUSES (t) = tmp;
8504       add_stmt (t);
8505       break;
8506
8507     case OMP_SECTION:
8508     case OMP_CRITICAL:
8509     case OMP_MASTER:
8510     case OMP_ORDERED:
8511       stmt = push_stmt_list ();
8512       tsubst_expr (OMP_BODY (t), args, complain, in_decl);
8513       stmt = pop_stmt_list (stmt);
8514
8515       t = copy_node (t);
8516       OMP_BODY (t) = stmt;
8517       add_stmt (t);
8518       break;
8519
8520     case OMP_ATOMIC:
8521       {
8522         tree op0, op1;
8523         op0 = tsubst_expr (TREE_OPERAND (t, 0), args, complain, in_decl);
8524         op1 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl);
8525         if (OMP_ATOMIC_DEPENDENT_P (t))
8526           c_finish_omp_atomic (OMP_ATOMIC_CODE (t), op0, op1);
8527         else
8528           add_stmt (build2 (OMP_ATOMIC, void_type_node, op0, op1));
8529       }
8530       break;
8531
8532     default:
8533       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
8534
8535       return tsubst_copy_and_build (t, args, complain, in_decl,
8536                                     /*function_p=*/false);
8537     }
8538
8539   return NULL_TREE;
8540 }
8541
8542 /* T is a postfix-expression that is not being used in a function
8543    call.  Return the substituted version of T.  */
8544
8545 static tree
8546 tsubst_non_call_postfix_expression (tree t, tree args,
8547                                     tsubst_flags_t complain,
8548                                     tree in_decl)
8549 {
8550   if (TREE_CODE (t) == SCOPE_REF)
8551     t = tsubst_qualified_id (t, args, complain, in_decl,
8552                              /*done=*/false, /*address_p=*/false);
8553   else
8554     t = tsubst_copy_and_build (t, args, complain, in_decl,
8555                                /*function_p=*/false);
8556
8557   return t;
8558 }
8559
8560 /* Like tsubst but deals with expressions and performs semantic
8561    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
8562
8563 tree
8564 tsubst_copy_and_build (tree t,
8565                        tree args,
8566                        tsubst_flags_t complain,
8567                        tree in_decl,
8568                        bool function_p)
8569 {
8570 #define RECUR(NODE) \
8571   tsubst_copy_and_build (NODE, args, complain, in_decl, /*function_p=*/false)
8572
8573   tree op1;
8574
8575   if (t == NULL_TREE || t == error_mark_node)
8576     return t;
8577
8578   switch (TREE_CODE (t))
8579     {
8580     case USING_DECL:
8581       t = DECL_NAME (t);
8582       /* Fall through.  */
8583     case IDENTIFIER_NODE:
8584       {
8585         tree decl;
8586         cp_id_kind idk;
8587         bool non_integral_constant_expression_p;
8588         const char *error_msg;
8589
8590         if (IDENTIFIER_TYPENAME_P (t))
8591           {
8592             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8593             t = mangle_conv_op_name_for_type (new_type);
8594           }
8595
8596         /* Look up the name.  */
8597         decl = lookup_name (t);
8598
8599         /* By convention, expressions use ERROR_MARK_NODE to indicate
8600            failure, not NULL_TREE.  */
8601         if (decl == NULL_TREE)
8602           decl = error_mark_node;
8603
8604         decl = finish_id_expression (t, decl, NULL_TREE,
8605                                      &idk,
8606                                      /*integral_constant_expression_p=*/false,
8607                                      /*allow_non_integral_constant_expression_p=*/false,
8608                                      &non_integral_constant_expression_p,
8609                                      /*template_p=*/false,
8610                                      /*done=*/true,
8611                                      /*address_p=*/false,
8612                                      /*template_arg_p=*/false,
8613                                      &error_msg);
8614         if (error_msg)
8615           error (error_msg);
8616         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
8617           decl = unqualified_name_lookup_error (decl);
8618         return decl;
8619       }
8620
8621     case TEMPLATE_ID_EXPR:
8622       {
8623         tree object;
8624         tree template = RECUR (TREE_OPERAND (t, 0));
8625         tree targs = TREE_OPERAND (t, 1);
8626
8627         if (targs)
8628           targs = tsubst_template_args (targs, args, complain, in_decl);
8629
8630         if (TREE_CODE (template) == COMPONENT_REF)
8631           {
8632             object = TREE_OPERAND (template, 0);
8633             template = TREE_OPERAND (template, 1);
8634           }
8635         else
8636           object = NULL_TREE;
8637         template = lookup_template_function (template, targs);
8638
8639         if (object)
8640           return build3 (COMPONENT_REF, TREE_TYPE (template),
8641                          object, template, NULL_TREE);
8642         else
8643           return template;
8644       }
8645
8646     case INDIRECT_REF:
8647       {
8648         tree r = RECUR (TREE_OPERAND (t, 0));
8649
8650         if (REFERENCE_REF_P (t))
8651           {
8652             /* A type conversion to reference type will be enclosed in
8653                such an indirect ref, but the substitution of the cast
8654                will have also added such an indirect ref.  */
8655             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
8656               r = convert_from_reference (r);
8657           }
8658         else
8659           r = build_x_indirect_ref (r, "unary *");
8660         return r;
8661       }
8662
8663     case NOP_EXPR:
8664       return build_nop
8665         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8666          RECUR (TREE_OPERAND (t, 0)));
8667
8668     case CAST_EXPR:
8669       return build_functional_cast
8670         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8671          RECUR (TREE_OPERAND (t, 0)));
8672
8673     case REINTERPRET_CAST_EXPR:
8674       return build_reinterpret_cast
8675         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8676          RECUR (TREE_OPERAND (t, 0)));
8677
8678     case CONST_CAST_EXPR:
8679       return build_const_cast
8680         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8681          RECUR (TREE_OPERAND (t, 0)));
8682
8683     case DYNAMIC_CAST_EXPR:
8684       return build_dynamic_cast
8685         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8686          RECUR (TREE_OPERAND (t, 0)));
8687
8688     case STATIC_CAST_EXPR:
8689       return build_static_cast
8690         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8691          RECUR (TREE_OPERAND (t, 0)));
8692
8693     case POSTDECREMENT_EXPR:
8694     case POSTINCREMENT_EXPR:
8695       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8696                                                 args, complain, in_decl);
8697       return build_x_unary_op (TREE_CODE (t), op1);
8698
8699     case PREDECREMENT_EXPR:
8700     case PREINCREMENT_EXPR:
8701     case NEGATE_EXPR:
8702     case BIT_NOT_EXPR:
8703     case ABS_EXPR:
8704     case TRUTH_NOT_EXPR:
8705     case UNARY_PLUS_EXPR:  /* Unary + */
8706     case REALPART_EXPR:
8707     case IMAGPART_EXPR:
8708       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
8709
8710     case ADDR_EXPR:
8711       op1 = TREE_OPERAND (t, 0);
8712       if (TREE_CODE (op1) == SCOPE_REF)
8713         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
8714                                    /*done=*/true, /*address_p=*/true);
8715       else
8716         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
8717                                                   in_decl);
8718       if (TREE_CODE (op1) == LABEL_DECL)
8719         return finish_label_address_expr (DECL_NAME (op1));
8720       return build_x_unary_op (ADDR_EXPR, op1);
8721
8722     case PLUS_EXPR:
8723     case MINUS_EXPR:
8724     case MULT_EXPR:
8725     case TRUNC_DIV_EXPR:
8726     case CEIL_DIV_EXPR:
8727     case FLOOR_DIV_EXPR:
8728     case ROUND_DIV_EXPR:
8729     case EXACT_DIV_EXPR:
8730     case BIT_AND_EXPR:
8731     case BIT_IOR_EXPR:
8732     case BIT_XOR_EXPR:
8733     case TRUNC_MOD_EXPR:
8734     case FLOOR_MOD_EXPR:
8735     case TRUTH_ANDIF_EXPR:
8736     case TRUTH_ORIF_EXPR:
8737     case TRUTH_AND_EXPR:
8738     case TRUTH_OR_EXPR:
8739     case RSHIFT_EXPR:
8740     case LSHIFT_EXPR:
8741     case RROTATE_EXPR:
8742     case LROTATE_EXPR:
8743     case EQ_EXPR:
8744     case NE_EXPR:
8745     case MAX_EXPR:
8746     case MIN_EXPR:
8747     case LE_EXPR:
8748     case GE_EXPR:
8749     case LT_EXPR:
8750     case GT_EXPR:
8751     case MEMBER_REF:
8752     case DOTSTAR_EXPR:
8753       return build_x_binary_op
8754         (TREE_CODE (t),
8755          RECUR (TREE_OPERAND (t, 0)),
8756          RECUR (TREE_OPERAND (t, 1)),
8757          /*overloaded_p=*/NULL);
8758
8759     case SCOPE_REF:
8760       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
8761                                   /*address_p=*/false);
8762     case ARRAY_REF:
8763       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8764                                                 args, complain, in_decl);
8765       return build_x_binary_op (ARRAY_REF, op1, RECUR (TREE_OPERAND (t, 1)),
8766                                 /*overloaded_p=*/NULL);
8767
8768     case SIZEOF_EXPR:
8769     case ALIGNOF_EXPR:
8770       op1 = TREE_OPERAND (t, 0);
8771       if (!args)
8772         {
8773           /* When there are no ARGS, we are trying to evaluate a
8774              non-dependent expression from the parser.  Trying to do
8775              the substitutions may not work.  */
8776           if (!TYPE_P (op1))
8777             op1 = TREE_TYPE (op1);
8778         }
8779       else
8780         {
8781           ++skip_evaluation;
8782           op1 = RECUR (op1);
8783           --skip_evaluation;
8784         }
8785       if (TYPE_P (op1))
8786         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
8787       else
8788         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
8789
8790     case MODOP_EXPR:
8791       {
8792         tree r = build_x_modify_expr
8793           (RECUR (TREE_OPERAND (t, 0)),
8794            TREE_CODE (TREE_OPERAND (t, 1)),
8795            RECUR (TREE_OPERAND (t, 2)));
8796         /* TREE_NO_WARNING must be set if either the expression was
8797            parenthesized or it uses an operator such as >>= rather
8798            than plain assignment.  In the former case, it was already
8799            set and must be copied.  In the latter case,
8800            build_x_modify_expr sets it and it must not be reset
8801            here.  */
8802         if (TREE_NO_WARNING (t))
8803           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
8804         return r;
8805       }
8806
8807     case ARROW_EXPR:
8808       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8809                                                 args, complain, in_decl);
8810       /* Remember that there was a reference to this entity.  */
8811       if (DECL_P (op1))
8812         mark_used (op1);
8813       return build_x_arrow (op1);
8814
8815     case NEW_EXPR:
8816       return build_new
8817         (RECUR (TREE_OPERAND (t, 0)),
8818          RECUR (TREE_OPERAND (t, 1)),
8819          RECUR (TREE_OPERAND (t, 2)),
8820          RECUR (TREE_OPERAND (t, 3)),
8821          NEW_EXPR_USE_GLOBAL (t));
8822
8823     case DELETE_EXPR:
8824      return delete_sanity
8825        (RECUR (TREE_OPERAND (t, 0)),
8826         RECUR (TREE_OPERAND (t, 1)),
8827         DELETE_EXPR_USE_VEC (t),
8828         DELETE_EXPR_USE_GLOBAL (t));
8829
8830     case COMPOUND_EXPR:
8831       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
8832                                     RECUR (TREE_OPERAND (t, 1)));
8833
8834     case CALL_EXPR:
8835       {
8836         tree function;
8837         tree call_args;
8838         bool qualified_p;
8839         bool koenig_p;
8840
8841         function = TREE_OPERAND (t, 0);
8842         /* When we parsed the expression,  we determined whether or
8843            not Koenig lookup should be performed.  */
8844         koenig_p = KOENIG_LOOKUP_P (t);
8845         if (TREE_CODE (function) == SCOPE_REF)
8846           {
8847             qualified_p = true;
8848             function = tsubst_qualified_id (function, args, complain, in_decl,
8849                                             /*done=*/false,
8850                                             /*address_p=*/false);
8851           }
8852         else
8853           {
8854             if (TREE_CODE (function) == COMPONENT_REF)
8855               {
8856                 tree op = TREE_OPERAND (function, 1);
8857
8858                 qualified_p = (TREE_CODE (op) == SCOPE_REF
8859                                || (BASELINK_P (op)
8860                                    && BASELINK_QUALIFIED_P (op)));
8861               }
8862             else
8863               qualified_p = false;
8864             
8865             function = tsubst_copy_and_build (function, args, complain,
8866                                               in_decl,
8867                                               !qualified_p);
8868             if (BASELINK_P (function))
8869               qualified_p = true;
8870           }
8871
8872         call_args = RECUR (TREE_OPERAND (t, 1));
8873
8874         /* We do not perform argument-dependent lookup if normal
8875            lookup finds a non-function, in accordance with the
8876            expected resolution of DR 218.  */
8877         if (koenig_p
8878             && ((is_overloaded_fn (function)
8879                  /* If lookup found a member function, the Koenig lookup is
8880                     not appropriate, even if an unqualified-name was used
8881                     to denote the function.  */
8882                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
8883                 || TREE_CODE (function) == IDENTIFIER_NODE))
8884           function = perform_koenig_lookup (function, call_args);
8885
8886         if (TREE_CODE (function) == IDENTIFIER_NODE)
8887           {
8888             unqualified_name_lookup_error (function);
8889             return error_mark_node;
8890           }
8891
8892         /* Remember that there was a reference to this entity.  */
8893         if (DECL_P (function))
8894           mark_used (function);
8895
8896         if (TREE_CODE (function) == OFFSET_REF)
8897           return build_offset_ref_call_from_tree (function, call_args);
8898         if (TREE_CODE (function) == COMPONENT_REF)
8899           {
8900             if (!BASELINK_P (TREE_OPERAND (function, 1)))
8901               return finish_call_expr (function, call_args,
8902                                        /*disallow_virtual=*/false,
8903                                        /*koenig_p=*/false);
8904             else
8905               return (build_new_method_call
8906                       (TREE_OPERAND (function, 0),
8907                        TREE_OPERAND (function, 1),
8908                        call_args, NULL_TREE,
8909                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
8910                        /*fn_p=*/NULL));
8911           }
8912         return finish_call_expr (function, call_args,
8913                                  /*disallow_virtual=*/qualified_p,
8914                                  koenig_p);
8915       }
8916
8917     case COND_EXPR:
8918       return build_x_conditional_expr
8919         (RECUR (TREE_OPERAND (t, 0)),
8920          RECUR (TREE_OPERAND (t, 1)),
8921          RECUR (TREE_OPERAND (t, 2)));
8922
8923     case PSEUDO_DTOR_EXPR:
8924       return finish_pseudo_destructor_expr
8925         (RECUR (TREE_OPERAND (t, 0)),
8926          RECUR (TREE_OPERAND (t, 1)),
8927          RECUR (TREE_OPERAND (t, 2)));
8928
8929     case TREE_LIST:
8930       {
8931         tree purpose, value, chain;
8932
8933         if (t == void_list_node)
8934           return t;
8935
8936         purpose = TREE_PURPOSE (t);
8937         if (purpose)
8938           purpose = RECUR (purpose);
8939         value = TREE_VALUE (t);
8940         if (value)
8941           value = RECUR (value);
8942         chain = TREE_CHAIN (t);
8943         if (chain && chain != void_type_node)
8944           chain = RECUR (chain);
8945         if (purpose == TREE_PURPOSE (t)
8946             && value == TREE_VALUE (t)
8947             && chain == TREE_CHAIN (t))
8948           return t;
8949         return tree_cons (purpose, value, chain);
8950       }
8951
8952     case COMPONENT_REF:
8953       {
8954         tree object;
8955         tree object_type;
8956         tree member;
8957
8958         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8959                                                      args, complain, in_decl);
8960         /* Remember that there was a reference to this entity.  */
8961         if (DECL_P (object))
8962           mark_used (object);
8963         object_type = TREE_TYPE (object);
8964
8965         member = TREE_OPERAND (t, 1);
8966         if (BASELINK_P (member))
8967           member = tsubst_baselink (member,
8968                                     non_reference (TREE_TYPE (object)),
8969                                     args, complain, in_decl);
8970         else
8971           member = tsubst_copy (member, args, complain, in_decl);
8972         if (member == error_mark_node)
8973           return error_mark_node;
8974
8975         if (object_type && !CLASS_TYPE_P (object_type))
8976           {
8977             if (TREE_CODE (member) == BIT_NOT_EXPR)
8978               return finish_pseudo_destructor_expr (object,
8979                                                     NULL_TREE,
8980                                                     object_type);
8981             else if (TREE_CODE (member) == SCOPE_REF
8982                      && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
8983               return finish_pseudo_destructor_expr (object,
8984                                                     object,
8985                                                     object_type);
8986           }
8987         else if (TREE_CODE (member) == SCOPE_REF
8988                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
8989           {
8990             tree tmpl;
8991             tree args;
8992
8993             /* Lookup the template functions now that we know what the
8994                scope is.  */
8995             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
8996             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
8997             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
8998                                             /*is_type_p=*/false,
8999                                             /*complain=*/false);
9000             if (BASELINK_P (member))
9001               {
9002                 BASELINK_FUNCTIONS (member)
9003                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
9004                               args);
9005                 member = (adjust_result_of_qualified_name_lookup
9006                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
9007                            object_type));
9008               }
9009             else
9010               {
9011                 qualified_name_lookup_error (object_type, tmpl, member);
9012                 return error_mark_node;
9013               }
9014           }
9015         else if (TREE_CODE (member) == SCOPE_REF
9016                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
9017                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
9018           {
9019             if (complain & tf_error)
9020               {
9021                 if (TYPE_P (TREE_OPERAND (member, 0)))
9022                   error ("%qT is not a class or namespace",
9023                          TREE_OPERAND (member, 0));
9024                 else
9025                   error ("%qD is not a class or namespace",
9026                          TREE_OPERAND (member, 0));
9027               }
9028             return error_mark_node;
9029           }
9030         else if (TREE_CODE (member) == FIELD_DECL)
9031           return finish_non_static_data_member (member, object, NULL_TREE);
9032
9033         return finish_class_member_access_expr (object, member,
9034                                                 /*template_p=*/false);
9035       }
9036
9037     case THROW_EXPR:
9038       return build_throw
9039         (RECUR (TREE_OPERAND (t, 0)));
9040
9041     case CONSTRUCTOR:
9042       {
9043         VEC(constructor_elt,gc) *n;
9044         constructor_elt *ce;
9045         unsigned HOST_WIDE_INT idx;
9046         tree r;
9047         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9048         bool process_index_p;
9049
9050         /* digest_init will do the wrong thing if we let it.  */
9051         if (type && TYPE_PTRMEMFUNC_P (type))
9052           return t;
9053
9054         /* We do not want to process the index of aggregate
9055            initializers as they are identifier nodes which will be
9056            looked up by digest_init.  */
9057         process_index_p = !(type && IS_AGGR_TYPE (type));
9058
9059         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
9060         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
9061           {
9062             if (ce->index && process_index_p)
9063               ce->index = RECUR (ce->index);
9064             ce->value = RECUR (ce->value);
9065           }
9066
9067         r = build_constructor (NULL_TREE, n);
9068         TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
9069
9070         if (type)
9071           return digest_init (type, r);
9072         return r;
9073       }
9074
9075     case TYPEID_EXPR:
9076       {
9077         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
9078         if (TYPE_P (operand_0))
9079           return get_typeid (operand_0);
9080         return build_typeid (operand_0);
9081       }
9082
9083     case VAR_DECL:
9084       if (!args)
9085         return t;
9086       /* Fall through */
9087
9088     case PARM_DECL:
9089       {
9090         tree r = tsubst_copy (t, args, complain, in_decl);
9091
9092         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
9093           /* If the original type was a reference, we'll be wrapped in
9094              the appropriate INDIRECT_REF.  */
9095           r = convert_from_reference (r);
9096         return r;
9097       }
9098
9099     case VA_ARG_EXPR:
9100       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
9101                              tsubst_copy (TREE_TYPE (t), args, complain,
9102                                           in_decl));
9103
9104     case OFFSETOF_EXPR:
9105       return fold_offsetof (RECUR (TREE_OPERAND (t, 0)));
9106
9107     case STMT_EXPR:
9108       {
9109         tree old_stmt_expr = cur_stmt_expr;
9110         tree stmt_expr = begin_stmt_expr ();
9111
9112         cur_stmt_expr = stmt_expr;
9113         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl);
9114         stmt_expr = finish_stmt_expr (stmt_expr, false);
9115         cur_stmt_expr = old_stmt_expr;
9116
9117         return stmt_expr;
9118       }
9119
9120     case CONST_DECL:
9121       t = tsubst_copy (t, args, complain, in_decl);
9122       /* As in finish_id_expression, we resolve enumeration constants
9123          to their underlying values.  */
9124       if (TREE_CODE (t) == CONST_DECL)
9125         return DECL_INITIAL (t);
9126       return t;
9127
9128     default:
9129       /* Handle Objective-C++ constructs, if appropriate.  */
9130       {
9131         tree subst
9132           = objcp_tsubst_copy_and_build (t, args, complain,
9133                                          in_decl, /*function_p=*/false);
9134         if (subst)
9135           return subst;
9136       }
9137       return tsubst_copy (t, args, complain, in_decl);
9138     }
9139
9140 #undef RECUR
9141 }
9142
9143 /* Verify that the instantiated ARGS are valid. For type arguments,
9144    make sure that the type's linkage is ok. For non-type arguments,
9145    make sure they are constants if they are integral or enumerations.
9146    Emit an error under control of COMPLAIN, and return TRUE on error.  */
9147
9148 static bool
9149 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
9150 {
9151   int ix, len = DECL_NTPARMS (tmpl);
9152   bool result = false;
9153
9154   for (ix = 0; ix != len; ix++)
9155     {
9156       tree t = TREE_VEC_ELT (args, ix);
9157
9158       if (TYPE_P (t))
9159         {
9160           /* [basic.link]: A name with no linkage (notably, the name
9161              of a class or enumeration declared in a local scope)
9162              shall not be used to declare an entity with linkage.
9163              This implies that names with no linkage cannot be used as
9164              template arguments.  */
9165           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
9166
9167           if (nt)
9168             {
9169               /* DR 488 makes use of a type with no linkage cause
9170                  type deduction to fail.  */ 
9171               if (complain & tf_error)
9172                 {
9173                   if (TYPE_ANONYMOUS_P (nt))
9174                     error ("%qT is/uses anonymous type", t);
9175                   else
9176                     error ("template argument for %qD uses local type %qT",
9177                            tmpl, t);
9178                 }
9179               result = true;
9180             }
9181           /* In order to avoid all sorts of complications, we do not
9182              allow variably-modified types as template arguments.  */
9183           else if (variably_modified_type_p (t, NULL_TREE))
9184             {
9185               if (complain & tf_error)
9186                 error ("%qT is a variably modified type", t);
9187               result = true;
9188             }
9189         }
9190       /* A non-type argument of integral or enumerated type must be a
9191          constant.  */
9192       else if (TREE_TYPE (t)
9193                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
9194                && !TREE_CONSTANT (t))
9195         {
9196           if (complain & tf_error)
9197             error ("integral expression %qE is not constant", t);
9198           result = true;
9199         }
9200     }
9201   if (result && (complain & tf_error))
9202     error ("  trying to instantiate %qD", tmpl);
9203   return result;
9204 }
9205
9206 /* Instantiate the indicated variable or function template TMPL with
9207    the template arguments in TARG_PTR.  */
9208
9209 tree
9210 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
9211 {
9212   tree fndecl;
9213   tree gen_tmpl;
9214   tree spec;
9215
9216   if (tmpl == error_mark_node)
9217     return error_mark_node;
9218
9219   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
9220
9221   /* If this function is a clone, handle it specially.  */
9222   if (DECL_CLONED_FUNCTION_P (tmpl))
9223     {
9224       tree spec;
9225       tree clone;
9226
9227       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
9228                                    complain);
9229       if (spec == error_mark_node)
9230         return error_mark_node;
9231
9232       /* Look for the clone.  */
9233       FOR_EACH_CLONE (clone, spec)
9234         if (DECL_NAME (clone) == DECL_NAME (tmpl))
9235           return clone;
9236       /* We should always have found the clone by now.  */
9237       gcc_unreachable ();
9238       return NULL_TREE;
9239     }
9240
9241   /* Check to see if we already have this specialization.  */
9242   spec = retrieve_specialization (tmpl, targ_ptr,
9243                                   /*class_specializations_p=*/false);
9244   if (spec != NULL_TREE)
9245     return spec;
9246
9247   gen_tmpl = most_general_template (tmpl);
9248   if (tmpl != gen_tmpl)
9249     {
9250       /* The TMPL is a partial instantiation.  To get a full set of
9251          arguments we must add the arguments used to perform the
9252          partial instantiation.  */
9253       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
9254                                               targ_ptr);
9255
9256       /* Check to see if we already have this specialization.  */
9257       spec = retrieve_specialization (gen_tmpl, targ_ptr,
9258                                       /*class_specializations_p=*/false);
9259       if (spec != NULL_TREE)
9260         return spec;
9261     }
9262
9263   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
9264                                complain))
9265     return error_mark_node;
9266
9267   /* We are building a FUNCTION_DECL, during which the access of its
9268      parameters and return types have to be checked.  However this
9269      FUNCTION_DECL which is the desired context for access checking
9270      is not built yet.  We solve this chicken-and-egg problem by
9271      deferring all checks until we have the FUNCTION_DECL.  */
9272   push_deferring_access_checks (dk_deferred);
9273
9274   /* Substitute template parameters.  */
9275   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
9276                    targ_ptr, complain, gen_tmpl);
9277   if (fndecl == error_mark_node)
9278     return error_mark_node;
9279
9280   /* Now we know the specialization, compute access previously
9281      deferred.  */
9282   push_access_scope (fndecl);
9283   perform_deferred_access_checks ();
9284   pop_access_scope (fndecl);
9285   pop_deferring_access_checks ();
9286
9287   /* The DECL_TI_TEMPLATE should always be the immediate parent
9288      template, not the most general template.  */
9289   DECL_TI_TEMPLATE (fndecl) = tmpl;
9290
9291   /* If we've just instantiated the main entry point for a function,
9292      instantiate all the alternate entry points as well.  We do this
9293      by cloning the instantiation of the main entry point, not by
9294      instantiating the template clones.  */
9295   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
9296     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
9297
9298   return fndecl;
9299 }
9300
9301 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
9302    arguments that are being used when calling it.  TARGS is a vector
9303    into which the deduced template arguments are placed.
9304
9305    Return zero for success, 2 for an incomplete match that doesn't resolve
9306    all the types, and 1 for complete failure.  An error message will be
9307    printed only for an incomplete match.
9308
9309    If FN is a conversion operator, or we are trying to produce a specific
9310    specialization, RETURN_TYPE is the return type desired.
9311
9312    The EXPLICIT_TARGS are explicit template arguments provided via a
9313    template-id.
9314
9315    The parameter STRICT is one of:
9316
9317    DEDUCE_CALL:
9318      We are deducing arguments for a function call, as in
9319      [temp.deduct.call].
9320
9321    DEDUCE_CONV:
9322      We are deducing arguments for a conversion function, as in
9323      [temp.deduct.conv].
9324
9325    DEDUCE_EXACT:
9326      We are deducing arguments when doing an explicit instantiation
9327      as in [temp.explicit], when determining an explicit specialization
9328      as in [temp.expl.spec], or when taking the address of a function
9329      template, as in [temp.deduct.funcaddr].  */
9330
9331 int
9332 fn_type_unification (tree fn,
9333                      tree explicit_targs,
9334                      tree targs,
9335                      tree args,
9336                      tree return_type,
9337                      unification_kind_t strict,
9338                      int flags)
9339 {
9340   tree parms;
9341   tree fntype;
9342   int result;
9343
9344   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
9345
9346   fntype = TREE_TYPE (fn);
9347   if (explicit_targs)
9348     {
9349       /* [temp.deduct]
9350
9351          The specified template arguments must match the template
9352          parameters in kind (i.e., type, nontype, template), and there
9353          must not be more arguments than there are parameters;
9354          otherwise type deduction fails.
9355
9356          Nontype arguments must match the types of the corresponding
9357          nontype template parameters, or must be convertible to the
9358          types of the corresponding nontype parameters as specified in
9359          _temp.arg.nontype_, otherwise type deduction fails.
9360
9361          All references in the function type of the function template
9362          to the corresponding template parameters are replaced by the
9363          specified template argument values.  If a substitution in a
9364          template parameter or in the function type of the function
9365          template results in an invalid type, type deduction fails.  */
9366       int i;
9367       tree converted_args;
9368       bool incomplete;
9369
9370       if (explicit_targs == error_mark_node)
9371         return 1;
9372
9373       converted_args
9374         = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9375                                   explicit_targs, NULL_TREE, tf_none,
9376                                   /*require_all_args=*/false,
9377                                   /*use_default_args=*/false));
9378       if (converted_args == error_mark_node)
9379         return 1;
9380
9381       /* Substitute the explicit args into the function type.  This is
9382          necessary so that, for instance, explicitly declared function
9383          arguments can match null pointed constants.  If we were given
9384          an incomplete set of explicit args, we must not do semantic
9385          processing during substitution as we could create partial
9386          instantiations.  */
9387       incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
9388       processing_template_decl += incomplete;
9389       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
9390       processing_template_decl -= incomplete;
9391
9392       if (fntype == error_mark_node)
9393         return 1;
9394
9395       /* Place the explicitly specified arguments in TARGS.  */
9396       for (i = NUM_TMPL_ARGS (converted_args); i--;)
9397         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
9398     }
9399
9400   parms = TYPE_ARG_TYPES (fntype);
9401   /* Never do unification on the 'this' parameter.  */
9402   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
9403     parms = TREE_CHAIN (parms);
9404
9405   if (return_type)
9406     {
9407       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
9408       args = tree_cons (NULL_TREE, return_type, args);
9409     }
9410
9411   /* We allow incomplete unification without an error message here
9412      because the standard doesn't seem to explicitly prohibit it.  Our
9413      callers must be ready to deal with unification failures in any
9414      event.  */
9415   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9416                                   targs, parms, args, /*subr=*/0,
9417                                   strict, flags);
9418
9419   if (result == 0)
9420     /* All is well so far.  Now, check:
9421
9422        [temp.deduct]
9423
9424        When all template arguments have been deduced, all uses of
9425        template parameters in nondeduced contexts are replaced with
9426        the corresponding deduced argument values.  If the
9427        substitution results in an invalid type, as described above,
9428        type deduction fails.  */
9429     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
9430         == error_mark_node)
9431       return 1;
9432
9433   return result;
9434 }
9435
9436 /* Adjust types before performing type deduction, as described in
9437    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
9438    sections are symmetric.  PARM is the type of a function parameter
9439    or the return type of the conversion function.  ARG is the type of
9440    the argument passed to the call, or the type of the value
9441    initialized with the result of the conversion function.  */
9442
9443 static int
9444 maybe_adjust_types_for_deduction (unification_kind_t strict,
9445                                   tree* parm,
9446                                   tree* arg)
9447 {
9448   int result = 0;
9449
9450   switch (strict)
9451     {
9452     case DEDUCE_CALL:
9453       break;
9454
9455     case DEDUCE_CONV:
9456       {
9457         /* Swap PARM and ARG throughout the remainder of this
9458            function; the handling is precisely symmetric since PARM
9459            will initialize ARG rather than vice versa.  */
9460         tree* temp = parm;
9461         parm = arg;
9462         arg = temp;
9463         break;
9464       }
9465
9466     case DEDUCE_EXACT:
9467       /* There is nothing to do in this case.  */
9468       return 0;
9469
9470     default:
9471       gcc_unreachable ();
9472     }
9473
9474   if (TREE_CODE (*parm) != REFERENCE_TYPE)
9475     {
9476       /* [temp.deduct.call]
9477
9478          If P is not a reference type:
9479
9480          --If A is an array type, the pointer type produced by the
9481          array-to-pointer standard conversion (_conv.array_) is
9482          used in place of A for type deduction; otherwise,
9483
9484          --If A is a function type, the pointer type produced by
9485          the function-to-pointer standard conversion
9486          (_conv.func_) is used in place of A for type deduction;
9487          otherwise,
9488
9489          --If A is a cv-qualified type, the top level
9490          cv-qualifiers of A's type are ignored for type
9491          deduction.  */
9492       if (TREE_CODE (*arg) == ARRAY_TYPE)
9493         *arg = build_pointer_type (TREE_TYPE (*arg));
9494       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
9495         *arg = build_pointer_type (*arg);
9496       else
9497         *arg = TYPE_MAIN_VARIANT (*arg);
9498     }
9499
9500   /* [temp.deduct.call]
9501
9502      If P is a cv-qualified type, the top level cv-qualifiers
9503      of P's type are ignored for type deduction.  If P is a
9504      reference type, the type referred to by P is used for
9505      type deduction.  */
9506   *parm = TYPE_MAIN_VARIANT (*parm);
9507   if (TREE_CODE (*parm) == REFERENCE_TYPE)
9508     {
9509       *parm = TREE_TYPE (*parm);
9510       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9511     }
9512
9513   /* DR 322. For conversion deduction, remove a reference type on parm
9514      too (which has been swapped into ARG).  */
9515   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
9516     *arg = TREE_TYPE (*arg);
9517
9518   return result;
9519 }
9520
9521 /* Most parms like fn_type_unification.
9522
9523    If SUBR is 1, we're being called recursively (to unify the
9524    arguments of a function or method parameter of a function
9525    template). */
9526
9527 static int
9528 type_unification_real (tree tparms,
9529                        tree targs,
9530                        tree xparms,
9531                        tree xargs,
9532                        int subr,
9533                        unification_kind_t strict,
9534                        int flags)
9535 {
9536   tree parm, arg;
9537   int i;
9538   int ntparms = TREE_VEC_LENGTH (tparms);
9539   int sub_strict;
9540   int saw_undeduced = 0;
9541   tree parms, args;
9542
9543   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
9544   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
9545   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
9546   gcc_assert (ntparms > 0);
9547
9548   switch (strict)
9549     {
9550     case DEDUCE_CALL:
9551       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
9552                     | UNIFY_ALLOW_DERIVED);
9553       break;
9554
9555     case DEDUCE_CONV:
9556       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
9557       break;
9558
9559     case DEDUCE_EXACT:
9560       sub_strict = UNIFY_ALLOW_NONE;
9561       break;
9562
9563     default:
9564       gcc_unreachable ();
9565     }
9566
9567  again:
9568   parms = xparms;
9569   args = xargs;
9570
9571   while (parms && parms != void_list_node
9572          && args && args != void_list_node)
9573     {
9574       parm = TREE_VALUE (parms);
9575       parms = TREE_CHAIN (parms);
9576       arg = TREE_VALUE (args);
9577       args = TREE_CHAIN (args);
9578
9579       if (arg == error_mark_node)
9580         return 1;
9581       if (arg == unknown_type_node)
9582         /* We can't deduce anything from this, but we might get all the
9583            template args from other function args.  */
9584         continue;
9585
9586       /* Conversions will be performed on a function argument that
9587          corresponds with a function parameter that contains only
9588          non-deducible template parameters and explicitly specified
9589          template parameters.  */
9590       if (!uses_template_parms (parm))
9591         {
9592           tree type;
9593
9594           if (!TYPE_P (arg))
9595             type = TREE_TYPE (arg);
9596           else
9597             type = arg;
9598
9599           if (same_type_p (parm, type))
9600             continue;
9601           if (strict != DEDUCE_EXACT
9602               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg, 
9603                                   flags))
9604             continue;
9605           
9606           return 1;
9607         }
9608
9609       if (!TYPE_P (arg))
9610         {
9611           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
9612           if (type_unknown_p (arg))
9613             {
9614               /* [temp.deduct.type] A template-argument can be deduced from
9615                  a pointer to function or pointer to member function
9616                  argument if the set of overloaded functions does not
9617                  contain function templates and at most one of a set of
9618                  overloaded functions provides a unique match.  */
9619
9620               if (resolve_overloaded_unification
9621                   (tparms, targs, parm, arg, strict, sub_strict)
9622                   != 0)
9623                 return 1;
9624               continue;
9625             }
9626           arg = TREE_TYPE (arg);
9627           if (arg == error_mark_node)
9628             return 1;
9629         }
9630
9631       {
9632         int arg_strict = sub_strict;
9633
9634         if (!subr)
9635           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9636
9637         if (unify (tparms, targs, parm, arg, arg_strict))
9638           return 1;
9639       }
9640     }
9641
9642   /* Fail if we've reached the end of the parm list, and more args
9643      are present, and the parm list isn't variadic.  */
9644   if (args && args != void_list_node && parms == void_list_node)
9645     return 1;
9646   /* Fail if parms are left and they don't have default values.  */
9647   if (parms && parms != void_list_node
9648       && TREE_PURPOSE (parms) == NULL_TREE)
9649     return 1;
9650
9651   if (!subr)
9652     for (i = 0; i < ntparms; i++)
9653       if (!TREE_VEC_ELT (targs, i))
9654         {
9655           tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
9656
9657           /* If this is an undeduced nontype parameter that depends on
9658              a type parameter, try another pass; its type may have been
9659              deduced from a later argument than the one from which
9660              this parameter can be deduced.  */
9661           if (TREE_CODE (tparm) == PARM_DECL
9662               && uses_template_parms (TREE_TYPE (tparm))
9663               && !saw_undeduced++)
9664             goto again;
9665
9666           return 2;
9667         }
9668
9669   return 0;
9670 }
9671
9672 /* Subroutine of type_unification_real.  Args are like the variables at the
9673    call site.  ARG is an overloaded function (or template-id); we try
9674    deducing template args from each of the overloads, and if only one
9675    succeeds, we go with that.  Modifies TARGS and returns 0 on success.  */
9676
9677 static int
9678 resolve_overloaded_unification (tree tparms,
9679                                 tree targs,
9680                                 tree parm,
9681                                 tree arg,
9682                                 unification_kind_t strict,
9683                                 int sub_strict)
9684 {
9685   tree tempargs = copy_node (targs);
9686   int good = 0;
9687   bool addr_p;
9688
9689   if (TREE_CODE (arg) == ADDR_EXPR)
9690     {
9691       arg = TREE_OPERAND (arg, 0);
9692       addr_p = true;
9693     }
9694   else
9695     addr_p = false;
9696
9697   if (TREE_CODE (arg) == COMPONENT_REF)
9698     /* Handle `&x' where `x' is some static or non-static member
9699        function name.  */
9700     arg = TREE_OPERAND (arg, 1);
9701
9702   if (TREE_CODE (arg) == OFFSET_REF)
9703     arg = TREE_OPERAND (arg, 1);
9704
9705   /* Strip baselink information.  */
9706   if (BASELINK_P (arg))
9707     arg = BASELINK_FUNCTIONS (arg);
9708
9709   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
9710     {
9711       /* If we got some explicit template args, we need to plug them into
9712          the affected templates before we try to unify, in case the
9713          explicit args will completely resolve the templates in question.  */
9714
9715       tree expl_subargs = TREE_OPERAND (arg, 1);
9716       arg = TREE_OPERAND (arg, 0);
9717
9718       for (; arg; arg = OVL_NEXT (arg))
9719         {
9720           tree fn = OVL_CURRENT (arg);
9721           tree subargs, elem;
9722
9723           if (TREE_CODE (fn) != TEMPLATE_DECL)
9724             continue;
9725
9726           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
9727                                   expl_subargs, /*check_ret=*/false);
9728           if (subargs)
9729             {
9730               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
9731               good += try_one_overload (tparms, targs, tempargs, parm,
9732                                         elem, strict, sub_strict, addr_p);
9733             }
9734         }
9735     }
9736   else
9737     {
9738       gcc_assert (TREE_CODE (arg) == OVERLOAD
9739                   || TREE_CODE (arg) == FUNCTION_DECL);
9740
9741       for (; arg; arg = OVL_NEXT (arg))
9742         good += try_one_overload (tparms, targs, tempargs, parm,
9743                                   TREE_TYPE (OVL_CURRENT (arg)),
9744                                   strict, sub_strict, addr_p);
9745     }
9746
9747   /* [temp.deduct.type] A template-argument can be deduced from a pointer
9748      to function or pointer to member function argument if the set of
9749      overloaded functions does not contain function templates and at most
9750      one of a set of overloaded functions provides a unique match.
9751
9752      So if we found multiple possibilities, we return success but don't
9753      deduce anything.  */
9754
9755   if (good == 1)
9756     {
9757       int i = TREE_VEC_LENGTH (targs);
9758       for (; i--; )
9759         if (TREE_VEC_ELT (tempargs, i))
9760           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
9761     }
9762   if (good)
9763     return 0;
9764
9765   return 1;
9766 }
9767
9768 /* Subroutine of resolve_overloaded_unification; does deduction for a single
9769    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
9770    different overloads deduce different arguments for a given parm.
9771    ADDR_P is true if the expression for which deduction is being
9772    performed was of the form "& fn" rather than simply "fn".
9773
9774    Returns 1 on success.  */
9775
9776 static int
9777 try_one_overload (tree tparms,
9778                   tree orig_targs,
9779                   tree targs,
9780                   tree parm,
9781                   tree arg,
9782                   unification_kind_t strict,
9783                   int sub_strict,
9784                   bool addr_p)
9785 {
9786   int nargs;
9787   tree tempargs;
9788   int i;
9789
9790   /* [temp.deduct.type] A template-argument can be deduced from a pointer
9791      to function or pointer to member function argument if the set of
9792      overloaded functions does not contain function templates and at most
9793      one of a set of overloaded functions provides a unique match.
9794
9795      So if this is a template, just return success.  */
9796
9797   if (uses_template_parms (arg))
9798     return 1;
9799
9800   if (TREE_CODE (arg) == METHOD_TYPE)
9801     arg = build_ptrmemfunc_type (build_pointer_type (arg));
9802   else if (addr_p)
9803     arg = build_pointer_type (arg);
9804
9805   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9806
9807   /* We don't copy orig_targs for this because if we have already deduced
9808      some template args from previous args, unify would complain when we
9809      try to deduce a template parameter for the same argument, even though
9810      there isn't really a conflict.  */
9811   nargs = TREE_VEC_LENGTH (targs);
9812   tempargs = make_tree_vec (nargs);
9813
9814   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
9815     return 0;
9816
9817   /* First make sure we didn't deduce anything that conflicts with
9818      explicitly specified args.  */
9819   for (i = nargs; i--; )
9820     {
9821       tree elt = TREE_VEC_ELT (tempargs, i);
9822       tree oldelt = TREE_VEC_ELT (orig_targs, i);
9823
9824       if (!elt)
9825         /*NOP*/;
9826       else if (uses_template_parms (elt))
9827         /* Since we're unifying against ourselves, we will fill in
9828            template args used in the function parm list with our own
9829            template parms.  Discard them.  */
9830         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
9831       else if (oldelt && !template_args_equal (oldelt, elt))
9832         return 0;
9833     }
9834
9835   for (i = nargs; i--; )
9836     {
9837       tree elt = TREE_VEC_ELT (tempargs, i);
9838
9839       if (elt)
9840         TREE_VEC_ELT (targs, i) = elt;
9841     }
9842
9843   return 1;
9844 }
9845
9846 /* PARM is a template class (perhaps with unbound template
9847    parameters).  ARG is a fully instantiated type.  If ARG can be
9848    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
9849    TARGS are as for unify.  */
9850
9851 static tree
9852 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
9853 {
9854   tree copy_of_targs;
9855
9856   if (!CLASSTYPE_TEMPLATE_INFO (arg)
9857       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
9858           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
9859     return NULL_TREE;
9860
9861   /* We need to make a new template argument vector for the call to
9862      unify.  If we used TARGS, we'd clutter it up with the result of
9863      the attempted unification, even if this class didn't work out.
9864      We also don't want to commit ourselves to all the unifications
9865      we've already done, since unification is supposed to be done on
9866      an argument-by-argument basis.  In other words, consider the
9867      following pathological case:
9868
9869        template <int I, int J, int K>
9870        struct S {};
9871
9872        template <int I, int J>
9873        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
9874
9875        template <int I, int J, int K>
9876        void f(S<I, J, K>, S<I, I, I>);
9877
9878        void g() {
9879          S<0, 0, 0> s0;
9880          S<0, 1, 2> s2;
9881
9882          f(s0, s2);
9883        }
9884
9885      Now, by the time we consider the unification involving `s2', we
9886      already know that we must have `f<0, 0, 0>'.  But, even though
9887      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
9888      because there are two ways to unify base classes of S<0, 1, 2>
9889      with S<I, I, I>.  If we kept the already deduced knowledge, we
9890      would reject the possibility I=1.  */
9891   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
9892
9893   /* If unification failed, we're done.  */
9894   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
9895              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
9896     return NULL_TREE;
9897
9898   return arg;
9899 }
9900
9901 /* Given a template type PARM and a class type ARG, find the unique
9902    base type in ARG that is an instance of PARM.  We do not examine
9903    ARG itself; only its base-classes.  If there is not exactly one
9904    appropriate base class, return NULL_TREE.  PARM may be the type of
9905    a partial specialization, as well as a plain template type.  Used
9906    by unify.  */
9907
9908 static tree
9909 get_template_base (tree tparms, tree targs, tree parm, tree arg)
9910 {
9911   tree rval = NULL_TREE;
9912   tree binfo;
9913
9914   gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
9915
9916   binfo = TYPE_BINFO (complete_type (arg));
9917   if (!binfo)
9918     /* The type could not be completed.  */
9919     return NULL_TREE;
9920
9921   /* Walk in inheritance graph order.  The search order is not
9922      important, and this avoids multiple walks of virtual bases.  */
9923   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
9924     {
9925       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
9926
9927       if (r)
9928         {
9929           /* If there is more than one satisfactory baseclass, then:
9930
9931                [temp.deduct.call]
9932
9933               If they yield more than one possible deduced A, the type
9934               deduction fails.
9935
9936              applies.  */
9937           if (rval && !same_type_p (r, rval))
9938             return NULL_TREE;
9939
9940           rval = r;
9941         }
9942     }
9943
9944   return rval;
9945 }
9946
9947 /* Returns the level of DECL, which declares a template parameter.  */
9948
9949 static int
9950 template_decl_level (tree decl)
9951 {
9952   switch (TREE_CODE (decl))
9953     {
9954     case TYPE_DECL:
9955     case TEMPLATE_DECL:
9956       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
9957
9958     case PARM_DECL:
9959       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
9960
9961     default:
9962       gcc_unreachable ();
9963     }
9964   return 0;
9965 }
9966
9967 /* Decide whether ARG can be unified with PARM, considering only the
9968    cv-qualifiers of each type, given STRICT as documented for unify.
9969    Returns nonzero iff the unification is OK on that basis.  */
9970
9971 static int
9972 check_cv_quals_for_unify (int strict, tree arg, tree parm)
9973 {
9974   int arg_quals = cp_type_quals (arg);
9975   int parm_quals = cp_type_quals (parm);
9976
9977   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9978       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9979     {
9980       /*  Although a CVR qualifier is ignored when being applied to a
9981           substituted template parameter ([8.3.2]/1 for example), that
9982           does not apply during deduction [14.8.2.4]/1, (even though
9983           that is not explicitly mentioned, [14.8.2.4]/9 indicates
9984           this).  Except when we're allowing additional CV qualifiers
9985           at the outer level [14.8.2.1]/3,1st bullet.  */
9986       if ((TREE_CODE (arg) == REFERENCE_TYPE
9987            || TREE_CODE (arg) == FUNCTION_TYPE
9988            || TREE_CODE (arg) == METHOD_TYPE)
9989           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
9990         return 0;
9991
9992       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
9993           && (parm_quals & TYPE_QUAL_RESTRICT))
9994         return 0;
9995     }
9996
9997   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9998       && (arg_quals & parm_quals) != parm_quals)
9999     return 0;
10000
10001   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
10002       && (parm_quals & arg_quals) != arg_quals)
10003     return 0;
10004
10005   return 1;
10006 }
10007
10008 /* Deduce the value of template parameters.  TPARMS is the (innermost)
10009    set of template parameters to a template.  TARGS is the bindings
10010    for those template parameters, as determined thus far; TARGS may
10011    include template arguments for outer levels of template parameters
10012    as well.  PARM is a parameter to a template function, or a
10013    subcomponent of that parameter; ARG is the corresponding argument.
10014    This function attempts to match PARM with ARG in a manner
10015    consistent with the existing assignments in TARGS.  If more values
10016    are deduced, then TARGS is updated.
10017
10018    Returns 0 if the type deduction succeeds, 1 otherwise.  The
10019    parameter STRICT is a bitwise or of the following flags:
10020
10021      UNIFY_ALLOW_NONE:
10022        Require an exact match between PARM and ARG.
10023      UNIFY_ALLOW_MORE_CV_QUAL:
10024        Allow the deduced ARG to be more cv-qualified (by qualification
10025        conversion) than ARG.
10026      UNIFY_ALLOW_LESS_CV_QUAL:
10027        Allow the deduced ARG to be less cv-qualified than ARG.
10028      UNIFY_ALLOW_DERIVED:
10029        Allow the deduced ARG to be a template base class of ARG,
10030        or a pointer to a template base class of the type pointed to by
10031        ARG.
10032      UNIFY_ALLOW_INTEGER:
10033        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
10034        case for more information.
10035      UNIFY_ALLOW_OUTER_LEVEL:
10036        This is the outermost level of a deduction. Used to determine validity
10037        of qualification conversions. A valid qualification conversion must
10038        have const qualified pointers leading up to the inner type which
10039        requires additional CV quals, except at the outer level, where const
10040        is not required [conv.qual]. It would be normal to set this flag in
10041        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
10042      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
10043        This is the outermost level of a deduction, and PARM can be more CV
10044        qualified at this point.
10045      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
10046        This is the outermost level of a deduction, and PARM can be less CV
10047        qualified at this point.  */
10048
10049 static int
10050 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
10051 {
10052   int idx;
10053   tree targ;
10054   tree tparm;
10055   int strict_in = strict;
10056
10057   /* I don't think this will do the right thing with respect to types.
10058      But the only case I've seen it in so far has been array bounds, where
10059      signedness is the only information lost, and I think that will be
10060      okay.  */
10061   while (TREE_CODE (parm) == NOP_EXPR)
10062     parm = TREE_OPERAND (parm, 0);
10063
10064   if (arg == error_mark_node)
10065     return 1;
10066   if (arg == unknown_type_node)
10067     /* We can't deduce anything from this, but we might get all the
10068        template args from other function args.  */
10069     return 0;
10070
10071   /* If PARM uses template parameters, then we can't bail out here,
10072      even if ARG == PARM, since we won't record unifications for the
10073      template parameters.  We might need them if we're trying to
10074      figure out which of two things is more specialized.  */
10075   if (arg == parm && !uses_template_parms (parm))
10076     return 0;
10077
10078   /* Immediately reject some pairs that won't unify because of
10079      cv-qualification mismatches.  */
10080   if (TREE_CODE (arg) == TREE_CODE (parm)
10081       && TYPE_P (arg)
10082       /* It is the elements of the array which hold the cv quals of an array
10083          type, and the elements might be template type parms. We'll check
10084          when we recurse.  */
10085       && TREE_CODE (arg) != ARRAY_TYPE
10086       /* We check the cv-qualifiers when unifying with template type
10087          parameters below.  We want to allow ARG `const T' to unify with
10088          PARM `T' for example, when computing which of two templates
10089          is more specialized, for example.  */
10090       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
10091       && !check_cv_quals_for_unify (strict_in, arg, parm))
10092     return 1;
10093
10094   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
10095       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
10096     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
10097   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
10098   strict &= ~UNIFY_ALLOW_DERIVED;
10099   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
10100   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
10101
10102   switch (TREE_CODE (parm))
10103     {
10104     case TYPENAME_TYPE:
10105     case SCOPE_REF:
10106     case UNBOUND_CLASS_TEMPLATE:
10107       /* In a type which contains a nested-name-specifier, template
10108          argument values cannot be deduced for template parameters used
10109          within the nested-name-specifier.  */
10110       return 0;
10111
10112     case TEMPLATE_TYPE_PARM:
10113     case TEMPLATE_TEMPLATE_PARM:
10114     case BOUND_TEMPLATE_TEMPLATE_PARM:
10115       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
10116
10117       if (TEMPLATE_TYPE_LEVEL (parm)
10118           != template_decl_level (tparm))
10119         /* The PARM is not one we're trying to unify.  Just check
10120            to see if it matches ARG.  */
10121         return (TREE_CODE (arg) == TREE_CODE (parm)
10122                 && same_type_p (parm, arg)) ? 0 : 1;
10123       idx = TEMPLATE_TYPE_IDX (parm);
10124       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
10125       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
10126
10127       /* Check for mixed types and values.  */
10128       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
10129            && TREE_CODE (tparm) != TYPE_DECL)
10130           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
10131               && TREE_CODE (tparm) != TEMPLATE_DECL))
10132         return 1;
10133
10134       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
10135         {
10136           /* ARG must be constructed from a template class or a template
10137              template parameter.  */
10138           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
10139               && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
10140             return 1;
10141
10142           {
10143             tree parmvec = TYPE_TI_ARGS (parm);
10144             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
10145             tree argtmplvec
10146               = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
10147             int i;
10148
10149             /* The resolution to DR150 makes clear that default
10150                arguments for an N-argument may not be used to bind T
10151                to a template template parameter with fewer than N
10152                parameters.  It is not safe to permit the binding of
10153                default arguments as an extension, as that may change
10154                the meaning of a conforming program.  Consider:
10155
10156                   struct Dense { static const unsigned int dim = 1; };
10157
10158                   template <template <typename> class View,
10159                             typename Block>
10160                   void operator+(float, View<Block> const&);
10161
10162                   template <typename Block, 
10163                             unsigned int Dim = Block::dim>
10164                   struct Lvalue_proxy { operator float() const; };
10165
10166                   void
10167                   test_1d (void) {
10168                     Lvalue_proxy<Dense> p;
10169                     float b;
10170                     b + p;
10171                   }
10172
10173               Here, if Lvalue_proxy is permitted to bind to View, then
10174               the global operator+ will be used; if they are not, the
10175               Lvalue_proxy will be converted to float.  */        
10176             if (coerce_template_parms (argtmplvec, parmvec, 
10177                                        TYPE_TI_TEMPLATE (parm),
10178                                        tf_none,
10179                                        /*require_all_args=*/true,
10180                                        /*use_default_args=*/false)
10181                 == error_mark_node)
10182               return 1;
10183
10184             /* Deduce arguments T, i from TT<T> or TT<i>.
10185                We check each element of PARMVEC and ARGVEC individually
10186                rather than the whole TREE_VEC since they can have
10187                different number of elements.  */
10188
10189             for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
10190               {
10191                 if (unify (tparms, targs,
10192                            TREE_VEC_ELT (parmvec, i),
10193                            TREE_VEC_ELT (argvec, i),
10194                            UNIFY_ALLOW_NONE))
10195                   return 1;
10196               }
10197           }
10198           arg = TYPE_TI_TEMPLATE (arg);
10199
10200           /* Fall through to deduce template name.  */
10201         }
10202
10203       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
10204           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
10205         {
10206           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
10207
10208           /* Simple cases: Value already set, does match or doesn't.  */
10209           if (targ != NULL_TREE && template_args_equal (targ, arg))
10210             return 0;
10211           else if (targ)
10212             return 1;
10213         }
10214       else
10215         {
10216           /* If PARM is `const T' and ARG is only `int', we don't have
10217              a match unless we are allowing additional qualification.
10218              If ARG is `const int' and PARM is just `T' that's OK;
10219              that binds `const int' to `T'.  */
10220           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
10221                                          arg, parm))
10222             return 1;
10223
10224           /* Consider the case where ARG is `const volatile int' and
10225              PARM is `const T'.  Then, T should be `volatile int'.  */
10226           arg = cp_build_qualified_type_real
10227             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
10228           if (arg == error_mark_node)
10229             return 1;
10230
10231           /* Simple cases: Value already set, does match or doesn't.  */
10232           if (targ != NULL_TREE && same_type_p (targ, arg))
10233             return 0;
10234           else if (targ)
10235             return 1;
10236
10237           /* Make sure that ARG is not a variable-sized array.  (Note
10238              that were talking about variable-sized arrays (like
10239              `int[n]'), rather than arrays of unknown size (like
10240              `int[]').)  We'll get very confused by such a type since
10241              the bound of the array will not be computable in an
10242              instantiation.  Besides, such types are not allowed in
10243              ISO C++, so we can do as we please here.  */
10244           if (variably_modified_type_p (arg, NULL_TREE))
10245             return 1;
10246         }
10247
10248       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
10249       return 0;
10250
10251     case TEMPLATE_PARM_INDEX:
10252       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
10253
10254       if (TEMPLATE_PARM_LEVEL (parm)
10255           != template_decl_level (tparm))
10256         /* The PARM is not one we're trying to unify.  Just check
10257            to see if it matches ARG.  */
10258         return !(TREE_CODE (arg) == TREE_CODE (parm)
10259                  && cp_tree_equal (parm, arg));
10260
10261       idx = TEMPLATE_PARM_IDX (parm);
10262       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
10263
10264       if (targ)
10265         return !cp_tree_equal (targ, arg);
10266
10267       /* [temp.deduct.type] If, in the declaration of a function template
10268          with a non-type template-parameter, the non-type
10269          template-parameter is used in an expression in the function
10270          parameter-list and, if the corresponding template-argument is
10271          deduced, the template-argument type shall match the type of the
10272          template-parameter exactly, except that a template-argument
10273          deduced from an array bound may be of any integral type.
10274          The non-type parameter might use already deduced type parameters.  */
10275       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
10276       if (!TREE_TYPE (arg))
10277         /* Template-parameter dependent expression.  Just accept it for now.
10278            It will later be processed in convert_template_argument.  */
10279         ;
10280       else if (same_type_p (TREE_TYPE (arg), tparm))
10281         /* OK */;
10282       else if ((strict & UNIFY_ALLOW_INTEGER)
10283                && (TREE_CODE (tparm) == INTEGER_TYPE
10284                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
10285         /* Convert the ARG to the type of PARM; the deduced non-type
10286            template argument must exactly match the types of the
10287            corresponding parameter.  */
10288         arg = fold (build_nop (TREE_TYPE (parm), arg));
10289       else if (uses_template_parms (tparm))
10290         /* We haven't deduced the type of this parameter yet.  Try again
10291            later.  */
10292         return 0;
10293       else
10294         return 1;
10295
10296       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
10297       return 0;
10298
10299     case PTRMEM_CST:
10300      {
10301         /* A pointer-to-member constant can be unified only with
10302          another constant.  */
10303       if (TREE_CODE (arg) != PTRMEM_CST)
10304         return 1;
10305
10306       /* Just unify the class member. It would be useless (and possibly
10307          wrong, depending on the strict flags) to unify also
10308          PTRMEM_CST_CLASS, because we want to be sure that both parm and
10309          arg refer to the same variable, even if through different
10310          classes. For instance:
10311
10312          struct A { int x; };
10313          struct B : A { };
10314
10315          Unification of &A::x and &B::x must succeed.  */
10316       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
10317                     PTRMEM_CST_MEMBER (arg), strict);
10318      }
10319
10320     case POINTER_TYPE:
10321       {
10322         if (TREE_CODE (arg) != POINTER_TYPE)
10323           return 1;
10324
10325         /* [temp.deduct.call]
10326
10327            A can be another pointer or pointer to member type that can
10328            be converted to the deduced A via a qualification
10329            conversion (_conv.qual_).
10330
10331            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
10332            This will allow for additional cv-qualification of the
10333            pointed-to types if appropriate.  */
10334
10335         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
10336           /* The derived-to-base conversion only persists through one
10337              level of pointers.  */
10338           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
10339
10340         return unify (tparms, targs, TREE_TYPE (parm),
10341                       TREE_TYPE (arg), strict);
10342       }
10343
10344     case REFERENCE_TYPE:
10345       if (TREE_CODE (arg) != REFERENCE_TYPE)
10346         return 1;
10347       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10348                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
10349
10350     case ARRAY_TYPE:
10351       if (TREE_CODE (arg) != ARRAY_TYPE)
10352         return 1;
10353       if ((TYPE_DOMAIN (parm) == NULL_TREE)
10354           != (TYPE_DOMAIN (arg) == NULL_TREE))
10355         return 1;
10356       if (TYPE_DOMAIN (parm) != NULL_TREE)
10357         {
10358           tree parm_max;
10359           tree arg_max;
10360
10361           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
10362           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
10363
10364           /* Our representation of array types uses "N - 1" as the
10365              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
10366              not an integer constant.  */
10367           if (TREE_CODE (parm_max) == MINUS_EXPR)
10368             {
10369               arg_max = fold_build2 (PLUS_EXPR,
10370                                      integer_type_node,
10371                                      arg_max,
10372                                      TREE_OPERAND (parm_max, 1));
10373               parm_max = TREE_OPERAND (parm_max, 0);
10374             }
10375
10376           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
10377             return 1;
10378         }
10379       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10380                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
10381
10382     case REAL_TYPE:
10383     case COMPLEX_TYPE:
10384     case VECTOR_TYPE:
10385     case INTEGER_TYPE:
10386     case BOOLEAN_TYPE:
10387     case ENUMERAL_TYPE:
10388     case VOID_TYPE:
10389       if (TREE_CODE (arg) != TREE_CODE (parm))
10390         return 1;
10391
10392       /* We have already checked cv-qualification at the top of the
10393          function.  */
10394       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
10395         return 1;
10396
10397       /* As far as unification is concerned, this wins.  Later checks
10398          will invalidate it if necessary.  */
10399       return 0;
10400
10401       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
10402       /* Type INTEGER_CST can come from ordinary constant template args.  */
10403     case INTEGER_CST:
10404       while (TREE_CODE (arg) == NOP_EXPR)
10405         arg = TREE_OPERAND (arg, 0);
10406
10407       if (TREE_CODE (arg) != INTEGER_CST)
10408         return 1;
10409       return !tree_int_cst_equal (parm, arg);
10410
10411     case TREE_VEC:
10412       {
10413         int i;
10414         if (TREE_CODE (arg) != TREE_VEC)
10415           return 1;
10416         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
10417           return 1;
10418         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
10419           if (unify (tparms, targs,
10420                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
10421                      UNIFY_ALLOW_NONE))
10422             return 1;
10423         return 0;
10424       }
10425
10426     case RECORD_TYPE:
10427     case UNION_TYPE:
10428       if (TREE_CODE (arg) != TREE_CODE (parm))
10429         return 1;
10430
10431       if (TYPE_PTRMEMFUNC_P (parm))
10432         {
10433           if (!TYPE_PTRMEMFUNC_P (arg))
10434             return 1;
10435
10436           return unify (tparms, targs,
10437                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
10438                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
10439                         strict);
10440         }
10441
10442       if (CLASSTYPE_TEMPLATE_INFO (parm))
10443         {
10444           tree t = NULL_TREE;
10445
10446           if (strict_in & UNIFY_ALLOW_DERIVED)
10447             {
10448               /* First, we try to unify the PARM and ARG directly.  */
10449               t = try_class_unification (tparms, targs,
10450                                          parm, arg);
10451
10452               if (!t)
10453                 {
10454                   /* Fallback to the special case allowed in
10455                      [temp.deduct.call]:
10456
10457                        If P is a class, and P has the form
10458                        template-id, then A can be a derived class of
10459                        the deduced A.  Likewise, if P is a pointer to
10460                        a class of the form template-id, A can be a
10461                        pointer to a derived class pointed to by the
10462                        deduced A.  */
10463                   t = get_template_base (tparms, targs, parm, arg);
10464
10465                   if (!t)
10466                     return 1;
10467                 }
10468             }
10469           else if (CLASSTYPE_TEMPLATE_INFO (arg)
10470                    && (CLASSTYPE_TI_TEMPLATE (parm)
10471                        == CLASSTYPE_TI_TEMPLATE (arg)))
10472             /* Perhaps PARM is something like S<U> and ARG is S<int>.
10473                Then, we should unify `int' and `U'.  */
10474             t = arg;
10475           else
10476             /* There's no chance of unification succeeding.  */
10477             return 1;
10478
10479           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
10480                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
10481         }
10482       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
10483         return 1;
10484       return 0;
10485
10486     case METHOD_TYPE:
10487     case FUNCTION_TYPE:
10488       if (TREE_CODE (arg) != TREE_CODE (parm))
10489         return 1;
10490
10491       /* CV qualifications for methods can never be deduced, they must
10492          match exactly.  We need to check them explicitly here,
10493          because type_unification_real treats them as any other
10494          cvqualified parameter.  */
10495       if (TREE_CODE (parm) == METHOD_TYPE
10496           && (!check_cv_quals_for_unify
10497               (UNIFY_ALLOW_NONE,
10498                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
10499                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
10500         return 1;
10501
10502       if (unify (tparms, targs, TREE_TYPE (parm),
10503                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
10504         return 1;
10505       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
10506                                     TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
10507                                     LOOKUP_NORMAL);
10508
10509     case OFFSET_TYPE:
10510       /* Unify a pointer to member with a pointer to member function, which
10511          deduces the type of the member as a function type. */
10512       if (TYPE_PTRMEMFUNC_P (arg))
10513         {
10514           tree method_type;
10515           tree fntype;
10516           cp_cv_quals cv_quals;
10517
10518           /* Check top-level cv qualifiers */
10519           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
10520             return 1;
10521
10522           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10523                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
10524             return 1;
10525
10526           /* Determine the type of the function we are unifying against. */
10527           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
10528           fntype =
10529             build_function_type (TREE_TYPE (method_type),
10530                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
10531
10532           /* Extract the cv-qualifiers of the member function from the
10533              implicit object parameter and place them on the function
10534              type to be restored later. */
10535           cv_quals =
10536             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
10537           fntype = build_qualified_type (fntype, cv_quals);
10538           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
10539         }
10540
10541       if (TREE_CODE (arg) != OFFSET_TYPE)
10542         return 1;
10543       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10544                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
10545         return 1;
10546       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10547                     strict);
10548
10549     case CONST_DECL:
10550       if (DECL_TEMPLATE_PARM_P (parm))
10551         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
10552       if (arg != integral_constant_value (parm))
10553         return 1;
10554       return 0;
10555
10556     case FIELD_DECL:
10557     case TEMPLATE_DECL:
10558       /* Matched cases are handled by the ARG == PARM test above.  */
10559       return 1;
10560
10561     default:
10562       gcc_assert (EXPR_P (parm));
10563
10564       /* We must be looking at an expression.  This can happen with
10565          something like:
10566
10567            template <int I>
10568            void foo(S<I>, S<I + 2>);
10569
10570          This is a "nondeduced context":
10571
10572            [deduct.type]
10573
10574            The nondeduced contexts are:
10575
10576            --A type that is a template-id in which one or more of
10577              the template-arguments is an expression that references
10578              a template-parameter.
10579
10580          In these cases, we assume deduction succeeded, but don't
10581          actually infer any unifications.  */
10582
10583       if (!uses_template_parms (parm)
10584           && !template_args_equal (parm, arg))
10585         return 1;
10586       else
10587         return 0;
10588     }
10589 }
10590 \f
10591 /* Note that DECL can be defined in this translation unit, if
10592    required.  */
10593
10594 static void
10595 mark_definable (tree decl)
10596 {
10597   tree clone;
10598   DECL_NOT_REALLY_EXTERN (decl) = 1;
10599   FOR_EACH_CLONE (clone, decl)
10600     DECL_NOT_REALLY_EXTERN (clone) = 1;
10601 }
10602
10603 /* Called if RESULT is explicitly instantiated, or is a member of an
10604    explicitly instantiated class.  */
10605
10606 void
10607 mark_decl_instantiated (tree result, int extern_p)
10608 {
10609   SET_DECL_EXPLICIT_INSTANTIATION (result);
10610
10611   /* If this entity has already been written out, it's too late to
10612      make any modifications.  */
10613   if (TREE_ASM_WRITTEN (result))
10614     return;
10615
10616   if (TREE_CODE (result) != FUNCTION_DECL)
10617     /* The TREE_PUBLIC flag for function declarations will have been
10618        set correctly by tsubst.  */
10619     TREE_PUBLIC (result) = 1;
10620
10621   /* This might have been set by an earlier implicit instantiation.  */
10622   DECL_COMDAT (result) = 0;
10623
10624   if (extern_p)
10625     DECL_NOT_REALLY_EXTERN (result) = 0;
10626   else
10627     {
10628       mark_definable (result);
10629       /* Always make artificials weak.  */
10630       if (DECL_ARTIFICIAL (result) && flag_weak)
10631         comdat_linkage (result);
10632       /* For WIN32 we also want to put explicit instantiations in
10633          linkonce sections.  */
10634       else if (TREE_PUBLIC (result))
10635         maybe_make_one_only (result);
10636     }
10637
10638   /* If EXTERN_P, then this function will not be emitted -- unless
10639      followed by an explicit instantiation, at which point its linkage
10640      will be adjusted.  If !EXTERN_P, then this function will be
10641      emitted here.  In neither circumstance do we want
10642      import_export_decl to adjust the linkage.  */
10643   DECL_INTERFACE_KNOWN (result) = 1;
10644 }
10645
10646 /* Given two function templates PAT1 and PAT2, return:
10647
10648    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
10649    -1 if PAT2 is more specialized than PAT1.
10650    0 if neither is more specialized.
10651
10652    LEN indicates the number of parameters we should consider
10653    (defaulted parameters should not be considered).
10654
10655    The 1998 std underspecified function template partial ordering, and
10656    DR214 addresses the issue.  We take pairs of arguments, one from
10657    each of the templates, and deduce them against each other.  One of
10658    the templates will be more specialized if all the *other*
10659    template's arguments deduce against its arguments and at least one
10660    of its arguments *does* *not* deduce against the other template's
10661    corresponding argument.  Deduction is done as for class templates.
10662    The arguments used in deduction have reference and top level cv
10663    qualifiers removed.  Iff both arguments were originally reference
10664    types *and* deduction succeeds in both directions, the template
10665    with the more cv-qualified argument wins for that pairing (if
10666    neither is more cv-qualified, they both are equal).  Unlike regular
10667    deduction, after all the arguments have been deduced in this way,
10668    we do *not* verify the deduced template argument values can be
10669    substituted into non-deduced contexts, nor do we have to verify
10670    that all template arguments have been deduced.  */
10671
10672 int
10673 more_specialized_fn (tree pat1, tree pat2, int len)
10674 {
10675   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
10676   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
10677   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
10678   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
10679   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
10680   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
10681   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
10682   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
10683   int better1 = 0;
10684   int better2 = 0;
10685   
10686   /* Remove the this parameter from non-static member functions.  If
10687      one is a non-static member function and the other is not a static
10688      member function, remove the first parameter from that function
10689      also.  This situation occurs for operator functions where we
10690      locate both a member function (with this pointer) and non-member
10691      operator (with explicit first operand).  */
10692   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
10693     {
10694       len--; /* LEN is the number of significant arguments for DECL1 */
10695       args1 = TREE_CHAIN (args1);
10696       if (!DECL_STATIC_FUNCTION_P (decl2))
10697         args2 = TREE_CHAIN (args2);
10698     }
10699   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
10700     {
10701       args2 = TREE_CHAIN (args2);
10702       if (!DECL_STATIC_FUNCTION_P (decl1))
10703         {
10704           len--;
10705           args1 = TREE_CHAIN (args1);
10706         }
10707     }
10708     
10709   /* If only one is a conversion operator, they are unordered.  */
10710   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
10711     return 0;
10712
10713   /* Consider the return type for a conversion function */
10714   if (DECL_CONV_FN_P (decl1))
10715     {
10716       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
10717       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
10718       len++;
10719     }
10720
10721   processing_template_decl++;
10722
10723   while (len--)
10724     {
10725       tree arg1 = TREE_VALUE (args1);
10726       tree arg2 = TREE_VALUE (args2);
10727       int deduce1, deduce2;
10728       int quals1 = -1;
10729       int quals2 = -1;
10730
10731       if (TREE_CODE (arg1) == REFERENCE_TYPE)
10732         {
10733           arg1 = TREE_TYPE (arg1);
10734           quals1 = cp_type_quals (arg1);
10735         }
10736
10737       if (TREE_CODE (arg2) == REFERENCE_TYPE)
10738         {
10739           arg2 = TREE_TYPE (arg2);
10740           quals2 = cp_type_quals (arg2);
10741         }
10742
10743       if ((quals1 < 0) != (quals2 < 0))
10744         {
10745           /* Only of the args is a reference, see if we should apply
10746              array/function pointer decay to it.  This is not part of
10747              DR214, but is, IMHO, consistent with the deduction rules
10748              for the function call itself, and with our earlier
10749              implementation of the underspecified partial ordering
10750              rules.  (nathan).  */
10751           if (quals1 >= 0)
10752             {
10753               switch (TREE_CODE (arg1))
10754                 {
10755                 case ARRAY_TYPE:
10756                   arg1 = TREE_TYPE (arg1);
10757                   /* FALLTHROUGH. */
10758                 case FUNCTION_TYPE:
10759                   arg1 = build_pointer_type (arg1);
10760                   break;
10761
10762                 default:
10763                   break;
10764                 }
10765             }
10766           else
10767             {
10768               switch (TREE_CODE (arg2))
10769                 {
10770                 case ARRAY_TYPE:
10771                   arg2 = TREE_TYPE (arg2);
10772                   /* FALLTHROUGH. */
10773                 case FUNCTION_TYPE:
10774                   arg2 = build_pointer_type (arg2);
10775                   break;
10776
10777                 default:
10778                   break;
10779                 }
10780             }
10781         }
10782
10783       arg1 = TYPE_MAIN_VARIANT (arg1);
10784       arg2 = TYPE_MAIN_VARIANT (arg2);
10785
10786       deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
10787       deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
10788
10789       if (!deduce1)
10790         better2 = -1;
10791       if (!deduce2)
10792         better1 = -1;
10793       if (better1 < 0 && better2 < 0)
10794         /* We've failed to deduce something in either direction.
10795            These must be unordered.  */
10796         break;
10797
10798       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
10799         {
10800           /* Deduces in both directions, see if quals can
10801              disambiguate.  Pretend the worse one failed to deduce. */
10802           if ((quals1 & quals2) == quals2)
10803             deduce1 = 0;
10804           if ((quals1 & quals2) == quals1)
10805             deduce2 = 0;
10806         }
10807       if (deduce1 && !deduce2 && !better2)
10808         better2 = 1;
10809       if (deduce2 && !deduce1 && !better1)
10810         better1 = 1;
10811
10812       args1 = TREE_CHAIN (args1);
10813       args2 = TREE_CHAIN (args2);
10814     }
10815
10816   processing_template_decl--;
10817
10818   return (better1 > 0) - (better2 > 0);
10819 }
10820
10821 /* Determine which of two partial specializations is more specialized.
10822
10823    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
10824    to the first partial specialization.  The TREE_VALUE is the
10825    innermost set of template parameters for the partial
10826    specialization.  PAT2 is similar, but for the second template.
10827
10828    Return 1 if the first partial specialization is more specialized;
10829    -1 if the second is more specialized; 0 if neither is more
10830    specialized.
10831
10832    See [temp.class.order] for information about determining which of
10833    two templates is more specialized.  */ 
10834
10835 static int
10836 more_specialized_class (tree pat1, tree pat2)
10837 {
10838   tree targs;
10839   tree tmpl1, tmpl2;
10840   int winner = 0;
10841
10842   tmpl1 = TREE_TYPE (pat1);
10843   tmpl2 = TREE_TYPE (pat2);
10844
10845   /* Just like what happens for functions, if we are ordering between
10846      different class template specializations, we may encounter dependent
10847      types in the arguments, and we need our dependency check functions
10848      to behave correctly.  */
10849   ++processing_template_decl;
10850   targs = get_class_bindings (TREE_VALUE (pat1), 
10851                               CLASSTYPE_TI_ARGS (tmpl1),
10852                               CLASSTYPE_TI_ARGS (tmpl2));
10853   if (targs)
10854     --winner;
10855
10856   targs = get_class_bindings (TREE_VALUE (pat2), 
10857                               CLASSTYPE_TI_ARGS (tmpl2),
10858                               CLASSTYPE_TI_ARGS (tmpl1));
10859   if (targs)
10860     ++winner;
10861   --processing_template_decl;
10862
10863   return winner;
10864 }
10865
10866 /* Return the template arguments that will produce the function signature
10867    DECL from the function template FN, with the explicit template
10868    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
10869    also match.  Return NULL_TREE if no satisfactory arguments could be
10870    found.  */
10871
10872 static tree
10873 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
10874 {
10875   int ntparms = DECL_NTPARMS (fn);
10876   tree targs = make_tree_vec (ntparms);
10877   tree decl_type;
10878   tree decl_arg_types;
10879
10880   /* Substitute the explicit template arguments into the type of DECL.
10881      The call to fn_type_unification will handle substitution into the
10882      FN.  */
10883   decl_type = TREE_TYPE (decl);
10884   if (explicit_args && uses_template_parms (decl_type))
10885     {
10886       tree tmpl;
10887       tree converted_args;
10888
10889       if (DECL_TEMPLATE_INFO (decl))
10890         tmpl = DECL_TI_TEMPLATE (decl);
10891       else
10892         /* We can get here for some invalid specializations.  */
10893         return NULL_TREE;
10894
10895       converted_args
10896         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
10897                                  explicit_args, NULL_TREE,
10898                                  tf_none, 
10899                                  /*require_all_args=*/false,
10900                                  /*use_default_args=*/false);
10901       if (converted_args == error_mark_node)
10902         return NULL_TREE;
10903
10904       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
10905       if (decl_type == error_mark_node)
10906         return NULL_TREE;
10907     }
10908
10909   decl_arg_types = TYPE_ARG_TYPES (decl_type);
10910   /* Never do unification on the 'this' parameter.  */
10911   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10912     decl_arg_types = TREE_CHAIN (decl_arg_types);
10913
10914   if (fn_type_unification (fn, explicit_args, targs,
10915                            decl_arg_types,
10916                            (check_rettype || DECL_CONV_FN_P (fn)
10917                             ? TREE_TYPE (decl_type) : NULL_TREE),
10918                            DEDUCE_EXACT, LOOKUP_NORMAL))
10919     return NULL_TREE;
10920
10921   return targs;
10922 }
10923
10924 /* Return the innermost template arguments that, when applied to a
10925    template specialization whose innermost template parameters are
10926    TPARMS, and whose specialization arguments are PARMS, yield the
10927    ARGS.
10928
10929    For example, suppose we have:
10930
10931      template <class T, class U> struct S {};
10932      template <class T> struct S<T*, int> {};
10933
10934    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
10935    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
10936    int}.  The resulting vector will be {double}, indicating that `T'
10937    is bound to `double'.  */
10938
10939 static tree
10940 get_class_bindings (tree tparms, tree spec_args, tree args)
10941 {
10942   int i, ntparms = TREE_VEC_LENGTH (tparms);
10943   tree deduced_args;
10944   tree innermost_deduced_args;
10945
10946   innermost_deduced_args = make_tree_vec (ntparms);
10947   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
10948     {
10949       deduced_args = copy_node (args);
10950       SET_TMPL_ARGS_LEVEL (deduced_args,
10951                            TMPL_ARGS_DEPTH (deduced_args),
10952                            innermost_deduced_args);
10953     }
10954   else
10955     deduced_args = innermost_deduced_args; 
10956
10957   if (unify (tparms, deduced_args, 
10958              INNERMOST_TEMPLATE_ARGS (spec_args), 
10959              INNERMOST_TEMPLATE_ARGS (args), 
10960              UNIFY_ALLOW_NONE))
10961     return NULL_TREE;
10962
10963   for (i =  0; i < ntparms; ++i)
10964     if (! TREE_VEC_ELT (innermost_deduced_args, i))
10965       return NULL_TREE;
10966
10967   /* Verify that nondeduced template arguments agree with the type
10968      obtained from argument deduction.
10969      
10970      For example:
10971
10972        struct A { typedef int X; };
10973        template <class T, class U> struct C {};
10974        template <class T> struct C<T, typename T::X> {};
10975
10976      Then with the instantiation `C<A, int>', we can deduce that
10977      `T' is `A' but unify () does not check whether `typename T::X'
10978      is `int'.  */
10979   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
10980   if (spec_args == error_mark_node
10981       /* We only need to check the innermost arguments; the other
10982          arguments will always agree.  */
10983       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
10984                               INNERMOST_TEMPLATE_ARGS (args)))
10985     return NULL_TREE;
10986
10987   return deduced_args;
10988 }
10989
10990 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
10991    Return the TREE_LIST node with the most specialized template, if
10992    any.  If there is no most specialized template, the error_mark_node
10993    is returned.
10994
10995    Note that this function does not look at, or modify, the
10996    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
10997    returned is one of the elements of INSTANTIATIONS, callers may
10998    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
10999    and retrieve it from the value returned.  */
11000
11001 tree
11002 most_specialized_instantiation (tree templates)
11003 {
11004   tree fn, champ;
11005
11006   ++processing_template_decl;
11007
11008   champ = templates;
11009   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
11010     {
11011       int fate = 0;
11012
11013       if (get_bindings (TREE_VALUE (champ),
11014                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
11015                         NULL_TREE, /*check_ret=*/false))
11016         fate--;
11017
11018       if (get_bindings (TREE_VALUE (fn),
11019                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
11020                         NULL_TREE, /*check_ret=*/false))
11021         fate++;
11022
11023       if (fate == -1)
11024         champ = fn;
11025       else if (!fate)
11026         {
11027           /* Equally specialized, move to next function.  If there
11028              is no next function, nothing's most specialized.  */
11029           fn = TREE_CHAIN (fn);
11030           champ = fn;
11031           if (!fn)
11032             break;
11033         }
11034     }
11035
11036   if (champ)
11037     /* Now verify that champ is better than everything earlier in the
11038        instantiation list.  */
11039     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
11040       if (get_bindings (TREE_VALUE (champ),
11041                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
11042                         NULL_TREE, /*check_ret=*/false)
11043           || !get_bindings (TREE_VALUE (fn),
11044                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
11045                             NULL_TREE, /*check_ret=*/false))
11046         {
11047           champ = NULL_TREE;
11048           break;
11049         }
11050
11051   processing_template_decl--;
11052
11053   if (!champ)
11054     return error_mark_node;
11055
11056   return champ;
11057 }
11058
11059 /* If DECL is a specialization of some template, return the most
11060    general such template.  Otherwise, returns NULL_TREE.
11061
11062    For example, given:
11063
11064      template <class T> struct S { template <class U> void f(U); };
11065
11066    if TMPL is `template <class U> void S<int>::f(U)' this will return
11067    the full template.  This function will not trace past partial
11068    specializations, however.  For example, given in addition:
11069
11070      template <class T> struct S<T*> { template <class U> void f(U); };
11071
11072    if TMPL is `template <class U> void S<int*>::f(U)' this will return
11073    `template <class T> template <class U> S<T*>::f(U)'.  */
11074
11075 tree
11076 most_general_template (tree decl)
11077 {
11078   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
11079      an immediate specialization.  */
11080   if (TREE_CODE (decl) == FUNCTION_DECL)
11081     {
11082       if (DECL_TEMPLATE_INFO (decl)) {
11083         decl = DECL_TI_TEMPLATE (decl);
11084
11085         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
11086            template friend.  */
11087         if (TREE_CODE (decl) != TEMPLATE_DECL)
11088           return NULL_TREE;
11089       } else
11090         return NULL_TREE;
11091     }
11092
11093   /* Look for more and more general templates.  */
11094   while (DECL_TEMPLATE_INFO (decl))
11095     {
11096       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
11097          (See cp-tree.h for details.)  */
11098       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
11099         break;
11100
11101       if (CLASS_TYPE_P (TREE_TYPE (decl))
11102           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
11103         break;
11104
11105       /* Stop if we run into an explicitly specialized class template.  */
11106       if (!DECL_NAMESPACE_SCOPE_P (decl)
11107           && DECL_CONTEXT (decl)
11108           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
11109         break;
11110
11111       decl = DECL_TI_TEMPLATE (decl);
11112     }
11113
11114   return decl;
11115 }
11116
11117 /* Return the most specialized of the class template partial
11118    specializations of TMPL which can produce TYPE, a specialization of
11119    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
11120    a _TYPE node corresponding to the partial specialization, while the
11121    TREE_PURPOSE is the set of template arguments that must be
11122    substituted into the TREE_TYPE in order to generate TYPE.
11123
11124    If the choice of partial specialization is ambiguous, a diagnostic
11125    is issued, and the error_mark_node is returned.  If there are no
11126    partial specializations of TMPL matching TYPE, then NULL_TREE is
11127    returned.  */
11128
11129 static tree
11130 most_specialized_class (tree type, tree tmpl)
11131 {
11132   tree list = NULL_TREE;
11133   tree t;
11134   tree champ;
11135   int fate;
11136   bool ambiguous_p;
11137   tree args;
11138
11139   tmpl = most_general_template (tmpl);
11140   args = CLASSTYPE_TI_ARGS (type);
11141   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
11142     {
11143       tree partial_spec_args;
11144       tree spec_args;
11145
11146       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
11147       spec_args = get_class_bindings (TREE_VALUE (t), 
11148                                       partial_spec_args, 
11149                                       args);
11150       if (spec_args)
11151         {
11152           list = tree_cons (spec_args, TREE_VALUE (t), list);
11153           TREE_TYPE (list) = TREE_TYPE (t);
11154         }
11155     }
11156
11157   if (! list)
11158     return NULL_TREE;
11159
11160   ambiguous_p = false;
11161   t = list;
11162   champ = t;
11163   t = TREE_CHAIN (t);
11164   for (; t; t = TREE_CHAIN (t))
11165     {
11166       fate = more_specialized_class (champ, t);
11167       if (fate == 1)
11168         ;
11169       else
11170         {
11171           if (fate == 0)
11172             {
11173               t = TREE_CHAIN (t);
11174               if (! t)
11175                 {
11176                   ambiguous_p = true;
11177                   break;
11178                 }
11179             }
11180           champ = t;
11181         }
11182     }
11183
11184   if (!ambiguous_p)
11185     for (t = list; t && t != champ; t = TREE_CHAIN (t))
11186       {
11187         fate = more_specialized_class (champ, t);
11188         if (fate != 1)
11189           {
11190             ambiguous_p = true;
11191             break;
11192           }
11193       }
11194
11195   if (ambiguous_p)
11196     {
11197       const char *str = "candidates are:";
11198       error ("ambiguous class template instantiation for %q#T", type);
11199       for (t = list; t; t = TREE_CHAIN (t))
11200         {
11201           error ("%s %+#T", str, TREE_TYPE (t));
11202           str = "               ";
11203         }
11204       return error_mark_node;
11205     }
11206
11207   return champ;
11208 }
11209
11210 /* Explicitly instantiate DECL.  */
11211
11212 void
11213 do_decl_instantiation (tree decl, tree storage)
11214 {
11215   tree result = NULL_TREE;
11216   int extern_p = 0;
11217
11218   if (!decl || decl == error_mark_node)
11219     /* An error occurred, for which grokdeclarator has already issued
11220        an appropriate message.  */
11221     return;
11222   else if (! DECL_LANG_SPECIFIC (decl))
11223     {
11224       error ("explicit instantiation of non-template %q#D", decl);
11225       return;
11226     }
11227   else if (TREE_CODE (decl) == VAR_DECL)
11228     {
11229       /* There is an asymmetry here in the way VAR_DECLs and
11230          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
11231          the latter, the DECL we get back will be marked as a
11232          template instantiation, and the appropriate
11233          DECL_TEMPLATE_INFO will be set up.  This does not happen for
11234          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
11235          should handle VAR_DECLs as it currently handles
11236          FUNCTION_DECLs.  */
11237       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
11238       if (!result || TREE_CODE (result) != VAR_DECL)
11239         {
11240           error ("no matching template for %qD found", decl);
11241           return;
11242         }
11243     }
11244   else if (TREE_CODE (decl) != FUNCTION_DECL)
11245     {
11246       error ("explicit instantiation of %q#D", decl);
11247       return;
11248     }
11249   else
11250     result = decl;
11251
11252   /* Check for various error cases.  Note that if the explicit
11253      instantiation is valid the RESULT will currently be marked as an
11254      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
11255      until we get here.  */
11256
11257   if (DECL_TEMPLATE_SPECIALIZATION (result))
11258     {
11259       /* DR 259 [temp.spec].
11260
11261          Both an explicit instantiation and a declaration of an explicit
11262          specialization shall not appear in a program unless the explicit
11263          instantiation follows a declaration of the explicit specialization.
11264
11265          For a given set of template parameters, if an explicit
11266          instantiation of a template appears after a declaration of an
11267          explicit specialization for that template, the explicit
11268          instantiation has no effect.  */
11269       return;
11270     }
11271   else if (DECL_EXPLICIT_INSTANTIATION (result))
11272     {
11273       /* [temp.spec]
11274
11275          No program shall explicitly instantiate any template more
11276          than once.
11277
11278          We check DECL_NOT_REALLY_EXTERN so as not to complain when
11279          the first instantiation was `extern' and the second is not,
11280          and EXTERN_P for the opposite case.  */
11281       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
11282         pedwarn ("duplicate explicit instantiation of %q#D", result);
11283       /* If an "extern" explicit instantiation follows an ordinary
11284          explicit instantiation, the template is instantiated.  */
11285       if (extern_p)
11286         return;
11287     }
11288   else if (!DECL_IMPLICIT_INSTANTIATION (result))
11289     {
11290       error ("no matching template for %qD found", result);
11291       return;
11292     }
11293   else if (!DECL_TEMPLATE_INFO (result))
11294     {
11295       pedwarn ("explicit instantiation of non-template %q#D", result);
11296       return;
11297     }
11298
11299   if (storage == NULL_TREE)
11300     ;
11301   else if (storage == ridpointers[(int) RID_EXTERN])
11302     {
11303       if (pedantic && !in_system_header)
11304         pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
11305                  "instantiations");
11306       extern_p = 1;
11307     }
11308   else
11309     error ("storage class %qD applied to template instantiation", storage);
11310   
11311   check_explicit_instantiation_namespace (result);
11312   mark_decl_instantiated (result, extern_p);
11313   if (! extern_p)
11314     instantiate_decl (result, /*defer_ok=*/1, 
11315                       /*expl_inst_class_mem_p=*/false);
11316 }
11317
11318 static void
11319 mark_class_instantiated (tree t, int extern_p)
11320 {
11321   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
11322   SET_CLASSTYPE_INTERFACE_KNOWN (t);
11323   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
11324   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
11325   if (! extern_p)
11326     {
11327       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
11328       rest_of_type_compilation (t, 1);
11329     }
11330 }
11331
11332 /* Called from do_type_instantiation through binding_table_foreach to
11333    do recursive instantiation for the type bound in ENTRY.  */
11334 static void
11335 bt_instantiate_type_proc (binding_entry entry, void *data)
11336 {
11337   tree storage = *(tree *) data;
11338
11339   if (IS_AGGR_TYPE (entry->type)
11340       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
11341     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
11342 }
11343
11344 /* Called from do_type_instantiation to instantiate a member
11345    (a member function or a static member variable) of an
11346    explicitly instantiated class template.  */
11347 static void
11348 instantiate_class_member (tree decl, int extern_p)
11349 {
11350   mark_decl_instantiated (decl, extern_p);
11351   if (! extern_p)
11352     instantiate_decl (decl, /*defer_ok=*/1, 
11353                       /*expl_inst_class_mem_p=*/true);
11354 }
11355
11356 /* Perform an explicit instantiation of template class T.  STORAGE, if
11357    non-null, is the RID for extern, inline or static.  COMPLAIN is
11358    nonzero if this is called from the parser, zero if called recursively,
11359    since the standard is unclear (as detailed below).  */
11360
11361 void
11362 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
11363 {
11364   int extern_p = 0;
11365   int nomem_p = 0;
11366   int static_p = 0;
11367   int previous_instantiation_extern_p = 0;
11368
11369   if (TREE_CODE (t) == TYPE_DECL)
11370     t = TREE_TYPE (t);
11371
11372   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
11373     {
11374       error ("explicit instantiation of non-template type %qT", t);
11375       return;
11376     }
11377
11378   complete_type (t);
11379
11380   if (!COMPLETE_TYPE_P (t))
11381     {
11382       if (complain & tf_error)
11383         error ("explicit instantiation of %q#T before definition of template",
11384                t);
11385       return;
11386     }
11387
11388   if (storage != NULL_TREE)
11389     {
11390       if (pedantic && !in_system_header)
11391         pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
11392                 storage);
11393
11394       if (storage == ridpointers[(int) RID_INLINE])
11395         nomem_p = 1;
11396       else if (storage == ridpointers[(int) RID_EXTERN])
11397         extern_p = 1;
11398       else if (storage == ridpointers[(int) RID_STATIC])
11399         static_p = 1;
11400       else
11401         {
11402           error ("storage class %qD applied to template instantiation",
11403                  storage);
11404           extern_p = 0;
11405         }
11406     }
11407
11408   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
11409     {
11410       /* DR 259 [temp.spec].
11411
11412          Both an explicit instantiation and a declaration of an explicit
11413          specialization shall not appear in a program unless the explicit
11414          instantiation follows a declaration of the explicit specialization.
11415
11416          For a given set of template parameters, if an explicit
11417          instantiation of a template appears after a declaration of an
11418          explicit specialization for that template, the explicit
11419          instantiation has no effect.  */
11420       return;
11421     }
11422   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
11423     {
11424       /* [temp.spec]
11425
11426          No program shall explicitly instantiate any template more
11427          than once.
11428
11429          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
11430          instantiation was `extern'.  If EXTERN_P then the second is.
11431          These cases are OK.  */
11432       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
11433
11434       if (!previous_instantiation_extern_p && !extern_p
11435           && (complain & tf_error))
11436         pedwarn ("duplicate explicit instantiation of %q#T", t);
11437
11438       /* If we've already instantiated the template, just return now.  */
11439       if (!CLASSTYPE_INTERFACE_ONLY (t))
11440         return;
11441     }
11442
11443   check_explicit_instantiation_namespace (TYPE_NAME (t));
11444   mark_class_instantiated (t, extern_p);
11445
11446   if (nomem_p)
11447     return;
11448
11449   {
11450     tree tmp;
11451
11452     /* In contrast to implicit instantiation, where only the
11453        declarations, and not the definitions, of members are
11454        instantiated, we have here:
11455
11456          [temp.explicit]
11457
11458          The explicit instantiation of a class template specialization
11459          implies the instantiation of all of its members not
11460          previously explicitly specialized in the translation unit
11461          containing the explicit instantiation.
11462
11463        Of course, we can't instantiate member template classes, since
11464        we don't have any arguments for them.  Note that the standard
11465        is unclear on whether the instantiation of the members are
11466        *explicit* instantiations or not.  However, the most natural
11467        interpretation is that it should be an explicit instantiation.  */
11468
11469     if (! static_p)
11470       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
11471         if (TREE_CODE (tmp) == FUNCTION_DECL
11472             && DECL_TEMPLATE_INSTANTIATION (tmp))
11473           instantiate_class_member (tmp, extern_p);
11474
11475     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
11476       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
11477         instantiate_class_member (tmp, extern_p);
11478
11479     if (CLASSTYPE_NESTED_UTDS (t))
11480       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
11481                              bt_instantiate_type_proc, &storage);
11482   }
11483 }
11484
11485 /* Given a function DECL, which is a specialization of TMPL, modify
11486    DECL to be a re-instantiation of TMPL with the same template
11487    arguments.  TMPL should be the template into which tsubst'ing
11488    should occur for DECL, not the most general template.
11489
11490    One reason for doing this is a scenario like this:
11491
11492      template <class T>
11493      void f(const T&, int i);
11494
11495      void g() { f(3, 7); }
11496
11497      template <class T>
11498      void f(const T& t, const int i) { }
11499
11500    Note that when the template is first instantiated, with
11501    instantiate_template, the resulting DECL will have no name for the
11502    first parameter, and the wrong type for the second.  So, when we go
11503    to instantiate the DECL, we regenerate it.  */
11504
11505 static void
11506 regenerate_decl_from_template (tree decl, tree tmpl)
11507 {
11508   /* The arguments used to instantiate DECL, from the most general
11509      template.  */
11510   tree args;
11511   tree code_pattern;
11512
11513   args = DECL_TI_ARGS (decl);
11514   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
11515
11516   /* Make sure that we can see identifiers, and compute access
11517      correctly.  */
11518   push_access_scope (decl);
11519
11520   if (TREE_CODE (decl) == FUNCTION_DECL)
11521     {
11522       tree decl_parm;
11523       tree pattern_parm;
11524       tree specs;
11525       int args_depth;
11526       int parms_depth;
11527
11528       args_depth = TMPL_ARGS_DEPTH (args);
11529       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
11530       if (args_depth > parms_depth)
11531         args = get_innermost_template_args (args, parms_depth);
11532
11533       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
11534                                               args, tf_error, NULL_TREE);
11535       if (specs)
11536         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
11537                                                     specs);
11538
11539       /* Merge parameter declarations.  */
11540       decl_parm = skip_artificial_parms_for (decl,
11541                                              DECL_ARGUMENTS (decl));
11542       pattern_parm
11543         = skip_artificial_parms_for (code_pattern,
11544                                      DECL_ARGUMENTS (code_pattern));
11545       while (decl_parm)
11546         {
11547           tree parm_type;
11548           tree attributes;
11549
11550           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
11551             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
11552           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
11553                               NULL_TREE);
11554           parm_type = type_decays_to (parm_type);
11555           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
11556             TREE_TYPE (decl_parm) = parm_type;
11557           attributes = DECL_ATTRIBUTES (pattern_parm);
11558           if (DECL_ATTRIBUTES (decl_parm) != attributes)
11559             {
11560               DECL_ATTRIBUTES (decl_parm) = attributes;
11561               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
11562             }
11563           decl_parm = TREE_CHAIN (decl_parm);
11564           pattern_parm = TREE_CHAIN (pattern_parm);
11565         }
11566
11567       /* Merge additional specifiers from the CODE_PATTERN.  */
11568       if (DECL_DECLARED_INLINE_P (code_pattern)
11569           && !DECL_DECLARED_INLINE_P (decl))
11570         DECL_DECLARED_INLINE_P (decl) = 1;
11571       if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
11572         DECL_INLINE (decl) = 1;
11573     }
11574   else if (TREE_CODE (decl) == VAR_DECL)
11575     DECL_INITIAL (decl) =
11576       tsubst_expr (DECL_INITIAL (code_pattern), args,
11577                    tf_error, DECL_TI_TEMPLATE (decl));
11578   else
11579     gcc_unreachable ();
11580
11581   pop_access_scope (decl);
11582 }
11583
11584 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
11585    substituted to get DECL.  */
11586
11587 tree
11588 template_for_substitution (tree decl)
11589 {
11590   tree tmpl = DECL_TI_TEMPLATE (decl);
11591
11592   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
11593      for the instantiation.  This is not always the most general
11594      template.  Consider, for example:
11595
11596         template <class T>
11597         struct S { template <class U> void f();
11598                    template <> void f<int>(); };
11599
11600      and an instantiation of S<double>::f<int>.  We want TD to be the
11601      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
11602   while (/* An instantiation cannot have a definition, so we need a
11603             more general template.  */
11604          DECL_TEMPLATE_INSTANTIATION (tmpl)
11605            /* We must also deal with friend templates.  Given:
11606
11607                 template <class T> struct S {
11608                   template <class U> friend void f() {};
11609                 };
11610
11611               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
11612               so far as the language is concerned, but that's still
11613               where we get the pattern for the instantiation from.  On
11614               other hand, if the definition comes outside the class, say:
11615
11616                 template <class T> struct S {
11617                   template <class U> friend void f();
11618                 };
11619                 template <class U> friend void f() {}
11620
11621               we don't need to look any further.  That's what the check for
11622               DECL_INITIAL is for.  */
11623           || (TREE_CODE (decl) == FUNCTION_DECL
11624               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
11625               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
11626     {
11627       /* The present template, TD, should not be a definition.  If it
11628          were a definition, we should be using it!  Note that we
11629          cannot restructure the loop to just keep going until we find
11630          a template with a definition, since that might go too far if
11631          a specialization was declared, but not defined.  */
11632       gcc_assert (TREE_CODE (decl) != VAR_DECL
11633                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
11634
11635       /* Fetch the more general template.  */
11636       tmpl = DECL_TI_TEMPLATE (tmpl);
11637     }
11638
11639   return tmpl;
11640 }
11641
11642 /* Produce the definition of D, a _DECL generated from a template.  If
11643    DEFER_OK is nonzero, then we don't have to actually do the
11644    instantiation now; we just have to do it sometime.  Normally it is
11645    an error if this is an explicit instantiation but D is undefined.
11646    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
11647    explicitly instantiated class template.  */
11648
11649 tree
11650 instantiate_decl (tree d, int defer_ok, 
11651                   bool expl_inst_class_mem_p)
11652 {
11653   tree tmpl = DECL_TI_TEMPLATE (d);
11654   tree gen_args;
11655   tree args;
11656   tree td;
11657   tree code_pattern;
11658   tree spec;
11659   tree gen_tmpl;
11660   bool pattern_defined;
11661   int need_push;
11662   location_t saved_loc = input_location;
11663   bool external_p;
11664
11665   /* This function should only be used to instantiate templates for
11666      functions and static member variables.  */
11667   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
11668               || TREE_CODE (d) == VAR_DECL);
11669
11670   /* Variables are never deferred; if instantiation is required, they
11671      are instantiated right away.  That allows for better code in the
11672      case that an expression refers to the value of the variable --
11673      if the variable has a constant value the referring expression can
11674      take advantage of that fact.  */
11675   if (TREE_CODE (d) == VAR_DECL)
11676     defer_ok = 0;
11677
11678   /* Don't instantiate cloned functions.  Instead, instantiate the
11679      functions they cloned.  */
11680   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
11681     d = DECL_CLONED_FUNCTION (d);
11682
11683   if (DECL_TEMPLATE_INSTANTIATED (d))
11684     /* D has already been instantiated.  It might seem reasonable to
11685        check whether or not D is an explicit instantiation, and, if so,
11686        stop here.  But when an explicit instantiation is deferred
11687        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
11688        is set, even though we still need to do the instantiation.  */
11689     return d;
11690
11691   /* If we already have a specialization of this declaration, then
11692      there's no reason to instantiate it.  Note that
11693      retrieve_specialization gives us both instantiations and
11694      specializations, so we must explicitly check
11695      DECL_TEMPLATE_SPECIALIZATION.  */
11696   gen_tmpl = most_general_template (tmpl);
11697   gen_args = DECL_TI_ARGS (d);
11698   spec = retrieve_specialization (gen_tmpl, gen_args,
11699                                   /*class_specializations_p=*/false);
11700   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
11701     return spec;
11702
11703   /* This needs to happen before any tsubsting.  */
11704   if (! push_tinst_level (d))
11705     return d;
11706
11707   timevar_push (TV_PARSE);
11708
11709   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
11710      for the instantiation.  */
11711   td = template_for_substitution (d);
11712   code_pattern = DECL_TEMPLATE_RESULT (td);
11713
11714   /* We should never be trying to instantiate a member of a class
11715      template or partial specialization.  */ 
11716   gcc_assert (d != code_pattern);
11717  
11718   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
11719       || DECL_TEMPLATE_SPECIALIZATION (td))
11720     /* In the case of a friend template whose definition is provided
11721        outside the class, we may have too many arguments.  Drop the
11722        ones we don't need.  The same is true for specializations.  */
11723     args = get_innermost_template_args
11724       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
11725   else
11726     args = gen_args;
11727
11728   if (TREE_CODE (d) == FUNCTION_DECL)
11729     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
11730   else
11731     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
11732
11733   /* We may be in the middle of deferred access check.  Disable it now.  */
11734   push_deferring_access_checks (dk_no_deferred);
11735
11736   /* Unless an explicit instantiation directive has already determined
11737      the linkage of D, remember that a definition is available for
11738      this entity.  */
11739   if (pattern_defined
11740       && !DECL_INTERFACE_KNOWN (d)
11741       && !DECL_NOT_REALLY_EXTERN (d))
11742     mark_definable (d);
11743
11744   input_location = DECL_SOURCE_LOCATION (d);
11745
11746   /* If D is a member of an explicitly instantiated class template,
11747      and no definition is available, treat it like an implicit
11748      instantiation.  */ 
11749   if (!pattern_defined && expl_inst_class_mem_p 
11750       && DECL_EXPLICIT_INSTANTIATION (d)) 
11751     {
11752       DECL_NOT_REALLY_EXTERN (d) = 0;
11753       DECL_INTERFACE_KNOWN (d) = 0;
11754       SET_DECL_IMPLICIT_INSTANTIATION (d);
11755     }
11756
11757   if (!defer_ok)
11758     {
11759       /* Recheck the substitutions to obtain any warning messages
11760          about ignoring cv qualifiers.  */
11761       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
11762       tree type = TREE_TYPE (gen);
11763
11764       /* Make sure that we can see identifiers, and compute access
11765          correctly.  D is already the target FUNCTION_DECL with the
11766          right context.  */
11767       push_access_scope (d);
11768
11769       if (TREE_CODE (gen) == FUNCTION_DECL)
11770         {
11771           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
11772           tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
11773                   tf_warning_or_error, d);
11774           /* Don't simply tsubst the function type, as that will give
11775              duplicate warnings about poor parameter qualifications.
11776              The function arguments are the same as the decl_arguments
11777              without the top level cv qualifiers.  */
11778           type = TREE_TYPE (type);
11779         }
11780       tsubst (type, gen_args, tf_warning_or_error, d);
11781
11782       pop_access_scope (d);
11783     }
11784
11785   /* Check to see whether we know that this template will be
11786      instantiated in some other file, as with "extern template"
11787      extension.  */
11788   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
11789   /* In general, we do not instantiate such templates...  */
11790   if (external_p
11791       /* ... but we instantiate inline functions so that we can inline
11792          them and ... */
11793       && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
11794       /* ... we instantiate static data members whose values are
11795          needed in integral constant expressions.  */
11796       && ! (TREE_CODE (d) == VAR_DECL 
11797             && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
11798     goto out;
11799   /* Defer all other templates, unless we have been explicitly
11800      forbidden from doing so.  */
11801   if (/* If there is no definition, we cannot instantiate the
11802          template.  */
11803       ! pattern_defined 
11804       /* If it's OK to postpone instantiation, do so.  */
11805       || defer_ok
11806       /* If this is a static data member that will be defined
11807          elsewhere, we don't want to instantiate the entire data
11808          member, but we do want to instantiate the initializer so that
11809          we can substitute that elsewhere.  */
11810       || (external_p && TREE_CODE (d) == VAR_DECL))
11811     {
11812       /* The definition of the static data member is now required so
11813          we must substitute the initializer.  */
11814       if (TREE_CODE (d) == VAR_DECL
11815           && !DECL_INITIAL (d) 
11816           && DECL_INITIAL (code_pattern))
11817         {
11818           tree ns;
11819           tree init;
11820
11821           ns = decl_namespace_context (d);
11822           push_nested_namespace (ns);
11823           push_nested_class (DECL_CONTEXT (d));
11824           init = tsubst_expr (DECL_INITIAL (code_pattern), 
11825                               args,
11826                               tf_warning_or_error, NULL_TREE);
11827           DECL_INITIAL (d) = init;
11828           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
11829                           /*asmspec_tree=*/NULL_TREE,
11830                           LOOKUP_ONLYCONVERTING);
11831           pop_nested_class ();
11832           pop_nested_namespace (ns);
11833         }
11834
11835       /* We restore the source position here because it's used by
11836          add_pending_template.  */
11837       input_location = saved_loc;
11838
11839       if (at_eof && !pattern_defined
11840           && DECL_EXPLICIT_INSTANTIATION (d))
11841         /* [temp.explicit]
11842
11843            The definition of a non-exported function template, a
11844            non-exported member function template, or a non-exported
11845            member function or static data member of a class template
11846            shall be present in every translation unit in which it is
11847            explicitly instantiated.  */
11848         pedwarn
11849           ("explicit instantiation of %qD but no definition available", d);
11850
11851       /* ??? Historically, we have instantiated inline functions, even
11852          when marked as "extern template".  */
11853       if (!(external_p && TREE_CODE (d) == VAR_DECL))
11854         add_pending_template (d);
11855       goto out;
11856     }
11857   /* Tell the repository that D is available in this translation unit
11858      -- and see if it is supposed to be instantiated here.  */
11859   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
11860     {
11861       /* In a PCH file, despite the fact that the repository hasn't
11862          requested instantiation in the PCH it is still possible that
11863          an instantiation will be required in a file that includes the
11864          PCH.  */
11865       if (pch_file)
11866         add_pending_template (d);
11867       /* Instantiate inline functions so that the inliner can do its
11868          job, even though we'll not be emitting a copy of this
11869          function.  */
11870       if (!(TREE_CODE (d) == FUNCTION_DECL
11871             && flag_inline_trees
11872             && DECL_DECLARED_INLINE_P (d)))
11873         goto out;
11874     }
11875
11876   need_push = !cfun || !global_bindings_p ();
11877   if (need_push)
11878     push_to_top_level ();
11879
11880   /* Mark D as instantiated so that recursive calls to
11881      instantiate_decl do not try to instantiate it again.  */
11882   DECL_TEMPLATE_INSTANTIATED (d) = 1;
11883
11884   /* Regenerate the declaration in case the template has been modified
11885      by a subsequent redeclaration.  */
11886   regenerate_decl_from_template (d, td);
11887
11888   /* We already set the file and line above.  Reset them now in case
11889      they changed as a result of calling regenerate_decl_from_template.  */
11890   input_location = DECL_SOURCE_LOCATION (d);
11891
11892   if (TREE_CODE (d) == VAR_DECL)
11893     {
11894       /* Clear out DECL_RTL; whatever was there before may not be right
11895          since we've reset the type of the declaration.  */
11896       SET_DECL_RTL (d, NULL_RTX);
11897       DECL_IN_AGGR_P (d) = 0;
11898
11899       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
11900          initializer.  That function will defer actual emission until
11901          we have a chance to determine linkage.  */
11902       DECL_EXTERNAL (d) = 0;
11903
11904       /* Enter the scope of D so that access-checking works correctly.  */
11905       push_nested_class (DECL_CONTEXT (d));
11906       finish_decl (d, DECL_INITIAL (d), NULL_TREE);
11907       pop_nested_class ();
11908     }
11909   else if (TREE_CODE (d) == FUNCTION_DECL)
11910     {
11911       htab_t saved_local_specializations;
11912       tree subst_decl;
11913       tree tmpl_parm;
11914       tree spec_parm;
11915
11916       /* Save away the current list, in case we are instantiating one
11917          template from within the body of another.  */
11918       saved_local_specializations = local_specializations;
11919
11920       /* Set up the list of local specializations.  */
11921       local_specializations = htab_create (37,
11922                                            hash_local_specialization,
11923                                            eq_local_specializations,
11924                                            NULL);
11925
11926       /* Set up context.  */
11927       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
11928
11929       /* Create substitution entries for the parameters.  */
11930       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
11931       tmpl_parm = DECL_ARGUMENTS (subst_decl);
11932       spec_parm = DECL_ARGUMENTS (d);
11933       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
11934         {
11935           register_local_specialization (spec_parm, tmpl_parm);
11936           spec_parm = skip_artificial_parms_for (d, spec_parm);
11937           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
11938         }
11939       while (tmpl_parm)
11940         {
11941           register_local_specialization (spec_parm, tmpl_parm);
11942           tmpl_parm = TREE_CHAIN (tmpl_parm);
11943           spec_parm = TREE_CHAIN (spec_parm);
11944         }
11945       gcc_assert (!spec_parm);
11946
11947       /* Substitute into the body of the function.  */
11948       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
11949                    tf_warning_or_error, tmpl);
11950
11951       /* We don't need the local specializations any more.  */
11952       htab_delete (local_specializations);
11953       local_specializations = saved_local_specializations;
11954
11955       /* Finish the function.  */
11956       d = finish_function (0);
11957       expand_or_defer_fn (d);
11958     }
11959
11960   /* We're not deferring instantiation any more.  */
11961   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
11962
11963   if (need_push)
11964     pop_from_top_level ();
11965
11966 out:
11967   input_location = saved_loc;
11968   pop_deferring_access_checks ();
11969   pop_tinst_level ();
11970
11971   timevar_pop (TV_PARSE);
11972
11973   return d;
11974 }
11975
11976 /* Run through the list of templates that we wish we could
11977    instantiate, and instantiate any we can.  RETRIES is the
11978    number of times we retry pending template instantiation.  */
11979
11980 void
11981 instantiate_pending_templates (int retries)
11982 {
11983   tree *t;
11984   tree last = NULL_TREE;
11985   int reconsider;
11986   location_t saved_loc = input_location;
11987   int saved_in_system_header = in_system_header;
11988
11989   /* Instantiating templates may trigger vtable generation.  This in turn
11990      may require further template instantiations.  We place a limit here
11991      to avoid infinite loop.  */
11992   if (pending_templates && retries >= max_tinst_depth)
11993     {
11994       tree decl = TREE_VALUE (pending_templates);
11995
11996       error ("template instantiation depth exceeds maximum of %d"
11997              " instantiating %q+D, possibly from virtual table generation"
11998              " (use -ftemplate-depth-NN to increase the maximum)",
11999              max_tinst_depth, decl);
12000       if (TREE_CODE (decl) == FUNCTION_DECL)
12001         /* Pretend that we defined it.  */
12002         DECL_INITIAL (decl) = error_mark_node;
12003       return;
12004     }
12005
12006   do
12007     {
12008       reconsider = 0;
12009
12010       t = &pending_templates;
12011       while (*t)
12012         {
12013           tree instantiation = TREE_VALUE (*t);
12014
12015           reopen_tinst_level (TREE_PURPOSE (*t));
12016
12017           if (TYPE_P (instantiation))
12018             {
12019               tree fn;
12020
12021               if (!COMPLETE_TYPE_P (instantiation))
12022                 {
12023                   instantiate_class_template (instantiation);
12024                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
12025                     for (fn = TYPE_METHODS (instantiation);
12026                          fn;
12027                          fn = TREE_CHAIN (fn))
12028                       if (! DECL_ARTIFICIAL (fn))
12029                         instantiate_decl (fn, 
12030                                           /*defer_ok=*/0,
12031                                           /*expl_inst_class_mem_p=*/false);
12032                   if (COMPLETE_TYPE_P (instantiation))
12033                     reconsider = 1;
12034                 }
12035
12036               if (COMPLETE_TYPE_P (instantiation))
12037                 /* If INSTANTIATION has been instantiated, then we don't
12038                    need to consider it again in the future.  */
12039                 *t = TREE_CHAIN (*t);
12040               else
12041                 {
12042                   last = *t;
12043                   t = &TREE_CHAIN (*t);
12044                 }
12045             }
12046           else
12047             {
12048               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
12049                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
12050                 {
12051                   instantiation 
12052                     = instantiate_decl (instantiation,
12053                                         /*defer_ok=*/0,
12054                                         /*expl_inst_class_mem_p=*/false);
12055                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
12056                     reconsider = 1;
12057                 }
12058
12059               if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
12060                   || DECL_TEMPLATE_INSTANTIATED (instantiation))
12061                 /* If INSTANTIATION has been instantiated, then we don't
12062                    need to consider it again in the future.  */
12063                 *t = TREE_CHAIN (*t);
12064               else
12065                 {
12066                   last = *t;
12067                   t = &TREE_CHAIN (*t);
12068                 }
12069             }
12070           tinst_depth = 0;
12071           current_tinst_level = NULL_TREE;
12072         }
12073       last_pending_template = last;
12074     }
12075   while (reconsider);
12076
12077   input_location = saved_loc;
12078   in_system_header = saved_in_system_header;
12079 }
12080
12081 /* Substitute ARGVEC into T, which is a list of initializers for
12082    either base class or a non-static data member.  The TREE_PURPOSEs
12083    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
12084    instantiate_decl.  */
12085
12086 static tree
12087 tsubst_initializer_list (tree t, tree argvec)
12088 {
12089   tree inits = NULL_TREE;
12090
12091   for (; t; t = TREE_CHAIN (t))
12092     {
12093       tree decl;
12094       tree init;
12095
12096       decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_warning_or_error,
12097                           NULL_TREE);
12098       decl = expand_member_init (decl);
12099       if (decl && !DECL_P (decl))
12100         in_base_initializer = 1;
12101
12102       init = tsubst_expr (TREE_VALUE (t), argvec, tf_warning_or_error,
12103                           NULL_TREE);
12104       in_base_initializer = 0;
12105
12106       if (decl)
12107         {
12108           init = build_tree_list (decl, init);
12109           TREE_CHAIN (init) = inits;
12110           inits = init;
12111         }
12112     }
12113   return inits;
12114 }
12115
12116 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
12117
12118 static void
12119 set_current_access_from_decl (tree decl)
12120 {
12121   if (TREE_PRIVATE (decl))
12122     current_access_specifier = access_private_node;
12123   else if (TREE_PROTECTED (decl))
12124     current_access_specifier = access_protected_node;
12125   else
12126     current_access_specifier = access_public_node;
12127 }
12128
12129 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
12130    is the instantiation (which should have been created with
12131    start_enum) and ARGS are the template arguments to use.  */
12132
12133 static void
12134 tsubst_enum (tree tag, tree newtag, tree args)
12135 {
12136   tree e;
12137
12138   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
12139     {
12140       tree value;
12141       tree decl;
12142
12143       decl = TREE_VALUE (e);
12144       /* Note that in a template enum, the TREE_VALUE is the
12145          CONST_DECL, not the corresponding INTEGER_CST.  */
12146       value = tsubst_expr (DECL_INITIAL (decl),
12147                            args, tf_warning_or_error, NULL_TREE);
12148
12149       /* Give this enumeration constant the correct access.  */
12150       set_current_access_from_decl (decl);
12151
12152       /* Actually build the enumerator itself.  */
12153       build_enumerator (DECL_NAME (decl), value, newtag);
12154     }
12155
12156   finish_enum (newtag);
12157   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
12158     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
12159 }
12160
12161 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
12162    its type -- but without substituting the innermost set of template
12163    arguments.  So, innermost set of template parameters will appear in
12164    the type.  */
12165
12166 tree
12167 get_mostly_instantiated_function_type (tree decl)
12168 {
12169   tree fn_type;
12170   tree tmpl;
12171   tree targs;
12172   tree tparms;
12173   int parm_depth;
12174
12175   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
12176   targs = DECL_TI_ARGS (decl);
12177   tparms = DECL_TEMPLATE_PARMS (tmpl);
12178   parm_depth = TMPL_PARMS_DEPTH (tparms);
12179
12180   /* There should be as many levels of arguments as there are levels
12181      of parameters.  */
12182   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
12183
12184   fn_type = TREE_TYPE (tmpl);
12185
12186   if (parm_depth == 1)
12187     /* No substitution is necessary.  */
12188     ;
12189   else
12190     {
12191       int i, save_access_control;
12192       tree partial_args;
12193
12194       /* Replace the innermost level of the TARGS with NULL_TREEs to
12195          let tsubst know not to substitute for those parameters.  */
12196       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
12197       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
12198         SET_TMPL_ARGS_LEVEL (partial_args, i,
12199                              TMPL_ARGS_LEVEL (targs, i));
12200       SET_TMPL_ARGS_LEVEL (partial_args,
12201                            TMPL_ARGS_DEPTH (targs),
12202                            make_tree_vec (DECL_NTPARMS (tmpl)));
12203
12204       /* Disable access control as this function is used only during
12205          name-mangling.  */
12206       save_access_control = flag_access_control;
12207       flag_access_control = 0;
12208
12209       ++processing_template_decl;
12210       /* Now, do the (partial) substitution to figure out the
12211          appropriate function type.  */
12212       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
12213       --processing_template_decl;
12214
12215       /* Substitute into the template parameters to obtain the real
12216          innermost set of parameters.  This step is important if the
12217          innermost set of template parameters contains value
12218          parameters whose types depend on outer template parameters.  */
12219       TREE_VEC_LENGTH (partial_args)--;
12220       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
12221
12222       flag_access_control = save_access_control;
12223     }
12224
12225   return fn_type;
12226 }
12227
12228 /* Return truthvalue if we're processing a template different from
12229    the last one involved in diagnostics.  */
12230 int
12231 problematic_instantiation_changed (void)
12232 {
12233   return last_template_error_tick != tinst_level_tick;
12234 }
12235
12236 /* Remember current template involved in diagnostics.  */
12237 void
12238 record_last_problematic_instantiation (void)
12239 {
12240   last_template_error_tick = tinst_level_tick;
12241 }
12242
12243 tree
12244 current_instantiation (void)
12245 {
12246   return current_tinst_level;
12247 }
12248
12249 /* [temp.param] Check that template non-type parm TYPE is of an allowable
12250    type. Return zero for ok, nonzero for disallowed. Issue error and
12251    warning messages under control of COMPLAIN.  */
12252
12253 static int
12254 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
12255 {
12256   if (INTEGRAL_TYPE_P (type))
12257     return 0;
12258   else if (POINTER_TYPE_P (type))
12259     return 0;
12260   else if (TYPE_PTR_TO_MEMBER_P (type))
12261     return 0;
12262   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
12263     return 0;
12264   else if (TREE_CODE (type) == TYPENAME_TYPE)
12265     return 0;
12266
12267   if (complain & tf_error)
12268     error ("%q#T is not a valid type for a template constant parameter", type);
12269   return 1;
12270 }
12271
12272 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
12273    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
12274
12275 static bool
12276 dependent_type_p_r (tree type)
12277 {
12278   tree scope;
12279
12280   /* [temp.dep.type]
12281
12282      A type is dependent if it is:
12283
12284      -- a template parameter. Template template parameters are types
12285         for us (since TYPE_P holds true for them) so we handle
12286         them here.  */
12287   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
12288       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
12289     return true;
12290   /* -- a qualified-id with a nested-name-specifier which contains a
12291         class-name that names a dependent type or whose unqualified-id
12292         names a dependent type.  */
12293   if (TREE_CODE (type) == TYPENAME_TYPE)
12294     return true;
12295   /* -- a cv-qualified type where the cv-unqualified type is
12296         dependent.  */
12297   type = TYPE_MAIN_VARIANT (type);
12298   /* -- a compound type constructed from any dependent type.  */
12299   if (TYPE_PTR_TO_MEMBER_P (type))
12300     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
12301             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
12302                                            (type)));
12303   else if (TREE_CODE (type) == POINTER_TYPE
12304            || TREE_CODE (type) == REFERENCE_TYPE)
12305     return dependent_type_p (TREE_TYPE (type));
12306   else if (TREE_CODE (type) == FUNCTION_TYPE
12307            || TREE_CODE (type) == METHOD_TYPE)
12308     {
12309       tree arg_type;
12310
12311       if (dependent_type_p (TREE_TYPE (type)))
12312         return true;
12313       for (arg_type = TYPE_ARG_TYPES (type);
12314            arg_type;
12315            arg_type = TREE_CHAIN (arg_type))
12316         if (dependent_type_p (TREE_VALUE (arg_type)))
12317           return true;
12318       return false;
12319     }
12320   /* -- an array type constructed from any dependent type or whose
12321         size is specified by a constant expression that is
12322         value-dependent.  */
12323   if (TREE_CODE (type) == ARRAY_TYPE)
12324     {
12325       if (TYPE_DOMAIN (type)
12326           && ((value_dependent_expression_p
12327                (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
12328               || (type_dependent_expression_p
12329                   (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
12330         return true;
12331       return dependent_type_p (TREE_TYPE (type));
12332     }
12333
12334   /* -- a template-id in which either the template name is a template
12335      parameter ...  */
12336   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
12337     return true;
12338   /* ... or any of the template arguments is a dependent type or
12339         an expression that is type-dependent or value-dependent.  */
12340   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
12341            && (any_dependent_template_arguments_p
12342                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
12343     return true;
12344
12345   /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
12346      expression is not type-dependent, then it should already been
12347      have resolved.  */
12348   if (TREE_CODE (type) == TYPEOF_TYPE)
12349     return true;
12350
12351   /* The standard does not specifically mention types that are local
12352      to template functions or local classes, but they should be
12353      considered dependent too.  For example:
12354
12355        template <int I> void f() {
12356          enum E { a = I };
12357          S<sizeof (E)> s;
12358        }
12359
12360      The size of `E' cannot be known until the value of `I' has been
12361      determined.  Therefore, `E' must be considered dependent.  */
12362   scope = TYPE_CONTEXT (type);
12363   if (scope && TYPE_P (scope))
12364     return dependent_type_p (scope);
12365   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12366     return type_dependent_expression_p (scope);
12367
12368   /* Other types are non-dependent.  */
12369   return false;
12370 }
12371
12372 /* Returns TRUE if TYPE is dependent, in the sense of
12373    [temp.dep.type].  */
12374
12375 bool
12376 dependent_type_p (tree type)
12377 {
12378   /* If there are no template parameters in scope, then there can't be
12379      any dependent types.  */
12380   if (!processing_template_decl)
12381     {
12382       /* If we are not processing a template, then nobody should be
12383          providing us with a dependent type.  */
12384       gcc_assert (type);
12385       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
12386       return false;
12387     }
12388
12389   /* If the type is NULL, we have not computed a type for the entity
12390      in question; in that case, the type is dependent.  */
12391   if (!type)
12392     return true;
12393
12394   /* Erroneous types can be considered non-dependent.  */
12395   if (type == error_mark_node)
12396     return false;
12397
12398   /* If we have not already computed the appropriate value for TYPE,
12399      do so now.  */
12400   if (!TYPE_DEPENDENT_P_VALID (type))
12401     {
12402       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
12403       TYPE_DEPENDENT_P_VALID (type) = 1;
12404     }
12405
12406   return TYPE_DEPENDENT_P (type);
12407 }
12408
12409 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
12410
12411 static bool
12412 dependent_scope_ref_p (tree expression, bool criterion (tree))
12413 {
12414   tree scope;
12415   tree name;
12416
12417   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
12418
12419   if (!TYPE_P (TREE_OPERAND (expression, 0)))
12420     return true;
12421
12422   scope = TREE_OPERAND (expression, 0);
12423   name = TREE_OPERAND (expression, 1);
12424
12425   /* [temp.dep.expr]
12426
12427      An id-expression is type-dependent if it contains a
12428      nested-name-specifier that contains a class-name that names a
12429      dependent type.  */
12430   /* The suggested resolution to Core Issue 2 implies that if the
12431      qualifying type is the current class, then we must peek
12432      inside it.  */
12433   if (DECL_P (name)
12434       && currently_open_class (scope)
12435       && !criterion (name))
12436     return false;
12437   if (dependent_type_p (scope))
12438     return true;
12439
12440   return false;
12441 }
12442
12443 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
12444    [temp.dep.constexpr] */
12445
12446 bool
12447 value_dependent_expression_p (tree expression)
12448 {
12449   if (!processing_template_decl)
12450     return false;
12451
12452   /* A name declared with a dependent type.  */
12453   if (DECL_P (expression) && type_dependent_expression_p (expression))
12454     return true;
12455
12456   switch (TREE_CODE (expression))
12457     {
12458     case IDENTIFIER_NODE:
12459       /* A name that has not been looked up -- must be dependent.  */
12460       return true;
12461
12462     case TEMPLATE_PARM_INDEX:
12463       /* A non-type template parm.  */
12464       return true;
12465
12466     case CONST_DECL:
12467       /* A non-type template parm.  */
12468       if (DECL_TEMPLATE_PARM_P (expression))
12469         return true;
12470       return false;
12471
12472     case VAR_DECL:
12473        /* A constant with integral or enumeration type and is initialized
12474           with an expression that is value-dependent.  */
12475       if (DECL_INITIAL (expression)
12476           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
12477           && value_dependent_expression_p (DECL_INITIAL (expression)))
12478         return true;
12479       return false;
12480
12481     case DYNAMIC_CAST_EXPR:
12482     case STATIC_CAST_EXPR:
12483     case CONST_CAST_EXPR:
12484     case REINTERPRET_CAST_EXPR:
12485     case CAST_EXPR:
12486       /* These expressions are value-dependent if the type to which
12487          the cast occurs is dependent or the expression being casted
12488          is value-dependent.  */
12489       {
12490         tree type = TREE_TYPE (expression);
12491
12492         if (dependent_type_p (type))
12493           return true;
12494
12495         /* A functional cast has a list of operands.  */
12496         expression = TREE_OPERAND (expression, 0);
12497         if (!expression)
12498           {
12499             /* If there are no operands, it must be an expression such
12500                as "int()". This should not happen for aggregate types
12501                because it would form non-constant expressions.  */
12502             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
12503
12504             return false;
12505           }
12506
12507         if (TREE_CODE (expression) == TREE_LIST)
12508           {
12509             for (; expression; expression = TREE_CHAIN (expression))
12510               if (value_dependent_expression_p (TREE_VALUE (expression)))
12511                 return true;
12512             return false;
12513           }
12514
12515         return value_dependent_expression_p (expression);
12516       }
12517
12518     case SIZEOF_EXPR:
12519     case ALIGNOF_EXPR:
12520       /* A `sizeof' expression is value-dependent if the operand is
12521          type-dependent.  */
12522       expression = TREE_OPERAND (expression, 0);
12523       if (TYPE_P (expression))
12524         return dependent_type_p (expression);
12525       return type_dependent_expression_p (expression);
12526
12527     case SCOPE_REF:
12528       return dependent_scope_ref_p (expression, value_dependent_expression_p);
12529
12530     case COMPONENT_REF:
12531       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
12532               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
12533
12534     case CALL_EXPR:
12535       /* A CALL_EXPR is value-dependent if any argument is
12536          value-dependent.  Why do we have to handle CALL_EXPRs in this
12537          function at all?  First, some function calls, those for which
12538          value_dependent_expression_p is true, man appear in constant
12539          expressions.  Second, there appear to be bugs which result in
12540          other CALL_EXPRs reaching this point. */
12541       {
12542         tree function = TREE_OPERAND (expression, 0);
12543         tree args = TREE_OPERAND (expression, 1);
12544
12545         if (value_dependent_expression_p (function))
12546           return true;
12547
12548         if (! args)
12549           return false;
12550
12551         if (TREE_CODE (args) == TREE_LIST)
12552           {
12553             for (; args; args = TREE_CHAIN (args))
12554               if (value_dependent_expression_p (TREE_VALUE (args)))
12555                 return true;
12556             return false;
12557           }
12558
12559         return value_dependent_expression_p (args);
12560       }
12561
12562     default:
12563       /* A constant expression is value-dependent if any subexpression is
12564          value-dependent.  */
12565       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
12566         {
12567         case tcc_reference:
12568         case tcc_unary:
12569           return (value_dependent_expression_p
12570                   (TREE_OPERAND (expression, 0)));
12571
12572         case tcc_comparison:
12573         case tcc_binary:
12574           return ((value_dependent_expression_p
12575                    (TREE_OPERAND (expression, 0)))
12576                   || (value_dependent_expression_p
12577                       (TREE_OPERAND (expression, 1))));
12578
12579         case tcc_expression:
12580           {
12581             int i;
12582             for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (expression)); ++i)
12583               /* In some cases, some of the operands may be missing.
12584                  (For example, in the case of PREDECREMENT_EXPR, the
12585                  amount to increment by may be missing.)  That doesn't
12586                  make the expression dependent.  */
12587               if (TREE_OPERAND (expression, i)
12588                   && (value_dependent_expression_p
12589                       (TREE_OPERAND (expression, i))))
12590                 return true;
12591             return false;
12592           }
12593
12594         default:
12595           break;
12596         }
12597     }
12598
12599   /* The expression is not value-dependent.  */
12600   return false;
12601 }
12602
12603 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
12604    [temp.dep.expr].  */
12605
12606 bool
12607 type_dependent_expression_p (tree expression)
12608 {
12609   if (!processing_template_decl)
12610     return false;
12611
12612   if (expression == error_mark_node)
12613     return false;
12614
12615   /* An unresolved name is always dependent.  */
12616   if (TREE_CODE (expression) == IDENTIFIER_NODE)
12617     return true;
12618
12619   /* Some expression forms are never type-dependent.  */
12620   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
12621       || TREE_CODE (expression) == SIZEOF_EXPR
12622       || TREE_CODE (expression) == ALIGNOF_EXPR
12623       || TREE_CODE (expression) == TYPEID_EXPR
12624       || TREE_CODE (expression) == DELETE_EXPR
12625       || TREE_CODE (expression) == VEC_DELETE_EXPR
12626       || TREE_CODE (expression) == THROW_EXPR)
12627     return false;
12628
12629   /* The types of these expressions depends only on the type to which
12630      the cast occurs.  */
12631   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
12632       || TREE_CODE (expression) == STATIC_CAST_EXPR
12633       || TREE_CODE (expression) == CONST_CAST_EXPR
12634       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
12635       || TREE_CODE (expression) == CAST_EXPR)
12636     return dependent_type_p (TREE_TYPE (expression));
12637
12638   /* The types of these expressions depends only on the type created
12639      by the expression.  */
12640   if (TREE_CODE (expression) == NEW_EXPR
12641       || TREE_CODE (expression) == VEC_NEW_EXPR)
12642     {
12643       /* For NEW_EXPR tree nodes created inside a template, either
12644          the object type itself or a TREE_LIST may appear as the
12645          operand 1.  */
12646       tree type = TREE_OPERAND (expression, 1);
12647       if (TREE_CODE (type) == TREE_LIST)
12648         /* This is an array type.  We need to check array dimensions
12649            as well.  */
12650         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
12651                || value_dependent_expression_p
12652                     (TREE_OPERAND (TREE_VALUE (type), 1));
12653       else
12654         return dependent_type_p (type);
12655     }
12656
12657   if (TREE_CODE (expression) == SCOPE_REF
12658       && dependent_scope_ref_p (expression,
12659                                 type_dependent_expression_p))
12660     return true;
12661
12662   if (TREE_CODE (expression) == FUNCTION_DECL
12663       && DECL_LANG_SPECIFIC (expression)
12664       && DECL_TEMPLATE_INFO (expression)
12665       && (any_dependent_template_arguments_p
12666           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
12667     return true;
12668
12669   if (TREE_CODE (expression) == TEMPLATE_DECL
12670       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
12671     return false;
12672
12673   if (TREE_TYPE (expression) == unknown_type_node)
12674     {
12675       if (TREE_CODE (expression) == ADDR_EXPR)
12676         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
12677       if (TREE_CODE (expression) == COMPONENT_REF
12678           || TREE_CODE (expression) == OFFSET_REF)
12679         {
12680           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
12681             return true;
12682           expression = TREE_OPERAND (expression, 1);
12683           if (TREE_CODE (expression) == IDENTIFIER_NODE)
12684             return false;
12685         }
12686       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
12687       if (TREE_CODE (expression) == SCOPE_REF)
12688         return false;
12689
12690       if (TREE_CODE (expression) == BASELINK)
12691         expression = BASELINK_FUNCTIONS (expression);
12692
12693       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
12694         {
12695           if (any_dependent_template_arguments_p
12696               (TREE_OPERAND (expression, 1)))
12697             return true;
12698           expression = TREE_OPERAND (expression, 0);
12699         }
12700       gcc_assert (TREE_CODE (expression) == OVERLOAD
12701                   || TREE_CODE (expression) == FUNCTION_DECL);
12702
12703       while (expression)
12704         {
12705           if (type_dependent_expression_p (OVL_CURRENT (expression)))
12706             return true;
12707           expression = OVL_NEXT (expression);
12708         }
12709       return false;
12710     }
12711
12712   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
12713   
12714   return (dependent_type_p (TREE_TYPE (expression)));
12715 }
12716
12717 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
12718    contains a type-dependent expression.  */
12719
12720 bool
12721 any_type_dependent_arguments_p (tree args)
12722 {
12723   while (args)
12724     {
12725       tree arg = TREE_VALUE (args);
12726
12727       if (type_dependent_expression_p (arg))
12728         return true;
12729       args = TREE_CHAIN (args);
12730     }
12731   return false;
12732 }
12733
12734 /* Returns TRUE if the ARG (a template argument) is dependent.  */
12735
12736 static bool
12737 dependent_template_arg_p (tree arg)
12738 {
12739   if (!processing_template_decl)
12740     return false;
12741
12742   if (TREE_CODE (arg) == TEMPLATE_DECL
12743       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12744     return dependent_template_p (arg);
12745   else if (TYPE_P (arg))
12746     return dependent_type_p (arg);
12747   else
12748     return (type_dependent_expression_p (arg)
12749             || value_dependent_expression_p (arg));
12750 }
12751
12752 /* Returns true if ARGS (a collection of template arguments) contains
12753    any dependent arguments.  */
12754
12755 bool
12756 any_dependent_template_arguments_p (tree args)
12757 {
12758   int i;
12759   int j;
12760
12761   if (!args)
12762     return false;
12763   if (args == error_mark_node)
12764     return true;
12765
12766   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
12767     {
12768       tree level = TMPL_ARGS_LEVEL (args, i + 1);
12769       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
12770         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
12771           return true;
12772     }
12773
12774   return false;
12775 }
12776
12777 /* Returns TRUE if the template TMPL is dependent.  */
12778
12779 bool
12780 dependent_template_p (tree tmpl)
12781 {
12782   if (TREE_CODE (tmpl) == OVERLOAD)
12783     {
12784       while (tmpl)
12785         {
12786           if (dependent_template_p (OVL_FUNCTION (tmpl)))
12787             return true;
12788           tmpl = OVL_CHAIN (tmpl);
12789         }
12790       return false;
12791     }
12792
12793   /* Template template parameters are dependent.  */
12794   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
12795       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
12796     return true;
12797   /* So are names that have not been looked up.  */
12798   if (TREE_CODE (tmpl) == SCOPE_REF
12799       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
12800     return true;
12801   /* So are member templates of dependent classes.  */
12802   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
12803     return dependent_type_p (DECL_CONTEXT (tmpl));
12804   return false;
12805 }
12806
12807 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
12808
12809 bool
12810 dependent_template_id_p (tree tmpl, tree args)
12811 {
12812   return (dependent_template_p (tmpl)
12813           || any_dependent_template_arguments_p (args));
12814 }
12815
12816 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
12817    TYPENAME_TYPE corresponds.  Returns ERROR_MARK_NODE if no such TYPE
12818    can be found.  Note that this function peers inside uninstantiated
12819    templates and therefore should be used only in extremely limited
12820    situations.  ONLY_CURRENT_P restricts this peering to the currently
12821    open classes hierarchy (which is required when comparing types).  */
12822
12823 tree
12824 resolve_typename_type (tree type, bool only_current_p)
12825 {
12826   tree scope;
12827   tree name;
12828   tree decl;
12829   int quals;
12830   tree pushed_scope;
12831
12832   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
12833
12834   scope = TYPE_CONTEXT (type);
12835   name = TYPE_IDENTIFIER (type);
12836
12837   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
12838      it first before we can figure out what NAME refers to.  */
12839   if (TREE_CODE (scope) == TYPENAME_TYPE)
12840     scope = resolve_typename_type (scope, only_current_p);
12841   /* If we don't know what SCOPE refers to, then we cannot resolve the
12842      TYPENAME_TYPE.  */
12843   if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
12844     return error_mark_node;
12845   /* If the SCOPE is a template type parameter, we have no way of
12846      resolving the name.  */
12847   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
12848     return type;
12849   /* If the SCOPE is not the current instantiation, there's no reason
12850      to look inside it.  */
12851   if (only_current_p && !currently_open_class (scope))
12852     return error_mark_node;
12853   /* If SCOPE is a partial instantiation, it will not have a valid
12854      TYPE_FIELDS list, so use the original template.  */
12855   scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
12856   /* Enter the SCOPE so that name lookup will be resolved as if we
12857      were in the class definition.  In particular, SCOPE will no
12858      longer be considered a dependent type.  */
12859   pushed_scope = push_scope (scope);
12860   /* Look up the declaration.  */
12861   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
12862   /* Obtain the set of qualifiers applied to the TYPE.  */
12863   quals = cp_type_quals (type);
12864   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
12865      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
12866   if (!decl)
12867     type = error_mark_node;
12868   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
12869            && TREE_CODE (decl) == TYPE_DECL)
12870     type = TREE_TYPE (decl);
12871   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
12872            && DECL_CLASS_TEMPLATE_P (decl))
12873     {
12874       tree tmpl;
12875       tree args;
12876       /* Obtain the template and the arguments.  */
12877       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
12878       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
12879       /* Instantiate the template.  */
12880       type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
12881                                     /*entering_scope=*/0, tf_error | tf_user);
12882     }
12883   else
12884     type = error_mark_node;
12885   /* Qualify the resulting type.  */
12886   if (type != error_mark_node && quals)
12887     type = cp_build_qualified_type (type, quals);
12888   /* Leave the SCOPE.  */
12889   if (pushed_scope)
12890     pop_scope (pushed_scope);
12891
12892   return type;
12893 }
12894
12895 /* EXPR is an expression which is not type-dependent.  Return a proxy
12896    for EXPR that can be used to compute the types of larger
12897    expressions containing EXPR.  */
12898
12899 tree
12900 build_non_dependent_expr (tree expr)
12901 {
12902   tree inner_expr;
12903
12904   /* Preserve null pointer constants so that the type of things like
12905      "p == 0" where "p" is a pointer can be determined.  */
12906   if (null_ptr_cst_p (expr))
12907     return expr;
12908   /* Preserve OVERLOADs; the functions must be available to resolve
12909      types.  */
12910   inner_expr = expr;
12911   if (TREE_CODE (inner_expr) == ADDR_EXPR)
12912     inner_expr = TREE_OPERAND (inner_expr, 0);
12913   if (TREE_CODE (inner_expr) == COMPONENT_REF)
12914     inner_expr = TREE_OPERAND (inner_expr, 1);
12915   if (is_overloaded_fn (inner_expr)
12916       || TREE_CODE (inner_expr) == OFFSET_REF)
12917     return expr;
12918   /* There is no need to return a proxy for a variable.  */
12919   if (TREE_CODE (expr) == VAR_DECL)
12920     return expr;
12921   /* Preserve string constants; conversions from string constants to
12922      "char *" are allowed, even though normally a "const char *"
12923      cannot be used to initialize a "char *".  */
12924   if (TREE_CODE (expr) == STRING_CST)
12925     return expr;
12926   /* Preserve arithmetic constants, as an optimization -- there is no
12927      reason to create a new node.  */
12928   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
12929     return expr;
12930   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
12931      There is at least one place where we want to know that a
12932      particular expression is a throw-expression: when checking a ?:
12933      expression, there are special rules if the second or third
12934      argument is a throw-expression.  */
12935   if (TREE_CODE (expr) == THROW_EXPR)
12936     return expr;
12937
12938   if (TREE_CODE (expr) == COND_EXPR)
12939     return build3 (COND_EXPR,
12940                    TREE_TYPE (expr),
12941                    TREE_OPERAND (expr, 0),
12942                    (TREE_OPERAND (expr, 1)
12943                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
12944                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
12945                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
12946   if (TREE_CODE (expr) == COMPOUND_EXPR
12947       && !COMPOUND_EXPR_OVERLOADED (expr))
12948     return build2 (COMPOUND_EXPR,
12949                    TREE_TYPE (expr),
12950                    TREE_OPERAND (expr, 0),
12951                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
12952
12953   /* If the type is unknown, it can't really be non-dependent */
12954   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
12955   
12956   /* Otherwise, build a NON_DEPENDENT_EXPR.
12957
12958      REFERENCE_TYPEs are not stripped for expressions in templates
12959      because doing so would play havoc with mangling.  Consider, for
12960      example:
12961
12962        template <typename T> void f<T& g>() { g(); }
12963
12964      In the body of "f", the expression for "g" will have
12965      REFERENCE_TYPE, even though the standard says that it should
12966      not.  The reason is that we must preserve the syntactic form of
12967      the expression so that mangling (say) "f<g>" inside the body of
12968      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
12969      stripped here.  */
12970   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
12971 }
12972
12973 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
12974    Return a new TREE_LIST with the various arguments replaced with
12975    equivalent non-dependent expressions.  */
12976
12977 tree
12978 build_non_dependent_args (tree args)
12979 {
12980   tree a;
12981   tree new_args;
12982
12983   new_args = NULL_TREE;
12984   for (a = args; a; a = TREE_CHAIN (a))
12985     new_args = tree_cons (NULL_TREE,
12986                           build_non_dependent_expr (TREE_VALUE (a)),
12987                           new_args);
12988   return nreverse (new_args);
12989 }
12990
12991 #include "gt-cp-pt.h"