OSDN Git Service

PR c++/26433
[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           tree compound_stmt = NULL_TREE;
8409
8410           if (FN_TRY_BLOCK_P (t))
8411             stmt = begin_function_try_block (&compound_stmt);
8412           else
8413             stmt = begin_try_block ();
8414
8415           tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8416
8417           if (FN_TRY_BLOCK_P (t))
8418             finish_function_try_block (stmt);
8419           else
8420             finish_try_block (stmt);
8421
8422           tsubst_expr (TRY_HANDLERS (t), args, complain, in_decl);
8423           if (FN_TRY_BLOCK_P (t))
8424             finish_function_handler_sequence (stmt, compound_stmt);
8425           else
8426             finish_handler_sequence (stmt);
8427         }
8428       break;
8429
8430     case HANDLER:
8431       {
8432         tree decl;
8433
8434         stmt = begin_handler ();
8435         if (HANDLER_PARMS (t))
8436           {
8437             decl = HANDLER_PARMS (t);
8438             decl = tsubst (decl, args, complain, in_decl);
8439             /* Prevent instantiate_decl from trying to instantiate
8440                this variable.  We've already done all that needs to be
8441                done.  */
8442             DECL_TEMPLATE_INSTANTIATED (decl) = 1;
8443           }
8444         else
8445           decl = NULL_TREE;
8446         finish_handler_parms (decl, stmt);
8447         tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
8448         finish_handler (stmt);
8449       }
8450       break;
8451
8452     case TAG_DEFN:
8453       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
8454       break;
8455
8456     case OMP_PARALLEL:
8457       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
8458                                 args, complain, in_decl);
8459       stmt = begin_omp_parallel ();
8460       tsubst_expr (OMP_PARALLEL_BODY (t), args, complain, in_decl);
8461       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
8462         = OMP_PARALLEL_COMBINED (t);
8463       break;
8464
8465     case OMP_FOR:
8466       {
8467         tree clauses, decl, init, cond, incr, body, pre_body;
8468
8469         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
8470                                       args, complain, in_decl);
8471         init = OMP_FOR_INIT (t);
8472         gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
8473         decl = tsubst_expr (TREE_OPERAND (init, 0), args, complain, in_decl);
8474         init = tsubst_expr (TREE_OPERAND (init, 1), args, complain, in_decl);
8475         cond = tsubst_expr (OMP_FOR_COND (t), args, complain, in_decl);
8476         incr = tsubst_expr (OMP_FOR_INCR (t), args, complain, in_decl);
8477
8478         stmt = begin_omp_structured_block ();
8479
8480         pre_body = push_stmt_list ();
8481         tsubst_expr (OMP_FOR_PRE_BODY (t), args, complain, in_decl);
8482         pre_body = pop_stmt_list (pre_body);
8483
8484         body = push_stmt_list ();
8485         tsubst_expr (OMP_FOR_BODY (t), args, complain, in_decl);
8486         body = pop_stmt_list (body);
8487
8488         t = finish_omp_for (EXPR_LOCATION (t), decl, init, cond, incr, body,
8489                             pre_body);
8490         if (t)
8491           OMP_FOR_CLAUSES (t) = clauses;
8492
8493         add_stmt (finish_omp_structured_block (stmt));
8494       }
8495       break;
8496
8497     case OMP_SECTIONS:
8498     case OMP_SINGLE:
8499       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
8500       stmt = push_stmt_list ();
8501       tsubst_expr (OMP_BODY (t), args, complain, in_decl);
8502       stmt = pop_stmt_list (stmt);
8503
8504       t = copy_node (t);
8505       OMP_BODY (t) = stmt;
8506       OMP_CLAUSES (t) = tmp;
8507       add_stmt (t);
8508       break;
8509
8510     case OMP_SECTION:
8511     case OMP_CRITICAL:
8512     case OMP_MASTER:
8513     case OMP_ORDERED:
8514       stmt = push_stmt_list ();
8515       tsubst_expr (OMP_BODY (t), args, complain, in_decl);
8516       stmt = pop_stmt_list (stmt);
8517
8518       t = copy_node (t);
8519       OMP_BODY (t) = stmt;
8520       add_stmt (t);
8521       break;
8522
8523     case OMP_ATOMIC:
8524       {
8525         tree op0, op1;
8526         op0 = tsubst_expr (TREE_OPERAND (t, 0), args, complain, in_decl);
8527         op1 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl);
8528         if (OMP_ATOMIC_DEPENDENT_P (t))
8529           c_finish_omp_atomic (OMP_ATOMIC_CODE (t), op0, op1);
8530         else
8531           add_stmt (build2 (OMP_ATOMIC, void_type_node, op0, op1));
8532       }
8533       break;
8534
8535     default:
8536       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
8537
8538       return tsubst_copy_and_build (t, args, complain, in_decl,
8539                                     /*function_p=*/false);
8540     }
8541
8542   return NULL_TREE;
8543 }
8544
8545 /* T is a postfix-expression that is not being used in a function
8546    call.  Return the substituted version of T.  */
8547
8548 static tree
8549 tsubst_non_call_postfix_expression (tree t, tree args,
8550                                     tsubst_flags_t complain,
8551                                     tree in_decl)
8552 {
8553   if (TREE_CODE (t) == SCOPE_REF)
8554     t = tsubst_qualified_id (t, args, complain, in_decl,
8555                              /*done=*/false, /*address_p=*/false);
8556   else
8557     t = tsubst_copy_and_build (t, args, complain, in_decl,
8558                                /*function_p=*/false);
8559
8560   return t;
8561 }
8562
8563 /* Like tsubst but deals with expressions and performs semantic
8564    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
8565
8566 tree
8567 tsubst_copy_and_build (tree t,
8568                        tree args,
8569                        tsubst_flags_t complain,
8570                        tree in_decl,
8571                        bool function_p)
8572 {
8573 #define RECUR(NODE) \
8574   tsubst_copy_and_build (NODE, args, complain, in_decl, /*function_p=*/false)
8575
8576   tree op1;
8577
8578   if (t == NULL_TREE || t == error_mark_node)
8579     return t;
8580
8581   switch (TREE_CODE (t))
8582     {
8583     case USING_DECL:
8584       t = DECL_NAME (t);
8585       /* Fall through.  */
8586     case IDENTIFIER_NODE:
8587       {
8588         tree decl;
8589         cp_id_kind idk;
8590         bool non_integral_constant_expression_p;
8591         const char *error_msg;
8592
8593         if (IDENTIFIER_TYPENAME_P (t))
8594           {
8595             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8596             t = mangle_conv_op_name_for_type (new_type);
8597           }
8598
8599         /* Look up the name.  */
8600         decl = lookup_name (t);
8601
8602         /* By convention, expressions use ERROR_MARK_NODE to indicate
8603            failure, not NULL_TREE.  */
8604         if (decl == NULL_TREE)
8605           decl = error_mark_node;
8606
8607         decl = finish_id_expression (t, decl, NULL_TREE,
8608                                      &idk,
8609                                      /*integral_constant_expression_p=*/false,
8610                                      /*allow_non_integral_constant_expression_p=*/false,
8611                                      &non_integral_constant_expression_p,
8612                                      /*template_p=*/false,
8613                                      /*done=*/true,
8614                                      /*address_p=*/false,
8615                                      /*template_arg_p=*/false,
8616                                      &error_msg);
8617         if (error_msg)
8618           error (error_msg);
8619         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
8620           decl = unqualified_name_lookup_error (decl);
8621         return decl;
8622       }
8623
8624     case TEMPLATE_ID_EXPR:
8625       {
8626         tree object;
8627         tree template = RECUR (TREE_OPERAND (t, 0));
8628         tree targs = TREE_OPERAND (t, 1);
8629
8630         if (targs)
8631           targs = tsubst_template_args (targs, args, complain, in_decl);
8632
8633         if (TREE_CODE (template) == COMPONENT_REF)
8634           {
8635             object = TREE_OPERAND (template, 0);
8636             template = TREE_OPERAND (template, 1);
8637           }
8638         else
8639           object = NULL_TREE;
8640         template = lookup_template_function (template, targs);
8641
8642         if (object)
8643           return build3 (COMPONENT_REF, TREE_TYPE (template),
8644                          object, template, NULL_TREE);
8645         else
8646           return template;
8647       }
8648
8649     case INDIRECT_REF:
8650       {
8651         tree r = RECUR (TREE_OPERAND (t, 0));
8652
8653         if (REFERENCE_REF_P (t))
8654           {
8655             /* A type conversion to reference type will be enclosed in
8656                such an indirect ref, but the substitution of the cast
8657                will have also added such an indirect ref.  */
8658             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
8659               r = convert_from_reference (r);
8660           }
8661         else
8662           r = build_x_indirect_ref (r, "unary *");
8663         return r;
8664       }
8665
8666     case NOP_EXPR:
8667       return build_nop
8668         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8669          RECUR (TREE_OPERAND (t, 0)));
8670
8671     case CAST_EXPR:
8672       return build_functional_cast
8673         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8674          RECUR (TREE_OPERAND (t, 0)));
8675
8676     case REINTERPRET_CAST_EXPR:
8677       return build_reinterpret_cast
8678         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8679          RECUR (TREE_OPERAND (t, 0)));
8680
8681     case CONST_CAST_EXPR:
8682       return build_const_cast
8683         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8684          RECUR (TREE_OPERAND (t, 0)));
8685
8686     case DYNAMIC_CAST_EXPR:
8687       return build_dynamic_cast
8688         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8689          RECUR (TREE_OPERAND (t, 0)));
8690
8691     case STATIC_CAST_EXPR:
8692       return build_static_cast
8693         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8694          RECUR (TREE_OPERAND (t, 0)));
8695
8696     case POSTDECREMENT_EXPR:
8697     case POSTINCREMENT_EXPR:
8698       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8699                                                 args, complain, in_decl);
8700       return build_x_unary_op (TREE_CODE (t), op1);
8701
8702     case PREDECREMENT_EXPR:
8703     case PREINCREMENT_EXPR:
8704     case NEGATE_EXPR:
8705     case BIT_NOT_EXPR:
8706     case ABS_EXPR:
8707     case TRUTH_NOT_EXPR:
8708     case UNARY_PLUS_EXPR:  /* Unary + */
8709     case REALPART_EXPR:
8710     case IMAGPART_EXPR:
8711       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
8712
8713     case ADDR_EXPR:
8714       op1 = TREE_OPERAND (t, 0);
8715       if (TREE_CODE (op1) == SCOPE_REF)
8716         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
8717                                    /*done=*/true, /*address_p=*/true);
8718       else
8719         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
8720                                                   in_decl);
8721       if (TREE_CODE (op1) == LABEL_DECL)
8722         return finish_label_address_expr (DECL_NAME (op1));
8723       return build_x_unary_op (ADDR_EXPR, op1);
8724
8725     case PLUS_EXPR:
8726     case MINUS_EXPR:
8727     case MULT_EXPR:
8728     case TRUNC_DIV_EXPR:
8729     case CEIL_DIV_EXPR:
8730     case FLOOR_DIV_EXPR:
8731     case ROUND_DIV_EXPR:
8732     case EXACT_DIV_EXPR:
8733     case BIT_AND_EXPR:
8734     case BIT_IOR_EXPR:
8735     case BIT_XOR_EXPR:
8736     case TRUNC_MOD_EXPR:
8737     case FLOOR_MOD_EXPR:
8738     case TRUTH_ANDIF_EXPR:
8739     case TRUTH_ORIF_EXPR:
8740     case TRUTH_AND_EXPR:
8741     case TRUTH_OR_EXPR:
8742     case RSHIFT_EXPR:
8743     case LSHIFT_EXPR:
8744     case RROTATE_EXPR:
8745     case LROTATE_EXPR:
8746     case EQ_EXPR:
8747     case NE_EXPR:
8748     case MAX_EXPR:
8749     case MIN_EXPR:
8750     case LE_EXPR:
8751     case GE_EXPR:
8752     case LT_EXPR:
8753     case GT_EXPR:
8754     case MEMBER_REF:
8755     case DOTSTAR_EXPR:
8756       return build_x_binary_op
8757         (TREE_CODE (t),
8758          RECUR (TREE_OPERAND (t, 0)),
8759          RECUR (TREE_OPERAND (t, 1)),
8760          /*overloaded_p=*/NULL);
8761
8762     case SCOPE_REF:
8763       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
8764                                   /*address_p=*/false);
8765     case ARRAY_REF:
8766       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8767                                                 args, complain, in_decl);
8768       return build_x_binary_op (ARRAY_REF, op1, RECUR (TREE_OPERAND (t, 1)),
8769                                 /*overloaded_p=*/NULL);
8770
8771     case SIZEOF_EXPR:
8772     case ALIGNOF_EXPR:
8773       op1 = TREE_OPERAND (t, 0);
8774       if (!args)
8775         {
8776           /* When there are no ARGS, we are trying to evaluate a
8777              non-dependent expression from the parser.  Trying to do
8778              the substitutions may not work.  */
8779           if (!TYPE_P (op1))
8780             op1 = TREE_TYPE (op1);
8781         }
8782       else
8783         {
8784           ++skip_evaluation;
8785           op1 = RECUR (op1);
8786           --skip_evaluation;
8787         }
8788       if (TYPE_P (op1))
8789         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
8790       else
8791         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
8792
8793     case MODOP_EXPR:
8794       {
8795         tree r = build_x_modify_expr
8796           (RECUR (TREE_OPERAND (t, 0)),
8797            TREE_CODE (TREE_OPERAND (t, 1)),
8798            RECUR (TREE_OPERAND (t, 2)));
8799         /* TREE_NO_WARNING must be set if either the expression was
8800            parenthesized or it uses an operator such as >>= rather
8801            than plain assignment.  In the former case, it was already
8802            set and must be copied.  In the latter case,
8803            build_x_modify_expr sets it and it must not be reset
8804            here.  */
8805         if (TREE_NO_WARNING (t))
8806           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
8807         return r;
8808       }
8809
8810     case ARROW_EXPR:
8811       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8812                                                 args, complain, in_decl);
8813       /* Remember that there was a reference to this entity.  */
8814       if (DECL_P (op1))
8815         mark_used (op1);
8816       return build_x_arrow (op1);
8817
8818     case NEW_EXPR:
8819       return build_new
8820         (RECUR (TREE_OPERAND (t, 0)),
8821          RECUR (TREE_OPERAND (t, 1)),
8822          RECUR (TREE_OPERAND (t, 2)),
8823          RECUR (TREE_OPERAND (t, 3)),
8824          NEW_EXPR_USE_GLOBAL (t));
8825
8826     case DELETE_EXPR:
8827      return delete_sanity
8828        (RECUR (TREE_OPERAND (t, 0)),
8829         RECUR (TREE_OPERAND (t, 1)),
8830         DELETE_EXPR_USE_VEC (t),
8831         DELETE_EXPR_USE_GLOBAL (t));
8832
8833     case COMPOUND_EXPR:
8834       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
8835                                     RECUR (TREE_OPERAND (t, 1)));
8836
8837     case CALL_EXPR:
8838       {
8839         tree function;
8840         tree call_args;
8841         bool qualified_p;
8842         bool koenig_p;
8843
8844         function = TREE_OPERAND (t, 0);
8845         /* When we parsed the expression,  we determined whether or
8846            not Koenig lookup should be performed.  */
8847         koenig_p = KOENIG_LOOKUP_P (t);
8848         if (TREE_CODE (function) == SCOPE_REF)
8849           {
8850             qualified_p = true;
8851             function = tsubst_qualified_id (function, args, complain, in_decl,
8852                                             /*done=*/false,
8853                                             /*address_p=*/false);
8854           }
8855         else
8856           {
8857             if (TREE_CODE (function) == COMPONENT_REF)
8858               {
8859                 tree op = TREE_OPERAND (function, 1);
8860
8861                 qualified_p = (TREE_CODE (op) == SCOPE_REF
8862                                || (BASELINK_P (op)
8863                                    && BASELINK_QUALIFIED_P (op)));
8864               }
8865             else
8866               qualified_p = false;
8867             
8868             function = tsubst_copy_and_build (function, args, complain,
8869                                               in_decl,
8870                                               !qualified_p);
8871             if (BASELINK_P (function))
8872               qualified_p = true;
8873           }
8874
8875         call_args = RECUR (TREE_OPERAND (t, 1));
8876
8877         /* We do not perform argument-dependent lookup if normal
8878            lookup finds a non-function, in accordance with the
8879            expected resolution of DR 218.  */
8880         if (koenig_p
8881             && ((is_overloaded_fn (function)
8882                  /* If lookup found a member function, the Koenig lookup is
8883                     not appropriate, even if an unqualified-name was used
8884                     to denote the function.  */
8885                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
8886                 || TREE_CODE (function) == IDENTIFIER_NODE))
8887           function = perform_koenig_lookup (function, call_args);
8888
8889         if (TREE_CODE (function) == IDENTIFIER_NODE)
8890           {
8891             unqualified_name_lookup_error (function);
8892             return error_mark_node;
8893           }
8894
8895         /* Remember that there was a reference to this entity.  */
8896         if (DECL_P (function))
8897           mark_used (function);
8898
8899         if (TREE_CODE (function) == OFFSET_REF)
8900           return build_offset_ref_call_from_tree (function, call_args);
8901         if (TREE_CODE (function) == COMPONENT_REF)
8902           {
8903             if (!BASELINK_P (TREE_OPERAND (function, 1)))
8904               return finish_call_expr (function, call_args,
8905                                        /*disallow_virtual=*/false,
8906                                        /*koenig_p=*/false);
8907             else
8908               return (build_new_method_call
8909                       (TREE_OPERAND (function, 0),
8910                        TREE_OPERAND (function, 1),
8911                        call_args, NULL_TREE,
8912                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
8913                        /*fn_p=*/NULL));
8914           }
8915         return finish_call_expr (function, call_args,
8916                                  /*disallow_virtual=*/qualified_p,
8917                                  koenig_p);
8918       }
8919
8920     case COND_EXPR:
8921       return build_x_conditional_expr
8922         (RECUR (TREE_OPERAND (t, 0)),
8923          RECUR (TREE_OPERAND (t, 1)),
8924          RECUR (TREE_OPERAND (t, 2)));
8925
8926     case PSEUDO_DTOR_EXPR:
8927       return finish_pseudo_destructor_expr
8928         (RECUR (TREE_OPERAND (t, 0)),
8929          RECUR (TREE_OPERAND (t, 1)),
8930          RECUR (TREE_OPERAND (t, 2)));
8931
8932     case TREE_LIST:
8933       {
8934         tree purpose, value, chain;
8935
8936         if (t == void_list_node)
8937           return t;
8938
8939         purpose = TREE_PURPOSE (t);
8940         if (purpose)
8941           purpose = RECUR (purpose);
8942         value = TREE_VALUE (t);
8943         if (value)
8944           value = RECUR (value);
8945         chain = TREE_CHAIN (t);
8946         if (chain && chain != void_type_node)
8947           chain = RECUR (chain);
8948         if (purpose == TREE_PURPOSE (t)
8949             && value == TREE_VALUE (t)
8950             && chain == TREE_CHAIN (t))
8951           return t;
8952         return tree_cons (purpose, value, chain);
8953       }
8954
8955     case COMPONENT_REF:
8956       {
8957         tree object;
8958         tree object_type;
8959         tree member;
8960
8961         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8962                                                      args, complain, in_decl);
8963         /* Remember that there was a reference to this entity.  */
8964         if (DECL_P (object))
8965           mark_used (object);
8966         object_type = TREE_TYPE (object);
8967
8968         member = TREE_OPERAND (t, 1);
8969         if (BASELINK_P (member))
8970           member = tsubst_baselink (member,
8971                                     non_reference (TREE_TYPE (object)),
8972                                     args, complain, in_decl);
8973         else
8974           member = tsubst_copy (member, args, complain, in_decl);
8975         if (member == error_mark_node)
8976           return error_mark_node;
8977
8978         if (object_type && !CLASS_TYPE_P (object_type))
8979           {
8980             if (TREE_CODE (member) == BIT_NOT_EXPR)
8981               return finish_pseudo_destructor_expr (object,
8982                                                     NULL_TREE,
8983                                                     object_type);
8984             else if (TREE_CODE (member) == SCOPE_REF
8985                      && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
8986               return finish_pseudo_destructor_expr (object,
8987                                                     object,
8988                                                     object_type);
8989           }
8990         else if (TREE_CODE (member) == SCOPE_REF
8991                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
8992           {
8993             tree tmpl;
8994             tree args;
8995
8996             /* Lookup the template functions now that we know what the
8997                scope is.  */
8998             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
8999             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
9000             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
9001                                             /*is_type_p=*/false,
9002                                             /*complain=*/false);
9003             if (BASELINK_P (member))
9004               {
9005                 BASELINK_FUNCTIONS (member)
9006                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
9007                               args);
9008                 member = (adjust_result_of_qualified_name_lookup
9009                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
9010                            object_type));
9011               }
9012             else
9013               {
9014                 qualified_name_lookup_error (object_type, tmpl, member);
9015                 return error_mark_node;
9016               }
9017           }
9018         else if (TREE_CODE (member) == SCOPE_REF
9019                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
9020                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
9021           {
9022             if (complain & tf_error)
9023               {
9024                 if (TYPE_P (TREE_OPERAND (member, 0)))
9025                   error ("%qT is not a class or namespace",
9026                          TREE_OPERAND (member, 0));
9027                 else
9028                   error ("%qD is not a class or namespace",
9029                          TREE_OPERAND (member, 0));
9030               }
9031             return error_mark_node;
9032           }
9033         else if (TREE_CODE (member) == FIELD_DECL)
9034           return finish_non_static_data_member (member, object, NULL_TREE);
9035
9036         return finish_class_member_access_expr (object, member,
9037                                                 /*template_p=*/false);
9038       }
9039
9040     case THROW_EXPR:
9041       return build_throw
9042         (RECUR (TREE_OPERAND (t, 0)));
9043
9044     case CONSTRUCTOR:
9045       {
9046         VEC(constructor_elt,gc) *n;
9047         constructor_elt *ce;
9048         unsigned HOST_WIDE_INT idx;
9049         tree r;
9050         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9051         bool process_index_p;
9052
9053         /* digest_init will do the wrong thing if we let it.  */
9054         if (type && TYPE_PTRMEMFUNC_P (type))
9055           return t;
9056
9057         /* We do not want to process the index of aggregate
9058            initializers as they are identifier nodes which will be
9059            looked up by digest_init.  */
9060         process_index_p = !(type && IS_AGGR_TYPE (type));
9061
9062         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
9063         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
9064           {
9065             if (ce->index && process_index_p)
9066               ce->index = RECUR (ce->index);
9067             ce->value = RECUR (ce->value);
9068           }
9069
9070         r = build_constructor (NULL_TREE, n);
9071         TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
9072
9073         if (type)
9074           return digest_init (type, r);
9075         return r;
9076       }
9077
9078     case TYPEID_EXPR:
9079       {
9080         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
9081         if (TYPE_P (operand_0))
9082           return get_typeid (operand_0);
9083         return build_typeid (operand_0);
9084       }
9085
9086     case VAR_DECL:
9087       if (!args)
9088         return t;
9089       /* Fall through */
9090
9091     case PARM_DECL:
9092       {
9093         tree r = tsubst_copy (t, args, complain, in_decl);
9094
9095         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
9096           /* If the original type was a reference, we'll be wrapped in
9097              the appropriate INDIRECT_REF.  */
9098           r = convert_from_reference (r);
9099         return r;
9100       }
9101
9102     case VA_ARG_EXPR:
9103       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
9104                              tsubst_copy (TREE_TYPE (t), args, complain,
9105                                           in_decl));
9106
9107     case OFFSETOF_EXPR:
9108       return fold_offsetof (RECUR (TREE_OPERAND (t, 0)));
9109
9110     case STMT_EXPR:
9111       {
9112         tree old_stmt_expr = cur_stmt_expr;
9113         tree stmt_expr = begin_stmt_expr ();
9114
9115         cur_stmt_expr = stmt_expr;
9116         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl);
9117         stmt_expr = finish_stmt_expr (stmt_expr, false);
9118         cur_stmt_expr = old_stmt_expr;
9119
9120         return stmt_expr;
9121       }
9122
9123     case CONST_DECL:
9124       t = tsubst_copy (t, args, complain, in_decl);
9125       /* As in finish_id_expression, we resolve enumeration constants
9126          to their underlying values.  */
9127       if (TREE_CODE (t) == CONST_DECL)
9128         return DECL_INITIAL (t);
9129       return t;
9130
9131     default:
9132       /* Handle Objective-C++ constructs, if appropriate.  */
9133       {
9134         tree subst
9135           = objcp_tsubst_copy_and_build (t, args, complain,
9136                                          in_decl, /*function_p=*/false);
9137         if (subst)
9138           return subst;
9139       }
9140       return tsubst_copy (t, args, complain, in_decl);
9141     }
9142
9143 #undef RECUR
9144 }
9145
9146 /* Verify that the instantiated ARGS are valid. For type arguments,
9147    make sure that the type's linkage is ok. For non-type arguments,
9148    make sure they are constants if they are integral or enumerations.
9149    Emit an error under control of COMPLAIN, and return TRUE on error.  */
9150
9151 static bool
9152 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
9153 {
9154   int ix, len = DECL_NTPARMS (tmpl);
9155   bool result = false;
9156
9157   for (ix = 0; ix != len; ix++)
9158     {
9159       tree t = TREE_VEC_ELT (args, ix);
9160
9161       if (TYPE_P (t))
9162         {
9163           /* [basic.link]: A name with no linkage (notably, the name
9164              of a class or enumeration declared in a local scope)
9165              shall not be used to declare an entity with linkage.
9166              This implies that names with no linkage cannot be used as
9167              template arguments.  */
9168           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
9169
9170           if (nt)
9171             {
9172               /* DR 488 makes use of a type with no linkage cause
9173                  type deduction to fail.  */ 
9174               if (complain & tf_error)
9175                 {
9176                   if (TYPE_ANONYMOUS_P (nt))
9177                     error ("%qT is/uses anonymous type", t);
9178                   else
9179                     error ("template argument for %qD uses local type %qT",
9180                            tmpl, t);
9181                 }
9182               result = true;
9183             }
9184           /* In order to avoid all sorts of complications, we do not
9185              allow variably-modified types as template arguments.  */
9186           else if (variably_modified_type_p (t, NULL_TREE))
9187             {
9188               if (complain & tf_error)
9189                 error ("%qT is a variably modified type", t);
9190               result = true;
9191             }
9192         }
9193       /* A non-type argument of integral or enumerated type must be a
9194          constant.  */
9195       else if (TREE_TYPE (t)
9196                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
9197                && !TREE_CONSTANT (t))
9198         {
9199           if (complain & tf_error)
9200             error ("integral expression %qE is not constant", t);
9201           result = true;
9202         }
9203     }
9204   if (result && (complain & tf_error))
9205     error ("  trying to instantiate %qD", tmpl);
9206   return result;
9207 }
9208
9209 /* Instantiate the indicated variable or function template TMPL with
9210    the template arguments in TARG_PTR.  */
9211
9212 tree
9213 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
9214 {
9215   tree fndecl;
9216   tree gen_tmpl;
9217   tree spec;
9218
9219   if (tmpl == error_mark_node)
9220     return error_mark_node;
9221
9222   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
9223
9224   /* If this function is a clone, handle it specially.  */
9225   if (DECL_CLONED_FUNCTION_P (tmpl))
9226     {
9227       tree spec;
9228       tree clone;
9229
9230       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
9231                                    complain);
9232       if (spec == error_mark_node)
9233         return error_mark_node;
9234
9235       /* Look for the clone.  */
9236       FOR_EACH_CLONE (clone, spec)
9237         if (DECL_NAME (clone) == DECL_NAME (tmpl))
9238           return clone;
9239       /* We should always have found the clone by now.  */
9240       gcc_unreachable ();
9241       return NULL_TREE;
9242     }
9243
9244   /* Check to see if we already have this specialization.  */
9245   spec = retrieve_specialization (tmpl, targ_ptr,
9246                                   /*class_specializations_p=*/false);
9247   if (spec != NULL_TREE)
9248     return spec;
9249
9250   gen_tmpl = most_general_template (tmpl);
9251   if (tmpl != gen_tmpl)
9252     {
9253       /* The TMPL is a partial instantiation.  To get a full set of
9254          arguments we must add the arguments used to perform the
9255          partial instantiation.  */
9256       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
9257                                               targ_ptr);
9258
9259       /* Check to see if we already have this specialization.  */
9260       spec = retrieve_specialization (gen_tmpl, targ_ptr,
9261                                       /*class_specializations_p=*/false);
9262       if (spec != NULL_TREE)
9263         return spec;
9264     }
9265
9266   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
9267                                complain))
9268     return error_mark_node;
9269
9270   /* We are building a FUNCTION_DECL, during which the access of its
9271      parameters and return types have to be checked.  However this
9272      FUNCTION_DECL which is the desired context for access checking
9273      is not built yet.  We solve this chicken-and-egg problem by
9274      deferring all checks until we have the FUNCTION_DECL.  */
9275   push_deferring_access_checks (dk_deferred);
9276
9277   /* Substitute template parameters.  */
9278   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
9279                    targ_ptr, complain, gen_tmpl);
9280   if (fndecl == error_mark_node)
9281     return error_mark_node;
9282
9283   /* Now we know the specialization, compute access previously
9284      deferred.  */
9285   push_access_scope (fndecl);
9286   perform_deferred_access_checks ();
9287   pop_access_scope (fndecl);
9288   pop_deferring_access_checks ();
9289
9290   /* The DECL_TI_TEMPLATE should always be the immediate parent
9291      template, not the most general template.  */
9292   DECL_TI_TEMPLATE (fndecl) = tmpl;
9293
9294   /* If we've just instantiated the main entry point for a function,
9295      instantiate all the alternate entry points as well.  We do this
9296      by cloning the instantiation of the main entry point, not by
9297      instantiating the template clones.  */
9298   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
9299     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
9300
9301   return fndecl;
9302 }
9303
9304 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
9305    arguments that are being used when calling it.  TARGS is a vector
9306    into which the deduced template arguments are placed.
9307
9308    Return zero for success, 2 for an incomplete match that doesn't resolve
9309    all the types, and 1 for complete failure.  An error message will be
9310    printed only for an incomplete match.
9311
9312    If FN is a conversion operator, or we are trying to produce a specific
9313    specialization, RETURN_TYPE is the return type desired.
9314
9315    The EXPLICIT_TARGS are explicit template arguments provided via a
9316    template-id.
9317
9318    The parameter STRICT is one of:
9319
9320    DEDUCE_CALL:
9321      We are deducing arguments for a function call, as in
9322      [temp.deduct.call].
9323
9324    DEDUCE_CONV:
9325      We are deducing arguments for a conversion function, as in
9326      [temp.deduct.conv].
9327
9328    DEDUCE_EXACT:
9329      We are deducing arguments when doing an explicit instantiation
9330      as in [temp.explicit], when determining an explicit specialization
9331      as in [temp.expl.spec], or when taking the address of a function
9332      template, as in [temp.deduct.funcaddr].  */
9333
9334 int
9335 fn_type_unification (tree fn,
9336                      tree explicit_targs,
9337                      tree targs,
9338                      tree args,
9339                      tree return_type,
9340                      unification_kind_t strict,
9341                      int flags)
9342 {
9343   tree parms;
9344   tree fntype;
9345   int result;
9346
9347   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
9348
9349   fntype = TREE_TYPE (fn);
9350   if (explicit_targs)
9351     {
9352       /* [temp.deduct]
9353
9354          The specified template arguments must match the template
9355          parameters in kind (i.e., type, nontype, template), and there
9356          must not be more arguments than there are parameters;
9357          otherwise type deduction fails.
9358
9359          Nontype arguments must match the types of the corresponding
9360          nontype template parameters, or must be convertible to the
9361          types of the corresponding nontype parameters as specified in
9362          _temp.arg.nontype_, otherwise type deduction fails.
9363
9364          All references in the function type of the function template
9365          to the corresponding template parameters are replaced by the
9366          specified template argument values.  If a substitution in a
9367          template parameter or in the function type of the function
9368          template results in an invalid type, type deduction fails.  */
9369       int i;
9370       tree converted_args;
9371       bool incomplete;
9372
9373       if (explicit_targs == error_mark_node)
9374         return 1;
9375
9376       converted_args
9377         = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9378                                   explicit_targs, NULL_TREE, tf_none,
9379                                   /*require_all_args=*/false,
9380                                   /*use_default_args=*/false));
9381       if (converted_args == error_mark_node)
9382         return 1;
9383
9384       /* Substitute the explicit args into the function type.  This is
9385          necessary so that, for instance, explicitly declared function
9386          arguments can match null pointed constants.  If we were given
9387          an incomplete set of explicit args, we must not do semantic
9388          processing during substitution as we could create partial
9389          instantiations.  */
9390       incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
9391       processing_template_decl += incomplete;
9392       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
9393       processing_template_decl -= incomplete;
9394
9395       if (fntype == error_mark_node)
9396         return 1;
9397
9398       /* Place the explicitly specified arguments in TARGS.  */
9399       for (i = NUM_TMPL_ARGS (converted_args); i--;)
9400         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
9401     }
9402
9403   parms = TYPE_ARG_TYPES (fntype);
9404   /* Never do unification on the 'this' parameter.  */
9405   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
9406     parms = TREE_CHAIN (parms);
9407
9408   if (return_type)
9409     {
9410       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
9411       args = tree_cons (NULL_TREE, return_type, args);
9412     }
9413
9414   /* We allow incomplete unification without an error message here
9415      because the standard doesn't seem to explicitly prohibit it.  Our
9416      callers must be ready to deal with unification failures in any
9417      event.  */
9418   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9419                                   targs, parms, args, /*subr=*/0,
9420                                   strict, flags);
9421
9422   if (result == 0)
9423     /* All is well so far.  Now, check:
9424
9425        [temp.deduct]
9426
9427        When all template arguments have been deduced, all uses of
9428        template parameters in nondeduced contexts are replaced with
9429        the corresponding deduced argument values.  If the
9430        substitution results in an invalid type, as described above,
9431        type deduction fails.  */
9432     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
9433         == error_mark_node)
9434       return 1;
9435
9436   return result;
9437 }
9438
9439 /* Adjust types before performing type deduction, as described in
9440    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
9441    sections are symmetric.  PARM is the type of a function parameter
9442    or the return type of the conversion function.  ARG is the type of
9443    the argument passed to the call, or the type of the value
9444    initialized with the result of the conversion function.  */
9445
9446 static int
9447 maybe_adjust_types_for_deduction (unification_kind_t strict,
9448                                   tree* parm,
9449                                   tree* arg)
9450 {
9451   int result = 0;
9452
9453   switch (strict)
9454     {
9455     case DEDUCE_CALL:
9456       break;
9457
9458     case DEDUCE_CONV:
9459       {
9460         /* Swap PARM and ARG throughout the remainder of this
9461            function; the handling is precisely symmetric since PARM
9462            will initialize ARG rather than vice versa.  */
9463         tree* temp = parm;
9464         parm = arg;
9465         arg = temp;
9466         break;
9467       }
9468
9469     case DEDUCE_EXACT:
9470       /* There is nothing to do in this case.  */
9471       return 0;
9472
9473     default:
9474       gcc_unreachable ();
9475     }
9476
9477   if (TREE_CODE (*parm) != REFERENCE_TYPE)
9478     {
9479       /* [temp.deduct.call]
9480
9481          If P is not a reference type:
9482
9483          --If A is an array type, the pointer type produced by the
9484          array-to-pointer standard conversion (_conv.array_) is
9485          used in place of A for type deduction; otherwise,
9486
9487          --If A is a function type, the pointer type produced by
9488          the function-to-pointer standard conversion
9489          (_conv.func_) is used in place of A for type deduction;
9490          otherwise,
9491
9492          --If A is a cv-qualified type, the top level
9493          cv-qualifiers of A's type are ignored for type
9494          deduction.  */
9495       if (TREE_CODE (*arg) == ARRAY_TYPE)
9496         *arg = build_pointer_type (TREE_TYPE (*arg));
9497       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
9498         *arg = build_pointer_type (*arg);
9499       else
9500         *arg = TYPE_MAIN_VARIANT (*arg);
9501     }
9502
9503   /* [temp.deduct.call]
9504
9505      If P is a cv-qualified type, the top level cv-qualifiers
9506      of P's type are ignored for type deduction.  If P is a
9507      reference type, the type referred to by P is used for
9508      type deduction.  */
9509   *parm = TYPE_MAIN_VARIANT (*parm);
9510   if (TREE_CODE (*parm) == REFERENCE_TYPE)
9511     {
9512       *parm = TREE_TYPE (*parm);
9513       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9514     }
9515
9516   /* DR 322. For conversion deduction, remove a reference type on parm
9517      too (which has been swapped into ARG).  */
9518   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
9519     *arg = TREE_TYPE (*arg);
9520
9521   return result;
9522 }
9523
9524 /* Most parms like fn_type_unification.
9525
9526    If SUBR is 1, we're being called recursively (to unify the
9527    arguments of a function or method parameter of a function
9528    template). */
9529
9530 static int
9531 type_unification_real (tree tparms,
9532                        tree targs,
9533                        tree xparms,
9534                        tree xargs,
9535                        int subr,
9536                        unification_kind_t strict,
9537                        int flags)
9538 {
9539   tree parm, arg;
9540   int i;
9541   int ntparms = TREE_VEC_LENGTH (tparms);
9542   int sub_strict;
9543   int saw_undeduced = 0;
9544   tree parms, args;
9545
9546   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
9547   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
9548   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
9549   gcc_assert (ntparms > 0);
9550
9551   switch (strict)
9552     {
9553     case DEDUCE_CALL:
9554       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
9555                     | UNIFY_ALLOW_DERIVED);
9556       break;
9557
9558     case DEDUCE_CONV:
9559       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
9560       break;
9561
9562     case DEDUCE_EXACT:
9563       sub_strict = UNIFY_ALLOW_NONE;
9564       break;
9565
9566     default:
9567       gcc_unreachable ();
9568     }
9569
9570  again:
9571   parms = xparms;
9572   args = xargs;
9573
9574   while (parms && parms != void_list_node
9575          && args && args != void_list_node)
9576     {
9577       parm = TREE_VALUE (parms);
9578       parms = TREE_CHAIN (parms);
9579       arg = TREE_VALUE (args);
9580       args = TREE_CHAIN (args);
9581
9582       if (arg == error_mark_node)
9583         return 1;
9584       if (arg == unknown_type_node)
9585         /* We can't deduce anything from this, but we might get all the
9586            template args from other function args.  */
9587         continue;
9588
9589       /* Conversions will be performed on a function argument that
9590          corresponds with a function parameter that contains only
9591          non-deducible template parameters and explicitly specified
9592          template parameters.  */
9593       if (!uses_template_parms (parm))
9594         {
9595           tree type;
9596
9597           if (!TYPE_P (arg))
9598             type = TREE_TYPE (arg);
9599           else
9600             type = arg;
9601
9602           if (same_type_p (parm, type))
9603             continue;
9604           if (strict != DEDUCE_EXACT
9605               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg, 
9606                                   flags))
9607             continue;
9608           
9609           return 1;
9610         }
9611
9612       if (!TYPE_P (arg))
9613         {
9614           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
9615           if (type_unknown_p (arg))
9616             {
9617               /* [temp.deduct.type] A template-argument can be deduced from
9618                  a pointer to function or pointer to member function
9619                  argument if the set of overloaded functions does not
9620                  contain function templates and at most one of a set of
9621                  overloaded functions provides a unique match.  */
9622
9623               if (resolve_overloaded_unification
9624                   (tparms, targs, parm, arg, strict, sub_strict)
9625                   != 0)
9626                 return 1;
9627               continue;
9628             }
9629           arg = TREE_TYPE (arg);
9630           if (arg == error_mark_node)
9631             return 1;
9632         }
9633
9634       {
9635         int arg_strict = sub_strict;
9636
9637         if (!subr)
9638           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9639
9640         if (unify (tparms, targs, parm, arg, arg_strict))
9641           return 1;
9642       }
9643     }
9644
9645   /* Fail if we've reached the end of the parm list, and more args
9646      are present, and the parm list isn't variadic.  */
9647   if (args && args != void_list_node && parms == void_list_node)
9648     return 1;
9649   /* Fail if parms are left and they don't have default values.  */
9650   if (parms && parms != void_list_node
9651       && TREE_PURPOSE (parms) == NULL_TREE)
9652     return 1;
9653
9654   if (!subr)
9655     for (i = 0; i < ntparms; i++)
9656       if (!TREE_VEC_ELT (targs, i))
9657         {
9658           tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
9659
9660           /* If this is an undeduced nontype parameter that depends on
9661              a type parameter, try another pass; its type may have been
9662              deduced from a later argument than the one from which
9663              this parameter can be deduced.  */
9664           if (TREE_CODE (tparm) == PARM_DECL
9665               && uses_template_parms (TREE_TYPE (tparm))
9666               && !saw_undeduced++)
9667             goto again;
9668
9669           return 2;
9670         }
9671
9672   return 0;
9673 }
9674
9675 /* Subroutine of type_unification_real.  Args are like the variables at the
9676    call site.  ARG is an overloaded function (or template-id); we try
9677    deducing template args from each of the overloads, and if only one
9678    succeeds, we go with that.  Modifies TARGS and returns 0 on success.  */
9679
9680 static int
9681 resolve_overloaded_unification (tree tparms,
9682                                 tree targs,
9683                                 tree parm,
9684                                 tree arg,
9685                                 unification_kind_t strict,
9686                                 int sub_strict)
9687 {
9688   tree tempargs = copy_node (targs);
9689   int good = 0;
9690   bool addr_p;
9691
9692   if (TREE_CODE (arg) == ADDR_EXPR)
9693     {
9694       arg = TREE_OPERAND (arg, 0);
9695       addr_p = true;
9696     }
9697   else
9698     addr_p = false;
9699
9700   if (TREE_CODE (arg) == COMPONENT_REF)
9701     /* Handle `&x' where `x' is some static or non-static member
9702        function name.  */
9703     arg = TREE_OPERAND (arg, 1);
9704
9705   if (TREE_CODE (arg) == OFFSET_REF)
9706     arg = TREE_OPERAND (arg, 1);
9707
9708   /* Strip baselink information.  */
9709   if (BASELINK_P (arg))
9710     arg = BASELINK_FUNCTIONS (arg);
9711
9712   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
9713     {
9714       /* If we got some explicit template args, we need to plug them into
9715          the affected templates before we try to unify, in case the
9716          explicit args will completely resolve the templates in question.  */
9717
9718       tree expl_subargs = TREE_OPERAND (arg, 1);
9719       arg = TREE_OPERAND (arg, 0);
9720
9721       for (; arg; arg = OVL_NEXT (arg))
9722         {
9723           tree fn = OVL_CURRENT (arg);
9724           tree subargs, elem;
9725
9726           if (TREE_CODE (fn) != TEMPLATE_DECL)
9727             continue;
9728
9729           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
9730                                   expl_subargs, /*check_ret=*/false);
9731           if (subargs)
9732             {
9733               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
9734               good += try_one_overload (tparms, targs, tempargs, parm,
9735                                         elem, strict, sub_strict, addr_p);
9736             }
9737         }
9738     }
9739   else
9740     {
9741       gcc_assert (TREE_CODE (arg) == OVERLOAD
9742                   || TREE_CODE (arg) == FUNCTION_DECL);
9743
9744       for (; arg; arg = OVL_NEXT (arg))
9745         good += try_one_overload (tparms, targs, tempargs, parm,
9746                                   TREE_TYPE (OVL_CURRENT (arg)),
9747                                   strict, sub_strict, addr_p);
9748     }
9749
9750   /* [temp.deduct.type] A template-argument can be deduced from a pointer
9751      to function or pointer to member function argument if the set of
9752      overloaded functions does not contain function templates and at most
9753      one of a set of overloaded functions provides a unique match.
9754
9755      So if we found multiple possibilities, we return success but don't
9756      deduce anything.  */
9757
9758   if (good == 1)
9759     {
9760       int i = TREE_VEC_LENGTH (targs);
9761       for (; i--; )
9762         if (TREE_VEC_ELT (tempargs, i))
9763           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
9764     }
9765   if (good)
9766     return 0;
9767
9768   return 1;
9769 }
9770
9771 /* Subroutine of resolve_overloaded_unification; does deduction for a single
9772    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
9773    different overloads deduce different arguments for a given parm.
9774    ADDR_P is true if the expression for which deduction is being
9775    performed was of the form "& fn" rather than simply "fn".
9776
9777    Returns 1 on success.  */
9778
9779 static int
9780 try_one_overload (tree tparms,
9781                   tree orig_targs,
9782                   tree targs,
9783                   tree parm,
9784                   tree arg,
9785                   unification_kind_t strict,
9786                   int sub_strict,
9787                   bool addr_p)
9788 {
9789   int nargs;
9790   tree tempargs;
9791   int i;
9792
9793   /* [temp.deduct.type] A template-argument can be deduced from a pointer
9794      to function or pointer to member function argument if the set of
9795      overloaded functions does not contain function templates and at most
9796      one of a set of overloaded functions provides a unique match.
9797
9798      So if this is a template, just return success.  */
9799
9800   if (uses_template_parms (arg))
9801     return 1;
9802
9803   if (TREE_CODE (arg) == METHOD_TYPE)
9804     arg = build_ptrmemfunc_type (build_pointer_type (arg));
9805   else if (addr_p)
9806     arg = build_pointer_type (arg);
9807
9808   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9809
9810   /* We don't copy orig_targs for this because if we have already deduced
9811      some template args from previous args, unify would complain when we
9812      try to deduce a template parameter for the same argument, even though
9813      there isn't really a conflict.  */
9814   nargs = TREE_VEC_LENGTH (targs);
9815   tempargs = make_tree_vec (nargs);
9816
9817   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
9818     return 0;
9819
9820   /* First make sure we didn't deduce anything that conflicts with
9821      explicitly specified args.  */
9822   for (i = nargs; i--; )
9823     {
9824       tree elt = TREE_VEC_ELT (tempargs, i);
9825       tree oldelt = TREE_VEC_ELT (orig_targs, i);
9826
9827       if (!elt)
9828         /*NOP*/;
9829       else if (uses_template_parms (elt))
9830         /* Since we're unifying against ourselves, we will fill in
9831            template args used in the function parm list with our own
9832            template parms.  Discard them.  */
9833         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
9834       else if (oldelt && !template_args_equal (oldelt, elt))
9835         return 0;
9836     }
9837
9838   for (i = nargs; i--; )
9839     {
9840       tree elt = TREE_VEC_ELT (tempargs, i);
9841
9842       if (elt)
9843         TREE_VEC_ELT (targs, i) = elt;
9844     }
9845
9846   return 1;
9847 }
9848
9849 /* PARM is a template class (perhaps with unbound template
9850    parameters).  ARG is a fully instantiated type.  If ARG can be
9851    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
9852    TARGS are as for unify.  */
9853
9854 static tree
9855 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
9856 {
9857   tree copy_of_targs;
9858
9859   if (!CLASSTYPE_TEMPLATE_INFO (arg)
9860       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
9861           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
9862     return NULL_TREE;
9863
9864   /* We need to make a new template argument vector for the call to
9865      unify.  If we used TARGS, we'd clutter it up with the result of
9866      the attempted unification, even if this class didn't work out.
9867      We also don't want to commit ourselves to all the unifications
9868      we've already done, since unification is supposed to be done on
9869      an argument-by-argument basis.  In other words, consider the
9870      following pathological case:
9871
9872        template <int I, int J, int K>
9873        struct S {};
9874
9875        template <int I, int J>
9876        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
9877
9878        template <int I, int J, int K>
9879        void f(S<I, J, K>, S<I, I, I>);
9880
9881        void g() {
9882          S<0, 0, 0> s0;
9883          S<0, 1, 2> s2;
9884
9885          f(s0, s2);
9886        }
9887
9888      Now, by the time we consider the unification involving `s2', we
9889      already know that we must have `f<0, 0, 0>'.  But, even though
9890      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
9891      because there are two ways to unify base classes of S<0, 1, 2>
9892      with S<I, I, I>.  If we kept the already deduced knowledge, we
9893      would reject the possibility I=1.  */
9894   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
9895
9896   /* If unification failed, we're done.  */
9897   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
9898              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
9899     return NULL_TREE;
9900
9901   return arg;
9902 }
9903
9904 /* Given a template type PARM and a class type ARG, find the unique
9905    base type in ARG that is an instance of PARM.  We do not examine
9906    ARG itself; only its base-classes.  If there is not exactly one
9907    appropriate base class, return NULL_TREE.  PARM may be the type of
9908    a partial specialization, as well as a plain template type.  Used
9909    by unify.  */
9910
9911 static tree
9912 get_template_base (tree tparms, tree targs, tree parm, tree arg)
9913 {
9914   tree rval = NULL_TREE;
9915   tree binfo;
9916
9917   gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
9918
9919   binfo = TYPE_BINFO (complete_type (arg));
9920   if (!binfo)
9921     /* The type could not be completed.  */
9922     return NULL_TREE;
9923
9924   /* Walk in inheritance graph order.  The search order is not
9925      important, and this avoids multiple walks of virtual bases.  */
9926   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
9927     {
9928       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
9929
9930       if (r)
9931         {
9932           /* If there is more than one satisfactory baseclass, then:
9933
9934                [temp.deduct.call]
9935
9936               If they yield more than one possible deduced A, the type
9937               deduction fails.
9938
9939              applies.  */
9940           if (rval && !same_type_p (r, rval))
9941             return NULL_TREE;
9942
9943           rval = r;
9944         }
9945     }
9946
9947   return rval;
9948 }
9949
9950 /* Returns the level of DECL, which declares a template parameter.  */
9951
9952 static int
9953 template_decl_level (tree decl)
9954 {
9955   switch (TREE_CODE (decl))
9956     {
9957     case TYPE_DECL:
9958     case TEMPLATE_DECL:
9959       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
9960
9961     case PARM_DECL:
9962       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
9963
9964     default:
9965       gcc_unreachable ();
9966     }
9967   return 0;
9968 }
9969
9970 /* Decide whether ARG can be unified with PARM, considering only the
9971    cv-qualifiers of each type, given STRICT as documented for unify.
9972    Returns nonzero iff the unification is OK on that basis.  */
9973
9974 static int
9975 check_cv_quals_for_unify (int strict, tree arg, tree parm)
9976 {
9977   int arg_quals = cp_type_quals (arg);
9978   int parm_quals = cp_type_quals (parm);
9979
9980   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9981       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9982     {
9983       /*  Although a CVR qualifier is ignored when being applied to a
9984           substituted template parameter ([8.3.2]/1 for example), that
9985           does not apply during deduction [14.8.2.4]/1, (even though
9986           that is not explicitly mentioned, [14.8.2.4]/9 indicates
9987           this).  Except when we're allowing additional CV qualifiers
9988           at the outer level [14.8.2.1]/3,1st bullet.  */
9989       if ((TREE_CODE (arg) == REFERENCE_TYPE
9990            || TREE_CODE (arg) == FUNCTION_TYPE
9991            || TREE_CODE (arg) == METHOD_TYPE)
9992           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
9993         return 0;
9994
9995       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
9996           && (parm_quals & TYPE_QUAL_RESTRICT))
9997         return 0;
9998     }
9999
10000   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
10001       && (arg_quals & parm_quals) != parm_quals)
10002     return 0;
10003
10004   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
10005       && (parm_quals & arg_quals) != arg_quals)
10006     return 0;
10007
10008   return 1;
10009 }
10010
10011 /* Deduce the value of template parameters.  TPARMS is the (innermost)
10012    set of template parameters to a template.  TARGS is the bindings
10013    for those template parameters, as determined thus far; TARGS may
10014    include template arguments for outer levels of template parameters
10015    as well.  PARM is a parameter to a template function, or a
10016    subcomponent of that parameter; ARG is the corresponding argument.
10017    This function attempts to match PARM with ARG in a manner
10018    consistent with the existing assignments in TARGS.  If more values
10019    are deduced, then TARGS is updated.
10020
10021    Returns 0 if the type deduction succeeds, 1 otherwise.  The
10022    parameter STRICT is a bitwise or of the following flags:
10023
10024      UNIFY_ALLOW_NONE:
10025        Require an exact match between PARM and ARG.
10026      UNIFY_ALLOW_MORE_CV_QUAL:
10027        Allow the deduced ARG to be more cv-qualified (by qualification
10028        conversion) than ARG.
10029      UNIFY_ALLOW_LESS_CV_QUAL:
10030        Allow the deduced ARG to be less cv-qualified than ARG.
10031      UNIFY_ALLOW_DERIVED:
10032        Allow the deduced ARG to be a template base class of ARG,
10033        or a pointer to a template base class of the type pointed to by
10034        ARG.
10035      UNIFY_ALLOW_INTEGER:
10036        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
10037        case for more information.
10038      UNIFY_ALLOW_OUTER_LEVEL:
10039        This is the outermost level of a deduction. Used to determine validity
10040        of qualification conversions. A valid qualification conversion must
10041        have const qualified pointers leading up to the inner type which
10042        requires additional CV quals, except at the outer level, where const
10043        is not required [conv.qual]. It would be normal to set this flag in
10044        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
10045      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
10046        This is the outermost level of a deduction, and PARM can be more CV
10047        qualified at this point.
10048      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
10049        This is the outermost level of a deduction, and PARM can be less CV
10050        qualified at this point.  */
10051
10052 static int
10053 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
10054 {
10055   int idx;
10056   tree targ;
10057   tree tparm;
10058   int strict_in = strict;
10059
10060   /* I don't think this will do the right thing with respect to types.
10061      But the only case I've seen it in so far has been array bounds, where
10062      signedness is the only information lost, and I think that will be
10063      okay.  */
10064   while (TREE_CODE (parm) == NOP_EXPR)
10065     parm = TREE_OPERAND (parm, 0);
10066
10067   if (arg == error_mark_node)
10068     return 1;
10069   if (arg == unknown_type_node)
10070     /* We can't deduce anything from this, but we might get all the
10071        template args from other function args.  */
10072     return 0;
10073
10074   /* If PARM uses template parameters, then we can't bail out here,
10075      even if ARG == PARM, since we won't record unifications for the
10076      template parameters.  We might need them if we're trying to
10077      figure out which of two things is more specialized.  */
10078   if (arg == parm && !uses_template_parms (parm))
10079     return 0;
10080
10081   /* Immediately reject some pairs that won't unify because of
10082      cv-qualification mismatches.  */
10083   if (TREE_CODE (arg) == TREE_CODE (parm)
10084       && TYPE_P (arg)
10085       /* It is the elements of the array which hold the cv quals of an array
10086          type, and the elements might be template type parms. We'll check
10087          when we recurse.  */
10088       && TREE_CODE (arg) != ARRAY_TYPE
10089       /* We check the cv-qualifiers when unifying with template type
10090          parameters below.  We want to allow ARG `const T' to unify with
10091          PARM `T' for example, when computing which of two templates
10092          is more specialized, for example.  */
10093       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
10094       && !check_cv_quals_for_unify (strict_in, arg, parm))
10095     return 1;
10096
10097   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
10098       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
10099     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
10100   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
10101   strict &= ~UNIFY_ALLOW_DERIVED;
10102   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
10103   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
10104
10105   switch (TREE_CODE (parm))
10106     {
10107     case TYPENAME_TYPE:
10108     case SCOPE_REF:
10109     case UNBOUND_CLASS_TEMPLATE:
10110       /* In a type which contains a nested-name-specifier, template
10111          argument values cannot be deduced for template parameters used
10112          within the nested-name-specifier.  */
10113       return 0;
10114
10115     case TEMPLATE_TYPE_PARM:
10116     case TEMPLATE_TEMPLATE_PARM:
10117     case BOUND_TEMPLATE_TEMPLATE_PARM:
10118       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
10119
10120       if (TEMPLATE_TYPE_LEVEL (parm)
10121           != template_decl_level (tparm))
10122         /* The PARM is not one we're trying to unify.  Just check
10123            to see if it matches ARG.  */
10124         return (TREE_CODE (arg) == TREE_CODE (parm)
10125                 && same_type_p (parm, arg)) ? 0 : 1;
10126       idx = TEMPLATE_TYPE_IDX (parm);
10127       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
10128       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
10129
10130       /* Check for mixed types and values.  */
10131       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
10132            && TREE_CODE (tparm) != TYPE_DECL)
10133           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
10134               && TREE_CODE (tparm) != TEMPLATE_DECL))
10135         return 1;
10136
10137       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
10138         {
10139           /* ARG must be constructed from a template class or a template
10140              template parameter.  */
10141           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
10142               && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
10143             return 1;
10144
10145           {
10146             tree parmvec = TYPE_TI_ARGS (parm);
10147             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
10148             tree argtmplvec
10149               = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
10150             int i;
10151
10152             /* The resolution to DR150 makes clear that default
10153                arguments for an N-argument may not be used to bind T
10154                to a template template parameter with fewer than N
10155                parameters.  It is not safe to permit the binding of
10156                default arguments as an extension, as that may change
10157                the meaning of a conforming program.  Consider:
10158
10159                   struct Dense { static const unsigned int dim = 1; };
10160
10161                   template <template <typename> class View,
10162                             typename Block>
10163                   void operator+(float, View<Block> const&);
10164
10165                   template <typename Block, 
10166                             unsigned int Dim = Block::dim>
10167                   struct Lvalue_proxy { operator float() const; };
10168
10169                   void
10170                   test_1d (void) {
10171                     Lvalue_proxy<Dense> p;
10172                     float b;
10173                     b + p;
10174                   }
10175
10176               Here, if Lvalue_proxy is permitted to bind to View, then
10177               the global operator+ will be used; if they are not, the
10178               Lvalue_proxy will be converted to float.  */        
10179             if (coerce_template_parms (argtmplvec, parmvec, 
10180                                        TYPE_TI_TEMPLATE (parm),
10181                                        tf_none,
10182                                        /*require_all_args=*/true,
10183                                        /*use_default_args=*/false)
10184                 == error_mark_node)
10185               return 1;
10186
10187             /* Deduce arguments T, i from TT<T> or TT<i>.
10188                We check each element of PARMVEC and ARGVEC individually
10189                rather than the whole TREE_VEC since they can have
10190                different number of elements.  */
10191
10192             for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
10193               {
10194                 if (unify (tparms, targs,
10195                            TREE_VEC_ELT (parmvec, i),
10196                            TREE_VEC_ELT (argvec, i),
10197                            UNIFY_ALLOW_NONE))
10198                   return 1;
10199               }
10200           }
10201           arg = TYPE_TI_TEMPLATE (arg);
10202
10203           /* Fall through to deduce template name.  */
10204         }
10205
10206       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
10207           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
10208         {
10209           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
10210
10211           /* Simple cases: Value already set, does match or doesn't.  */
10212           if (targ != NULL_TREE && template_args_equal (targ, arg))
10213             return 0;
10214           else if (targ)
10215             return 1;
10216         }
10217       else
10218         {
10219           /* If PARM is `const T' and ARG is only `int', we don't have
10220              a match unless we are allowing additional qualification.
10221              If ARG is `const int' and PARM is just `T' that's OK;
10222              that binds `const int' to `T'.  */
10223           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
10224                                          arg, parm))
10225             return 1;
10226
10227           /* Consider the case where ARG is `const volatile int' and
10228              PARM is `const T'.  Then, T should be `volatile int'.  */
10229           arg = cp_build_qualified_type_real
10230             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
10231           if (arg == error_mark_node)
10232             return 1;
10233
10234           /* Simple cases: Value already set, does match or doesn't.  */
10235           if (targ != NULL_TREE && same_type_p (targ, arg))
10236             return 0;
10237           else if (targ)
10238             return 1;
10239
10240           /* Make sure that ARG is not a variable-sized array.  (Note
10241              that were talking about variable-sized arrays (like
10242              `int[n]'), rather than arrays of unknown size (like
10243              `int[]').)  We'll get very confused by such a type since
10244              the bound of the array will not be computable in an
10245              instantiation.  Besides, such types are not allowed in
10246              ISO C++, so we can do as we please here.  */
10247           if (variably_modified_type_p (arg, NULL_TREE))
10248             return 1;
10249         }
10250
10251       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
10252       return 0;
10253
10254     case TEMPLATE_PARM_INDEX:
10255       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
10256
10257       if (TEMPLATE_PARM_LEVEL (parm)
10258           != template_decl_level (tparm))
10259         /* The PARM is not one we're trying to unify.  Just check
10260            to see if it matches ARG.  */
10261         return !(TREE_CODE (arg) == TREE_CODE (parm)
10262                  && cp_tree_equal (parm, arg));
10263
10264       idx = TEMPLATE_PARM_IDX (parm);
10265       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
10266
10267       if (targ)
10268         return !cp_tree_equal (targ, arg);
10269
10270       /* [temp.deduct.type] If, in the declaration of a function template
10271          with a non-type template-parameter, the non-type
10272          template-parameter is used in an expression in the function
10273          parameter-list and, if the corresponding template-argument is
10274          deduced, the template-argument type shall match the type of the
10275          template-parameter exactly, except that a template-argument
10276          deduced from an array bound may be of any integral type.
10277          The non-type parameter might use already deduced type parameters.  */
10278       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
10279       if (!TREE_TYPE (arg))
10280         /* Template-parameter dependent expression.  Just accept it for now.
10281            It will later be processed in convert_template_argument.  */
10282         ;
10283       else if (same_type_p (TREE_TYPE (arg), tparm))
10284         /* OK */;
10285       else if ((strict & UNIFY_ALLOW_INTEGER)
10286                && (TREE_CODE (tparm) == INTEGER_TYPE
10287                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
10288         /* Convert the ARG to the type of PARM; the deduced non-type
10289            template argument must exactly match the types of the
10290            corresponding parameter.  */
10291         arg = fold (build_nop (TREE_TYPE (parm), arg));
10292       else if (uses_template_parms (tparm))
10293         /* We haven't deduced the type of this parameter yet.  Try again
10294            later.  */
10295         return 0;
10296       else
10297         return 1;
10298
10299       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
10300       return 0;
10301
10302     case PTRMEM_CST:
10303      {
10304         /* A pointer-to-member constant can be unified only with
10305          another constant.  */
10306       if (TREE_CODE (arg) != PTRMEM_CST)
10307         return 1;
10308
10309       /* Just unify the class member. It would be useless (and possibly
10310          wrong, depending on the strict flags) to unify also
10311          PTRMEM_CST_CLASS, because we want to be sure that both parm and
10312          arg refer to the same variable, even if through different
10313          classes. For instance:
10314
10315          struct A { int x; };
10316          struct B : A { };
10317
10318          Unification of &A::x and &B::x must succeed.  */
10319       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
10320                     PTRMEM_CST_MEMBER (arg), strict);
10321      }
10322
10323     case POINTER_TYPE:
10324       {
10325         if (TREE_CODE (arg) != POINTER_TYPE)
10326           return 1;
10327
10328         /* [temp.deduct.call]
10329
10330            A can be another pointer or pointer to member type that can
10331            be converted to the deduced A via a qualification
10332            conversion (_conv.qual_).
10333
10334            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
10335            This will allow for additional cv-qualification of the
10336            pointed-to types if appropriate.  */
10337
10338         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
10339           /* The derived-to-base conversion only persists through one
10340              level of pointers.  */
10341           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
10342
10343         return unify (tparms, targs, TREE_TYPE (parm),
10344                       TREE_TYPE (arg), strict);
10345       }
10346
10347     case REFERENCE_TYPE:
10348       if (TREE_CODE (arg) != REFERENCE_TYPE)
10349         return 1;
10350       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10351                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
10352
10353     case ARRAY_TYPE:
10354       if (TREE_CODE (arg) != ARRAY_TYPE)
10355         return 1;
10356       if ((TYPE_DOMAIN (parm) == NULL_TREE)
10357           != (TYPE_DOMAIN (arg) == NULL_TREE))
10358         return 1;
10359       if (TYPE_DOMAIN (parm) != NULL_TREE)
10360         {
10361           tree parm_max;
10362           tree arg_max;
10363
10364           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
10365           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
10366
10367           /* Our representation of array types uses "N - 1" as the
10368              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
10369              not an integer constant.  */
10370           if (TREE_CODE (parm_max) == MINUS_EXPR)
10371             {
10372               arg_max = fold_build2 (PLUS_EXPR,
10373                                      integer_type_node,
10374                                      arg_max,
10375                                      TREE_OPERAND (parm_max, 1));
10376               parm_max = TREE_OPERAND (parm_max, 0);
10377             }
10378
10379           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
10380             return 1;
10381         }
10382       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10383                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
10384
10385     case REAL_TYPE:
10386     case COMPLEX_TYPE:
10387     case VECTOR_TYPE:
10388     case INTEGER_TYPE:
10389     case BOOLEAN_TYPE:
10390     case ENUMERAL_TYPE:
10391     case VOID_TYPE:
10392       if (TREE_CODE (arg) != TREE_CODE (parm))
10393         return 1;
10394
10395       /* We have already checked cv-qualification at the top of the
10396          function.  */
10397       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
10398         return 1;
10399
10400       /* As far as unification is concerned, this wins.  Later checks
10401          will invalidate it if necessary.  */
10402       return 0;
10403
10404       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
10405       /* Type INTEGER_CST can come from ordinary constant template args.  */
10406     case INTEGER_CST:
10407       while (TREE_CODE (arg) == NOP_EXPR)
10408         arg = TREE_OPERAND (arg, 0);
10409
10410       if (TREE_CODE (arg) != INTEGER_CST)
10411         return 1;
10412       return !tree_int_cst_equal (parm, arg);
10413
10414     case TREE_VEC:
10415       {
10416         int i;
10417         if (TREE_CODE (arg) != TREE_VEC)
10418           return 1;
10419         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
10420           return 1;
10421         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
10422           if (unify (tparms, targs,
10423                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
10424                      UNIFY_ALLOW_NONE))
10425             return 1;
10426         return 0;
10427       }
10428
10429     case RECORD_TYPE:
10430     case UNION_TYPE:
10431       if (TREE_CODE (arg) != TREE_CODE (parm))
10432         return 1;
10433
10434       if (TYPE_PTRMEMFUNC_P (parm))
10435         {
10436           if (!TYPE_PTRMEMFUNC_P (arg))
10437             return 1;
10438
10439           return unify (tparms, targs,
10440                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
10441                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
10442                         strict);
10443         }
10444
10445       if (CLASSTYPE_TEMPLATE_INFO (parm))
10446         {
10447           tree t = NULL_TREE;
10448
10449           if (strict_in & UNIFY_ALLOW_DERIVED)
10450             {
10451               /* First, we try to unify the PARM and ARG directly.  */
10452               t = try_class_unification (tparms, targs,
10453                                          parm, arg);
10454
10455               if (!t)
10456                 {
10457                   /* Fallback to the special case allowed in
10458                      [temp.deduct.call]:
10459
10460                        If P is a class, and P has the form
10461                        template-id, then A can be a derived class of
10462                        the deduced A.  Likewise, if P is a pointer to
10463                        a class of the form template-id, A can be a
10464                        pointer to a derived class pointed to by the
10465                        deduced A.  */
10466                   t = get_template_base (tparms, targs, parm, arg);
10467
10468                   if (!t)
10469                     return 1;
10470                 }
10471             }
10472           else if (CLASSTYPE_TEMPLATE_INFO (arg)
10473                    && (CLASSTYPE_TI_TEMPLATE (parm)
10474                        == CLASSTYPE_TI_TEMPLATE (arg)))
10475             /* Perhaps PARM is something like S<U> and ARG is S<int>.
10476                Then, we should unify `int' and `U'.  */
10477             t = arg;
10478           else
10479             /* There's no chance of unification succeeding.  */
10480             return 1;
10481
10482           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
10483                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
10484         }
10485       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
10486         return 1;
10487       return 0;
10488
10489     case METHOD_TYPE:
10490     case FUNCTION_TYPE:
10491       if (TREE_CODE (arg) != TREE_CODE (parm))
10492         return 1;
10493
10494       /* CV qualifications for methods can never be deduced, they must
10495          match exactly.  We need to check them explicitly here,
10496          because type_unification_real treats them as any other
10497          cvqualified parameter.  */
10498       if (TREE_CODE (parm) == METHOD_TYPE
10499           && (!check_cv_quals_for_unify
10500               (UNIFY_ALLOW_NONE,
10501                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
10502                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
10503         return 1;
10504
10505       if (unify (tparms, targs, TREE_TYPE (parm),
10506                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
10507         return 1;
10508       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
10509                                     TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
10510                                     LOOKUP_NORMAL);
10511
10512     case OFFSET_TYPE:
10513       /* Unify a pointer to member with a pointer to member function, which
10514          deduces the type of the member as a function type. */
10515       if (TYPE_PTRMEMFUNC_P (arg))
10516         {
10517           tree method_type;
10518           tree fntype;
10519           cp_cv_quals cv_quals;
10520
10521           /* Check top-level cv qualifiers */
10522           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
10523             return 1;
10524
10525           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10526                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
10527             return 1;
10528
10529           /* Determine the type of the function we are unifying against. */
10530           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
10531           fntype =
10532             build_function_type (TREE_TYPE (method_type),
10533                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
10534
10535           /* Extract the cv-qualifiers of the member function from the
10536              implicit object parameter and place them on the function
10537              type to be restored later. */
10538           cv_quals =
10539             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
10540           fntype = build_qualified_type (fntype, cv_quals);
10541           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
10542         }
10543
10544       if (TREE_CODE (arg) != OFFSET_TYPE)
10545         return 1;
10546       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10547                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
10548         return 1;
10549       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10550                     strict);
10551
10552     case CONST_DECL:
10553       if (DECL_TEMPLATE_PARM_P (parm))
10554         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
10555       if (arg != integral_constant_value (parm))
10556         return 1;
10557       return 0;
10558
10559     case FIELD_DECL:
10560     case TEMPLATE_DECL:
10561       /* Matched cases are handled by the ARG == PARM test above.  */
10562       return 1;
10563
10564     default:
10565       gcc_assert (EXPR_P (parm));
10566
10567       /* We must be looking at an expression.  This can happen with
10568          something like:
10569
10570            template <int I>
10571            void foo(S<I>, S<I + 2>);
10572
10573          This is a "nondeduced context":
10574
10575            [deduct.type]
10576
10577            The nondeduced contexts are:
10578
10579            --A type that is a template-id in which one or more of
10580              the template-arguments is an expression that references
10581              a template-parameter.
10582
10583          In these cases, we assume deduction succeeded, but don't
10584          actually infer any unifications.  */
10585
10586       if (!uses_template_parms (parm)
10587           && !template_args_equal (parm, arg))
10588         return 1;
10589       else
10590         return 0;
10591     }
10592 }
10593 \f
10594 /* Note that DECL can be defined in this translation unit, if
10595    required.  */
10596
10597 static void
10598 mark_definable (tree decl)
10599 {
10600   tree clone;
10601   DECL_NOT_REALLY_EXTERN (decl) = 1;
10602   FOR_EACH_CLONE (clone, decl)
10603     DECL_NOT_REALLY_EXTERN (clone) = 1;
10604 }
10605
10606 /* Called if RESULT is explicitly instantiated, or is a member of an
10607    explicitly instantiated class.  */
10608
10609 void
10610 mark_decl_instantiated (tree result, int extern_p)
10611 {
10612   SET_DECL_EXPLICIT_INSTANTIATION (result);
10613
10614   /* If this entity has already been written out, it's too late to
10615      make any modifications.  */
10616   if (TREE_ASM_WRITTEN (result))
10617     return;
10618
10619   if (TREE_CODE (result) != FUNCTION_DECL)
10620     /* The TREE_PUBLIC flag for function declarations will have been
10621        set correctly by tsubst.  */
10622     TREE_PUBLIC (result) = 1;
10623
10624   /* This might have been set by an earlier implicit instantiation.  */
10625   DECL_COMDAT (result) = 0;
10626
10627   if (extern_p)
10628     DECL_NOT_REALLY_EXTERN (result) = 0;
10629   else
10630     {
10631       mark_definable (result);
10632       /* Always make artificials weak.  */
10633       if (DECL_ARTIFICIAL (result) && flag_weak)
10634         comdat_linkage (result);
10635       /* For WIN32 we also want to put explicit instantiations in
10636          linkonce sections.  */
10637       else if (TREE_PUBLIC (result))
10638         maybe_make_one_only (result);
10639     }
10640
10641   /* If EXTERN_P, then this function will not be emitted -- unless
10642      followed by an explicit instantiation, at which point its linkage
10643      will be adjusted.  If !EXTERN_P, then this function will be
10644      emitted here.  In neither circumstance do we want
10645      import_export_decl to adjust the linkage.  */
10646   DECL_INTERFACE_KNOWN (result) = 1;
10647 }
10648
10649 /* Given two function templates PAT1 and PAT2, return:
10650
10651    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
10652    -1 if PAT2 is more specialized than PAT1.
10653    0 if neither is more specialized.
10654
10655    LEN indicates the number of parameters we should consider
10656    (defaulted parameters should not be considered).
10657
10658    The 1998 std underspecified function template partial ordering, and
10659    DR214 addresses the issue.  We take pairs of arguments, one from
10660    each of the templates, and deduce them against each other.  One of
10661    the templates will be more specialized if all the *other*
10662    template's arguments deduce against its arguments and at least one
10663    of its arguments *does* *not* deduce against the other template's
10664    corresponding argument.  Deduction is done as for class templates.
10665    The arguments used in deduction have reference and top level cv
10666    qualifiers removed.  Iff both arguments were originally reference
10667    types *and* deduction succeeds in both directions, the template
10668    with the more cv-qualified argument wins for that pairing (if
10669    neither is more cv-qualified, they both are equal).  Unlike regular
10670    deduction, after all the arguments have been deduced in this way,
10671    we do *not* verify the deduced template argument values can be
10672    substituted into non-deduced contexts, nor do we have to verify
10673    that all template arguments have been deduced.  */
10674
10675 int
10676 more_specialized_fn (tree pat1, tree pat2, int len)
10677 {
10678   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
10679   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
10680   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
10681   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
10682   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
10683   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
10684   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
10685   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
10686   int better1 = 0;
10687   int better2 = 0;
10688   
10689   /* Remove the this parameter from non-static member functions.  If
10690      one is a non-static member function and the other is not a static
10691      member function, remove the first parameter from that function
10692      also.  This situation occurs for operator functions where we
10693      locate both a member function (with this pointer) and non-member
10694      operator (with explicit first operand).  */
10695   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
10696     {
10697       len--; /* LEN is the number of significant arguments for DECL1 */
10698       args1 = TREE_CHAIN (args1);
10699       if (!DECL_STATIC_FUNCTION_P (decl2))
10700         args2 = TREE_CHAIN (args2);
10701     }
10702   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
10703     {
10704       args2 = TREE_CHAIN (args2);
10705       if (!DECL_STATIC_FUNCTION_P (decl1))
10706         {
10707           len--;
10708           args1 = TREE_CHAIN (args1);
10709         }
10710     }
10711     
10712   /* If only one is a conversion operator, they are unordered.  */
10713   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
10714     return 0;
10715
10716   /* Consider the return type for a conversion function */
10717   if (DECL_CONV_FN_P (decl1))
10718     {
10719       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
10720       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
10721       len++;
10722     }
10723
10724   processing_template_decl++;
10725
10726   while (len--)
10727     {
10728       tree arg1 = TREE_VALUE (args1);
10729       tree arg2 = TREE_VALUE (args2);
10730       int deduce1, deduce2;
10731       int quals1 = -1;
10732       int quals2 = -1;
10733
10734       if (TREE_CODE (arg1) == REFERENCE_TYPE)
10735         {
10736           arg1 = TREE_TYPE (arg1);
10737           quals1 = cp_type_quals (arg1);
10738         }
10739
10740       if (TREE_CODE (arg2) == REFERENCE_TYPE)
10741         {
10742           arg2 = TREE_TYPE (arg2);
10743           quals2 = cp_type_quals (arg2);
10744         }
10745
10746       if ((quals1 < 0) != (quals2 < 0))
10747         {
10748           /* Only of the args is a reference, see if we should apply
10749              array/function pointer decay to it.  This is not part of
10750              DR214, but is, IMHO, consistent with the deduction rules
10751              for the function call itself, and with our earlier
10752              implementation of the underspecified partial ordering
10753              rules.  (nathan).  */
10754           if (quals1 >= 0)
10755             {
10756               switch (TREE_CODE (arg1))
10757                 {
10758                 case ARRAY_TYPE:
10759                   arg1 = TREE_TYPE (arg1);
10760                   /* FALLTHROUGH. */
10761                 case FUNCTION_TYPE:
10762                   arg1 = build_pointer_type (arg1);
10763                   break;
10764
10765                 default:
10766                   break;
10767                 }
10768             }
10769           else
10770             {
10771               switch (TREE_CODE (arg2))
10772                 {
10773                 case ARRAY_TYPE:
10774                   arg2 = TREE_TYPE (arg2);
10775                   /* FALLTHROUGH. */
10776                 case FUNCTION_TYPE:
10777                   arg2 = build_pointer_type (arg2);
10778                   break;
10779
10780                 default:
10781                   break;
10782                 }
10783             }
10784         }
10785
10786       arg1 = TYPE_MAIN_VARIANT (arg1);
10787       arg2 = TYPE_MAIN_VARIANT (arg2);
10788
10789       deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
10790       deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
10791
10792       if (!deduce1)
10793         better2 = -1;
10794       if (!deduce2)
10795         better1 = -1;
10796       if (better1 < 0 && better2 < 0)
10797         /* We've failed to deduce something in either direction.
10798            These must be unordered.  */
10799         break;
10800
10801       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
10802         {
10803           /* Deduces in both directions, see if quals can
10804              disambiguate.  Pretend the worse one failed to deduce. */
10805           if ((quals1 & quals2) == quals2)
10806             deduce1 = 0;
10807           if ((quals1 & quals2) == quals1)
10808             deduce2 = 0;
10809         }
10810       if (deduce1 && !deduce2 && !better2)
10811         better2 = 1;
10812       if (deduce2 && !deduce1 && !better1)
10813         better1 = 1;
10814
10815       args1 = TREE_CHAIN (args1);
10816       args2 = TREE_CHAIN (args2);
10817     }
10818
10819   processing_template_decl--;
10820
10821   return (better1 > 0) - (better2 > 0);
10822 }
10823
10824 /* Determine which of two partial specializations is more specialized.
10825
10826    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
10827    to the first partial specialization.  The TREE_VALUE is the
10828    innermost set of template parameters for the partial
10829    specialization.  PAT2 is similar, but for the second template.
10830
10831    Return 1 if the first partial specialization is more specialized;
10832    -1 if the second is more specialized; 0 if neither is more
10833    specialized.
10834
10835    See [temp.class.order] for information about determining which of
10836    two templates is more specialized.  */ 
10837
10838 static int
10839 more_specialized_class (tree pat1, tree pat2)
10840 {
10841   tree targs;
10842   tree tmpl1, tmpl2;
10843   int winner = 0;
10844
10845   tmpl1 = TREE_TYPE (pat1);
10846   tmpl2 = TREE_TYPE (pat2);
10847
10848   /* Just like what happens for functions, if we are ordering between
10849      different class template specializations, we may encounter dependent
10850      types in the arguments, and we need our dependency check functions
10851      to behave correctly.  */
10852   ++processing_template_decl;
10853   targs = get_class_bindings (TREE_VALUE (pat1), 
10854                               CLASSTYPE_TI_ARGS (tmpl1),
10855                               CLASSTYPE_TI_ARGS (tmpl2));
10856   if (targs)
10857     --winner;
10858
10859   targs = get_class_bindings (TREE_VALUE (pat2), 
10860                               CLASSTYPE_TI_ARGS (tmpl2),
10861                               CLASSTYPE_TI_ARGS (tmpl1));
10862   if (targs)
10863     ++winner;
10864   --processing_template_decl;
10865
10866   return winner;
10867 }
10868
10869 /* Return the template arguments that will produce the function signature
10870    DECL from the function template FN, with the explicit template
10871    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
10872    also match.  Return NULL_TREE if no satisfactory arguments could be
10873    found.  */
10874
10875 static tree
10876 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
10877 {
10878   int ntparms = DECL_NTPARMS (fn);
10879   tree targs = make_tree_vec (ntparms);
10880   tree decl_type;
10881   tree decl_arg_types;
10882
10883   /* Substitute the explicit template arguments into the type of DECL.
10884      The call to fn_type_unification will handle substitution into the
10885      FN.  */
10886   decl_type = TREE_TYPE (decl);
10887   if (explicit_args && uses_template_parms (decl_type))
10888     {
10889       tree tmpl;
10890       tree converted_args;
10891
10892       if (DECL_TEMPLATE_INFO (decl))
10893         tmpl = DECL_TI_TEMPLATE (decl);
10894       else
10895         /* We can get here for some invalid specializations.  */
10896         return NULL_TREE;
10897
10898       converted_args
10899         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
10900                                  explicit_args, NULL_TREE,
10901                                  tf_none, 
10902                                  /*require_all_args=*/false,
10903                                  /*use_default_args=*/false);
10904       if (converted_args == error_mark_node)
10905         return NULL_TREE;
10906
10907       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
10908       if (decl_type == error_mark_node)
10909         return NULL_TREE;
10910     }
10911
10912   decl_arg_types = TYPE_ARG_TYPES (decl_type);
10913   /* Never do unification on the 'this' parameter.  */
10914   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10915     decl_arg_types = TREE_CHAIN (decl_arg_types);
10916
10917   if (fn_type_unification (fn, explicit_args, targs,
10918                            decl_arg_types,
10919                            (check_rettype || DECL_CONV_FN_P (fn)
10920                             ? TREE_TYPE (decl_type) : NULL_TREE),
10921                            DEDUCE_EXACT, LOOKUP_NORMAL))
10922     return NULL_TREE;
10923
10924   return targs;
10925 }
10926
10927 /* Return the innermost template arguments that, when applied to a
10928    template specialization whose innermost template parameters are
10929    TPARMS, and whose specialization arguments are PARMS, yield the
10930    ARGS.
10931
10932    For example, suppose we have:
10933
10934      template <class T, class U> struct S {};
10935      template <class T> struct S<T*, int> {};
10936
10937    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
10938    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
10939    int}.  The resulting vector will be {double}, indicating that `T'
10940    is bound to `double'.  */
10941
10942 static tree
10943 get_class_bindings (tree tparms, tree spec_args, tree args)
10944 {
10945   int i, ntparms = TREE_VEC_LENGTH (tparms);
10946   tree deduced_args;
10947   tree innermost_deduced_args;
10948
10949   innermost_deduced_args = make_tree_vec (ntparms);
10950   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
10951     {
10952       deduced_args = copy_node (args);
10953       SET_TMPL_ARGS_LEVEL (deduced_args,
10954                            TMPL_ARGS_DEPTH (deduced_args),
10955                            innermost_deduced_args);
10956     }
10957   else
10958     deduced_args = innermost_deduced_args; 
10959
10960   if (unify (tparms, deduced_args, 
10961              INNERMOST_TEMPLATE_ARGS (spec_args), 
10962              INNERMOST_TEMPLATE_ARGS (args), 
10963              UNIFY_ALLOW_NONE))
10964     return NULL_TREE;
10965
10966   for (i =  0; i < ntparms; ++i)
10967     if (! TREE_VEC_ELT (innermost_deduced_args, i))
10968       return NULL_TREE;
10969
10970   /* Verify that nondeduced template arguments agree with the type
10971      obtained from argument deduction.
10972      
10973      For example:
10974
10975        struct A { typedef int X; };
10976        template <class T, class U> struct C {};
10977        template <class T> struct C<T, typename T::X> {};
10978
10979      Then with the instantiation `C<A, int>', we can deduce that
10980      `T' is `A' but unify () does not check whether `typename T::X'
10981      is `int'.  */
10982   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
10983   if (spec_args == error_mark_node
10984       /* We only need to check the innermost arguments; the other
10985          arguments will always agree.  */
10986       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
10987                               INNERMOST_TEMPLATE_ARGS (args)))
10988     return NULL_TREE;
10989
10990   return deduced_args;
10991 }
10992
10993 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
10994    Return the TREE_LIST node with the most specialized template, if
10995    any.  If there is no most specialized template, the error_mark_node
10996    is returned.
10997
10998    Note that this function does not look at, or modify, the
10999    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
11000    returned is one of the elements of INSTANTIATIONS, callers may
11001    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
11002    and retrieve it from the value returned.  */
11003
11004 tree
11005 most_specialized_instantiation (tree templates)
11006 {
11007   tree fn, champ;
11008
11009   ++processing_template_decl;
11010
11011   champ = templates;
11012   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
11013     {
11014       int fate = 0;
11015
11016       if (get_bindings (TREE_VALUE (champ),
11017                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
11018                         NULL_TREE, /*check_ret=*/false))
11019         fate--;
11020
11021       if (get_bindings (TREE_VALUE (fn),
11022                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
11023                         NULL_TREE, /*check_ret=*/false))
11024         fate++;
11025
11026       if (fate == -1)
11027         champ = fn;
11028       else if (!fate)
11029         {
11030           /* Equally specialized, move to next function.  If there
11031              is no next function, nothing's most specialized.  */
11032           fn = TREE_CHAIN (fn);
11033           champ = fn;
11034           if (!fn)
11035             break;
11036         }
11037     }
11038
11039   if (champ)
11040     /* Now verify that champ is better than everything earlier in the
11041        instantiation list.  */
11042     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
11043       if (get_bindings (TREE_VALUE (champ),
11044                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
11045                         NULL_TREE, /*check_ret=*/false)
11046           || !get_bindings (TREE_VALUE (fn),
11047                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
11048                             NULL_TREE, /*check_ret=*/false))
11049         {
11050           champ = NULL_TREE;
11051           break;
11052         }
11053
11054   processing_template_decl--;
11055
11056   if (!champ)
11057     return error_mark_node;
11058
11059   return champ;
11060 }
11061
11062 /* If DECL is a specialization of some template, return the most
11063    general such template.  Otherwise, returns NULL_TREE.
11064
11065    For example, given:
11066
11067      template <class T> struct S { template <class U> void f(U); };
11068
11069    if TMPL is `template <class U> void S<int>::f(U)' this will return
11070    the full template.  This function will not trace past partial
11071    specializations, however.  For example, given in addition:
11072
11073      template <class T> struct S<T*> { template <class U> void f(U); };
11074
11075    if TMPL is `template <class U> void S<int*>::f(U)' this will return
11076    `template <class T> template <class U> S<T*>::f(U)'.  */
11077
11078 tree
11079 most_general_template (tree decl)
11080 {
11081   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
11082      an immediate specialization.  */
11083   if (TREE_CODE (decl) == FUNCTION_DECL)
11084     {
11085       if (DECL_TEMPLATE_INFO (decl)) {
11086         decl = DECL_TI_TEMPLATE (decl);
11087
11088         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
11089            template friend.  */
11090         if (TREE_CODE (decl) != TEMPLATE_DECL)
11091           return NULL_TREE;
11092       } else
11093         return NULL_TREE;
11094     }
11095
11096   /* Look for more and more general templates.  */
11097   while (DECL_TEMPLATE_INFO (decl))
11098     {
11099       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
11100          (See cp-tree.h for details.)  */
11101       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
11102         break;
11103
11104       if (CLASS_TYPE_P (TREE_TYPE (decl))
11105           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
11106         break;
11107
11108       /* Stop if we run into an explicitly specialized class template.  */
11109       if (!DECL_NAMESPACE_SCOPE_P (decl)
11110           && DECL_CONTEXT (decl)
11111           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
11112         break;
11113
11114       decl = DECL_TI_TEMPLATE (decl);
11115     }
11116
11117   return decl;
11118 }
11119
11120 /* Return the most specialized of the class template partial
11121    specializations of TMPL which can produce TYPE, a specialization of
11122    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
11123    a _TYPE node corresponding to the partial specialization, while the
11124    TREE_PURPOSE is the set of template arguments that must be
11125    substituted into the TREE_TYPE in order to generate TYPE.
11126
11127    If the choice of partial specialization is ambiguous, a diagnostic
11128    is issued, and the error_mark_node is returned.  If there are no
11129    partial specializations of TMPL matching TYPE, then NULL_TREE is
11130    returned.  */
11131
11132 static tree
11133 most_specialized_class (tree type, tree tmpl)
11134 {
11135   tree list = NULL_TREE;
11136   tree t;
11137   tree champ;
11138   int fate;
11139   bool ambiguous_p;
11140   tree args;
11141
11142   tmpl = most_general_template (tmpl);
11143   args = CLASSTYPE_TI_ARGS (type);
11144   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
11145     {
11146       tree partial_spec_args;
11147       tree spec_args;
11148
11149       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
11150       spec_args = get_class_bindings (TREE_VALUE (t), 
11151                                       partial_spec_args, 
11152                                       args);
11153       if (spec_args)
11154         {
11155           list = tree_cons (spec_args, TREE_VALUE (t), list);
11156           TREE_TYPE (list) = TREE_TYPE (t);
11157         }
11158     }
11159
11160   if (! list)
11161     return NULL_TREE;
11162
11163   ambiguous_p = false;
11164   t = list;
11165   champ = t;
11166   t = TREE_CHAIN (t);
11167   for (; t; t = TREE_CHAIN (t))
11168     {
11169       fate = more_specialized_class (champ, t);
11170       if (fate == 1)
11171         ;
11172       else
11173         {
11174           if (fate == 0)
11175             {
11176               t = TREE_CHAIN (t);
11177               if (! t)
11178                 {
11179                   ambiguous_p = true;
11180                   break;
11181                 }
11182             }
11183           champ = t;
11184         }
11185     }
11186
11187   if (!ambiguous_p)
11188     for (t = list; t && t != champ; t = TREE_CHAIN (t))
11189       {
11190         fate = more_specialized_class (champ, t);
11191         if (fate != 1)
11192           {
11193             ambiguous_p = true;
11194             break;
11195           }
11196       }
11197
11198   if (ambiguous_p)
11199     {
11200       const char *str = "candidates are:";
11201       error ("ambiguous class template instantiation for %q#T", type);
11202       for (t = list; t; t = TREE_CHAIN (t))
11203         {
11204           error ("%s %+#T", str, TREE_TYPE (t));
11205           str = "               ";
11206         }
11207       return error_mark_node;
11208     }
11209
11210   return champ;
11211 }
11212
11213 /* Explicitly instantiate DECL.  */
11214
11215 void
11216 do_decl_instantiation (tree decl, tree storage)
11217 {
11218   tree result = NULL_TREE;
11219   int extern_p = 0;
11220
11221   if (!decl || decl == error_mark_node)
11222     /* An error occurred, for which grokdeclarator has already issued
11223        an appropriate message.  */
11224     return;
11225   else if (! DECL_LANG_SPECIFIC (decl))
11226     {
11227       error ("explicit instantiation of non-template %q#D", decl);
11228       return;
11229     }
11230   else if (TREE_CODE (decl) == VAR_DECL)
11231     {
11232       /* There is an asymmetry here in the way VAR_DECLs and
11233          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
11234          the latter, the DECL we get back will be marked as a
11235          template instantiation, and the appropriate
11236          DECL_TEMPLATE_INFO will be set up.  This does not happen for
11237          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
11238          should handle VAR_DECLs as it currently handles
11239          FUNCTION_DECLs.  */
11240       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
11241       if (!result || TREE_CODE (result) != VAR_DECL)
11242         {
11243           error ("no matching template for %qD found", decl);
11244           return;
11245         }
11246     }
11247   else if (TREE_CODE (decl) != FUNCTION_DECL)
11248     {
11249       error ("explicit instantiation of %q#D", decl);
11250       return;
11251     }
11252   else
11253     result = decl;
11254
11255   /* Check for various error cases.  Note that if the explicit
11256      instantiation is valid the RESULT will currently be marked as an
11257      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
11258      until we get here.  */
11259
11260   if (DECL_TEMPLATE_SPECIALIZATION (result))
11261     {
11262       /* DR 259 [temp.spec].
11263
11264          Both an explicit instantiation and a declaration of an explicit
11265          specialization shall not appear in a program unless the explicit
11266          instantiation follows a declaration of the explicit specialization.
11267
11268          For a given set of template parameters, if an explicit
11269          instantiation of a template appears after a declaration of an
11270          explicit specialization for that template, the explicit
11271          instantiation has no effect.  */
11272       return;
11273     }
11274   else if (DECL_EXPLICIT_INSTANTIATION (result))
11275     {
11276       /* [temp.spec]
11277
11278          No program shall explicitly instantiate any template more
11279          than once.
11280
11281          We check DECL_NOT_REALLY_EXTERN so as not to complain when
11282          the first instantiation was `extern' and the second is not,
11283          and EXTERN_P for the opposite case.  */
11284       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
11285         pedwarn ("duplicate explicit instantiation of %q#D", result);
11286       /* If an "extern" explicit instantiation follows an ordinary
11287          explicit instantiation, the template is instantiated.  */
11288       if (extern_p)
11289         return;
11290     }
11291   else if (!DECL_IMPLICIT_INSTANTIATION (result))
11292     {
11293       error ("no matching template for %qD found", result);
11294       return;
11295     }
11296   else if (!DECL_TEMPLATE_INFO (result))
11297     {
11298       pedwarn ("explicit instantiation of non-template %q#D", result);
11299       return;
11300     }
11301
11302   if (storage == NULL_TREE)
11303     ;
11304   else if (storage == ridpointers[(int) RID_EXTERN])
11305     {
11306       if (pedantic && !in_system_header)
11307         pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
11308                  "instantiations");
11309       extern_p = 1;
11310     }
11311   else
11312     error ("storage class %qD applied to template instantiation", storage);
11313   
11314   check_explicit_instantiation_namespace (result);
11315   mark_decl_instantiated (result, extern_p);
11316   if (! extern_p)
11317     instantiate_decl (result, /*defer_ok=*/1, 
11318                       /*expl_inst_class_mem_p=*/false);
11319 }
11320
11321 static void
11322 mark_class_instantiated (tree t, int extern_p)
11323 {
11324   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
11325   SET_CLASSTYPE_INTERFACE_KNOWN (t);
11326   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
11327   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
11328   if (! extern_p)
11329     {
11330       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
11331       rest_of_type_compilation (t, 1);
11332     }
11333 }
11334
11335 /* Called from do_type_instantiation through binding_table_foreach to
11336    do recursive instantiation for the type bound in ENTRY.  */
11337 static void
11338 bt_instantiate_type_proc (binding_entry entry, void *data)
11339 {
11340   tree storage = *(tree *) data;
11341
11342   if (IS_AGGR_TYPE (entry->type)
11343       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
11344     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
11345 }
11346
11347 /* Called from do_type_instantiation to instantiate a member
11348    (a member function or a static member variable) of an
11349    explicitly instantiated class template.  */
11350 static void
11351 instantiate_class_member (tree decl, int extern_p)
11352 {
11353   mark_decl_instantiated (decl, extern_p);
11354   if (! extern_p)
11355     instantiate_decl (decl, /*defer_ok=*/1, 
11356                       /*expl_inst_class_mem_p=*/true);
11357 }
11358
11359 /* Perform an explicit instantiation of template class T.  STORAGE, if
11360    non-null, is the RID for extern, inline or static.  COMPLAIN is
11361    nonzero if this is called from the parser, zero if called recursively,
11362    since the standard is unclear (as detailed below).  */
11363
11364 void
11365 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
11366 {
11367   int extern_p = 0;
11368   int nomem_p = 0;
11369   int static_p = 0;
11370   int previous_instantiation_extern_p = 0;
11371
11372   if (TREE_CODE (t) == TYPE_DECL)
11373     t = TREE_TYPE (t);
11374
11375   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
11376     {
11377       error ("explicit instantiation of non-template type %qT", t);
11378       return;
11379     }
11380
11381   complete_type (t);
11382
11383   if (!COMPLETE_TYPE_P (t))
11384     {
11385       if (complain & tf_error)
11386         error ("explicit instantiation of %q#T before definition of template",
11387                t);
11388       return;
11389     }
11390
11391   if (storage != NULL_TREE)
11392     {
11393       if (pedantic && !in_system_header)
11394         pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
11395                 storage);
11396
11397       if (storage == ridpointers[(int) RID_INLINE])
11398         nomem_p = 1;
11399       else if (storage == ridpointers[(int) RID_EXTERN])
11400         extern_p = 1;
11401       else if (storage == ridpointers[(int) RID_STATIC])
11402         static_p = 1;
11403       else
11404         {
11405           error ("storage class %qD applied to template instantiation",
11406                  storage);
11407           extern_p = 0;
11408         }
11409     }
11410
11411   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
11412     {
11413       /* DR 259 [temp.spec].
11414
11415          Both an explicit instantiation and a declaration of an explicit
11416          specialization shall not appear in a program unless the explicit
11417          instantiation follows a declaration of the explicit specialization.
11418
11419          For a given set of template parameters, if an explicit
11420          instantiation of a template appears after a declaration of an
11421          explicit specialization for that template, the explicit
11422          instantiation has no effect.  */
11423       return;
11424     }
11425   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
11426     {
11427       /* [temp.spec]
11428
11429          No program shall explicitly instantiate any template more
11430          than once.
11431
11432          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
11433          instantiation was `extern'.  If EXTERN_P then the second is.
11434          These cases are OK.  */
11435       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
11436
11437       if (!previous_instantiation_extern_p && !extern_p
11438           && (complain & tf_error))
11439         pedwarn ("duplicate explicit instantiation of %q#T", t);
11440
11441       /* If we've already instantiated the template, just return now.  */
11442       if (!CLASSTYPE_INTERFACE_ONLY (t))
11443         return;
11444     }
11445
11446   check_explicit_instantiation_namespace (TYPE_NAME (t));
11447   mark_class_instantiated (t, extern_p);
11448
11449   if (nomem_p)
11450     return;
11451
11452   {
11453     tree tmp;
11454
11455     /* In contrast to implicit instantiation, where only the
11456        declarations, and not the definitions, of members are
11457        instantiated, we have here:
11458
11459          [temp.explicit]
11460
11461          The explicit instantiation of a class template specialization
11462          implies the instantiation of all of its members not
11463          previously explicitly specialized in the translation unit
11464          containing the explicit instantiation.
11465
11466        Of course, we can't instantiate member template classes, since
11467        we don't have any arguments for them.  Note that the standard
11468        is unclear on whether the instantiation of the members are
11469        *explicit* instantiations or not.  However, the most natural
11470        interpretation is that it should be an explicit instantiation.  */
11471
11472     if (! static_p)
11473       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
11474         if (TREE_CODE (tmp) == FUNCTION_DECL
11475             && DECL_TEMPLATE_INSTANTIATION (tmp))
11476           instantiate_class_member (tmp, extern_p);
11477
11478     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
11479       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
11480         instantiate_class_member (tmp, extern_p);
11481
11482     if (CLASSTYPE_NESTED_UTDS (t))
11483       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
11484                              bt_instantiate_type_proc, &storage);
11485   }
11486 }
11487
11488 /* Given a function DECL, which is a specialization of TMPL, modify
11489    DECL to be a re-instantiation of TMPL with the same template
11490    arguments.  TMPL should be the template into which tsubst'ing
11491    should occur for DECL, not the most general template.
11492
11493    One reason for doing this is a scenario like this:
11494
11495      template <class T>
11496      void f(const T&, int i);
11497
11498      void g() { f(3, 7); }
11499
11500      template <class T>
11501      void f(const T& t, const int i) { }
11502
11503    Note that when the template is first instantiated, with
11504    instantiate_template, the resulting DECL will have no name for the
11505    first parameter, and the wrong type for the second.  So, when we go
11506    to instantiate the DECL, we regenerate it.  */
11507
11508 static void
11509 regenerate_decl_from_template (tree decl, tree tmpl)
11510 {
11511   /* The arguments used to instantiate DECL, from the most general
11512      template.  */
11513   tree args;
11514   tree code_pattern;
11515
11516   args = DECL_TI_ARGS (decl);
11517   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
11518
11519   /* Make sure that we can see identifiers, and compute access
11520      correctly.  */
11521   push_access_scope (decl);
11522
11523   if (TREE_CODE (decl) == FUNCTION_DECL)
11524     {
11525       tree decl_parm;
11526       tree pattern_parm;
11527       tree specs;
11528       int args_depth;
11529       int parms_depth;
11530
11531       args_depth = TMPL_ARGS_DEPTH (args);
11532       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
11533       if (args_depth > parms_depth)
11534         args = get_innermost_template_args (args, parms_depth);
11535
11536       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
11537                                               args, tf_error, NULL_TREE);
11538       if (specs)
11539         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
11540                                                     specs);
11541
11542       /* Merge parameter declarations.  */
11543       decl_parm = skip_artificial_parms_for (decl,
11544                                              DECL_ARGUMENTS (decl));
11545       pattern_parm
11546         = skip_artificial_parms_for (code_pattern,
11547                                      DECL_ARGUMENTS (code_pattern));
11548       while (decl_parm)
11549         {
11550           tree parm_type;
11551           tree attributes;
11552
11553           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
11554             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
11555           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
11556                               NULL_TREE);
11557           parm_type = type_decays_to (parm_type);
11558           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
11559             TREE_TYPE (decl_parm) = parm_type;
11560           attributes = DECL_ATTRIBUTES (pattern_parm);
11561           if (DECL_ATTRIBUTES (decl_parm) != attributes)
11562             {
11563               DECL_ATTRIBUTES (decl_parm) = attributes;
11564               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
11565             }
11566           decl_parm = TREE_CHAIN (decl_parm);
11567           pattern_parm = TREE_CHAIN (pattern_parm);
11568         }
11569
11570       /* Merge additional specifiers from the CODE_PATTERN.  */
11571       if (DECL_DECLARED_INLINE_P (code_pattern)
11572           && !DECL_DECLARED_INLINE_P (decl))
11573         DECL_DECLARED_INLINE_P (decl) = 1;
11574       if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
11575         DECL_INLINE (decl) = 1;
11576     }
11577   else if (TREE_CODE (decl) == VAR_DECL)
11578     DECL_INITIAL (decl) =
11579       tsubst_expr (DECL_INITIAL (code_pattern), args,
11580                    tf_error, DECL_TI_TEMPLATE (decl));
11581   else
11582     gcc_unreachable ();
11583
11584   pop_access_scope (decl);
11585 }
11586
11587 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
11588    substituted to get DECL.  */
11589
11590 tree
11591 template_for_substitution (tree decl)
11592 {
11593   tree tmpl = DECL_TI_TEMPLATE (decl);
11594
11595   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
11596      for the instantiation.  This is not always the most general
11597      template.  Consider, for example:
11598
11599         template <class T>
11600         struct S { template <class U> void f();
11601                    template <> void f<int>(); };
11602
11603      and an instantiation of S<double>::f<int>.  We want TD to be the
11604      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
11605   while (/* An instantiation cannot have a definition, so we need a
11606             more general template.  */
11607          DECL_TEMPLATE_INSTANTIATION (tmpl)
11608            /* We must also deal with friend templates.  Given:
11609
11610                 template <class T> struct S {
11611                   template <class U> friend void f() {};
11612                 };
11613
11614               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
11615               so far as the language is concerned, but that's still
11616               where we get the pattern for the instantiation from.  On
11617               other hand, if the definition comes outside the class, say:
11618
11619                 template <class T> struct S {
11620                   template <class U> friend void f();
11621                 };
11622                 template <class U> friend void f() {}
11623
11624               we don't need to look any further.  That's what the check for
11625               DECL_INITIAL is for.  */
11626           || (TREE_CODE (decl) == FUNCTION_DECL
11627               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
11628               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
11629     {
11630       /* The present template, TD, should not be a definition.  If it
11631          were a definition, we should be using it!  Note that we
11632          cannot restructure the loop to just keep going until we find
11633          a template with a definition, since that might go too far if
11634          a specialization was declared, but not defined.  */
11635       gcc_assert (TREE_CODE (decl) != VAR_DECL
11636                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
11637
11638       /* Fetch the more general template.  */
11639       tmpl = DECL_TI_TEMPLATE (tmpl);
11640     }
11641
11642   return tmpl;
11643 }
11644
11645 /* Produce the definition of D, a _DECL generated from a template.  If
11646    DEFER_OK is nonzero, then we don't have to actually do the
11647    instantiation now; we just have to do it sometime.  Normally it is
11648    an error if this is an explicit instantiation but D is undefined.
11649    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
11650    explicitly instantiated class template.  */
11651
11652 tree
11653 instantiate_decl (tree d, int defer_ok, 
11654                   bool expl_inst_class_mem_p)
11655 {
11656   tree tmpl = DECL_TI_TEMPLATE (d);
11657   tree gen_args;
11658   tree args;
11659   tree td;
11660   tree code_pattern;
11661   tree spec;
11662   tree gen_tmpl;
11663   bool pattern_defined;
11664   int need_push;
11665   location_t saved_loc = input_location;
11666   bool external_p;
11667
11668   /* This function should only be used to instantiate templates for
11669      functions and static member variables.  */
11670   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
11671               || TREE_CODE (d) == VAR_DECL);
11672
11673   /* Variables are never deferred; if instantiation is required, they
11674      are instantiated right away.  That allows for better code in the
11675      case that an expression refers to the value of the variable --
11676      if the variable has a constant value the referring expression can
11677      take advantage of that fact.  */
11678   if (TREE_CODE (d) == VAR_DECL)
11679     defer_ok = 0;
11680
11681   /* Don't instantiate cloned functions.  Instead, instantiate the
11682      functions they cloned.  */
11683   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
11684     d = DECL_CLONED_FUNCTION (d);
11685
11686   if (DECL_TEMPLATE_INSTANTIATED (d))
11687     /* D has already been instantiated.  It might seem reasonable to
11688        check whether or not D is an explicit instantiation, and, if so,
11689        stop here.  But when an explicit instantiation is deferred
11690        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
11691        is set, even though we still need to do the instantiation.  */
11692     return d;
11693
11694   /* If we already have a specialization of this declaration, then
11695      there's no reason to instantiate it.  Note that
11696      retrieve_specialization gives us both instantiations and
11697      specializations, so we must explicitly check
11698      DECL_TEMPLATE_SPECIALIZATION.  */
11699   gen_tmpl = most_general_template (tmpl);
11700   gen_args = DECL_TI_ARGS (d);
11701   spec = retrieve_specialization (gen_tmpl, gen_args,
11702                                   /*class_specializations_p=*/false);
11703   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
11704     return spec;
11705
11706   /* This needs to happen before any tsubsting.  */
11707   if (! push_tinst_level (d))
11708     return d;
11709
11710   timevar_push (TV_PARSE);
11711
11712   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
11713      for the instantiation.  */
11714   td = template_for_substitution (d);
11715   code_pattern = DECL_TEMPLATE_RESULT (td);
11716
11717   /* We should never be trying to instantiate a member of a class
11718      template or partial specialization.  */ 
11719   gcc_assert (d != code_pattern);
11720  
11721   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
11722       || DECL_TEMPLATE_SPECIALIZATION (td))
11723     /* In the case of a friend template whose definition is provided
11724        outside the class, we may have too many arguments.  Drop the
11725        ones we don't need.  The same is true for specializations.  */
11726     args = get_innermost_template_args
11727       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
11728   else
11729     args = gen_args;
11730
11731   if (TREE_CODE (d) == FUNCTION_DECL)
11732     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
11733   else
11734     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
11735
11736   /* We may be in the middle of deferred access check.  Disable it now.  */
11737   push_deferring_access_checks (dk_no_deferred);
11738
11739   /* Unless an explicit instantiation directive has already determined
11740      the linkage of D, remember that a definition is available for
11741      this entity.  */
11742   if (pattern_defined
11743       && !DECL_INTERFACE_KNOWN (d)
11744       && !DECL_NOT_REALLY_EXTERN (d))
11745     mark_definable (d);
11746
11747   input_location = DECL_SOURCE_LOCATION (d);
11748
11749   /* If D is a member of an explicitly instantiated class template,
11750      and no definition is available, treat it like an implicit
11751      instantiation.  */ 
11752   if (!pattern_defined && expl_inst_class_mem_p 
11753       && DECL_EXPLICIT_INSTANTIATION (d)) 
11754     {
11755       DECL_NOT_REALLY_EXTERN (d) = 0;
11756       DECL_INTERFACE_KNOWN (d) = 0;
11757       SET_DECL_IMPLICIT_INSTANTIATION (d);
11758     }
11759
11760   if (!defer_ok)
11761     {
11762       /* Recheck the substitutions to obtain any warning messages
11763          about ignoring cv qualifiers.  */
11764       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
11765       tree type = TREE_TYPE (gen);
11766
11767       /* Make sure that we can see identifiers, and compute access
11768          correctly.  D is already the target FUNCTION_DECL with the
11769          right context.  */
11770       push_access_scope (d);
11771
11772       if (TREE_CODE (gen) == FUNCTION_DECL)
11773         {
11774           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
11775           tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
11776                   tf_warning_or_error, d);
11777           /* Don't simply tsubst the function type, as that will give
11778              duplicate warnings about poor parameter qualifications.
11779              The function arguments are the same as the decl_arguments
11780              without the top level cv qualifiers.  */
11781           type = TREE_TYPE (type);
11782         }
11783       tsubst (type, gen_args, tf_warning_or_error, d);
11784
11785       pop_access_scope (d);
11786     }
11787
11788   /* Check to see whether we know that this template will be
11789      instantiated in some other file, as with "extern template"
11790      extension.  */
11791   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
11792   /* In general, we do not instantiate such templates...  */
11793   if (external_p
11794       /* ... but we instantiate inline functions so that we can inline
11795          them and ... */
11796       && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
11797       /* ... we instantiate static data members whose values are
11798          needed in integral constant expressions.  */
11799       && ! (TREE_CODE (d) == VAR_DECL 
11800             && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
11801     goto out;
11802   /* Defer all other templates, unless we have been explicitly
11803      forbidden from doing so.  */
11804   if (/* If there is no definition, we cannot instantiate the
11805          template.  */
11806       ! pattern_defined 
11807       /* If it's OK to postpone instantiation, do so.  */
11808       || defer_ok
11809       /* If this is a static data member that will be defined
11810          elsewhere, we don't want to instantiate the entire data
11811          member, but we do want to instantiate the initializer so that
11812          we can substitute that elsewhere.  */
11813       || (external_p && TREE_CODE (d) == VAR_DECL))
11814     {
11815       /* The definition of the static data member is now required so
11816          we must substitute the initializer.  */
11817       if (TREE_CODE (d) == VAR_DECL
11818           && !DECL_INITIAL (d) 
11819           && DECL_INITIAL (code_pattern))
11820         {
11821           tree ns;
11822           tree init;
11823
11824           ns = decl_namespace_context (d);
11825           push_nested_namespace (ns);
11826           push_nested_class (DECL_CONTEXT (d));
11827           init = tsubst_expr (DECL_INITIAL (code_pattern), 
11828                               args,
11829                               tf_warning_or_error, NULL_TREE);
11830           DECL_INITIAL (d) = init;
11831           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
11832                           /*asmspec_tree=*/NULL_TREE,
11833                           LOOKUP_ONLYCONVERTING);
11834           pop_nested_class ();
11835           pop_nested_namespace (ns);
11836         }
11837
11838       /* We restore the source position here because it's used by
11839          add_pending_template.  */
11840       input_location = saved_loc;
11841
11842       if (at_eof && !pattern_defined
11843           && DECL_EXPLICIT_INSTANTIATION (d))
11844         /* [temp.explicit]
11845
11846            The definition of a non-exported function template, a
11847            non-exported member function template, or a non-exported
11848            member function or static data member of a class template
11849            shall be present in every translation unit in which it is
11850            explicitly instantiated.  */
11851         pedwarn
11852           ("explicit instantiation of %qD but no definition available", d);
11853
11854       /* ??? Historically, we have instantiated inline functions, even
11855          when marked as "extern template".  */
11856       if (!(external_p && TREE_CODE (d) == VAR_DECL))
11857         add_pending_template (d);
11858       goto out;
11859     }
11860   /* Tell the repository that D is available in this translation unit
11861      -- and see if it is supposed to be instantiated here.  */
11862   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
11863     {
11864       /* In a PCH file, despite the fact that the repository hasn't
11865          requested instantiation in the PCH it is still possible that
11866          an instantiation will be required in a file that includes the
11867          PCH.  */
11868       if (pch_file)
11869         add_pending_template (d);
11870       /* Instantiate inline functions so that the inliner can do its
11871          job, even though we'll not be emitting a copy of this
11872          function.  */
11873       if (!(TREE_CODE (d) == FUNCTION_DECL
11874             && flag_inline_trees
11875             && DECL_DECLARED_INLINE_P (d)))
11876         goto out;
11877     }
11878
11879   need_push = !cfun || !global_bindings_p ();
11880   if (need_push)
11881     push_to_top_level ();
11882
11883   /* Mark D as instantiated so that recursive calls to
11884      instantiate_decl do not try to instantiate it again.  */
11885   DECL_TEMPLATE_INSTANTIATED (d) = 1;
11886
11887   /* Regenerate the declaration in case the template has been modified
11888      by a subsequent redeclaration.  */
11889   regenerate_decl_from_template (d, td);
11890
11891   /* We already set the file and line above.  Reset them now in case
11892      they changed as a result of calling regenerate_decl_from_template.  */
11893   input_location = DECL_SOURCE_LOCATION (d);
11894
11895   if (TREE_CODE (d) == VAR_DECL)
11896     {
11897       /* Clear out DECL_RTL; whatever was there before may not be right
11898          since we've reset the type of the declaration.  */
11899       SET_DECL_RTL (d, NULL_RTX);
11900       DECL_IN_AGGR_P (d) = 0;
11901
11902       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
11903          initializer.  That function will defer actual emission until
11904          we have a chance to determine linkage.  */
11905       DECL_EXTERNAL (d) = 0;
11906
11907       /* Enter the scope of D so that access-checking works correctly.  */
11908       push_nested_class (DECL_CONTEXT (d));
11909       finish_decl (d, DECL_INITIAL (d), NULL_TREE);
11910       pop_nested_class ();
11911     }
11912   else if (TREE_CODE (d) == FUNCTION_DECL)
11913     {
11914       htab_t saved_local_specializations;
11915       tree subst_decl;
11916       tree tmpl_parm;
11917       tree spec_parm;
11918
11919       /* Save away the current list, in case we are instantiating one
11920          template from within the body of another.  */
11921       saved_local_specializations = local_specializations;
11922
11923       /* Set up the list of local specializations.  */
11924       local_specializations = htab_create (37,
11925                                            hash_local_specialization,
11926                                            eq_local_specializations,
11927                                            NULL);
11928
11929       /* Set up context.  */
11930       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
11931
11932       /* Create substitution entries for the parameters.  */
11933       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
11934       tmpl_parm = DECL_ARGUMENTS (subst_decl);
11935       spec_parm = DECL_ARGUMENTS (d);
11936       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
11937         {
11938           register_local_specialization (spec_parm, tmpl_parm);
11939           spec_parm = skip_artificial_parms_for (d, spec_parm);
11940           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
11941         }
11942       while (tmpl_parm)
11943         {
11944           register_local_specialization (spec_parm, tmpl_parm);
11945           tmpl_parm = TREE_CHAIN (tmpl_parm);
11946           spec_parm = TREE_CHAIN (spec_parm);
11947         }
11948       gcc_assert (!spec_parm);
11949
11950       /* Substitute into the body of the function.  */
11951       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
11952                    tf_warning_or_error, tmpl);
11953
11954       /* We don't need the local specializations any more.  */
11955       htab_delete (local_specializations);
11956       local_specializations = saved_local_specializations;
11957
11958       /* Finish the function.  */
11959       d = finish_function (0);
11960       expand_or_defer_fn (d);
11961     }
11962
11963   /* We're not deferring instantiation any more.  */
11964   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
11965
11966   if (need_push)
11967     pop_from_top_level ();
11968
11969 out:
11970   input_location = saved_loc;
11971   pop_deferring_access_checks ();
11972   pop_tinst_level ();
11973
11974   timevar_pop (TV_PARSE);
11975
11976   return d;
11977 }
11978
11979 /* Run through the list of templates that we wish we could
11980    instantiate, and instantiate any we can.  RETRIES is the
11981    number of times we retry pending template instantiation.  */
11982
11983 void
11984 instantiate_pending_templates (int retries)
11985 {
11986   tree *t;
11987   tree last = NULL_TREE;
11988   int reconsider;
11989   location_t saved_loc = input_location;
11990   int saved_in_system_header = in_system_header;
11991
11992   /* Instantiating templates may trigger vtable generation.  This in turn
11993      may require further template instantiations.  We place a limit here
11994      to avoid infinite loop.  */
11995   if (pending_templates && retries >= max_tinst_depth)
11996     {
11997       tree decl = TREE_VALUE (pending_templates);
11998
11999       error ("template instantiation depth exceeds maximum of %d"
12000              " instantiating %q+D, possibly from virtual table generation"
12001              " (use -ftemplate-depth-NN to increase the maximum)",
12002              max_tinst_depth, decl);
12003       if (TREE_CODE (decl) == FUNCTION_DECL)
12004         /* Pretend that we defined it.  */
12005         DECL_INITIAL (decl) = error_mark_node;
12006       return;
12007     }
12008
12009   do
12010     {
12011       reconsider = 0;
12012
12013       t = &pending_templates;
12014       while (*t)
12015         {
12016           tree instantiation = TREE_VALUE (*t);
12017
12018           reopen_tinst_level (TREE_PURPOSE (*t));
12019
12020           if (TYPE_P (instantiation))
12021             {
12022               tree fn;
12023
12024               if (!COMPLETE_TYPE_P (instantiation))
12025                 {
12026                   instantiate_class_template (instantiation);
12027                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
12028                     for (fn = TYPE_METHODS (instantiation);
12029                          fn;
12030                          fn = TREE_CHAIN (fn))
12031                       if (! DECL_ARTIFICIAL (fn))
12032                         instantiate_decl (fn, 
12033                                           /*defer_ok=*/0,
12034                                           /*expl_inst_class_mem_p=*/false);
12035                   if (COMPLETE_TYPE_P (instantiation))
12036                     reconsider = 1;
12037                 }
12038
12039               if (COMPLETE_TYPE_P (instantiation))
12040                 /* If INSTANTIATION has been instantiated, then we don't
12041                    need to consider it again in the future.  */
12042                 *t = TREE_CHAIN (*t);
12043               else
12044                 {
12045                   last = *t;
12046                   t = &TREE_CHAIN (*t);
12047                 }
12048             }
12049           else
12050             {
12051               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
12052                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
12053                 {
12054                   instantiation 
12055                     = instantiate_decl (instantiation,
12056                                         /*defer_ok=*/0,
12057                                         /*expl_inst_class_mem_p=*/false);
12058                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
12059                     reconsider = 1;
12060                 }
12061
12062               if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
12063                   || DECL_TEMPLATE_INSTANTIATED (instantiation))
12064                 /* If INSTANTIATION has been instantiated, then we don't
12065                    need to consider it again in the future.  */
12066                 *t = TREE_CHAIN (*t);
12067               else
12068                 {
12069                   last = *t;
12070                   t = &TREE_CHAIN (*t);
12071                 }
12072             }
12073           tinst_depth = 0;
12074           current_tinst_level = NULL_TREE;
12075         }
12076       last_pending_template = last;
12077     }
12078   while (reconsider);
12079
12080   input_location = saved_loc;
12081   in_system_header = saved_in_system_header;
12082 }
12083
12084 /* Substitute ARGVEC into T, which is a list of initializers for
12085    either base class or a non-static data member.  The TREE_PURPOSEs
12086    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
12087    instantiate_decl.  */
12088
12089 static tree
12090 tsubst_initializer_list (tree t, tree argvec)
12091 {
12092   tree inits = NULL_TREE;
12093
12094   for (; t; t = TREE_CHAIN (t))
12095     {
12096       tree decl;
12097       tree init;
12098
12099       decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_warning_or_error,
12100                           NULL_TREE);
12101       decl = expand_member_init (decl);
12102       if (decl && !DECL_P (decl))
12103         in_base_initializer = 1;
12104
12105       init = tsubst_expr (TREE_VALUE (t), argvec, tf_warning_or_error,
12106                           NULL_TREE);
12107       in_base_initializer = 0;
12108
12109       if (decl)
12110         {
12111           init = build_tree_list (decl, init);
12112           TREE_CHAIN (init) = inits;
12113           inits = init;
12114         }
12115     }
12116   return inits;
12117 }
12118
12119 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
12120
12121 static void
12122 set_current_access_from_decl (tree decl)
12123 {
12124   if (TREE_PRIVATE (decl))
12125     current_access_specifier = access_private_node;
12126   else if (TREE_PROTECTED (decl))
12127     current_access_specifier = access_protected_node;
12128   else
12129     current_access_specifier = access_public_node;
12130 }
12131
12132 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
12133    is the instantiation (which should have been created with
12134    start_enum) and ARGS are the template arguments to use.  */
12135
12136 static void
12137 tsubst_enum (tree tag, tree newtag, tree args)
12138 {
12139   tree e;
12140
12141   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
12142     {
12143       tree value;
12144       tree decl;
12145
12146       decl = TREE_VALUE (e);
12147       /* Note that in a template enum, the TREE_VALUE is the
12148          CONST_DECL, not the corresponding INTEGER_CST.  */
12149       value = tsubst_expr (DECL_INITIAL (decl),
12150                            args, tf_warning_or_error, NULL_TREE);
12151
12152       /* Give this enumeration constant the correct access.  */
12153       set_current_access_from_decl (decl);
12154
12155       /* Actually build the enumerator itself.  */
12156       build_enumerator (DECL_NAME (decl), value, newtag);
12157     }
12158
12159   finish_enum (newtag);
12160   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
12161     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
12162 }
12163
12164 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
12165    its type -- but without substituting the innermost set of template
12166    arguments.  So, innermost set of template parameters will appear in
12167    the type.  */
12168
12169 tree
12170 get_mostly_instantiated_function_type (tree decl)
12171 {
12172   tree fn_type;
12173   tree tmpl;
12174   tree targs;
12175   tree tparms;
12176   int parm_depth;
12177
12178   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
12179   targs = DECL_TI_ARGS (decl);
12180   tparms = DECL_TEMPLATE_PARMS (tmpl);
12181   parm_depth = TMPL_PARMS_DEPTH (tparms);
12182
12183   /* There should be as many levels of arguments as there are levels
12184      of parameters.  */
12185   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
12186
12187   fn_type = TREE_TYPE (tmpl);
12188
12189   if (parm_depth == 1)
12190     /* No substitution is necessary.  */
12191     ;
12192   else
12193     {
12194       int i, save_access_control;
12195       tree partial_args;
12196
12197       /* Replace the innermost level of the TARGS with NULL_TREEs to
12198          let tsubst know not to substitute for those parameters.  */
12199       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
12200       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
12201         SET_TMPL_ARGS_LEVEL (partial_args, i,
12202                              TMPL_ARGS_LEVEL (targs, i));
12203       SET_TMPL_ARGS_LEVEL (partial_args,
12204                            TMPL_ARGS_DEPTH (targs),
12205                            make_tree_vec (DECL_NTPARMS (tmpl)));
12206
12207       /* Disable access control as this function is used only during
12208          name-mangling.  */
12209       save_access_control = flag_access_control;
12210       flag_access_control = 0;
12211
12212       ++processing_template_decl;
12213       /* Now, do the (partial) substitution to figure out the
12214          appropriate function type.  */
12215       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
12216       --processing_template_decl;
12217
12218       /* Substitute into the template parameters to obtain the real
12219          innermost set of parameters.  This step is important if the
12220          innermost set of template parameters contains value
12221          parameters whose types depend on outer template parameters.  */
12222       TREE_VEC_LENGTH (partial_args)--;
12223       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
12224
12225       flag_access_control = save_access_control;
12226     }
12227
12228   return fn_type;
12229 }
12230
12231 /* Return truthvalue if we're processing a template different from
12232    the last one involved in diagnostics.  */
12233 int
12234 problematic_instantiation_changed (void)
12235 {
12236   return last_template_error_tick != tinst_level_tick;
12237 }
12238
12239 /* Remember current template involved in diagnostics.  */
12240 void
12241 record_last_problematic_instantiation (void)
12242 {
12243   last_template_error_tick = tinst_level_tick;
12244 }
12245
12246 tree
12247 current_instantiation (void)
12248 {
12249   return current_tinst_level;
12250 }
12251
12252 /* [temp.param] Check that template non-type parm TYPE is of an allowable
12253    type. Return zero for ok, nonzero for disallowed. Issue error and
12254    warning messages under control of COMPLAIN.  */
12255
12256 static int
12257 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
12258 {
12259   if (INTEGRAL_TYPE_P (type))
12260     return 0;
12261   else if (POINTER_TYPE_P (type))
12262     return 0;
12263   else if (TYPE_PTR_TO_MEMBER_P (type))
12264     return 0;
12265   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
12266     return 0;
12267   else if (TREE_CODE (type) == TYPENAME_TYPE)
12268     return 0;
12269
12270   if (complain & tf_error)
12271     error ("%q#T is not a valid type for a template constant parameter", type);
12272   return 1;
12273 }
12274
12275 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
12276    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
12277
12278 static bool
12279 dependent_type_p_r (tree type)
12280 {
12281   tree scope;
12282
12283   /* [temp.dep.type]
12284
12285      A type is dependent if it is:
12286
12287      -- a template parameter. Template template parameters are types
12288         for us (since TYPE_P holds true for them) so we handle
12289         them here.  */
12290   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
12291       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
12292     return true;
12293   /* -- a qualified-id with a nested-name-specifier which contains a
12294         class-name that names a dependent type or whose unqualified-id
12295         names a dependent type.  */
12296   if (TREE_CODE (type) == TYPENAME_TYPE)
12297     return true;
12298   /* -- a cv-qualified type where the cv-unqualified type is
12299         dependent.  */
12300   type = TYPE_MAIN_VARIANT (type);
12301   /* -- a compound type constructed from any dependent type.  */
12302   if (TYPE_PTR_TO_MEMBER_P (type))
12303     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
12304             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
12305                                            (type)));
12306   else if (TREE_CODE (type) == POINTER_TYPE
12307            || TREE_CODE (type) == REFERENCE_TYPE)
12308     return dependent_type_p (TREE_TYPE (type));
12309   else if (TREE_CODE (type) == FUNCTION_TYPE
12310            || TREE_CODE (type) == METHOD_TYPE)
12311     {
12312       tree arg_type;
12313
12314       if (dependent_type_p (TREE_TYPE (type)))
12315         return true;
12316       for (arg_type = TYPE_ARG_TYPES (type);
12317            arg_type;
12318            arg_type = TREE_CHAIN (arg_type))
12319         if (dependent_type_p (TREE_VALUE (arg_type)))
12320           return true;
12321       return false;
12322     }
12323   /* -- an array type constructed from any dependent type or whose
12324         size is specified by a constant expression that is
12325         value-dependent.  */
12326   if (TREE_CODE (type) == ARRAY_TYPE)
12327     {
12328       if (TYPE_DOMAIN (type)
12329           && ((value_dependent_expression_p
12330                (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
12331               || (type_dependent_expression_p
12332                   (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
12333         return true;
12334       return dependent_type_p (TREE_TYPE (type));
12335     }
12336
12337   /* -- a template-id in which either the template name is a template
12338      parameter ...  */
12339   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
12340     return true;
12341   /* ... or any of the template arguments is a dependent type or
12342         an expression that is type-dependent or value-dependent.  */
12343   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
12344            && (any_dependent_template_arguments_p
12345                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
12346     return true;
12347
12348   /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
12349      expression is not type-dependent, then it should already been
12350      have resolved.  */
12351   if (TREE_CODE (type) == TYPEOF_TYPE)
12352     return true;
12353
12354   /* The standard does not specifically mention types that are local
12355      to template functions or local classes, but they should be
12356      considered dependent too.  For example:
12357
12358        template <int I> void f() {
12359          enum E { a = I };
12360          S<sizeof (E)> s;
12361        }
12362
12363      The size of `E' cannot be known until the value of `I' has been
12364      determined.  Therefore, `E' must be considered dependent.  */
12365   scope = TYPE_CONTEXT (type);
12366   if (scope && TYPE_P (scope))
12367     return dependent_type_p (scope);
12368   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12369     return type_dependent_expression_p (scope);
12370
12371   /* Other types are non-dependent.  */
12372   return false;
12373 }
12374
12375 /* Returns TRUE if TYPE is dependent, in the sense of
12376    [temp.dep.type].  */
12377
12378 bool
12379 dependent_type_p (tree type)
12380 {
12381   /* If there are no template parameters in scope, then there can't be
12382      any dependent types.  */
12383   if (!processing_template_decl)
12384     {
12385       /* If we are not processing a template, then nobody should be
12386          providing us with a dependent type.  */
12387       gcc_assert (type);
12388       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
12389       return false;
12390     }
12391
12392   /* If the type is NULL, we have not computed a type for the entity
12393      in question; in that case, the type is dependent.  */
12394   if (!type)
12395     return true;
12396
12397   /* Erroneous types can be considered non-dependent.  */
12398   if (type == error_mark_node)
12399     return false;
12400
12401   /* If we have not already computed the appropriate value for TYPE,
12402      do so now.  */
12403   if (!TYPE_DEPENDENT_P_VALID (type))
12404     {
12405       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
12406       TYPE_DEPENDENT_P_VALID (type) = 1;
12407     }
12408
12409   return TYPE_DEPENDENT_P (type);
12410 }
12411
12412 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
12413
12414 static bool
12415 dependent_scope_ref_p (tree expression, bool criterion (tree))
12416 {
12417   tree scope;
12418   tree name;
12419
12420   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
12421
12422   if (!TYPE_P (TREE_OPERAND (expression, 0)))
12423     return true;
12424
12425   scope = TREE_OPERAND (expression, 0);
12426   name = TREE_OPERAND (expression, 1);
12427
12428   /* [temp.dep.expr]
12429
12430      An id-expression is type-dependent if it contains a
12431      nested-name-specifier that contains a class-name that names a
12432      dependent type.  */
12433   /* The suggested resolution to Core Issue 2 implies that if the
12434      qualifying type is the current class, then we must peek
12435      inside it.  */
12436   if (DECL_P (name)
12437       && currently_open_class (scope)
12438       && !criterion (name))
12439     return false;
12440   if (dependent_type_p (scope))
12441     return true;
12442
12443   return false;
12444 }
12445
12446 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
12447    [temp.dep.constexpr] */
12448
12449 bool
12450 value_dependent_expression_p (tree expression)
12451 {
12452   if (!processing_template_decl)
12453     return false;
12454
12455   /* A name declared with a dependent type.  */
12456   if (DECL_P (expression) && type_dependent_expression_p (expression))
12457     return true;
12458
12459   switch (TREE_CODE (expression))
12460     {
12461     case IDENTIFIER_NODE:
12462       /* A name that has not been looked up -- must be dependent.  */
12463       return true;
12464
12465     case TEMPLATE_PARM_INDEX:
12466       /* A non-type template parm.  */
12467       return true;
12468
12469     case CONST_DECL:
12470       /* A non-type template parm.  */
12471       if (DECL_TEMPLATE_PARM_P (expression))
12472         return true;
12473       return false;
12474
12475     case VAR_DECL:
12476        /* A constant with integral or enumeration type and is initialized
12477           with an expression that is value-dependent.  */
12478       if (DECL_INITIAL (expression)
12479           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
12480           && value_dependent_expression_p (DECL_INITIAL (expression)))
12481         return true;
12482       return false;
12483
12484     case DYNAMIC_CAST_EXPR:
12485     case STATIC_CAST_EXPR:
12486     case CONST_CAST_EXPR:
12487     case REINTERPRET_CAST_EXPR:
12488     case CAST_EXPR:
12489       /* These expressions are value-dependent if the type to which
12490          the cast occurs is dependent or the expression being casted
12491          is value-dependent.  */
12492       {
12493         tree type = TREE_TYPE (expression);
12494
12495         if (dependent_type_p (type))
12496           return true;
12497
12498         /* A functional cast has a list of operands.  */
12499         expression = TREE_OPERAND (expression, 0);
12500         if (!expression)
12501           {
12502             /* If there are no operands, it must be an expression such
12503                as "int()". This should not happen for aggregate types
12504                because it would form non-constant expressions.  */
12505             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
12506
12507             return false;
12508           }
12509
12510         if (TREE_CODE (expression) == TREE_LIST)
12511           {
12512             for (; expression; expression = TREE_CHAIN (expression))
12513               if (value_dependent_expression_p (TREE_VALUE (expression)))
12514                 return true;
12515             return false;
12516           }
12517
12518         return value_dependent_expression_p (expression);
12519       }
12520
12521     case SIZEOF_EXPR:
12522     case ALIGNOF_EXPR:
12523       /* A `sizeof' expression is value-dependent if the operand is
12524          type-dependent.  */
12525       expression = TREE_OPERAND (expression, 0);
12526       if (TYPE_P (expression))
12527         return dependent_type_p (expression);
12528       return type_dependent_expression_p (expression);
12529
12530     case SCOPE_REF:
12531       return dependent_scope_ref_p (expression, value_dependent_expression_p);
12532
12533     case COMPONENT_REF:
12534       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
12535               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
12536
12537     case CALL_EXPR:
12538       /* A CALL_EXPR is value-dependent if any argument is
12539          value-dependent.  Why do we have to handle CALL_EXPRs in this
12540          function at all?  First, some function calls, those for which
12541          value_dependent_expression_p is true, man appear in constant
12542          expressions.  Second, there appear to be bugs which result in
12543          other CALL_EXPRs reaching this point. */
12544       {
12545         tree function = TREE_OPERAND (expression, 0);
12546         tree args = TREE_OPERAND (expression, 1);
12547
12548         if (value_dependent_expression_p (function))
12549           return true;
12550
12551         if (! args)
12552           return false;
12553
12554         if (TREE_CODE (args) == TREE_LIST)
12555           {
12556             for (; args; args = TREE_CHAIN (args))
12557               if (value_dependent_expression_p (TREE_VALUE (args)))
12558                 return true;
12559             return false;
12560           }
12561
12562         return value_dependent_expression_p (args);
12563       }
12564
12565     default:
12566       /* A constant expression is value-dependent if any subexpression is
12567          value-dependent.  */
12568       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
12569         {
12570         case tcc_reference:
12571         case tcc_unary:
12572           return (value_dependent_expression_p
12573                   (TREE_OPERAND (expression, 0)));
12574
12575         case tcc_comparison:
12576         case tcc_binary:
12577           return ((value_dependent_expression_p
12578                    (TREE_OPERAND (expression, 0)))
12579                   || (value_dependent_expression_p
12580                       (TREE_OPERAND (expression, 1))));
12581
12582         case tcc_expression:
12583           {
12584             int i;
12585             for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (expression)); ++i)
12586               /* In some cases, some of the operands may be missing.
12587                  (For example, in the case of PREDECREMENT_EXPR, the
12588                  amount to increment by may be missing.)  That doesn't
12589                  make the expression dependent.  */
12590               if (TREE_OPERAND (expression, i)
12591                   && (value_dependent_expression_p
12592                       (TREE_OPERAND (expression, i))))
12593                 return true;
12594             return false;
12595           }
12596
12597         default:
12598           break;
12599         }
12600     }
12601
12602   /* The expression is not value-dependent.  */
12603   return false;
12604 }
12605
12606 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
12607    [temp.dep.expr].  */
12608
12609 bool
12610 type_dependent_expression_p (tree expression)
12611 {
12612   if (!processing_template_decl)
12613     return false;
12614
12615   if (expression == error_mark_node)
12616     return false;
12617
12618   /* An unresolved name is always dependent.  */
12619   if (TREE_CODE (expression) == IDENTIFIER_NODE)
12620     return true;
12621
12622   /* Some expression forms are never type-dependent.  */
12623   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
12624       || TREE_CODE (expression) == SIZEOF_EXPR
12625       || TREE_CODE (expression) == ALIGNOF_EXPR
12626       || TREE_CODE (expression) == TYPEID_EXPR
12627       || TREE_CODE (expression) == DELETE_EXPR
12628       || TREE_CODE (expression) == VEC_DELETE_EXPR
12629       || TREE_CODE (expression) == THROW_EXPR)
12630     return false;
12631
12632   /* The types of these expressions depends only on the type to which
12633      the cast occurs.  */
12634   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
12635       || TREE_CODE (expression) == STATIC_CAST_EXPR
12636       || TREE_CODE (expression) == CONST_CAST_EXPR
12637       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
12638       || TREE_CODE (expression) == CAST_EXPR)
12639     return dependent_type_p (TREE_TYPE (expression));
12640
12641   /* The types of these expressions depends only on the type created
12642      by the expression.  */
12643   if (TREE_CODE (expression) == NEW_EXPR
12644       || TREE_CODE (expression) == VEC_NEW_EXPR)
12645     {
12646       /* For NEW_EXPR tree nodes created inside a template, either
12647          the object type itself or a TREE_LIST may appear as the
12648          operand 1.  */
12649       tree type = TREE_OPERAND (expression, 1);
12650       if (TREE_CODE (type) == TREE_LIST)
12651         /* This is an array type.  We need to check array dimensions
12652            as well.  */
12653         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
12654                || value_dependent_expression_p
12655                     (TREE_OPERAND (TREE_VALUE (type), 1));
12656       else
12657         return dependent_type_p (type);
12658     }
12659
12660   if (TREE_CODE (expression) == SCOPE_REF
12661       && dependent_scope_ref_p (expression,
12662                                 type_dependent_expression_p))
12663     return true;
12664
12665   if (TREE_CODE (expression) == FUNCTION_DECL
12666       && DECL_LANG_SPECIFIC (expression)
12667       && DECL_TEMPLATE_INFO (expression)
12668       && (any_dependent_template_arguments_p
12669           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
12670     return true;
12671
12672   if (TREE_CODE (expression) == TEMPLATE_DECL
12673       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
12674     return false;
12675
12676   if (TREE_TYPE (expression) == unknown_type_node)
12677     {
12678       if (TREE_CODE (expression) == ADDR_EXPR)
12679         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
12680       if (TREE_CODE (expression) == COMPONENT_REF
12681           || TREE_CODE (expression) == OFFSET_REF)
12682         {
12683           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
12684             return true;
12685           expression = TREE_OPERAND (expression, 1);
12686           if (TREE_CODE (expression) == IDENTIFIER_NODE)
12687             return false;
12688         }
12689       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
12690       if (TREE_CODE (expression) == SCOPE_REF)
12691         return false;
12692
12693       if (TREE_CODE (expression) == BASELINK)
12694         expression = BASELINK_FUNCTIONS (expression);
12695
12696       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
12697         {
12698           if (any_dependent_template_arguments_p
12699               (TREE_OPERAND (expression, 1)))
12700             return true;
12701           expression = TREE_OPERAND (expression, 0);
12702         }
12703       gcc_assert (TREE_CODE (expression) == OVERLOAD
12704                   || TREE_CODE (expression) == FUNCTION_DECL);
12705
12706       while (expression)
12707         {
12708           if (type_dependent_expression_p (OVL_CURRENT (expression)))
12709             return true;
12710           expression = OVL_NEXT (expression);
12711         }
12712       return false;
12713     }
12714
12715   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
12716   
12717   return (dependent_type_p (TREE_TYPE (expression)));
12718 }
12719
12720 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
12721    contains a type-dependent expression.  */
12722
12723 bool
12724 any_type_dependent_arguments_p (tree args)
12725 {
12726   while (args)
12727     {
12728       tree arg = TREE_VALUE (args);
12729
12730       if (type_dependent_expression_p (arg))
12731         return true;
12732       args = TREE_CHAIN (args);
12733     }
12734   return false;
12735 }
12736
12737 /* Returns TRUE if the ARG (a template argument) is dependent.  */
12738
12739 static bool
12740 dependent_template_arg_p (tree arg)
12741 {
12742   if (!processing_template_decl)
12743     return false;
12744
12745   if (TREE_CODE (arg) == TEMPLATE_DECL
12746       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12747     return dependent_template_p (arg);
12748   else if (TYPE_P (arg))
12749     return dependent_type_p (arg);
12750   else
12751     return (type_dependent_expression_p (arg)
12752             || value_dependent_expression_p (arg));
12753 }
12754
12755 /* Returns true if ARGS (a collection of template arguments) contains
12756    any dependent arguments.  */
12757
12758 bool
12759 any_dependent_template_arguments_p (tree args)
12760 {
12761   int i;
12762   int j;
12763
12764   if (!args)
12765     return false;
12766   if (args == error_mark_node)
12767     return true;
12768
12769   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
12770     {
12771       tree level = TMPL_ARGS_LEVEL (args, i + 1);
12772       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
12773         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
12774           return true;
12775     }
12776
12777   return false;
12778 }
12779
12780 /* Returns TRUE if the template TMPL is dependent.  */
12781
12782 bool
12783 dependent_template_p (tree tmpl)
12784 {
12785   if (TREE_CODE (tmpl) == OVERLOAD)
12786     {
12787       while (tmpl)
12788         {
12789           if (dependent_template_p (OVL_FUNCTION (tmpl)))
12790             return true;
12791           tmpl = OVL_CHAIN (tmpl);
12792         }
12793       return false;
12794     }
12795
12796   /* Template template parameters are dependent.  */
12797   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
12798       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
12799     return true;
12800   /* So are names that have not been looked up.  */
12801   if (TREE_CODE (tmpl) == SCOPE_REF
12802       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
12803     return true;
12804   /* So are member templates of dependent classes.  */
12805   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
12806     return dependent_type_p (DECL_CONTEXT (tmpl));
12807   return false;
12808 }
12809
12810 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
12811
12812 bool
12813 dependent_template_id_p (tree tmpl, tree args)
12814 {
12815   return (dependent_template_p (tmpl)
12816           || any_dependent_template_arguments_p (args));
12817 }
12818
12819 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
12820    TYPENAME_TYPE corresponds.  Returns ERROR_MARK_NODE if no such TYPE
12821    can be found.  Note that this function peers inside uninstantiated
12822    templates and therefore should be used only in extremely limited
12823    situations.  ONLY_CURRENT_P restricts this peering to the currently
12824    open classes hierarchy (which is required when comparing types).  */
12825
12826 tree
12827 resolve_typename_type (tree type, bool only_current_p)
12828 {
12829   tree scope;
12830   tree name;
12831   tree decl;
12832   int quals;
12833   tree pushed_scope;
12834
12835   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
12836
12837   scope = TYPE_CONTEXT (type);
12838   name = TYPE_IDENTIFIER (type);
12839
12840   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
12841      it first before we can figure out what NAME refers to.  */
12842   if (TREE_CODE (scope) == TYPENAME_TYPE)
12843     scope = resolve_typename_type (scope, only_current_p);
12844   /* If we don't know what SCOPE refers to, then we cannot resolve the
12845      TYPENAME_TYPE.  */
12846   if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
12847     return error_mark_node;
12848   /* If the SCOPE is a template type parameter, we have no way of
12849      resolving the name.  */
12850   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
12851     return type;
12852   /* If the SCOPE is not the current instantiation, there's no reason
12853      to look inside it.  */
12854   if (only_current_p && !currently_open_class (scope))
12855     return error_mark_node;
12856   /* If SCOPE is a partial instantiation, it will not have a valid
12857      TYPE_FIELDS list, so use the original template.  */
12858   scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
12859   /* Enter the SCOPE so that name lookup will be resolved as if we
12860      were in the class definition.  In particular, SCOPE will no
12861      longer be considered a dependent type.  */
12862   pushed_scope = push_scope (scope);
12863   /* Look up the declaration.  */
12864   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
12865   /* Obtain the set of qualifiers applied to the TYPE.  */
12866   quals = cp_type_quals (type);
12867   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
12868      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
12869   if (!decl)
12870     type = error_mark_node;
12871   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
12872            && TREE_CODE (decl) == TYPE_DECL)
12873     type = TREE_TYPE (decl);
12874   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
12875            && DECL_CLASS_TEMPLATE_P (decl))
12876     {
12877       tree tmpl;
12878       tree args;
12879       /* Obtain the template and the arguments.  */
12880       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
12881       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
12882       /* Instantiate the template.  */
12883       type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
12884                                     /*entering_scope=*/0, tf_error | tf_user);
12885     }
12886   else
12887     type = error_mark_node;
12888   /* Qualify the resulting type.  */
12889   if (type != error_mark_node && quals)
12890     type = cp_build_qualified_type (type, quals);
12891   /* Leave the SCOPE.  */
12892   if (pushed_scope)
12893     pop_scope (pushed_scope);
12894
12895   return type;
12896 }
12897
12898 /* EXPR is an expression which is not type-dependent.  Return a proxy
12899    for EXPR that can be used to compute the types of larger
12900    expressions containing EXPR.  */
12901
12902 tree
12903 build_non_dependent_expr (tree expr)
12904 {
12905   tree inner_expr;
12906
12907   /* Preserve null pointer constants so that the type of things like
12908      "p == 0" where "p" is a pointer can be determined.  */
12909   if (null_ptr_cst_p (expr))
12910     return expr;
12911   /* Preserve OVERLOADs; the functions must be available to resolve
12912      types.  */
12913   inner_expr = expr;
12914   if (TREE_CODE (inner_expr) == ADDR_EXPR)
12915     inner_expr = TREE_OPERAND (inner_expr, 0);
12916   if (TREE_CODE (inner_expr) == COMPONENT_REF)
12917     inner_expr = TREE_OPERAND (inner_expr, 1);
12918   if (is_overloaded_fn (inner_expr)
12919       || TREE_CODE (inner_expr) == OFFSET_REF)
12920     return expr;
12921   /* There is no need to return a proxy for a variable.  */
12922   if (TREE_CODE (expr) == VAR_DECL)
12923     return expr;
12924   /* Preserve string constants; conversions from string constants to
12925      "char *" are allowed, even though normally a "const char *"
12926      cannot be used to initialize a "char *".  */
12927   if (TREE_CODE (expr) == STRING_CST)
12928     return expr;
12929   /* Preserve arithmetic constants, as an optimization -- there is no
12930      reason to create a new node.  */
12931   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
12932     return expr;
12933   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
12934      There is at least one place where we want to know that a
12935      particular expression is a throw-expression: when checking a ?:
12936      expression, there are special rules if the second or third
12937      argument is a throw-expression.  */
12938   if (TREE_CODE (expr) == THROW_EXPR)
12939     return expr;
12940
12941   if (TREE_CODE (expr) == COND_EXPR)
12942     return build3 (COND_EXPR,
12943                    TREE_TYPE (expr),
12944                    TREE_OPERAND (expr, 0),
12945                    (TREE_OPERAND (expr, 1)
12946                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
12947                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
12948                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
12949   if (TREE_CODE (expr) == COMPOUND_EXPR
12950       && !COMPOUND_EXPR_OVERLOADED (expr))
12951     return build2 (COMPOUND_EXPR,
12952                    TREE_TYPE (expr),
12953                    TREE_OPERAND (expr, 0),
12954                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
12955
12956   /* If the type is unknown, it can't really be non-dependent */
12957   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
12958   
12959   /* Otherwise, build a NON_DEPENDENT_EXPR.
12960
12961      REFERENCE_TYPEs are not stripped for expressions in templates
12962      because doing so would play havoc with mangling.  Consider, for
12963      example:
12964
12965        template <typename T> void f<T& g>() { g(); }
12966
12967      In the body of "f", the expression for "g" will have
12968      REFERENCE_TYPE, even though the standard says that it should
12969      not.  The reason is that we must preserve the syntactic form of
12970      the expression so that mangling (say) "f<g>" inside the body of
12971      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
12972      stripped here.  */
12973   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
12974 }
12975
12976 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
12977    Return a new TREE_LIST with the various arguments replaced with
12978    equivalent non-dependent expressions.  */
12979
12980 tree
12981 build_non_dependent_args (tree args)
12982 {
12983   tree a;
12984   tree new_args;
12985
12986   new_args = NULL_TREE;
12987   for (a = args; a; a = TREE_CHAIN (a))
12988     new_args = tree_cons (NULL_TREE,
12989                           build_non_dependent_expr (TREE_VALUE (a)),
12990                           new_args);
12991   return nreverse (new_args);
12992 }
12993
12994 #include "gt-cp-pt.h"