OSDN Git Service

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