OSDN Git Service

cp:
[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);
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         /* It is not a dependent using decl any more.  */
6097         TREE_TYPE (r) = void_type_node;
6098         DECL_INITIAL (r)
6099           = tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
6100         TREE_CHAIN (r) = NULL_TREE;
6101       }
6102       break;
6103
6104     case TYPE_DECL:
6105       if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
6106           || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
6107         {
6108           /* If this is the canonical decl, we don't have to mess with
6109              instantiations, and often we can't (for typename, template
6110              type parms and such).  Note that TYPE_NAME is not correct for
6111              the above test if we've copied the type for a typedef.  */
6112           r = TYPE_NAME (type);
6113           break;
6114         }
6115
6116       /* Fall through.  */
6117
6118     case VAR_DECL:
6119       {
6120         tree argvec = NULL_TREE;
6121         tree gen_tmpl = NULL_TREE;
6122         tree spec;
6123         tree tmpl = NULL_TREE;
6124         tree ctx;
6125         int local_p;
6126
6127         /* Assume this is a non-local variable.  */
6128         local_p = 0;
6129
6130         if (TYPE_P (CP_DECL_CONTEXT (t)))
6131           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, 
6132                                   complain,
6133                                   in_decl, /*entering_scope=*/1);
6134         else if (DECL_NAMESPACE_SCOPE_P (t))
6135           ctx = DECL_CONTEXT (t);
6136         else
6137           {
6138             /* Subsequent calls to pushdecl will fill this in.  */
6139             ctx = NULL_TREE;
6140             local_p = 1;
6141           }
6142
6143         /* Check to see if we already have this specialization.  */
6144         if (!local_p)
6145           {
6146             tmpl = DECL_TI_TEMPLATE (t);
6147             gen_tmpl = most_general_template (tmpl);
6148             argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
6149             spec = retrieve_specialization (gen_tmpl, argvec);
6150           }
6151         else
6152           spec = retrieve_local_specialization (t);
6153
6154         if (spec)
6155           {
6156             r = spec;
6157             break;
6158           }
6159
6160         r = copy_decl (t);
6161         if (TREE_CODE (r) == VAR_DECL)
6162           {
6163             type = complete_type (type);
6164             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
6165               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
6166           }
6167         else if (DECL_SELF_REFERENCE_P (t))
6168           SET_DECL_SELF_REFERENCE_P (r);
6169         TREE_TYPE (r) = type;
6170         c_apply_type_quals_to_decl (cp_type_quals (type), r);
6171         DECL_CONTEXT (r) = ctx;
6172         /* Clear out the mangled name and RTL for the instantiation.  */
6173         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6174         SET_DECL_RTL (r, NULL_RTX);
6175
6176         /* Don't try to expand the initializer until someone tries to use
6177            this variable; otherwise we run into circular dependencies.  */
6178         DECL_INITIAL (r) = NULL_TREE;
6179         SET_DECL_RTL (r, NULL_RTX);
6180         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
6181
6182         /* Even if the original location is out of scope, the newly
6183            substituted one is not.  */
6184         if (TREE_CODE (r) == VAR_DECL)
6185           {
6186             DECL_DEAD_FOR_LOCAL (r) = 0;
6187             DECL_INITIALIZED_P (r) = 0;
6188           }
6189
6190         if (!local_p)
6191           {
6192             /* A static data member declaration is always marked
6193                external when it is declared in-class, even if an
6194                initializer is present.  We mimic the non-template
6195                processing here.  */
6196             DECL_EXTERNAL (r) = 1;
6197
6198             register_specialization (r, gen_tmpl, argvec);
6199             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
6200             SET_DECL_IMPLICIT_INSTANTIATION (r);
6201           }
6202         else
6203           register_local_specialization (r, t);
6204
6205         TREE_CHAIN (r) = NULL_TREE;
6206         if (TREE_CODE (r) == VAR_DECL && VOID_TYPE_P (type))
6207           cp_error_at ("instantiation of `%D' as type `%T'", r, type);
6208         /* Compute the size, alignment, etc. of R.  */
6209         layout_decl (r, 0);
6210       }
6211       break;
6212
6213     default:
6214       abort ();
6215     } 
6216
6217   /* Restore the file and line information.  */
6218   input_location = saved_loc;
6219
6220   return r;
6221 }
6222
6223 /* Substitute into the ARG_TYPES of a function type.  */
6224
6225 static tree
6226 tsubst_arg_types (tree arg_types, 
6227                   tree args, 
6228                   tsubst_flags_t complain, 
6229                   tree in_decl)
6230 {
6231   tree remaining_arg_types;
6232   tree type;
6233
6234   if (!arg_types || arg_types == void_list_node)
6235     return arg_types;
6236   
6237   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
6238                                           args, complain, in_decl);
6239   if (remaining_arg_types == error_mark_node)
6240     return error_mark_node;
6241
6242   type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
6243   if (type == error_mark_node)
6244     return error_mark_node;
6245   if (VOID_TYPE_P (type))
6246     {
6247       if (complain & tf_error)
6248         {
6249           error ("invalid parameter type `%T'", type);
6250           if (in_decl)
6251             cp_error_at ("in declaration `%D'", in_decl);
6252         }
6253       return error_mark_node;
6254     }
6255
6256   /* Do array-to-pointer, function-to-pointer conversion, and ignore
6257      top-level qualifiers as required.  */
6258   type = TYPE_MAIN_VARIANT (type_decays_to (type));
6259
6260   /* Note that we do not substitute into default arguments here.  The
6261      standard mandates that they be instantiated only when needed,
6262      which is done in build_over_call.  */
6263   return hash_tree_cons (TREE_PURPOSE (arg_types), type,
6264                          remaining_arg_types);
6265                          
6266 }
6267
6268 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
6269    *not* handle the exception-specification for FNTYPE, because the
6270    initial substitution of explicitly provided template parameters
6271    during argument deduction forbids substitution into the
6272    exception-specification:
6273
6274      [temp.deduct]
6275
6276      All references in the function type of the function template to  the
6277      corresponding template parameters are replaced by the specified tem-
6278      plate argument values.  If a substitution in a template parameter or
6279      in  the function type of the function template results in an invalid
6280      type, type deduction fails.  [Note: The equivalent  substitution  in
6281      exception specifications is done only when the function is instanti-
6282      ated, at which point a program is  ill-formed  if  the  substitution
6283      results in an invalid type.]  */
6284
6285 static tree
6286 tsubst_function_type (tree t, 
6287                       tree args, 
6288                       tsubst_flags_t complain, 
6289                       tree in_decl)
6290 {
6291   tree return_type;
6292   tree arg_types;
6293   tree fntype;
6294
6295   /* The TYPE_CONTEXT is not used for function/method types.  */
6296   my_friendly_assert (TYPE_CONTEXT (t) == NULL_TREE, 0);
6297
6298   /* Substitute the return type.  */
6299   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6300   if (return_type == error_mark_node)
6301     return error_mark_node;
6302
6303   /* Substitute the argument types.  */
6304   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
6305                                 complain, in_decl); 
6306   if (arg_types == error_mark_node)
6307     return error_mark_node;
6308   
6309   /* Construct a new type node and return it.  */
6310   if (TREE_CODE (t) == FUNCTION_TYPE)
6311     fntype = build_function_type (return_type, arg_types);
6312   else
6313     {
6314       tree r = TREE_TYPE (TREE_VALUE (arg_types));
6315       if (! IS_AGGR_TYPE (r))
6316         {
6317           /* [temp.deduct]
6318              
6319              Type deduction may fail for any of the following
6320              reasons:
6321              
6322              -- Attempting to create "pointer to member of T" when T
6323              is not a class type.  */
6324           if (complain & tf_error)
6325             error ("creating pointer to member function of non-class type `%T'",
6326                       r);
6327           return error_mark_node;
6328         }
6329       
6330       fntype = build_cplus_method_type (r, return_type, TREE_CHAIN
6331                                         (arg_types));
6332     }
6333   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
6334   fntype = build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
6335   
6336   return fntype;  
6337 }
6338
6339 /* Substitute into the PARMS of a call-declarator.  */
6340
6341 static tree
6342 tsubst_call_declarator_parms (tree parms, 
6343                               tree args, 
6344                               tsubst_flags_t complain, 
6345                               tree in_decl)
6346 {
6347   tree new_parms;
6348   tree type;
6349   tree defarg;
6350
6351   if (!parms || parms == void_list_node)
6352     return parms;
6353   
6354   new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
6355                                             args, complain, in_decl);
6356
6357   /* Figure out the type of this parameter.  */
6358   type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
6359   
6360   /* Figure out the default argument as well.  Note that we use
6361      tsubst_expr since the default argument is really an expression.  */
6362   defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
6363
6364   /* Chain this parameter on to the front of those we have already
6365      processed.  We don't use hash_tree_cons because that function
6366      doesn't check TREE_PARMLIST.  */
6367   new_parms = tree_cons (defarg, type, new_parms);
6368
6369   /* And note that these are parameters.  */
6370   TREE_PARMLIST (new_parms) = 1;
6371   
6372   return new_parms;
6373 }
6374
6375 /* Take the tree structure T and replace template parameters used
6376    therein with the argument vector ARGS.  IN_DECL is an associated
6377    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
6378    Issue error and warning messages under control of COMPLAIN.  Note
6379    that we must be relatively non-tolerant of extensions here, in
6380    order to preserve conformance; if we allow substitutions that
6381    should not be allowed, we may allow argument deductions that should
6382    not succeed, and therefore report ambiguous overload situations
6383    where there are none.  In theory, we could allow the substitution,
6384    but indicate that it should have failed, and allow our caller to
6385    make sure that the right thing happens, but we don't try to do this
6386    yet.
6387
6388    This function is used for dealing with types, decls and the like;
6389    for expressions, use tsubst_expr or tsubst_copy.  */
6390
6391 static tree
6392 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
6393 {
6394   tree type, r;
6395
6396   if (t == NULL_TREE || t == error_mark_node
6397       || t == integer_type_node
6398       || t == void_type_node
6399       || t == char_type_node
6400       || TREE_CODE (t) == NAMESPACE_DECL)
6401     return t;
6402
6403   if (TREE_CODE (t) == IDENTIFIER_NODE)
6404     type = IDENTIFIER_TYPE_VALUE (t);
6405   else
6406     type = TREE_TYPE (t);
6407
6408   my_friendly_assert (type != unknown_type_node, 20030716);
6409
6410   if (type && TREE_CODE (t) != FUNCTION_DECL
6411       && TREE_CODE (t) != TYPENAME_TYPE
6412       && TREE_CODE (t) != TEMPLATE_DECL
6413       && TREE_CODE (t) != IDENTIFIER_NODE
6414       && TREE_CODE (t) != FUNCTION_TYPE
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         bool koenig_p;
8120
8121         function = TREE_OPERAND (t, 0);
8122         /* To determine whether or not we should perform Koenig lookup
8123            we must look at the form of the FUNCTION.  */
8124         koenig_p = !(/* Koenig lookup does not apply to qualified
8125                         names.  */
8126                      TREE_CODE (function) == SCOPE_REF
8127                      /* Or to references to members of classes.  */
8128                      || TREE_CODE (function) == COMPONENT_REF
8129                      /* If it is a FUNCTION_DECL or a baselink, then
8130                         the name was already resolved when the
8131                         template was parsed.  */
8132                      || TREE_CODE (function) == FUNCTION_DECL
8133                      || TREE_CODE (function) == BASELINK);
8134         if (TREE_CODE (function) == SCOPE_REF)
8135           {
8136             qualified_p = true;
8137             function = tsubst_qualified_id (function, args, complain, in_decl,
8138                                             /*done=*/false, 
8139                                             /*address_p=*/false);
8140           }
8141         else
8142           {
8143             qualified_p = (TREE_CODE (function) == COMPONENT_REF
8144                            && (TREE_CODE (TREE_OPERAND (function, 1))
8145                                == SCOPE_REF));
8146             function = tsubst_copy_and_build (function, args, complain, 
8147                                               in_decl,
8148                                               !qualified_p);
8149           }
8150
8151         call_args = RECUR (TREE_OPERAND (t, 1));
8152           
8153         if (BASELINK_P (function))
8154           qualified_p = 1;
8155
8156         if (koenig_p
8157             && TREE_CODE (function) != TEMPLATE_ID_EXPR
8158             && (is_overloaded_fn (function)
8159                 || DECL_P (function)
8160                 || TREE_CODE (function) == IDENTIFIER_NODE))
8161           {
8162             if (call_args)
8163               function = perform_koenig_lookup (function, call_args);
8164             else if (TREE_CODE (function) == IDENTIFIER_NODE)
8165               function = unqualified_name_lookup_error (function);
8166           }
8167
8168         /* Remember that there was a reference to this entity.  */
8169         if (DECL_P (function))
8170           mark_used (function);
8171
8172         function = convert_from_reference (function);
8173
8174         if (TREE_CODE (function) == OFFSET_REF)
8175           return build_offset_ref_call_from_tree (function, call_args);
8176         if (TREE_CODE (function) == COMPONENT_REF)
8177           return (build_new_method_call 
8178                   (TREE_OPERAND (function, 0),
8179                    TREE_OPERAND (function, 1),
8180                    call_args, NULL_TREE, 
8181                    qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL));
8182         return finish_call_expr (function, call_args, 
8183                                  /*disallow_virtual=*/qualified_p);
8184       }
8185
8186     case COND_EXPR:
8187       return build_x_conditional_expr
8188         (RECUR (TREE_OPERAND (t, 0)),
8189          RECUR (TREE_OPERAND (t, 1)),
8190          RECUR (TREE_OPERAND (t, 2)));
8191
8192     case PSEUDO_DTOR_EXPR:
8193       return finish_pseudo_destructor_expr 
8194         (RECUR (TREE_OPERAND (t, 0)),
8195          RECUR (TREE_OPERAND (t, 1)),
8196          RECUR (TREE_OPERAND (t, 2)));
8197
8198     case TREE_LIST:
8199       {
8200         tree purpose, value, chain;
8201
8202         if (t == void_list_node)
8203           return t;
8204
8205         purpose = TREE_PURPOSE (t);
8206         if (purpose)
8207           purpose = RECUR (purpose);
8208         value = TREE_VALUE (t);
8209         if (value)
8210           value = RECUR (value);
8211         chain = TREE_CHAIN (t);
8212         if (chain && chain != void_type_node)
8213           chain = RECUR (chain);
8214         if (purpose == TREE_PURPOSE (t)
8215             && value == TREE_VALUE (t)
8216             && chain == TREE_CHAIN (t))
8217           return t;
8218         return tree_cons (purpose, value, chain);
8219       }
8220
8221     case COMPONENT_REF:
8222       {
8223         tree object;
8224         tree member;
8225
8226         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8227                                                      args, complain, in_decl);
8228         /* Remember that there was a reference to this entity.  */
8229         if (DECL_P (object))
8230           mark_used (object);
8231
8232         member = TREE_OPERAND (t, 1);
8233         if (BASELINK_P (member))
8234           member = tsubst_baselink (member, 
8235                                     non_reference (TREE_TYPE (object)),
8236                                     args, complain, in_decl);
8237         else
8238           member = tsubst_copy (member, args, complain, in_decl);
8239
8240         if (!CLASS_TYPE_P (TREE_TYPE (object)))
8241           {
8242             if (TREE_CODE (member) == BIT_NOT_EXPR)
8243               return finish_pseudo_destructor_expr (object, 
8244                                                     NULL_TREE,
8245                                                     TREE_TYPE (object));
8246             else if (TREE_CODE (member) == SCOPE_REF
8247                      && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
8248               return finish_pseudo_destructor_expr (object, 
8249                                                     object,
8250                                                     TREE_TYPE (object));
8251           }
8252         else if (TREE_CODE (member) == SCOPE_REF
8253                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
8254           {
8255             tree tmpl;
8256             tree args;
8257         
8258             /* Lookup the template functions now that we know what the
8259                scope is.  */
8260             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
8261             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
8262             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl, 
8263                                             /*is_type=*/0, /*complain=*/false);
8264             if (BASELINK_P (member))
8265               BASELINK_FUNCTIONS (member) 
8266                 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
8267                             args);
8268             else
8269               {
8270                 qualified_name_lookup_error (TREE_TYPE (object), tmpl);
8271                 return error_mark_node;
8272               }
8273           }
8274         else if (TREE_CODE (member) == FIELD_DECL)
8275           return finish_non_static_data_member (member, object, NULL_TREE);
8276
8277         return finish_class_member_access_expr (object, member);
8278       }
8279
8280     case THROW_EXPR:
8281       return build_throw
8282         (RECUR (TREE_OPERAND (t, 0)));
8283
8284     case CONSTRUCTOR:
8285       {
8286         tree r;
8287         tree elts;
8288         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8289         bool purpose_p;
8290
8291         /* digest_init will do the wrong thing if we let it.  */
8292         if (type && TYPE_PTRMEMFUNC_P (type))
8293           return t;
8294
8295         r = NULL_TREE;
8296         /* We do not want to process the purpose of aggregate
8297            initializers as they are identifier nodes which will be
8298            looked up by digest_init.  */
8299         purpose_p = !(type && IS_AGGR_TYPE (type));
8300         for (elts = CONSTRUCTOR_ELTS (t);
8301              elts;
8302              elts = TREE_CHAIN (elts))
8303           {
8304             tree purpose = TREE_PURPOSE (elts);
8305             tree value = TREE_VALUE (elts);
8306             
8307             if (purpose && purpose_p)
8308               purpose = RECUR (purpose);
8309             value = RECUR (value);
8310             r = tree_cons (purpose, value, r);
8311           }
8312         
8313         r = build_constructor (NULL_TREE, nreverse (r));
8314         TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
8315
8316         if (type)
8317           return digest_init (type, r, 0);
8318         return r;
8319       }
8320
8321     case TYPEID_EXPR:
8322       {
8323         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
8324         if (TYPE_P (operand_0))
8325           return get_typeid (operand_0);
8326         return build_typeid (operand_0);
8327       }
8328
8329     case PARM_DECL:
8330       return convert_from_reference (tsubst_copy (t, args, complain, in_decl));
8331
8332     case VAR_DECL:
8333       if (args)
8334         t = tsubst_copy (t, args, complain, in_decl);
8335       else
8336         /* If there are no ARGS, then we are evaluating a
8337            non-dependent expression.  If the expression is
8338            non-dependent, the variable must be a constant.  */
8339         t = DECL_INITIAL (t);
8340       return convert_from_reference (t);
8341
8342     case VA_ARG_EXPR:
8343       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
8344                              tsubst_copy (TREE_TYPE (t), args, complain, 
8345                                           in_decl));
8346
8347     default:
8348       return tsubst_copy (t, args, complain, in_decl);
8349     }
8350
8351 #undef RECUR
8352 }
8353
8354 /* Verify that the instantiated ARGS are valid. For type arguments,
8355    make sure that the type's linkage is ok. For non-type arguments,
8356    make sure they are constants if they are integral or enumerations.
8357    Emit an error under control of COMPLAIN, and return TRUE on error.  */
8358
8359 static bool
8360 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
8361 {
8362   int ix, len = DECL_NTPARMS (tmpl);
8363   bool result = false;
8364
8365   for (ix = 0; ix != len; ix++)
8366     {
8367       tree t = TREE_VEC_ELT (args, ix);
8368       
8369       if (TYPE_P (t))
8370         {
8371           /* [basic.link]: A name with no linkage (notably, the name
8372              of a class or enumeration declared in a local scope)
8373              shall not be used to declare an entity with linkage.
8374              This implies that names with no linkage cannot be used as
8375              template arguments.  */
8376           tree nt = no_linkage_check (t);
8377
8378           if (nt)
8379             {
8380               if (!(complain & tf_error))
8381                 /*OK*/;
8382               else if (TYPE_ANONYMOUS_P (nt))
8383                 error ("`%T' uses anonymous type", t);
8384               else
8385                 error ("`%T' uses local type `%T'", t, nt);
8386               result = true;
8387             }
8388           /* In order to avoid all sorts of complications, we do not
8389              allow variably-modified types as template arguments.  */
8390           else if (variably_modified_type_p (t))
8391             {
8392               if (complain & tf_error)
8393                 error ("`%T' is a variably modified type", t);
8394               result = true;
8395             }
8396         }
8397       /* A non-type argument of integral or enumerated type must be a
8398          constant.  */
8399       else if (TREE_TYPE (t)
8400                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
8401                && !TREE_CONSTANT (t))
8402         {
8403           if (complain & tf_error)
8404             error ("integral expression `%E' is not constant", t);
8405           result = true;
8406         }
8407     }
8408   if (result && complain & tf_error)
8409     error ("  trying to instantiate `%D'", tmpl);
8410   return result;
8411 }
8412
8413 /* Instantiate the indicated variable or function template TMPL with
8414    the template arguments in TARG_PTR.  */
8415
8416 tree
8417 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
8418 {
8419   tree fndecl;
8420   tree gen_tmpl;
8421   tree spec;
8422
8423   if (tmpl == error_mark_node)
8424     return error_mark_node;
8425
8426   my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 283);
8427
8428   /* If this function is a clone, handle it specially.  */
8429   if (DECL_CLONED_FUNCTION_P (tmpl))
8430     {
8431       tree spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
8432                                         complain);
8433       tree clone;
8434       
8435       /* Look for the clone.  */
8436       for (clone = TREE_CHAIN (spec);
8437            clone && DECL_CLONED_FUNCTION_P (clone);
8438            clone = TREE_CHAIN (clone))
8439         if (DECL_NAME (clone) == DECL_NAME (tmpl))
8440           return clone;
8441       /* We should always have found the clone by now.  */
8442       abort ();
8443       return NULL_TREE;
8444     }
8445   
8446   /* Check to see if we already have this specialization.  */
8447   spec = retrieve_specialization (tmpl, targ_ptr);
8448   if (spec != NULL_TREE)
8449     return spec;
8450
8451   gen_tmpl = most_general_template (tmpl);
8452   if (tmpl != gen_tmpl)
8453     {
8454       /* The TMPL is a partial instantiation.  To get a full set of
8455          arguments we must add the arguments used to perform the
8456          partial instantiation.  */
8457       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
8458                                               targ_ptr);
8459
8460       /* Check to see if we already have this specialization.  */
8461       spec = retrieve_specialization (gen_tmpl, targ_ptr);
8462       if (spec != NULL_TREE)
8463         return spec;
8464     }
8465
8466   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
8467                                complain))
8468     return error_mark_node;
8469   
8470   /* We are building a FUNCTION_DECL, during which the access of its
8471      parameters and return types have to be checked.  However this
8472      FUNCTION_DECL which is the desired context for access checking
8473      is not built yet.  We solve this chicken-and-egg problem by
8474      deferring all checks until we have the FUNCTION_DECL.  */
8475   push_deferring_access_checks (dk_deferred);
8476
8477   /* substitute template parameters */
8478   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
8479                    targ_ptr, complain, gen_tmpl);
8480
8481   /* Now we know the specialization, compute access previously
8482      deferred.  */
8483   push_access_scope (fndecl);
8484   perform_deferred_access_checks ();
8485   pop_access_scope (fndecl);
8486   pop_deferring_access_checks ();
8487
8488   /* The DECL_TI_TEMPLATE should always be the immediate parent
8489      template, not the most general template.  */
8490   DECL_TI_TEMPLATE (fndecl) = tmpl;
8491
8492   if (flag_external_templates)
8493     add_pending_template (fndecl);
8494
8495   /* If we've just instantiated the main entry point for a function,
8496      instantiate all the alternate entry points as well.  We do this
8497      by cloning the instantiation of the main entry point, not by
8498      instantiating the template clones.  */
8499   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
8500     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
8501
8502   return fndecl;
8503 }
8504
8505 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
8506    arguments that are being used when calling it.  TARGS is a vector
8507    into which the deduced template arguments are placed.  
8508
8509    Return zero for success, 2 for an incomplete match that doesn't resolve
8510    all the types, and 1 for complete failure.  An error message will be
8511    printed only for an incomplete match.
8512
8513    If FN is a conversion operator, or we are trying to produce a specific
8514    specialization, RETURN_TYPE is the return type desired.
8515
8516    The EXPLICIT_TARGS are explicit template arguments provided via a
8517    template-id.
8518
8519    The parameter STRICT is one of:
8520
8521    DEDUCE_CALL: 
8522      We are deducing arguments for a function call, as in
8523      [temp.deduct.call].
8524
8525    DEDUCE_CONV:
8526      We are deducing arguments for a conversion function, as in 
8527      [temp.deduct.conv].
8528
8529    DEDUCE_EXACT:
8530      We are deducing arguments when doing an explicit instantiation
8531      as in [temp.explicit], when determining an explicit specialization
8532      as in [temp.expl.spec], or when taking the address of a function
8533      template, as in [temp.deduct.funcaddr]. 
8534
8535    DEDUCE_ORDER:
8536      We are deducing arguments when calculating the partial
8537      ordering between specializations of function or class
8538      templates, as in [temp.func.order] and [temp.class.order].
8539
8540    LEN is the number of parms to consider before returning success, or -1
8541    for all.  This is used in partial ordering to avoid comparing parms for
8542    which no actual argument was passed, since they are not considered in
8543    overload resolution (and are explicitly excluded from consideration in
8544    partial ordering in [temp.func.order]/6).  */
8545
8546 int
8547 fn_type_unification (tree fn, 
8548                      tree explicit_targs, 
8549                      tree targs, 
8550                      tree args, 
8551                      tree return_type,
8552                      unification_kind_t strict, 
8553                      int len)
8554 {
8555   tree parms;
8556   tree fntype;
8557   int result;
8558
8559   my_friendly_assert (TREE_CODE (fn) == TEMPLATE_DECL, 0);
8560
8561   fntype = TREE_TYPE (fn);
8562   if (explicit_targs)
8563     {
8564       /* [temp.deduct]
8565           
8566          The specified template arguments must match the template
8567          parameters in kind (i.e., type, nontype, template), and there
8568          must not be more arguments than there are parameters;
8569          otherwise type deduction fails.
8570
8571          Nontype arguments must match the types of the corresponding
8572          nontype template parameters, or must be convertible to the
8573          types of the corresponding nontype parameters as specified in
8574          _temp.arg.nontype_, otherwise type deduction fails.
8575
8576          All references in the function type of the function template
8577          to the corresponding template parameters are replaced by the
8578          specified template argument values.  If a substitution in a
8579          template parameter or in the function type of the function
8580          template results in an invalid type, type deduction fails.  */
8581       int i;
8582       tree converted_args;
8583       bool incomplete;
8584
8585       converted_args
8586         = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn), 
8587                                   explicit_targs, NULL_TREE, tf_none, 
8588                                   /*require_all_arguments=*/0));
8589       if (converted_args == error_mark_node)
8590         return 1;
8591
8592       /* Substitute the explicit args into the function type.  This is
8593          necessary so that, for instance, explicitly declared function
8594          arguments can match null pointed constants.  If we were given
8595          an incomplete set of explicit args, we must not do semantic
8596          processing during substitution as we could create partial
8597          instantiations.  */
8598       incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
8599       processing_template_decl += incomplete;
8600       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
8601       processing_template_decl -= incomplete;
8602       
8603       if (fntype == error_mark_node)
8604         return 1;
8605
8606       /* Place the explicitly specified arguments in TARGS.  */
8607       for (i = NUM_TMPL_ARGS (converted_args); i--;)
8608         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
8609     }
8610      
8611   parms = TYPE_ARG_TYPES (fntype);
8612   /* Never do unification on the 'this' parameter.  */
8613   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
8614     parms = TREE_CHAIN (parms);
8615   
8616   if (return_type)
8617     {
8618       /* We've been given a return type to match, prepend it.  */
8619       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
8620       args = tree_cons (NULL_TREE, return_type, args);
8621       if (len >= 0)
8622         ++len;
8623     }
8624
8625   /* We allow incomplete unification without an error message here
8626      because the standard doesn't seem to explicitly prohibit it.  Our
8627      callers must be ready to deal with unification failures in any
8628      event.  */
8629   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn), 
8630                                   targs, parms, args, /*subr=*/0,
8631                                   strict, /*allow_incomplete*/1, len);
8632
8633   if (result == 0) 
8634     /* All is well so far.  Now, check:
8635        
8636        [temp.deduct] 
8637        
8638        When all template arguments have been deduced, all uses of
8639        template parameters in nondeduced contexts are replaced with
8640        the corresponding deduced argument values.  If the
8641        substitution results in an invalid type, as described above,
8642        type deduction fails.  */
8643     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
8644         == error_mark_node)
8645       return 1;
8646
8647   return result;
8648 }
8649
8650 /* Adjust types before performing type deduction, as described in
8651    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
8652    sections are symmetric.  PARM is the type of a function parameter
8653    or the return type of the conversion function.  ARG is the type of
8654    the argument passed to the call, or the type of the value
8655    initialized with the result of the conversion function.  */
8656
8657 static int
8658 maybe_adjust_types_for_deduction (unification_kind_t strict, 
8659                                   tree* parm, 
8660                                   tree* arg)
8661 {
8662   int result = 0;
8663   
8664   switch (strict)
8665     {
8666     case DEDUCE_CALL:
8667       break;
8668
8669     case DEDUCE_CONV:
8670       {
8671         /* Swap PARM and ARG throughout the remainder of this
8672            function; the handling is precisely symmetric since PARM
8673            will initialize ARG rather than vice versa.  */
8674         tree* temp = parm;
8675         parm = arg;
8676         arg = temp;
8677         break;
8678       }
8679
8680     case DEDUCE_EXACT:
8681       /* There is nothing to do in this case.  */
8682       return 0;
8683
8684     case DEDUCE_ORDER:
8685       /* DR 214. [temp.func.order] is underspecified, and leads to no
8686          ordering between things like `T *' and `T const &' for `U *'.
8687          The former has T=U and the latter T=U*. The former looks more
8688          specialized and John Spicer considers it well-formed (the EDG
8689          compiler accepts it).
8690
8691          John also confirms that deduction should proceed as in a function
8692          call. Which implies the usual ARG and PARM conversions as DEDUCE_CALL.
8693          However, in ordering, ARG can have REFERENCE_TYPE, but no argument
8694          to an actual call can have such a type.
8695          
8696          If both ARG and PARM are REFERENCE_TYPE, we change neither.
8697          If only ARG is a REFERENCE_TYPE, we look through that and then
8698          proceed as with DEDUCE_CALL (which could further convert it).  */
8699       if (TREE_CODE (*arg) == REFERENCE_TYPE)
8700         {
8701           if (TREE_CODE (*parm) == REFERENCE_TYPE)
8702             return 0;
8703           *arg = TREE_TYPE (*arg);
8704         }
8705       break;
8706     default:
8707       abort ();
8708     }
8709
8710   if (TREE_CODE (*parm) != REFERENCE_TYPE)
8711     {
8712       /* [temp.deduct.call]
8713          
8714          If P is not a reference type:
8715          
8716          --If A is an array type, the pointer type produced by the
8717          array-to-pointer standard conversion (_conv.array_) is
8718          used in place of A for type deduction; otherwise,
8719          
8720          --If A is a function type, the pointer type produced by
8721          the function-to-pointer standard conversion
8722          (_conv.func_) is used in place of A for type deduction;
8723          otherwise,
8724          
8725          --If A is a cv-qualified type, the top level
8726          cv-qualifiers of A's type are ignored for type
8727          deduction.  */
8728       if (TREE_CODE (*arg) == ARRAY_TYPE)
8729         *arg = build_pointer_type (TREE_TYPE (*arg));
8730       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
8731         *arg = build_pointer_type (*arg);
8732       else
8733         *arg = TYPE_MAIN_VARIANT (*arg);
8734     }
8735   
8736   /* [temp.deduct.call]
8737      
8738      If P is a cv-qualified type, the top level cv-qualifiers
8739      of P's type are ignored for type deduction.  If P is a
8740      reference type, the type referred to by P is used for
8741      type deduction.  */
8742   *parm = TYPE_MAIN_VARIANT (*parm);
8743   if (TREE_CODE (*parm) == REFERENCE_TYPE)
8744     {
8745       *parm = TREE_TYPE (*parm);
8746       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
8747     }
8748
8749   /* DR 322. For conversion deduction, remove a reference type on parm
8750      too (which has been swapped into ARG).  */
8751   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
8752     *arg = TREE_TYPE (*arg);
8753   
8754   return result;
8755 }
8756
8757 /* Most parms like fn_type_unification.
8758
8759    If SUBR is 1, we're being called recursively (to unify the
8760    arguments of a function or method parameter of a function
8761    template).  */
8762
8763 static int
8764 type_unification_real (tree tparms, 
8765                        tree targs, 
8766                        tree xparms, 
8767                        tree xargs, 
8768                        int subr,
8769                        unification_kind_t strict, 
8770                        int allow_incomplete, 
8771                        int xlen)
8772 {
8773   tree parm, arg;
8774   int i;
8775   int ntparms = TREE_VEC_LENGTH (tparms);
8776   int sub_strict;
8777   int saw_undeduced = 0;
8778   tree parms, args;
8779   int len;
8780
8781   my_friendly_assert (TREE_CODE (tparms) == TREE_VEC, 289);
8782   my_friendly_assert (xparms == NULL_TREE 
8783                       || TREE_CODE (xparms) == TREE_LIST, 290);
8784   my_friendly_assert (!xargs || TREE_CODE (xargs) == TREE_LIST, 291);
8785   my_friendly_assert (ntparms > 0, 292);
8786
8787   switch (strict)
8788     {
8789     case DEDUCE_CALL:
8790       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
8791                     | UNIFY_ALLOW_DERIVED);
8792       break;
8793       
8794     case DEDUCE_CONV:
8795       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
8796       break;
8797
8798     case DEDUCE_EXACT:
8799       sub_strict = UNIFY_ALLOW_NONE;
8800       break;
8801     
8802     case DEDUCE_ORDER:
8803       sub_strict = UNIFY_ALLOW_NONE;
8804       break;
8805       
8806     default:
8807       abort ();
8808     }
8809
8810   if (xlen == 0)
8811     return 0;
8812
8813  again:
8814   parms = xparms;
8815   args = xargs;
8816   len = xlen;
8817
8818   while (parms
8819          && parms != void_list_node
8820          && args
8821          && args != void_list_node)
8822     {
8823       parm = TREE_VALUE (parms);
8824       parms = TREE_CHAIN (parms);
8825       arg = TREE_VALUE (args);
8826       args = TREE_CHAIN (args);
8827
8828       if (arg == error_mark_node)
8829         return 1;
8830       if (arg == unknown_type_node)
8831         /* We can't deduce anything from this, but we might get all the
8832            template args from other function args.  */
8833         continue;
8834
8835       /* Conversions will be performed on a function argument that
8836          corresponds with a function parameter that contains only
8837          non-deducible template parameters and explicitly specified
8838          template parameters.  */
8839       if (! uses_template_parms (parm))
8840         {
8841           tree type;
8842
8843           if (!TYPE_P (arg))
8844             type = TREE_TYPE (arg);
8845           else
8846             {
8847               type = arg;
8848               arg = NULL_TREE;
8849             }
8850
8851           if (strict == DEDUCE_EXACT || strict == DEDUCE_ORDER)
8852             {
8853               if (same_type_p (parm, type))
8854                 continue;
8855             }
8856           else
8857             /* It might work; we shouldn't check now, because we might
8858                get into infinite recursion.  Overload resolution will
8859                handle it.  */
8860             continue;
8861
8862           return 1;
8863         }
8864         
8865       if (!TYPE_P (arg))
8866         {
8867           my_friendly_assert (TREE_TYPE (arg) != NULL_TREE, 293);
8868           if (type_unknown_p (arg))
8869             {
8870               /* [temp.deduct.type] A template-argument can be deduced from
8871                  a pointer to function or pointer to member function
8872                  argument if the set of overloaded functions does not
8873                  contain function templates and at most one of a set of
8874                  overloaded functions provides a unique match.  */
8875
8876               if (resolve_overloaded_unification
8877                   (tparms, targs, parm, arg, strict, sub_strict)
8878                   != 0)
8879                 return 1;
8880               continue;
8881             }
8882           arg = TREE_TYPE (arg);
8883           if (arg == error_mark_node)
8884             return 1;
8885         }
8886       
8887       {
8888         int arg_strict = sub_strict;
8889         
8890         if (!subr)
8891           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
8892
8893         if (unify (tparms, targs, parm, arg, arg_strict))
8894           return 1;
8895       }
8896
8897       /* Are we done with the interesting parms?  */
8898       if (--len == 0)
8899         goto done;
8900     }
8901   /* Fail if we've reached the end of the parm list, and more args
8902      are present, and the parm list isn't variadic.  */
8903   if (args && args != void_list_node && parms == void_list_node)
8904     return 1;
8905   /* Fail if parms are left and they don't have default values.  */
8906   if (parms
8907       && parms != void_list_node
8908       && TREE_PURPOSE (parms) == NULL_TREE)
8909     return 1;
8910
8911  done:
8912   if (!subr)
8913     for (i = 0; i < ntparms; i++)
8914       if (TREE_VEC_ELT (targs, i) == NULL_TREE)
8915         {
8916           tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
8917
8918           /* If this is an undeduced nontype parameter that depends on
8919              a type parameter, try another pass; its type may have been
8920              deduced from a later argument than the one from which
8921              this parameter can be deduced.  */
8922           if (TREE_CODE (tparm) == PARM_DECL
8923               && uses_template_parms (TREE_TYPE (tparm))
8924               && !saw_undeduced++)
8925             goto again;
8926
8927           if (!allow_incomplete)
8928             error ("incomplete type unification");
8929           return 2;
8930         }
8931   return 0;
8932 }
8933
8934 /* Subroutine of type_unification_real.  Args are like the variables at the
8935    call site.  ARG is an overloaded function (or template-id); we try
8936    deducing template args from each of the overloads, and if only one
8937    succeeds, we go with that.  Modifies TARGS and returns 0 on success.  */
8938
8939 static int
8940 resolve_overloaded_unification (tree tparms, 
8941                                 tree targs,
8942                                 tree parm,
8943                                 tree arg, 
8944                                 unification_kind_t strict,
8945                                 int sub_strict)
8946 {
8947   tree tempargs = copy_node (targs);
8948   int good = 0;
8949
8950   if (TREE_CODE (arg) == ADDR_EXPR)
8951     arg = TREE_OPERAND (arg, 0);
8952
8953   if (TREE_CODE (arg) == COMPONENT_REF)
8954     /* Handle `&x' where `x' is some static or non-static member
8955        function name.  */
8956     arg = TREE_OPERAND (arg, 1);
8957
8958   if (TREE_CODE (arg) == OFFSET_REF)
8959     arg = TREE_OPERAND (arg, 1);
8960
8961   /* Strip baselink information.  */
8962   if (BASELINK_P (arg))
8963     arg = BASELINK_FUNCTIONS (arg);
8964
8965   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
8966     {
8967       /* If we got some explicit template args, we need to plug them into
8968          the affected templates before we try to unify, in case the
8969          explicit args will completely resolve the templates in question.  */
8970
8971       tree expl_subargs = TREE_OPERAND (arg, 1);
8972       arg = TREE_OPERAND (arg, 0);
8973
8974       for (; arg; arg = OVL_NEXT (arg))
8975         {
8976           tree fn = OVL_CURRENT (arg);
8977           tree subargs, elem;
8978
8979           if (TREE_CODE (fn) != TEMPLATE_DECL)
8980             continue;
8981
8982           subargs = get_bindings_overload (fn, DECL_TEMPLATE_RESULT (fn),
8983                                            expl_subargs);
8984           if (subargs)
8985             {
8986               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
8987               if (TREE_CODE (elem) == METHOD_TYPE)
8988                 elem = build_ptrmemfunc_type (build_pointer_type (elem));
8989               good += try_one_overload (tparms, targs, tempargs, parm, elem,
8990                                         strict, sub_strict);
8991             }
8992         }
8993     }
8994   else if (TREE_CODE (arg) == OVERLOAD
8995            || TREE_CODE (arg) == FUNCTION_DECL)
8996     {
8997       for (; arg; arg = OVL_NEXT (arg))
8998         {
8999           tree type = TREE_TYPE (OVL_CURRENT (arg));
9000           if (TREE_CODE (type) == METHOD_TYPE)
9001             type = build_ptrmemfunc_type (build_pointer_type (type));
9002           good += try_one_overload (tparms, targs, tempargs, parm,
9003                                     type,
9004                                     strict, sub_strict);
9005         }
9006     }
9007   else
9008     abort ();
9009
9010   /* [temp.deduct.type] A template-argument can be deduced from a pointer
9011      to function or pointer to member function argument if the set of
9012      overloaded functions does not contain function templates and at most
9013      one of a set of overloaded functions provides a unique match.
9014
9015      So if we found multiple possibilities, we return success but don't
9016      deduce anything.  */
9017
9018   if (good == 1)
9019     {
9020       int i = TREE_VEC_LENGTH (targs);
9021       for (; i--; )
9022         if (TREE_VEC_ELT (tempargs, i))
9023           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
9024     }
9025   if (good)
9026     return 0;
9027
9028   return 1;
9029 }
9030
9031 /* Subroutine of resolve_overloaded_unification; does deduction for a single
9032    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
9033    different overloads deduce different arguments for a given parm.
9034    Returns 1 on success.  */
9035
9036 static int
9037 try_one_overload (tree tparms,
9038                   tree orig_targs,
9039                   tree targs, 
9040                   tree parm, 
9041                   tree arg, 
9042                   unification_kind_t strict,
9043                   int sub_strict)
9044 {
9045   int nargs;
9046   tree tempargs;
9047   int i;
9048
9049   /* [temp.deduct.type] A template-argument can be deduced from a pointer
9050      to function or pointer to member function argument if the set of
9051      overloaded functions does not contain function templates and at most
9052      one of a set of overloaded functions provides a unique match.
9053
9054      So if this is a template, just return success.  */
9055
9056   if (uses_template_parms (arg))
9057     return 1;
9058
9059   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9060
9061   /* We don't copy orig_targs for this because if we have already deduced
9062      some template args from previous args, unify would complain when we
9063      try to deduce a template parameter for the same argument, even though
9064      there isn't really a conflict.  */
9065   nargs = TREE_VEC_LENGTH (targs);
9066   tempargs = make_tree_vec (nargs);
9067
9068   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
9069     return 0;
9070
9071   /* First make sure we didn't deduce anything that conflicts with
9072      explicitly specified args.  */
9073   for (i = nargs; i--; )
9074     {
9075       tree elt = TREE_VEC_ELT (tempargs, i);
9076       tree oldelt = TREE_VEC_ELT (orig_targs, i);
9077
9078       if (elt == NULL_TREE)
9079         continue;
9080       else if (uses_template_parms (elt))
9081         {
9082           /* Since we're unifying against ourselves, we will fill in template
9083              args used in the function parm list with our own template parms.
9084              Discard them.  */
9085           TREE_VEC_ELT (tempargs, i) = NULL_TREE;
9086           continue;
9087         }
9088       else if (oldelt && ! template_args_equal (oldelt, elt))
9089         return 0;
9090     }
9091
9092   for (i = nargs; i--; )
9093     {
9094       tree elt = TREE_VEC_ELT (tempargs, i);
9095
9096       if (elt)
9097         TREE_VEC_ELT (targs, i) = elt;
9098     }
9099
9100   return 1;
9101 }
9102
9103 /* Verify that nondeduce template argument agrees with the type
9104    obtained from argument deduction.  Return nonzero if the
9105    verification fails.
9106
9107    For example:
9108
9109      struct A { typedef int X; };
9110      template <class T, class U> struct C {};
9111      template <class T> struct C<T, typename T::X> {};
9112
9113    Then with the instantiation `C<A, int>', we can deduce that
9114    `T' is `A' but unify () does not check whether `typename T::X'
9115    is `int'.  This function ensure that they agree.
9116
9117    TARGS, PARMS are the same as the arguments of unify.
9118    ARGS contains template arguments from all levels.  */
9119
9120 static int
9121 verify_class_unification (tree targs, tree parms, tree args)
9122 {
9123   parms = tsubst (parms, add_outermost_template_args (args, targs),
9124                   tf_none, NULL_TREE);
9125   if (parms == error_mark_node)
9126     return 1;
9127
9128   return !comp_template_args (parms, INNERMOST_TEMPLATE_ARGS (args));
9129 }
9130
9131 /* PARM is a template class (perhaps with unbound template
9132    parameters).  ARG is a fully instantiated type.  If ARG can be
9133    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
9134    TARGS are as for unify.  */
9135
9136 static tree
9137 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
9138 {
9139   tree copy_of_targs;
9140
9141   if (!CLASSTYPE_TEMPLATE_INFO (arg)
9142       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg)) 
9143           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
9144     return NULL_TREE;
9145
9146   /* We need to make a new template argument vector for the call to
9147      unify.  If we used TARGS, we'd clutter it up with the result of
9148      the attempted unification, even if this class didn't work out.
9149      We also don't want to commit ourselves to all the unifications
9150      we've already done, since unification is supposed to be done on
9151      an argument-by-argument basis.  In other words, consider the
9152      following pathological case:
9153
9154        template <int I, int J, int K>
9155        struct S {};
9156        
9157        template <int I, int J>
9158        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
9159        
9160        template <int I, int J, int K>
9161        void f(S<I, J, K>, S<I, I, I>);
9162        
9163        void g() {
9164          S<0, 0, 0> s0;
9165          S<0, 1, 2> s2;
9166        
9167          f(s0, s2);
9168        }
9169
9170      Now, by the time we consider the unification involving `s2', we
9171      already know that we must have `f<0, 0, 0>'.  But, even though
9172      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
9173      because there are two ways to unify base classes of S<0, 1, 2>
9174      with S<I, I, I>.  If we kept the already deduced knowledge, we
9175      would reject the possibility I=1.  */
9176   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
9177   
9178   /* If unification failed, we're done.  */
9179   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
9180              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
9181     return NULL_TREE;
9182
9183   return arg;
9184 }
9185
9186 /* Subroutine of get_template_base.  RVAL, if non-NULL, is a base we
9187    have already discovered to be satisfactory.  ARG_BINFO is the binfo
9188    for the base class of ARG that we are currently examining.  */
9189
9190 static tree
9191 get_template_base_recursive (tree tparms, 
9192                              tree targs, 
9193                              tree parm,
9194                              tree arg_binfo, 
9195                              tree rval, 
9196                              int flags)
9197 {
9198   tree binfos;
9199   int i, n_baselinks;
9200   tree arg = BINFO_TYPE (arg_binfo);
9201
9202   if (!(flags & GTB_IGNORE_TYPE))
9203     {
9204       tree r = try_class_unification (tparms, targs,
9205                                       parm, arg);
9206
9207       /* If there is more than one satisfactory baseclass, then:
9208
9209            [temp.deduct.call]
9210
9211            If they yield more than one possible deduced A, the type
9212            deduction fails.
9213
9214            applies.  */
9215       if (r && rval && !same_type_p (r, rval))
9216         return error_mark_node;
9217       else if (r)
9218         rval = r;
9219     }
9220
9221   binfos = BINFO_BASETYPES (arg_binfo);
9222   n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
9223
9224   /* Process base types.  */
9225   for (i = 0; i < n_baselinks; i++)
9226     {
9227       tree base_binfo = TREE_VEC_ELT (binfos, i);
9228       int this_virtual;
9229
9230       /* Skip this base, if we've already seen it.  */
9231       if (BINFO_MARKED (base_binfo))
9232         continue;
9233
9234       this_virtual = 
9235         (flags & GTB_VIA_VIRTUAL) || TREE_VIA_VIRTUAL (base_binfo);
9236       
9237       /* When searching for a non-virtual, we cannot mark virtually
9238          found binfos.  */
9239       if (! this_virtual)
9240         BINFO_MARKED (base_binfo) = 1;
9241       
9242       rval = get_template_base_recursive (tparms, targs,
9243                                           parm,
9244                                           base_binfo, 
9245                                           rval,
9246                                           GTB_VIA_VIRTUAL * this_virtual);
9247       
9248       /* If we discovered more than one matching base class, we can
9249          stop now.  */
9250       if (rval == error_mark_node)
9251         return error_mark_node;
9252     }
9253
9254   return rval;
9255 }
9256
9257 /* Given a template type PARM and a class type ARG, find the unique
9258    base type in ARG that is an instance of PARM.  We do not examine
9259    ARG itself; only its base-classes.  If there is no appropriate base
9260    class, return NULL_TREE.  If there is more than one, return
9261    error_mark_node.  PARM may be the type of a partial specialization,
9262    as well as a plain template type.  Used by unify.  */
9263
9264 static tree
9265 get_template_base (tree tparms, tree targs, tree parm, tree arg)
9266 {
9267   tree rval;
9268   tree arg_binfo;
9269
9270   my_friendly_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)), 92);
9271   
9272   arg_binfo = TYPE_BINFO (complete_type (arg));
9273   rval = get_template_base_recursive (tparms, targs,
9274                                       parm, arg_binfo, 
9275                                       NULL_TREE,
9276                                       GTB_IGNORE_TYPE);
9277
9278   /* Since get_template_base_recursive marks the bases classes, we
9279      must unmark them here.  */
9280   dfs_walk (arg_binfo, dfs_unmark, markedp, 0);
9281
9282   return rval;
9283 }
9284
9285 /* Returns the level of DECL, which declares a template parameter.  */
9286
9287 static int
9288 template_decl_level (tree decl)
9289 {
9290   switch (TREE_CODE (decl))
9291     {
9292     case TYPE_DECL:
9293     case TEMPLATE_DECL:
9294       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
9295
9296     case PARM_DECL:
9297       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
9298
9299     default:
9300       abort ();
9301       return 0;
9302     }
9303 }
9304
9305 /* Decide whether ARG can be unified with PARM, considering only the
9306    cv-qualifiers of each type, given STRICT as documented for unify.
9307    Returns nonzero iff the unification is OK on that basis.*/
9308
9309 static int
9310 check_cv_quals_for_unify (int strict, tree arg, tree parm)
9311 {
9312   int arg_quals = cp_type_quals (arg);
9313   int parm_quals = cp_type_quals (parm);
9314
9315   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM)
9316     {
9317       /* If the cvr quals of parm will not unify with ARG, they'll be
9318          ignored in instantiation, so we have to do the same here.  */
9319       if (TREE_CODE (arg) == REFERENCE_TYPE)
9320         parm_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
9321       if (!POINTER_TYPE_P (arg) &&
9322           TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
9323         parm_quals &= ~TYPE_QUAL_RESTRICT;
9324     }
9325   
9326   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9327       && (arg_quals & parm_quals) != parm_quals)
9328     return 0;
9329
9330   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
9331       && (parm_quals & arg_quals) != arg_quals)
9332     return 0;
9333
9334   return 1;
9335 }
9336
9337 /* Takes parameters as for type_unification.  Returns 0 if the
9338    type deduction succeeds, 1 otherwise.  The parameter STRICT is a
9339    bitwise or of the following flags:
9340
9341      UNIFY_ALLOW_NONE:
9342        Require an exact match between PARM and ARG.
9343      UNIFY_ALLOW_MORE_CV_QUAL:
9344        Allow the deduced ARG to be more cv-qualified (by qualification
9345        conversion) than ARG.
9346      UNIFY_ALLOW_LESS_CV_QUAL:
9347        Allow the deduced ARG to be less cv-qualified than ARG.
9348      UNIFY_ALLOW_DERIVED:
9349        Allow the deduced ARG to be a template base class of ARG,
9350        or a pointer to a template base class of the type pointed to by
9351        ARG.
9352      UNIFY_ALLOW_INTEGER:
9353        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
9354        case for more information. 
9355      UNIFY_ALLOW_OUTER_LEVEL:
9356        This is the outermost level of a deduction. Used to determine validity
9357        of qualification conversions. A valid qualification conversion must
9358        have const qualified pointers leading up to the inner type which
9359        requires additional CV quals, except at the outer level, where const
9360        is not required [conv.qual]. It would be normal to set this flag in
9361        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
9362      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
9363        This is the outermost level of a deduction, and PARM can be more CV
9364        qualified at this point.
9365      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
9366        This is the outermost level of a deduction, and PARM can be less CV
9367        qualified at this point.
9368      UNIFY_ALLOW_MAX_CORRECTION:
9369        This is an INTEGER_TYPE's maximum value.  Used if the range may
9370        have been derived from a size specification, such as an array size.
9371        If the size was given by a nontype template parameter N, the maximum
9372        value will have the form N-1.  The flag says that we can (and indeed
9373        must) unify N with (ARG + 1), an exception to the normal rules on
9374        folding PARM.  */
9375
9376 static int
9377 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
9378 {
9379   int idx;
9380   tree targ;
9381   tree tparm;
9382   int strict_in = strict;
9383
9384   /* I don't think this will do the right thing with respect to types.
9385      But the only case I've seen it in so far has been array bounds, where
9386      signedness is the only information lost, and I think that will be
9387      okay.  */
9388   while (TREE_CODE (parm) == NOP_EXPR)
9389     parm = TREE_OPERAND (parm, 0);
9390
9391   if (arg == error_mark_node)
9392     return 1;
9393   if (arg == unknown_type_node)
9394     /* We can't deduce anything from this, but we might get all the
9395        template args from other function args.  */
9396     return 0;
9397
9398   /* If PARM uses template parameters, then we can't bail out here,
9399      even if ARG == PARM, since we won't record unifications for the
9400      template parameters.  We might need them if we're trying to
9401      figure out which of two things is more specialized.  */
9402   if (arg == parm && !uses_template_parms (parm))
9403     return 0;
9404
9405   /* Immediately reject some pairs that won't unify because of
9406      cv-qualification mismatches.  */
9407   if (TREE_CODE (arg) == TREE_CODE (parm)
9408       && TYPE_P (arg)
9409       /* It is the elements of the array which hold the cv quals of an array
9410          type, and the elements might be template type parms. We'll check
9411          when we recurse.  */
9412       && TREE_CODE (arg) != ARRAY_TYPE
9413       /* We check the cv-qualifiers when unifying with template type
9414          parameters below.  We want to allow ARG `const T' to unify with
9415          PARM `T' for example, when computing which of two templates
9416          is more specialized, for example.  */
9417       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
9418       && !check_cv_quals_for_unify (strict_in, arg, parm))
9419     return 1;
9420
9421   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
9422       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
9423     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
9424   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
9425   strict &= ~UNIFY_ALLOW_DERIVED;
9426   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9427   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
9428   strict &= ~UNIFY_ALLOW_MAX_CORRECTION;
9429   
9430   switch (TREE_CODE (parm))
9431     {
9432     case TYPENAME_TYPE:
9433     case SCOPE_REF:
9434     case UNBOUND_CLASS_TEMPLATE:
9435       /* In a type which contains a nested-name-specifier, template
9436          argument values cannot be deduced for template parameters used
9437          within the nested-name-specifier.  */
9438       return 0;
9439
9440     case TEMPLATE_TYPE_PARM:
9441     case TEMPLATE_TEMPLATE_PARM:
9442     case BOUND_TEMPLATE_TEMPLATE_PARM:
9443       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9444
9445       if (TEMPLATE_TYPE_LEVEL (parm)
9446           != template_decl_level (tparm))
9447         /* The PARM is not one we're trying to unify.  Just check
9448            to see if it matches ARG.  */
9449         return (TREE_CODE (arg) == TREE_CODE (parm)
9450                 && same_type_p (parm, arg)) ? 0 : 1;
9451       idx = TEMPLATE_TYPE_IDX (parm);
9452       targ = TREE_VEC_ELT (targs, idx);
9453       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
9454
9455       /* Check for mixed types and values.  */
9456       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9457            && TREE_CODE (tparm) != TYPE_DECL)
9458           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM 
9459               && TREE_CODE (tparm) != TEMPLATE_DECL))
9460         return 1;
9461
9462       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9463         {
9464           /* ARG must be constructed from a template class or a template
9465              template parameter.  */
9466           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
9467               && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
9468             return 1;
9469
9470           {
9471             tree parmtmpl = TYPE_TI_TEMPLATE (parm);
9472             tree parmvec = TYPE_TI_ARGS (parm);
9473             tree argvec = TYPE_TI_ARGS (arg);
9474             tree argtmplvec
9475               = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
9476             int i;
9477
9478             /* The parameter and argument roles have to be switched here 
9479                in order to handle default arguments properly.  For example, 
9480                template<template <class> class TT> void f(TT<int>) 
9481                should be able to accept vector<int> which comes from 
9482                template <class T, class Allocator = allocator> 
9483                class vector.  */
9484
9485             if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
9486                 == error_mark_node)
9487               return 1;
9488           
9489             /* Deduce arguments T, i from TT<T> or TT<i>.  
9490                We check each element of PARMVEC and ARGVEC individually
9491                rather than the whole TREE_VEC since they can have
9492                different number of elements.  */
9493
9494             for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
9495               {
9496                 tree t = TREE_VEC_ELT (parmvec, i);
9497
9498                 if (unify (tparms, targs, t, 
9499                            TREE_VEC_ELT (argvec, i), 
9500                            UNIFY_ALLOW_NONE))
9501                   return 1;
9502               }
9503           }
9504           arg = TYPE_TI_TEMPLATE (arg);
9505
9506           /* Fall through to deduce template name.  */
9507         }
9508
9509       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9510           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9511         {
9512           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
9513
9514           /* Simple cases: Value already set, does match or doesn't.  */
9515           if (targ != NULL_TREE && template_args_equal (targ, arg))
9516             return 0;
9517           else if (targ)
9518             return 1;
9519         }
9520       else
9521         {
9522           /* If PARM is `const T' and ARG is only `int', we don't have
9523              a match unless we are allowing additional qualification.
9524              If ARG is `const int' and PARM is just `T' that's OK;
9525              that binds `const int' to `T'.  */
9526           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL, 
9527                                          arg, parm))
9528             return 1;
9529
9530           /* Consider the case where ARG is `const volatile int' and
9531              PARM is `const T'.  Then, T should be `volatile int'.  */
9532           arg = cp_build_qualified_type_real
9533             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
9534           if (arg == error_mark_node)
9535             return 1;
9536
9537           /* Simple cases: Value already set, does match or doesn't.  */
9538           if (targ != NULL_TREE && same_type_p (targ, arg))
9539             return 0;
9540           else if (targ)
9541             return 1;
9542
9543           /* Make sure that ARG is not a variable-sized array.  (Note
9544              that were talking about variable-sized arrays (like
9545              `int[n]'), rather than arrays of unknown size (like
9546              `int[]').)  We'll get very confused by such a type since
9547              the bound of the array will not be computable in an
9548              instantiation.  Besides, such types are not allowed in
9549              ISO C++, so we can do as we please here.  */
9550           if (variably_modified_type_p (arg))
9551             return 1;
9552         }
9553
9554       TREE_VEC_ELT (targs, idx) = arg;
9555       return 0;
9556
9557     case TEMPLATE_PARM_INDEX:
9558       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9559
9560       if (TEMPLATE_PARM_LEVEL (parm) 
9561           != template_decl_level (tparm))
9562         /* The PARM is not one we're trying to unify.  Just check
9563            to see if it matches ARG.  */
9564         return !(TREE_CODE (arg) == TREE_CODE (parm)
9565                  && cp_tree_equal (parm, arg));
9566
9567       idx = TEMPLATE_PARM_IDX (parm);
9568       targ = TREE_VEC_ELT (targs, idx);
9569
9570       if (targ)
9571         return !cp_tree_equal (targ, arg);
9572
9573       /* [temp.deduct.type] If, in the declaration of a function template
9574          with a non-type template-parameter, the non-type
9575          template-parameter is used in an expression in the function
9576          parameter-list and, if the corresponding template-argument is
9577          deduced, the template-argument type shall match the type of the
9578          template-parameter exactly, except that a template-argument
9579          deduced from an array bound may be of any integral type. 
9580          The non-type parameter might use already deduced type parameters.  */
9581       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
9582       if (!TREE_TYPE (arg))
9583         /* Template-parameter dependent expression.  Just accept it for now.
9584            It will later be processed in convert_template_argument.  */
9585         ;
9586       else if (same_type_p (TREE_TYPE (arg), tparm))
9587         /* OK */;
9588       else if ((strict & UNIFY_ALLOW_INTEGER)
9589                && (TREE_CODE (tparm) == INTEGER_TYPE
9590                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
9591         /* OK */;
9592       else if (uses_template_parms (tparm))
9593         /* We haven't deduced the type of this parameter yet.  Try again
9594            later.  */
9595         return 0;
9596       else
9597         return 1;
9598
9599       TREE_VEC_ELT (targs, idx) = arg;
9600       return 0;
9601
9602     case POINTER_TYPE:
9603       {
9604         if (TREE_CODE (arg) != POINTER_TYPE)
9605           return 1;
9606         
9607         /* [temp.deduct.call]
9608
9609            A can be another pointer or pointer to member type that can
9610            be converted to the deduced A via a qualification
9611            conversion (_conv.qual_).
9612
9613            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
9614            This will allow for additional cv-qualification of the
9615            pointed-to types if appropriate.  */
9616         
9617         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
9618           /* The derived-to-base conversion only persists through one
9619              level of pointers.  */
9620           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
9621
9622         return unify (tparms, targs, TREE_TYPE (parm), 
9623                       TREE_TYPE (arg), strict);
9624       }
9625
9626     case REFERENCE_TYPE:
9627       if (TREE_CODE (arg) != REFERENCE_TYPE)
9628         return 1;
9629       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
9630                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
9631
9632     case ARRAY_TYPE:
9633       if (TREE_CODE (arg) != ARRAY_TYPE)
9634         return 1;
9635       if ((TYPE_DOMAIN (parm) == NULL_TREE)
9636           != (TYPE_DOMAIN (arg) == NULL_TREE))
9637         return 1;
9638       if (TYPE_DOMAIN (parm) != NULL_TREE
9639           && unify (tparms, targs, TYPE_DOMAIN (parm),
9640                     TYPE_DOMAIN (arg), UNIFY_ALLOW_NONE) != 0)
9641         return 1;
9642       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
9643                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
9644
9645     case REAL_TYPE:
9646     case COMPLEX_TYPE:
9647     case VECTOR_TYPE:
9648     case INTEGER_TYPE:
9649     case BOOLEAN_TYPE:
9650     case VOID_TYPE:
9651       if (TREE_CODE (arg) != TREE_CODE (parm))
9652         return 1;
9653
9654       if (TREE_CODE (parm) == INTEGER_TYPE
9655           && TREE_CODE (TYPE_MAX_VALUE (parm)) != INTEGER_CST)
9656         {
9657           if (TYPE_MIN_VALUE (parm) && TYPE_MIN_VALUE (arg)
9658               && unify (tparms, targs, TYPE_MIN_VALUE (parm),
9659                         TYPE_MIN_VALUE (arg), UNIFY_ALLOW_INTEGER))
9660             return 1;
9661           if (TYPE_MAX_VALUE (parm) && TYPE_MAX_VALUE (arg)
9662               && unify (tparms, targs, TYPE_MAX_VALUE (parm),
9663                         TYPE_MAX_VALUE (arg),
9664                         UNIFY_ALLOW_INTEGER | UNIFY_ALLOW_MAX_CORRECTION))
9665             return 1;
9666         }
9667       /* We have already checked cv-qualification at the top of the
9668          function.  */
9669       else if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
9670         return 1;
9671
9672       /* As far as unification is concerned, this wins.  Later checks
9673          will invalidate it if necessary.  */
9674       return 0;
9675
9676       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
9677       /* Type INTEGER_CST can come from ordinary constant template args.  */
9678     case INTEGER_CST:
9679       while (TREE_CODE (arg) == NOP_EXPR)
9680         arg = TREE_OPERAND (arg, 0);
9681
9682       if (TREE_CODE (arg) != INTEGER_CST)
9683         return 1;
9684       return !tree_int_cst_equal (parm, arg);
9685
9686     case TREE_VEC:
9687       {
9688         int i;
9689         if (TREE_CODE (arg) != TREE_VEC)
9690           return 1;
9691         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
9692           return 1;
9693         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
9694           if (unify (tparms, targs,
9695                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
9696                      UNIFY_ALLOW_NONE))
9697             return 1;
9698         return 0;
9699       }
9700
9701     case RECORD_TYPE:
9702     case UNION_TYPE:
9703       if (TREE_CODE (arg) != TREE_CODE (parm))
9704         return 1;
9705   
9706       if (TYPE_PTRMEMFUNC_P (parm))
9707         {
9708           if (!TYPE_PTRMEMFUNC_P (arg))
9709             return 1;
9710
9711           return unify (tparms, targs, 
9712                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
9713                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
9714                         strict);
9715         }
9716
9717       if (CLASSTYPE_TEMPLATE_INFO (parm))
9718         {
9719           tree t = NULL_TREE;
9720
9721           if (strict_in & UNIFY_ALLOW_DERIVED)
9722             {
9723               /* First, we try to unify the PARM and ARG directly.  */
9724               t = try_class_unification (tparms, targs,
9725                                          parm, arg);
9726
9727               if (!t)
9728                 {
9729                   /* Fallback to the special case allowed in
9730                      [temp.deduct.call]:
9731                      
9732                        If P is a class, and P has the form
9733                        template-id, then A can be a derived class of
9734                        the deduced A.  Likewise, if P is a pointer to
9735                        a class of the form template-id, A can be a
9736                        pointer to a derived class pointed to by the
9737                        deduced A.  */
9738                   t = get_template_base (tparms, targs,
9739                                          parm, arg);
9740
9741                   if (! t || t == error_mark_node)
9742                     return 1;
9743                 }
9744             }
9745           else if (CLASSTYPE_TEMPLATE_INFO (arg) 
9746                    && (CLASSTYPE_TI_TEMPLATE (parm) 
9747                        == CLASSTYPE_TI_TEMPLATE (arg)))
9748             /* Perhaps PARM is something like S<U> and ARG is S<int>.
9749                Then, we should unify `int' and `U'.  */
9750             t = arg;
9751           else
9752             /* There's no chance of unification succeeding.  */
9753             return 1;
9754
9755           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
9756                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
9757         }
9758       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
9759         return 1;
9760       return 0;
9761
9762     case METHOD_TYPE:
9763     case FUNCTION_TYPE:
9764       if (TREE_CODE (arg) != TREE_CODE (parm))
9765         return 1;
9766
9767       if (unify (tparms, targs, TREE_TYPE (parm),
9768                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
9769         return 1;
9770       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
9771                                     TYPE_ARG_TYPES (arg), 1, 
9772                                     DEDUCE_EXACT, 0, -1);
9773
9774     case OFFSET_TYPE:
9775       if (TREE_CODE (arg) != OFFSET_TYPE)
9776         return 1;
9777       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
9778                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
9779         return 1;
9780       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
9781                     strict);
9782
9783     case CONST_DECL:
9784       if (DECL_TEMPLATE_PARM_P (parm))
9785         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
9786       if (arg != decl_constant_value (parm)) 
9787         return 1;
9788       return 0;
9789
9790     case TEMPLATE_DECL:
9791       /* Matched cases are handled by the ARG == PARM test above.  */
9792       return 1;
9793
9794     case MINUS_EXPR:
9795       if (tree_int_cst_equal (TREE_OPERAND (parm, 1), integer_one_node)
9796           && (strict_in & UNIFY_ALLOW_MAX_CORRECTION))
9797         {
9798           /* We handle this case specially, since it comes up with
9799              arrays.  In particular, something like:
9800
9801              template <int N> void f(int (&x)[N]);
9802
9803              Here, we are trying to unify the range type, which
9804              looks like [0 ... (N - 1)].  */
9805           tree t, t1, t2;
9806           t1 = TREE_OPERAND (parm, 0);
9807           t2 = TREE_OPERAND (parm, 1);
9808
9809           t = fold (build (PLUS_EXPR, integer_type_node, arg, t2));
9810
9811           return unify (tparms, targs, t1, t, strict);
9812         }
9813       /* else fall through */
9814
9815     default:
9816       if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (parm))))
9817         {
9818
9819           /* We're looking at an expression.  This can happen with
9820              something like: 
9821            
9822                template <int I>
9823                void foo(S<I>, S<I + 2>);
9824
9825              This is a "nondeduced context":
9826
9827                [deduct.type]
9828            
9829                The nondeduced contexts are:
9830
9831                --A type that is a template-id in which one or more of
9832                  the template-arguments is an expression that references
9833                  a template-parameter.  
9834
9835              In these cases, we assume deduction succeeded, but don't
9836              actually infer any unifications.  */
9837
9838           if (!uses_template_parms (parm)
9839               && !template_args_equal (parm, arg))
9840             return 1;
9841           else
9842             return 0;
9843         }
9844       else
9845         sorry ("use of `%s' in template type unification",
9846                tree_code_name [(int) TREE_CODE (parm)]);
9847
9848       return 1;
9849     }
9850 }
9851 \f
9852 /* Called if RESULT is explicitly instantiated, or is a member of an
9853    explicitly instantiated class, or if using -frepo and the
9854    instantiation of RESULT has been assigned to this file.  */
9855
9856 void
9857 mark_decl_instantiated (tree result, int extern_p)
9858 {
9859   /* We used to set this unconditionally; we moved that to
9860      do_decl_instantiation so it wouldn't get set on members of
9861      explicit class template instantiations.  But we still need to set
9862      it here for the 'extern template' case in order to suppress
9863      implicit instantiations.  */
9864   if (extern_p)
9865     SET_DECL_EXPLICIT_INSTANTIATION (result);
9866
9867   /* If this entity has already been written out, it's too late to
9868      make any modifications.  */
9869   if (TREE_ASM_WRITTEN (result))
9870     return;
9871
9872   if (TREE_CODE (result) != FUNCTION_DECL)
9873     /* The TREE_PUBLIC flag for function declarations will have been
9874        set correctly by tsubst.  */
9875     TREE_PUBLIC (result) = 1;
9876
9877   /* This might have been set by an earlier implicit instantiation.  */
9878   DECL_COMDAT (result) = 0;
9879
9880   if (! extern_p)
9881     {
9882       DECL_INTERFACE_KNOWN (result) = 1;
9883       DECL_NOT_REALLY_EXTERN (result) = 1;
9884
9885       /* Always make artificials weak.  */
9886       if (DECL_ARTIFICIAL (result) && flag_weak)
9887         comdat_linkage (result);
9888       /* For WIN32 we also want to put explicit instantiations in
9889          linkonce sections.  */
9890       else if (TREE_PUBLIC (result))
9891         maybe_make_one_only (result);
9892     }
9893
9894   if (TREE_CODE (result) == FUNCTION_DECL)
9895     defer_fn (result);
9896 }
9897
9898 /* Given two function templates PAT1 and PAT2, return:
9899
9900    DEDUCE should be DEDUCE_EXACT or DEDUCE_ORDER.
9901    
9902    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
9903    -1 if PAT2 is more specialized than PAT1.
9904    0 if neither is more specialized.
9905
9906    LEN is passed through to fn_type_unification.  */
9907    
9908 int
9909 more_specialized (tree pat1, tree pat2, int deduce, int len)
9910 {
9911   tree targs;
9912   int winner = 0;
9913
9914   targs = get_bindings_real (pat1, DECL_TEMPLATE_RESULT (pat2),
9915                              NULL_TREE, 0, deduce, len);
9916   if (targs)
9917     --winner;
9918
9919   targs = get_bindings_real (pat2, DECL_TEMPLATE_RESULT (pat1),
9920                              NULL_TREE, 0, deduce, len);
9921   if (targs)
9922     ++winner;
9923
9924   return winner;
9925 }
9926
9927 /* Given two class template specialization list nodes PAT1 and PAT2, return:
9928
9929    1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
9930    -1 if PAT2 is more specialized than PAT1.
9931    0 if neither is more specialized.
9932
9933    FULL_ARGS is the full set of template arguments that triggers this
9934    partial ordering.  */
9935    
9936 int
9937 more_specialized_class (tree pat1, tree pat2, tree full_args)
9938 {
9939   tree targs;
9940   int winner = 0;
9941
9942   targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
9943                               add_outermost_template_args (full_args, TREE_PURPOSE (pat2)));
9944   if (targs)
9945     --winner;
9946
9947   targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
9948                               add_outermost_template_args (full_args, TREE_PURPOSE (pat1)));
9949   if (targs)
9950     ++winner;
9951
9952   return winner;
9953 }
9954
9955 /* Return the template arguments that will produce the function signature
9956    DECL from the function template FN, with the explicit template
9957    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is 1, the return type must
9958    also match.  Return NULL_TREE if no satisfactory arguments could be
9959    found.  DEDUCE and LEN are passed through to fn_type_unification.  */
9960    
9961 static tree
9962 get_bindings_real (tree fn, 
9963                    tree decl, 
9964                    tree explicit_args, 
9965                    int check_rettype, 
9966                    int deduce, 
9967                    int len)
9968 {
9969   int ntparms = DECL_NTPARMS (fn);
9970   tree targs = make_tree_vec (ntparms);
9971   tree decl_type;
9972   tree decl_arg_types;
9973   int i;
9974
9975   /* Substitute the explicit template arguments into the type of DECL.
9976      The call to fn_type_unification will handle substitution into the
9977      FN.  */
9978   decl_type = TREE_TYPE (decl);
9979   if (explicit_args && uses_template_parms (decl_type))
9980     {
9981       tree tmpl;
9982       tree converted_args;
9983
9984       if (DECL_TEMPLATE_INFO (decl))
9985         tmpl = DECL_TI_TEMPLATE (decl);
9986       else
9987         /* We can get here for some invalid specializations.  */
9988         return NULL_TREE;
9989
9990       converted_args
9991         = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
9992                                   explicit_args, NULL_TREE,
9993                                   tf_none, /*require_all_arguments=*/0));
9994       if (converted_args == error_mark_node)
9995         return NULL_TREE;
9996       
9997       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE); 
9998       if (decl_type == error_mark_node)
9999         return NULL_TREE;
10000     }
10001
10002   decl_arg_types = TYPE_ARG_TYPES (decl_type);
10003   /* Never do unification on the 'this' parameter.  */
10004   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10005     decl_arg_types = TREE_CHAIN (decl_arg_types);
10006
10007   i = fn_type_unification (fn, explicit_args, targs, 
10008                            decl_arg_types,
10009                            (check_rettype || DECL_CONV_FN_P (fn)
10010                             ? TREE_TYPE (decl_type) : NULL_TREE),
10011                            deduce, len);
10012
10013   if (i != 0)
10014     return NULL_TREE;
10015
10016   return targs;
10017 }
10018
10019 /* For most uses, we want to check the return type.  */
10020
10021 static tree 
10022 get_bindings (tree fn, tree decl, tree explicit_args)
10023 {
10024   return get_bindings_real (fn, decl, explicit_args, 1, DEDUCE_EXACT, -1);
10025 }
10026
10027 /* But for resolve_overloaded_unification, we only care about the parameter
10028    types.  */
10029
10030 static tree
10031 get_bindings_overload (tree fn, tree decl, tree explicit_args)
10032 {
10033   return get_bindings_real (fn, decl, explicit_args, 0, DEDUCE_EXACT, -1);
10034 }
10035
10036 /* Return the innermost template arguments that, when applied to a
10037    template specialization whose innermost template parameters are
10038    TPARMS, and whose specialization arguments are PARMS, yield the
10039    ARGS.  
10040
10041    For example, suppose we have:
10042
10043      template <class T, class U> struct S {};
10044      template <class T> struct S<T*, int> {};
10045
10046    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
10047    {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
10048    int}.  The resulting vector will be {double}, indicating that `T'
10049    is bound to `double'.  */
10050
10051 static tree
10052 get_class_bindings (tree tparms, tree parms, tree args)
10053 {
10054   int i, ntparms = TREE_VEC_LENGTH (tparms);
10055   tree vec = make_tree_vec (ntparms);
10056
10057   if (unify (tparms, vec, parms, INNERMOST_TEMPLATE_ARGS (args),
10058              UNIFY_ALLOW_NONE))
10059     return NULL_TREE;
10060
10061   for (i =  0; i < ntparms; ++i)
10062     if (! TREE_VEC_ELT (vec, i))
10063       return NULL_TREE;
10064
10065   if (verify_class_unification (vec, parms, args))
10066     return NULL_TREE;
10067
10068   return vec;
10069 }
10070
10071 /* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
10072    Pick the most specialized template, and return the corresponding
10073    instantiation, or if there is no corresponding instantiation, the
10074    template itself.  If there is no most specialized template,
10075    error_mark_node is returned.  If there are no templates at all,
10076    NULL_TREE is returned.  */
10077
10078 tree
10079 most_specialized_instantiation (tree instantiations)
10080 {
10081   tree fn, champ;
10082   int fate;
10083
10084   if (!instantiations)
10085     return NULL_TREE;
10086
10087   champ = instantiations;
10088   for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
10089     {
10090       fate = more_specialized (TREE_VALUE (champ), TREE_VALUE (fn),
10091                                DEDUCE_EXACT, -1);
10092       if (fate == 1)
10093         ;
10094       else
10095         {
10096           if (fate == 0)
10097             {
10098               fn = TREE_CHAIN (fn);
10099               if (! fn)
10100                 return error_mark_node;
10101             }
10102           champ = fn;
10103         }
10104     }
10105
10106   for (fn = instantiations; fn && fn != champ; fn = TREE_CHAIN (fn))
10107     {
10108       fate = more_specialized (TREE_VALUE (champ), TREE_VALUE (fn),
10109                                DEDUCE_EXACT, -1);
10110       if (fate != 1)
10111         return error_mark_node;
10112     }
10113
10114   return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
10115 }
10116
10117 /* Return the most specialized of the list of templates in FNS that can
10118    produce an instantiation matching DECL, given the explicit template
10119    arguments EXPLICIT_ARGS.  */
10120
10121 static tree
10122 most_specialized (tree fns, tree decl, tree explicit_args)
10123 {
10124   tree candidates = NULL_TREE;
10125   tree fn, args;
10126
10127   for (fn = fns; fn; fn = TREE_CHAIN (fn))
10128     {
10129       tree candidate = TREE_VALUE (fn);
10130
10131       args = get_bindings (candidate, decl, explicit_args);
10132       if (args)
10133         candidates = tree_cons (NULL_TREE, candidate, candidates);
10134     }
10135
10136   return most_specialized_instantiation (candidates);
10137 }
10138
10139 /* If DECL is a specialization of some template, return the most
10140    general such template.  Otherwise, returns NULL_TREE.
10141
10142    For example, given:
10143
10144      template <class T> struct S { template <class U> void f(U); };
10145
10146    if TMPL is `template <class U> void S<int>::f(U)' this will return
10147    the full template.  This function will not trace past partial
10148    specializations, however.  For example, given in addition:
10149
10150      template <class T> struct S<T*> { template <class U> void f(U); };
10151
10152    if TMPL is `template <class U> void S<int*>::f(U)' this will return
10153    `template <class T> template <class U> S<T*>::f(U)'.  */
10154
10155 tree
10156 most_general_template (tree decl)
10157 {
10158   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
10159      an immediate specialization.  */
10160   if (TREE_CODE (decl) == FUNCTION_DECL)
10161     {
10162       if (DECL_TEMPLATE_INFO (decl)) {
10163         decl = DECL_TI_TEMPLATE (decl);
10164
10165         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
10166            template friend.  */
10167         if (TREE_CODE (decl) != TEMPLATE_DECL)
10168           return NULL_TREE;
10169       } else
10170         return NULL_TREE;
10171     }
10172
10173   /* Look for more and more general templates.  */
10174   while (DECL_TEMPLATE_INFO (decl))
10175     {
10176       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
10177          (See cp-tree.h for details.)  */
10178       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
10179         break;
10180
10181       if (CLASS_TYPE_P (TREE_TYPE (decl))
10182           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
10183         break;
10184
10185       /* Stop if we run into an explicitly specialized class template.  */
10186       if (!DECL_NAMESPACE_SCOPE_P (decl)
10187           && DECL_CONTEXT (decl)
10188           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
10189         break;
10190
10191       decl = DECL_TI_TEMPLATE (decl);
10192     }
10193
10194   return decl;
10195 }
10196
10197 /* Return the most specialized of the class template specializations
10198    of TMPL which can produce an instantiation matching ARGS, or
10199    error_mark_node if the choice is ambiguous.  */
10200
10201 static tree
10202 most_specialized_class (tree tmpl, tree args)
10203 {
10204   tree list = NULL_TREE;
10205   tree t;
10206   tree champ;
10207   int fate;
10208
10209   tmpl = most_general_template (tmpl);
10210   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
10211     {
10212       tree spec_args 
10213         = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
10214       if (spec_args)
10215         {
10216           list = tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
10217           TREE_TYPE (list) = TREE_TYPE (t);
10218         }
10219     }
10220
10221   if (! list)
10222     return NULL_TREE;
10223
10224   t = list;
10225   champ = t;
10226   t = TREE_CHAIN (t);
10227   for (; t; t = TREE_CHAIN (t))
10228     {
10229       fate = more_specialized_class (champ, t, args);
10230       if (fate == 1)
10231         ;
10232       else
10233         {
10234           if (fate == 0)
10235             {
10236               t = TREE_CHAIN (t);
10237               if (! t)
10238                 return error_mark_node;
10239             }
10240           champ = t;
10241         }
10242     }
10243
10244   for (t = list; t && t != champ; t = TREE_CHAIN (t))
10245     {
10246       fate = more_specialized_class (champ, t, args);
10247       if (fate != 1)
10248         return error_mark_node;
10249     }
10250
10251   return champ;
10252 }
10253
10254 /* Explicitly instantiate DECL.  */
10255
10256 void
10257 do_decl_instantiation (tree decl, tree storage)
10258 {
10259   tree result = NULL_TREE;
10260   int extern_p = 0;
10261
10262   if (!decl)
10263     /* An error occurred, for which grokdeclarator has already issued
10264        an appropriate message.  */
10265     return;
10266   else if (! DECL_LANG_SPECIFIC (decl))
10267     {
10268       error ("explicit instantiation of non-template `%#D'", decl);
10269       return;
10270     }
10271   else if (TREE_CODE (decl) == VAR_DECL)
10272     {
10273       /* There is an asymmetry here in the way VAR_DECLs and
10274          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
10275          the latter, the DECL we get back will be marked as a
10276          template instantiation, and the appropriate
10277          DECL_TEMPLATE_INFO will be set up.  This does not happen for
10278          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
10279          should handle VAR_DECLs as it currently handles
10280          FUNCTION_DECLs.  */
10281       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
10282       if (!result || TREE_CODE (result) != VAR_DECL)
10283         {
10284           error ("no matching template for `%D' found", decl);
10285           return;
10286         }
10287     }
10288   else if (TREE_CODE (decl) != FUNCTION_DECL)
10289     {
10290       error ("explicit instantiation of `%#D'", decl);
10291       return;
10292     }
10293   else
10294     result = decl;
10295
10296   /* Check for various error cases.  Note that if the explicit
10297      instantiation is valid the RESULT will currently be marked as an
10298      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
10299      until we get here.  */
10300
10301   if (DECL_TEMPLATE_SPECIALIZATION (result))
10302     {
10303       /* DR 259 [temp.spec].
10304
10305          Both an explicit instantiation and a declaration of an explicit
10306          specialization shall not appear in a program unless the explicit
10307          instantiation follows a declaration of the explicit specialization.
10308
10309          For a given set of template parameters, if an explicit
10310          instantiation of a template appears after a declaration of an
10311          explicit specialization for that template, the explicit
10312          instantiation has no effect.  */
10313       return;
10314     }
10315   else if (DECL_EXPLICIT_INSTANTIATION (result))
10316     {
10317       /* [temp.spec]
10318
10319          No program shall explicitly instantiate any template more
10320          than once.  
10321
10322          We check DECL_INTERFACE_KNOWN so as not to complain when the first
10323          instantiation was `extern' and the second is not, and EXTERN_P for
10324          the opposite case.  If -frepo, chances are we already got marked
10325          as an explicit instantiation because of the repo file.  */
10326       if (DECL_INTERFACE_KNOWN (result) && !extern_p && !flag_use_repository)
10327         pedwarn ("duplicate explicit instantiation of `%#D'", result);
10328
10329       /* If we've already instantiated the template, just return now.  */
10330       if (DECL_INTERFACE_KNOWN (result))
10331         return;
10332     }
10333   else if (!DECL_IMPLICIT_INSTANTIATION (result))
10334     {
10335       error ("no matching template for `%D' found", result);
10336       return;
10337     }
10338   else if (!DECL_TEMPLATE_INFO (result))
10339     {
10340       pedwarn ("explicit instantiation of non-template `%#D'", result);
10341       return;
10342     }
10343
10344   if (flag_external_templates)
10345     return;
10346
10347   if (storage == NULL_TREE)
10348     ;
10349   else if (storage == ridpointers[(int) RID_EXTERN])
10350     {
10351       if (pedantic && !in_system_header)
10352         pedwarn ("ISO C++ forbids the use of `extern' on explicit instantiations");
10353       extern_p = 1;
10354     }
10355   else
10356     error ("storage class `%D' applied to template instantiation",
10357               storage);
10358
10359   SET_DECL_EXPLICIT_INSTANTIATION (result);
10360   mark_decl_instantiated (result, extern_p);
10361   repo_template_instantiated (result, extern_p);
10362   if (! extern_p)
10363     instantiate_decl (result, /*defer_ok=*/1);
10364 }
10365
10366 void
10367 mark_class_instantiated (tree t, int extern_p)
10368 {
10369   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
10370   SET_CLASSTYPE_INTERFACE_KNOWN (t);
10371   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
10372   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
10373   if (! extern_p)
10374     {
10375       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
10376       rest_of_type_compilation (t, 1);
10377     }
10378 }     
10379
10380 /* Called from do_type_instantiation through binding_table_foreach to
10381    do recursive instantiation for the type bound in ENTRY.  */
10382 static void
10383 bt_instantiate_type_proc (binding_entry entry, void *data)
10384 {
10385   tree storage = *(tree *) data;
10386
10387   if (IS_AGGR_TYPE (entry->type)
10388       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
10389     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
10390 }
10391
10392 /* Perform an explicit instantiation of template class T.  STORAGE, if
10393    non-null, is the RID for extern, inline or static.  COMPLAIN is
10394    nonzero if this is called from the parser, zero if called recursively,
10395    since the standard is unclear (as detailed below).  */
10396  
10397 void
10398 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
10399 {
10400   int extern_p = 0;
10401   int nomem_p = 0;
10402   int static_p = 0;
10403
10404   if (TREE_CODE (t) == TYPE_DECL)
10405     t = TREE_TYPE (t);
10406
10407   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
10408     {
10409       error ("explicit instantiation of non-template type `%T'", t);
10410       return;
10411     }
10412
10413   complete_type (t);
10414
10415   /* With -fexternal-templates, explicit instantiations are treated the same
10416      as implicit ones.  */
10417   if (flag_external_templates)
10418     return;
10419
10420   if (!COMPLETE_TYPE_P (t))
10421     {
10422       if (complain & tf_error)
10423         error ("explicit instantiation of `%#T' before definition of template",
10424                   t);
10425       return;
10426     }
10427
10428   if (storage != NULL_TREE)
10429     {
10430       if (pedantic && !in_system_header)
10431         pedwarn("ISO C++ forbids the use of `%s' on explicit instantiations", 
10432                    IDENTIFIER_POINTER (storage));
10433
10434       if (storage == ridpointers[(int) RID_INLINE])
10435         nomem_p = 1;
10436       else if (storage == ridpointers[(int) RID_EXTERN])
10437         extern_p = 1;
10438       else if (storage == ridpointers[(int) RID_STATIC])
10439         static_p = 1;
10440       else
10441         {
10442           error ("storage class `%D' applied to template instantiation",
10443                     storage);
10444           extern_p = 0;
10445         }
10446     }
10447
10448   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10449     {
10450       /* DR 259 [temp.spec].
10451
10452          Both an explicit instantiation and a declaration of an explicit
10453          specialization shall not appear in a program unless the explicit
10454          instantiation follows a declaration of the explicit specialization.
10455
10456          For a given set of template parameters, if an explicit
10457          instantiation of a template appears after a declaration of an
10458          explicit specialization for that template, the explicit
10459          instantiation has no effect.  */
10460       return;
10461     }
10462   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
10463     {
10464       /* [temp.spec]
10465
10466          No program shall explicitly instantiate any template more
10467          than once.  
10468
10469          If CLASSTYPE_INTERFACE_ONLY, then the first explicit instantiation
10470          was `extern'.  If EXTERN_P then the second is.  If -frepo, chances
10471          are we already got marked as an explicit instantiation because of the
10472          repo file.  All these cases are OK.  */
10473       if (!CLASSTYPE_INTERFACE_ONLY (t) && !extern_p && !flag_use_repository
10474           && (complain & tf_error))
10475         pedwarn ("duplicate explicit instantiation of `%#T'", t);
10476       
10477       /* If we've already instantiated the template, just return now.  */
10478       if (!CLASSTYPE_INTERFACE_ONLY (t))
10479         return;
10480     }
10481
10482   mark_class_instantiated (t, extern_p);
10483   repo_template_instantiated (t, extern_p);
10484
10485   if (nomem_p)
10486     return;
10487
10488   {
10489     tree tmp;
10490
10491     /* In contrast to implicit instantiation, where only the
10492        declarations, and not the definitions, of members are
10493        instantiated, we have here:
10494
10495          [temp.explicit]
10496
10497          The explicit instantiation of a class template specialization
10498          implies the instantiation of all of its members not
10499          previously explicitly specialized in the translation unit
10500          containing the explicit instantiation.  
10501
10502        Of course, we can't instantiate member template classes, since
10503        we don't have any arguments for them.  Note that the standard
10504        is unclear on whether the instantiation of the members are
10505        *explicit* instantiations or not.  We choose to be generous,
10506        and not set DECL_EXPLICIT_INSTANTIATION.  Therefore, we allow
10507        the explicit instantiation of a class where some of the members
10508        have no definition in the current translation unit.  */
10509
10510     if (! static_p)
10511       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
10512         if (TREE_CODE (tmp) == FUNCTION_DECL
10513             && DECL_TEMPLATE_INSTANTIATION (tmp))
10514           {
10515             mark_decl_instantiated (tmp, extern_p);
10516             repo_template_instantiated (tmp, extern_p);
10517             if (! extern_p)
10518               instantiate_decl (tmp, /*defer_ok=*/1);
10519           }
10520
10521     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
10522       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
10523         {
10524           mark_decl_instantiated (tmp, extern_p);
10525           repo_template_instantiated (tmp, extern_p);
10526           if (! extern_p)
10527             instantiate_decl (tmp, /*defer_ok=*/1);
10528         }
10529
10530     if (CLASSTYPE_NESTED_UTDS (t))
10531       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
10532                              bt_instantiate_type_proc, &storage);
10533   }
10534 }
10535
10536 /* Given a function DECL, which is a specialization of TMPL, modify
10537    DECL to be a re-instantiation of TMPL with the same template
10538    arguments.  TMPL should be the template into which tsubst'ing
10539    should occur for DECL, not the most general template.
10540
10541    One reason for doing this is a scenario like this:
10542
10543      template <class T>
10544      void f(const T&, int i);
10545
10546      void g() { f(3, 7); }
10547
10548      template <class T>
10549      void f(const T& t, const int i) { }
10550
10551    Note that when the template is first instantiated, with
10552    instantiate_template, the resulting DECL will have no name for the
10553    first parameter, and the wrong type for the second.  So, when we go
10554    to instantiate the DECL, we regenerate it.  */
10555
10556 static void
10557 regenerate_decl_from_template (tree decl, tree tmpl)
10558 {
10559   /* The most general version of TMPL.  */
10560   tree gen_tmpl;
10561   /* The arguments used to instantiate DECL, from the most general
10562      template.  */
10563   tree args;
10564   tree code_pattern;
10565   tree new_decl;
10566   bool unregistered;
10567
10568   args = DECL_TI_ARGS (decl);
10569   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
10570
10571   /* Unregister the specialization so that when we tsubst we will not
10572      just return DECL.  We don't have to unregister DECL from TMPL
10573      because if would only be registered there if it were a partial
10574      instantiation of a specialization, which it isn't: it's a full
10575      instantiation.  */
10576   gen_tmpl = most_general_template (tmpl);
10577   unregistered = reregister_specialization (decl, gen_tmpl,
10578                                             /*new_spec=*/NULL_TREE);
10579
10580   /* If the DECL was not unregistered then something peculiar is
10581      happening: we created a specialization but did not call
10582      register_specialization for it.  */
10583   my_friendly_assert (unregistered, 0);
10584
10585   /* Make sure that we can see identifiers, and compute access
10586      correctly.  */
10587   push_access_scope (decl);
10588
10589   /* Do the substitution to get the new declaration.  */
10590   new_decl = tsubst (code_pattern, args, tf_error, NULL_TREE);
10591
10592   if (TREE_CODE (decl) == VAR_DECL)
10593     {
10594       /* Set up DECL_INITIAL, since tsubst doesn't.  */
10595       if (!DECL_INITIALIZED_IN_CLASS_P (decl))
10596         DECL_INITIAL (new_decl) = 
10597           tsubst_expr (DECL_INITIAL (code_pattern), args, 
10598                        tf_error, DECL_TI_TEMPLATE (decl));
10599     }
10600   else if (TREE_CODE (decl) == FUNCTION_DECL)
10601     {
10602       /* Convince duplicate_decls to use the DECL_ARGUMENTS from the
10603          new decl.  */ 
10604       DECL_INITIAL (new_decl) = error_mark_node;
10605       /* And don't complain about a duplicate definition.  */
10606       DECL_INITIAL (decl) = NULL_TREE;
10607     }
10608
10609   pop_access_scope (decl);
10610
10611   /* The immediate parent of the new template is still whatever it was
10612      before, even though tsubst sets DECL_TI_TEMPLATE up as the most
10613      general template.  We also reset the DECL_ASSEMBLER_NAME since
10614      tsubst always calculates the name as if the function in question
10615      were really a template instance, and sometimes, with friend
10616      functions, this is not so.  See tsubst_friend_function for
10617      details.  */
10618   DECL_TI_TEMPLATE (new_decl) = DECL_TI_TEMPLATE (decl);
10619   COPY_DECL_ASSEMBLER_NAME (decl, new_decl);
10620   COPY_DECL_RTL (decl, new_decl);
10621   DECL_USE_TEMPLATE (new_decl) = DECL_USE_TEMPLATE (decl);
10622
10623   /* Call duplicate decls to merge the old and new declarations.  */
10624   duplicate_decls (new_decl, decl);
10625
10626   /* Now, re-register the specialization.  */
10627   register_specialization (decl, gen_tmpl, args);
10628 }
10629
10630 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
10631    substituted to get DECL.  */
10632
10633 tree
10634 template_for_substitution (tree decl)
10635 {
10636   tree tmpl = DECL_TI_TEMPLATE (decl);
10637
10638   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
10639      for the instantiation.  This is not always the most general
10640      template.  Consider, for example:
10641
10642         template <class T>
10643         struct S { template <class U> void f();
10644                    template <> void f<int>(); };
10645
10646      and an instantiation of S<double>::f<int>.  We want TD to be the
10647      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
10648   while (/* An instantiation cannot have a definition, so we need a
10649             more general template.  */
10650          DECL_TEMPLATE_INSTANTIATION (tmpl)
10651            /* We must also deal with friend templates.  Given:
10652
10653                 template <class T> struct S { 
10654                   template <class U> friend void f() {};
10655                 };
10656
10657               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
10658               so far as the language is concerned, but that's still
10659               where we get the pattern for the instantiation from.  On
10660               other hand, if the definition comes outside the class, say:
10661
10662                 template <class T> struct S { 
10663                   template <class U> friend void f();
10664                 };
10665                 template <class U> friend void f() {}
10666
10667               we don't need to look any further.  That's what the check for
10668               DECL_INITIAL is for.  */
10669           || (TREE_CODE (decl) == FUNCTION_DECL
10670               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
10671               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
10672     {
10673       /* The present template, TD, should not be a definition.  If it
10674          were a definition, we should be using it!  Note that we
10675          cannot restructure the loop to just keep going until we find
10676          a template with a definition, since that might go too far if
10677          a specialization was declared, but not defined.  */
10678       my_friendly_assert (!(TREE_CODE (decl) == VAR_DECL
10679                             && !DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl))), 
10680                           0); 
10681       
10682       /* Fetch the more general template.  */
10683       tmpl = DECL_TI_TEMPLATE (tmpl);
10684     }
10685
10686   return tmpl;
10687 }
10688
10689 /* Produce the definition of D, a _DECL generated from a template.  If
10690    DEFER_OK is nonzero, then we don't have to actually do the
10691    instantiation now; we just have to do it sometime.  */
10692
10693 tree
10694 instantiate_decl (tree d, int defer_ok)
10695 {
10696   tree tmpl = DECL_TI_TEMPLATE (d);
10697   tree gen_args;
10698   tree args;
10699   tree td;
10700   tree code_pattern;
10701   tree spec;
10702   tree gen_tmpl;
10703   int pattern_defined;
10704   int need_push;
10705   location_t saved_loc = input_location;
10706   
10707   /* This function should only be used to instantiate templates for
10708      functions and static member variables.  */
10709   my_friendly_assert (TREE_CODE (d) == FUNCTION_DECL
10710                       || TREE_CODE (d) == VAR_DECL, 0);
10711
10712   /* Variables are never deferred; if instantiation is required, they
10713      are instantiated right away.  That allows for better code in the
10714      case that an expression refers to the value of the variable --
10715      if the variable has a constant value the referring expression can
10716      take advantage of that fact.  */
10717   if (TREE_CODE (d) == VAR_DECL)
10718     defer_ok = 0;
10719
10720   /* Don't instantiate cloned functions.  Instead, instantiate the
10721      functions they cloned.  */
10722   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
10723     d = DECL_CLONED_FUNCTION (d);
10724
10725   if (DECL_TEMPLATE_INSTANTIATED (d))
10726     /* D has already been instantiated.  It might seem reasonable to
10727        check whether or not D is an explicit instantiation, and, if so,
10728        stop here.  But when an explicit instantiation is deferred
10729        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
10730        is set, even though we still need to do the instantiation.  */
10731     return d;
10732
10733   /* If we already have a specialization of this declaration, then
10734      there's no reason to instantiate it.  Note that
10735      retrieve_specialization gives us both instantiations and
10736      specializations, so we must explicitly check
10737      DECL_TEMPLATE_SPECIALIZATION.  */
10738   gen_tmpl = most_general_template (tmpl);
10739   gen_args = DECL_TI_ARGS (d);
10740   spec = retrieve_specialization (gen_tmpl, gen_args);
10741   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
10742     return spec;
10743
10744   /* This needs to happen before any tsubsting.  */
10745   if (! push_tinst_level (d))
10746     return d;
10747
10748   timevar_push (TV_PARSE);
10749
10750   /* We may be in the middle of deferred access check.  Disable
10751      it now.  */
10752   push_deferring_access_checks (dk_no_deferred);
10753
10754   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
10755      for the instantiation.  */
10756   td = template_for_substitution (d);
10757   code_pattern = DECL_TEMPLATE_RESULT (td);
10758
10759   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
10760       || DECL_TEMPLATE_SPECIALIZATION (td))
10761     /* In the case of a friend template whose definition is provided
10762        outside the class, we may have too many arguments.  Drop the
10763        ones we don't need.  The same is true for specializations.  */
10764     args = get_innermost_template_args
10765       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
10766   else
10767     args = gen_args;
10768
10769   if (TREE_CODE (d) == FUNCTION_DECL)
10770     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
10771   else
10772     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
10773
10774   input_location = DECL_SOURCE_LOCATION (d);
10775
10776   if (pattern_defined)
10777     {
10778       /* Let the repository code that this template definition is
10779          available.
10780
10781          The repository doesn't need to know about cloned functions
10782          because they never actually show up in the object file.  It
10783          does need to know about the clones; those are the symbols
10784          that the linker will be emitting error messages about.  */
10785       if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (d)
10786           || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (d))
10787         {
10788           tree t;
10789
10790           for (t = TREE_CHAIN (d);
10791                t && DECL_CLONED_FUNCTION_P (t); 
10792                t = TREE_CHAIN (t))
10793             repo_template_used (t);
10794         }
10795       else
10796         repo_template_used (d);
10797
10798       if (flag_external_templates && ! DECL_INTERFACE_KNOWN (d))
10799         {
10800           if (flag_alt_external_templates)
10801             {
10802               if (interface_unknown)
10803                 warn_if_unknown_interface (d);
10804             }
10805           else if (DECL_INTERFACE_KNOWN (code_pattern))
10806             {
10807               DECL_INTERFACE_KNOWN (d) = 1;
10808               DECL_NOT_REALLY_EXTERN (d) = ! DECL_EXTERNAL (code_pattern);
10809             }
10810           else
10811             warn_if_unknown_interface (code_pattern);
10812         }
10813
10814       if (at_eof)
10815         import_export_decl (d);
10816     }
10817
10818   if (!defer_ok)
10819     {
10820       /* Recheck the substitutions to obtain any warning messages
10821          about ignoring cv qualifiers.  */
10822       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
10823       tree type = TREE_TYPE (gen);
10824
10825       /* Make sure that we can see identifiers, and compute access
10826          correctly.  D is already the target FUNCTION_DECL with the
10827          right context.  */
10828       push_access_scope (d);
10829
10830       if (TREE_CODE (gen) == FUNCTION_DECL)
10831         {
10832           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_error | tf_warning, d);
10833           tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
10834                   tf_error | tf_warning, d);
10835           /* Don't simply tsubst the function type, as that will give
10836              duplicate warnings about poor parameter qualifications.
10837              The function arguments are the same as the decl_arguments
10838              without the top level cv qualifiers.  */
10839           type = TREE_TYPE (type);
10840         }
10841       tsubst (type, gen_args, tf_error | tf_warning, d);
10842
10843       pop_access_scope (d);
10844     }
10845   
10846   if (TREE_CODE (d) == VAR_DECL && DECL_INITIALIZED_IN_CLASS_P (d)
10847       && DECL_INITIAL (d) == NULL_TREE)
10848     /* We should have set up DECL_INITIAL in instantiate_class_template.  */
10849     abort ();
10850   /* Reject all external templates except inline functions.  */
10851   else if (DECL_INTERFACE_KNOWN (d)
10852            && ! DECL_NOT_REALLY_EXTERN (d)
10853            && ! (TREE_CODE (d) == FUNCTION_DECL 
10854                  && DECL_INLINE (d)))
10855     goto out;
10856   /* Defer all other templates, unless we have been explicitly
10857      forbidden from doing so.  We restore the source position here
10858      because it's used by add_pending_template.  */
10859   else if (! pattern_defined || defer_ok)
10860     {
10861       input_location = saved_loc;
10862
10863       if (at_eof && !pattern_defined 
10864           && DECL_EXPLICIT_INSTANTIATION (d))
10865         /* [temp.explicit]
10866
10867            The definition of a non-exported function template, a
10868            non-exported member function template, or a non-exported
10869            member function or static data member of a class template
10870            shall be present in every translation unit in which it is
10871            explicitly instantiated.  */
10872         pedwarn
10873           ("explicit instantiation of `%D' but no definition available", d);
10874
10875       add_pending_template (d);
10876       goto out;
10877     }
10878
10879   need_push = !global_bindings_p ();
10880   if (need_push)
10881     push_to_top_level ();
10882
10883   /* Regenerate the declaration in case the template has been modified
10884      by a subsequent redeclaration.  */
10885   regenerate_decl_from_template (d, td);
10886   
10887   /* We already set the file and line above.  Reset them now in case
10888      they changed as a result of calling
10889      regenerate_decl_from_template.  */
10890   input_location = DECL_SOURCE_LOCATION (d);
10891
10892   if (TREE_CODE (d) == VAR_DECL)
10893     {
10894       /* Clear out DECL_RTL; whatever was there before may not be right
10895          since we've reset the type of the declaration.  */
10896       SET_DECL_RTL (d, NULL_RTX);
10897
10898       DECL_IN_AGGR_P (d) = 0;
10899       import_export_decl (d);
10900       DECL_EXTERNAL (d) = ! DECL_NOT_REALLY_EXTERN (d);
10901
10902       if (DECL_EXTERNAL (d))
10903         {
10904           /* The fact that this code is executing indicates that:
10905              
10906              (1) D is a template static data member, for which a
10907                  definition is available.
10908
10909              (2) An implicit or explicit instantiation has occurred.
10910
10911              (3) We are not going to emit a definition of the static
10912                  data member at this time.
10913
10914              This situation is peculiar, but it occurs on platforms
10915              without weak symbols when performing an implicit
10916              instantiation.  There, we cannot implicitly instantiate a
10917              defined static data member in more than one translation
10918              unit, so import_export_decl marks the declaration as
10919              external; we must rely on explicit instantiation.  */
10920         }
10921       else
10922         {
10923           /* Mark D as instantiated so that recursive calls to
10924              instantiate_decl do not try to instantiate it again.  */
10925           DECL_TEMPLATE_INSTANTIATED (d) = 1;
10926           cp_finish_decl (d, 
10927                           (!DECL_INITIALIZED_IN_CLASS_P (d) 
10928                            ? DECL_INITIAL (d) : NULL_TREE),
10929                           NULL_TREE, 0);
10930         }
10931     }
10932   else if (TREE_CODE (d) == FUNCTION_DECL)
10933     {
10934       htab_t saved_local_specializations;
10935       tree subst_decl;
10936       tree tmpl_parm;
10937       tree spec_parm;
10938
10939       /* Mark D as instantiated so that recursive calls to
10940          instantiate_decl do not try to instantiate it again.  */
10941       DECL_TEMPLATE_INSTANTIATED (d) = 1;
10942
10943       /* Save away the current list, in case we are instantiating one
10944          template from within the body of another.  */
10945       saved_local_specializations = local_specializations;
10946
10947       /* Set up the list of local specializations.  */
10948       local_specializations = htab_create (37, 
10949                                            hash_local_specialization,
10950                                            eq_local_specializations,
10951                                            NULL);
10952
10953       /* Set up context.  */
10954       import_export_decl (d);
10955       start_function (NULL_TREE, d, NULL_TREE, SF_PRE_PARSED);
10956
10957       /* Create substitution entries for the parameters.  */
10958       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
10959       tmpl_parm = DECL_ARGUMENTS (subst_decl);
10960       spec_parm = DECL_ARGUMENTS (d);
10961       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
10962         {
10963           register_local_specialization (spec_parm, tmpl_parm);
10964           spec_parm = skip_artificial_parms_for (d, spec_parm);
10965           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
10966         }
10967       while (tmpl_parm)
10968         {
10969           register_local_specialization (spec_parm, tmpl_parm);
10970           tmpl_parm = TREE_CHAIN (tmpl_parm);
10971           spec_parm = TREE_CHAIN (spec_parm);
10972         }
10973       my_friendly_assert (!spec_parm, 20020813);
10974
10975       /* Substitute into the body of the function.  */
10976       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
10977                    tf_error | tf_warning, tmpl);
10978
10979       /* We don't need the local specializations any more.  */
10980       htab_delete (local_specializations);
10981       local_specializations = saved_local_specializations;
10982
10983       /* Finish the function.  */
10984       d = finish_function (0);
10985       expand_or_defer_fn (d);
10986     }
10987
10988   /* We're not deferring instantiation any more.  */
10989   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
10990
10991   if (need_push)
10992     pop_from_top_level ();
10993
10994 out:
10995   input_location = saved_loc;
10996   pop_deferring_access_checks ();
10997   pop_tinst_level ();
10998
10999   timevar_pop (TV_PARSE);
11000
11001   return d;
11002 }
11003
11004 /* Run through the list of templates that we wish we could
11005    instantiate, and instantiate any we can.  */
11006
11007 int
11008 instantiate_pending_templates (void)
11009 {
11010   tree *t;
11011   tree last = NULL_TREE;
11012   int instantiated_something = 0;
11013   int reconsider;
11014   
11015   do 
11016     {
11017       reconsider = 0;
11018
11019       t = &pending_templates;
11020       while (*t)
11021         {
11022           tree instantiation = TREE_VALUE (*t);
11023
11024           reopen_tinst_level (TREE_PURPOSE (*t));
11025
11026           if (TYPE_P (instantiation))
11027             {
11028               tree fn;
11029
11030               if (!COMPLETE_TYPE_P (instantiation))
11031                 {
11032                   instantiate_class_template (instantiation);
11033                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
11034                     for (fn = TYPE_METHODS (instantiation); 
11035                          fn;
11036                          fn = TREE_CHAIN (fn))
11037                       if (! DECL_ARTIFICIAL (fn))
11038                         instantiate_decl (fn, /*defer_ok=*/0);
11039                   if (COMPLETE_TYPE_P (instantiation))
11040                     {
11041                       instantiated_something = 1;
11042                       reconsider = 1;
11043                     }
11044                 }
11045
11046               if (COMPLETE_TYPE_P (instantiation))
11047                 /* If INSTANTIATION has been instantiated, then we don't
11048                    need to consider it again in the future.  */
11049                 *t = TREE_CHAIN (*t);
11050               else
11051                 {
11052                   last = *t;
11053                   t = &TREE_CHAIN (*t);
11054                 }
11055             }
11056           else
11057             {
11058               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
11059                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
11060                 {
11061                   instantiation = instantiate_decl (instantiation,
11062                                                     /*defer_ok=*/0);
11063                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
11064                     {
11065                       instantiated_something = 1;
11066                       reconsider = 1;
11067                     }
11068                 }
11069
11070               if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
11071                   || DECL_TEMPLATE_INSTANTIATED (instantiation))
11072                 /* If INSTANTIATION has been instantiated, then we don't
11073                    need to consider it again in the future.  */
11074                 *t = TREE_CHAIN (*t);
11075               else
11076                 {
11077                   last = *t;
11078                   t = &TREE_CHAIN (*t);
11079                 }
11080             }
11081           tinst_depth = 0;
11082           current_tinst_level = NULL_TREE;
11083         }
11084       last_pending_template = last;
11085     } 
11086   while (reconsider);
11087
11088   return instantiated_something;
11089 }
11090
11091 /* Substitute ARGVEC into T, which is a list of initializers for
11092    either base class or a non-static data member.  The TREE_PURPOSEs
11093    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
11094    instantiate_decl.  */
11095
11096 static tree
11097 tsubst_initializer_list (tree t, tree argvec)
11098 {
11099   tree inits = NULL_TREE;
11100
11101   for (; t; t = TREE_CHAIN (t))
11102     {
11103       tree decl;
11104       tree init;
11105       tree val;
11106
11107       decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_error | tf_warning,
11108                           NULL_TREE);
11109       decl = expand_member_init (decl);
11110       if (decl && !DECL_P (decl))
11111         in_base_initializer = 1;
11112       
11113       init = tsubst_expr (TREE_VALUE (t), argvec, tf_error | tf_warning,
11114                           NULL_TREE);
11115       if (!init)
11116         ;
11117       else if (TREE_CODE (init) == TREE_LIST)
11118         for (val = init; val; val = TREE_CHAIN (val))
11119           TREE_VALUE (val) = convert_from_reference (TREE_VALUE (val));
11120       else if (init != void_type_node)
11121         init = convert_from_reference (init);
11122
11123       in_base_initializer = 0;
11124
11125       if (decl)
11126         {
11127           init = build_tree_list (decl, init);
11128           TREE_CHAIN (init) = inits;
11129           inits = init;
11130         }
11131     }
11132   return inits;
11133 }
11134
11135 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
11136
11137 static void
11138 set_current_access_from_decl (tree decl)
11139 {
11140   if (TREE_PRIVATE (decl))
11141     current_access_specifier = access_private_node;
11142   else if (TREE_PROTECTED (decl))
11143     current_access_specifier = access_protected_node;
11144   else
11145     current_access_specifier = access_public_node;
11146 }
11147
11148 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
11149    is the instantiation (which should have been created with
11150    start_enum) and ARGS are the template arguments to use.  */
11151
11152 static void
11153 tsubst_enum (tree tag, tree newtag, tree args)
11154 {
11155   tree e;
11156
11157   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
11158     {
11159       tree value;
11160       tree decl;
11161
11162       decl = TREE_VALUE (e);
11163       /* Note that in a template enum, the TREE_VALUE is the
11164          CONST_DECL, not the corresponding INTEGER_CST.  */
11165       value = tsubst_expr (DECL_INITIAL (decl), 
11166                            args, tf_error | tf_warning,
11167                            NULL_TREE);
11168
11169       /* Give this enumeration constant the correct access.  */
11170       set_current_access_from_decl (decl);
11171
11172       /* Actually build the enumerator itself.  */
11173       build_enumerator (DECL_NAME (decl), value, newtag); 
11174     }
11175
11176   finish_enum (newtag);
11177   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
11178     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
11179 }
11180
11181 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
11182    its type -- but without substituting the innermost set of template
11183    arguments.  So, innermost set of template parameters will appear in
11184    the type.  */
11185
11186 tree 
11187 get_mostly_instantiated_function_type (tree decl)
11188 {
11189   tree fn_type;
11190   tree tmpl;
11191   tree targs;
11192   tree tparms;
11193   int parm_depth;
11194
11195   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11196   targs = DECL_TI_ARGS (decl);
11197   tparms = DECL_TEMPLATE_PARMS (tmpl);
11198   parm_depth = TMPL_PARMS_DEPTH (tparms);
11199
11200   /* There should be as many levels of arguments as there are levels
11201      of parameters.  */
11202   my_friendly_assert (parm_depth == TMPL_ARGS_DEPTH (targs), 0);
11203
11204   fn_type = TREE_TYPE (tmpl);
11205
11206   if (parm_depth == 1)
11207     /* No substitution is necessary.  */
11208     ;
11209   else
11210     {
11211       int i;
11212       tree partial_args;
11213
11214       /* Replace the innermost level of the TARGS with NULL_TREEs to
11215          let tsubst know not to substitute for those parameters.  */
11216       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
11217       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
11218         SET_TMPL_ARGS_LEVEL (partial_args, i,
11219                              TMPL_ARGS_LEVEL (targs, i));
11220       SET_TMPL_ARGS_LEVEL (partial_args,
11221                            TMPL_ARGS_DEPTH (targs),
11222                            make_tree_vec (DECL_NTPARMS (tmpl)));
11223
11224       /* Make sure that we can see identifiers, and compute access
11225          correctly.  We can just use the context of DECL for the
11226          partial substitution here.  It depends only on outer template
11227          parameters, regardless of whether the innermost level is
11228          specialized or not.  */
11229       push_access_scope (decl);
11230
11231       /* Now, do the (partial) substitution to figure out the
11232          appropriate function type.  */
11233       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
11234
11235       /* Substitute into the template parameters to obtain the real
11236          innermost set of parameters.  This step is important if the
11237          innermost set of template parameters contains value
11238          parameters whose types depend on outer template parameters.  */
11239       TREE_VEC_LENGTH (partial_args)--;
11240       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
11241
11242       pop_access_scope (decl);
11243     }
11244
11245   return fn_type;
11246 }
11247
11248 /* Return truthvalue if we're processing a template different from
11249    the last one involved in diagnostics.  */
11250 int
11251 problematic_instantiation_changed (void)
11252 {
11253   return last_template_error_tick != tinst_level_tick;
11254 }
11255
11256 /* Remember current template involved in diagnostics.  */
11257 void
11258 record_last_problematic_instantiation (void)
11259 {
11260   last_template_error_tick = tinst_level_tick;
11261 }
11262
11263 tree
11264 current_instantiation (void)
11265 {
11266   return current_tinst_level;
11267 }
11268
11269 /* [temp.param] Check that template non-type parm TYPE is of an allowable
11270    type. Return zero for ok, nonzero for disallowed. Issue error and
11271    warning messages under control of COMPLAIN.  */
11272
11273 static int
11274 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
11275 {
11276   if (INTEGRAL_TYPE_P (type))
11277     return 0;
11278   else if (POINTER_TYPE_P (type))
11279     return 0;
11280   else if (TYPE_PTR_TO_MEMBER_P (type))
11281     return 0;
11282   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11283     return 0;
11284   else if (TREE_CODE (type) == TYPENAME_TYPE)
11285     return 0;
11286            
11287   if (complain & tf_error)
11288     error ("`%#T' is not a valid type for a template constant parameter",
11289               type);
11290   return 1;
11291 }
11292
11293 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
11294    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
11295
11296 static bool
11297 dependent_type_p_r (tree type)
11298 {
11299   tree scope;
11300
11301   /* [temp.dep.type]
11302
11303      A type is dependent if it is:
11304
11305      -- a template parameter.  */
11306   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11307     return true;
11308   /* -- a qualified-id with a nested-name-specifier which contains a
11309         class-name that names a dependent type or whose unqualified-id
11310         names a dependent type.  */
11311   if (TREE_CODE (type) == TYPENAME_TYPE)
11312     return true;
11313   /* -- a cv-qualified type where the cv-unqualified type is
11314         dependent.  */
11315   type = TYPE_MAIN_VARIANT (type);
11316   /* -- a compound type constructed from any dependent type.  */
11317   if (TYPE_PTR_TO_MEMBER_P (type))
11318     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
11319             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE 
11320                                            (type)));
11321   else if (TREE_CODE (type) == POINTER_TYPE
11322            || TREE_CODE (type) == REFERENCE_TYPE)
11323     return dependent_type_p (TREE_TYPE (type));
11324   else if (TREE_CODE (type) == FUNCTION_TYPE
11325            || TREE_CODE (type) == METHOD_TYPE)
11326     {
11327       tree arg_type;
11328
11329       if (dependent_type_p (TREE_TYPE (type)))
11330         return true;
11331       for (arg_type = TYPE_ARG_TYPES (type); 
11332            arg_type; 
11333            arg_type = TREE_CHAIN (arg_type))
11334         if (dependent_type_p (TREE_VALUE (arg_type)))
11335           return true;
11336       return false;
11337     }
11338   /* -- an array type constructed from any dependent type or whose
11339         size is specified by a constant expression that is
11340         value-dependent.  */
11341   if (TREE_CODE (type) == ARRAY_TYPE)
11342     {
11343       if (TYPE_DOMAIN (type)
11344           && ((value_dependent_expression_p 
11345                (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
11346               || (type_dependent_expression_p
11347                   (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
11348         return true;
11349       return dependent_type_p (TREE_TYPE (type));
11350     }
11351   /* -- a template-id in which either the template name is a template
11352         parameter or any of the template arguments is a dependent type or
11353         an expression that is type-dependent or value-dependent.  
11354
11355      This language seems somewhat confused; for example, it does not
11356      discuss template template arguments.  Therefore, we use the
11357      definition for dependent template arguments in [temp.dep.temp].  */
11358   if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
11359       && (dependent_template_id_p
11360           (CLASSTYPE_TI_TEMPLATE (type),
11361            CLASSTYPE_TI_ARGS (type))))
11362     return true;
11363   else if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
11364     return true;
11365   /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
11366      expression is not type-dependent, then it should already been
11367      have resolved.  */
11368   if (TREE_CODE (type) == TYPEOF_TYPE)
11369     return true;
11370   /* The standard does not specifically mention types that are local
11371      to template functions or local classes, but they should be
11372      considered dependent too.  For example:
11373
11374        template <int I> void f() { 
11375          enum E { a = I }; 
11376          S<sizeof (E)> s;
11377        }
11378
11379      The size of `E' cannot be known until the value of `I' has been
11380      determined.  Therefore, `E' must be considered dependent.  */
11381   scope = TYPE_CONTEXT (type);
11382   if (scope && TYPE_P (scope))
11383     return dependent_type_p (scope);
11384   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
11385     return type_dependent_expression_p (scope);
11386
11387   /* Other types are non-dependent.  */
11388   return false;
11389 }
11390
11391 /* Returns TRUE if TYPE is dependent, in the sense of
11392    [temp.dep.type].  */
11393
11394 bool
11395 dependent_type_p (tree type)
11396 {
11397   /* If there are no template parameters in scope, then there can't be
11398      any dependent types.  */
11399   if (!processing_template_decl)
11400     return false;
11401
11402   /* If the type is NULL, we have not computed a type for the entity
11403      in question; in that case, the type is dependent.  */
11404   if (!type)
11405     return true;
11406
11407   /* Erroneous types can be considered non-dependent.  */
11408   if (type == error_mark_node)
11409     return false;
11410
11411   /* If we have not already computed the appropriate value for TYPE,
11412      do so now.  */
11413   if (!TYPE_DEPENDENT_P_VALID (type))
11414     {
11415       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
11416       TYPE_DEPENDENT_P_VALID (type) = 1;
11417     }
11418
11419   return TYPE_DEPENDENT_P (type);
11420 }
11421
11422 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
11423
11424 static bool
11425 dependent_scope_ref_p (tree expression, bool criterion (tree))
11426 {
11427   tree scope;
11428   tree name;
11429
11430   my_friendly_assert (TREE_CODE (expression) == SCOPE_REF, 20030714);
11431
11432   if (!TYPE_P (TREE_OPERAND (expression, 0)))
11433     return true;
11434
11435   scope = TREE_OPERAND (expression, 0);
11436   name = TREE_OPERAND (expression, 1);
11437
11438   /* [temp.dep.expr]
11439
11440      An id-expression is type-dependent if it contains a
11441      nested-name-specifier that contains a class-name that names a
11442      dependent type.  */
11443   /* The suggested resolution to Core Issue 2 implies that if the
11444      qualifying type is the current class, then we must peek
11445      inside it.  */
11446   if (DECL_P (name) 
11447       && currently_open_class (scope)
11448       && !criterion (name))
11449     return false;
11450   if (dependent_type_p (scope))
11451     return true;
11452
11453   return false;
11454 }
11455
11456 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
11457    [temp.dep.constexpr] */
11458
11459 bool
11460 value_dependent_expression_p (tree expression)
11461 {
11462   if (!processing_template_decl)
11463     return false;
11464
11465   /* A name declared with a dependent type.  */
11466   if (TREE_CODE (expression) == IDENTIFIER_NODE
11467       || (DECL_P (expression) 
11468           && type_dependent_expression_p (expression)))
11469     return true;
11470   /* A non-type template parameter.  */
11471   if ((TREE_CODE (expression) == CONST_DECL
11472        && DECL_TEMPLATE_PARM_P (expression))
11473       || TREE_CODE (expression) == TEMPLATE_PARM_INDEX)
11474     return true;
11475   /* A constant with integral or enumeration type and is initialized 
11476      with an expression that is value-dependent.  */
11477   if (TREE_CODE (expression) == VAR_DECL
11478       && DECL_INITIAL (expression)
11479       && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
11480       && value_dependent_expression_p (DECL_INITIAL (expression)))
11481     return true;
11482   /* These expressions are value-dependent if the type to which the
11483      cast occurs is dependent or the expression being casted is
11484      value-dependent.  */
11485   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
11486       || TREE_CODE (expression) == STATIC_CAST_EXPR
11487       || TREE_CODE (expression) == CONST_CAST_EXPR
11488       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
11489       || TREE_CODE (expression) == CAST_EXPR)
11490     {
11491       if (dependent_type_p (TREE_TYPE (expression)))
11492         return true;
11493       /* A functional cast has a list of operands.  */
11494       expression = TREE_OPERAND (expression, 0);
11495       if (TREE_CODE (expression) == TREE_LIST)
11496         {
11497           do
11498             {
11499               if (value_dependent_expression_p (TREE_VALUE (expression)))
11500                 return true;
11501               expression = TREE_CHAIN (expression);
11502             }
11503           while (expression);
11504           return false;
11505         }
11506       else
11507         return value_dependent_expression_p (expression);
11508     }
11509   /* A `sizeof' expression is value-dependent if the operand is
11510      type-dependent.  */
11511   if (TREE_CODE (expression) == SIZEOF_EXPR
11512       || TREE_CODE (expression) == ALIGNOF_EXPR)
11513     {
11514       expression = TREE_OPERAND (expression, 0);
11515       if (TYPE_P (expression))
11516         return dependent_type_p (expression);
11517       return type_dependent_expression_p (expression);
11518     }
11519   if (TREE_CODE (expression) == SCOPE_REF)
11520     return dependent_scope_ref_p (expression, value_dependent_expression_p);
11521   /* A constant expression is value-dependent if any subexpression is
11522      value-dependent.  */
11523   if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (expression))))
11524     {
11525       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
11526         {
11527         case '1':
11528           return (value_dependent_expression_p 
11529                   (TREE_OPERAND (expression, 0)));
11530         case '<':
11531         case '2':
11532           return ((value_dependent_expression_p 
11533                    (TREE_OPERAND (expression, 0)))
11534                   || (value_dependent_expression_p 
11535                       (TREE_OPERAND (expression, 1))));
11536         case 'e':
11537           {
11538             int i;
11539             for (i = 0; i < first_rtl_op (TREE_CODE (expression)); ++i)
11540               /* In some cases, some of the operands may be missing.
11541                  (For example, in the case of PREDECREMENT_EXPR, the
11542                  amount to increment by may be missing.)  That doesn't
11543                  make the expression dependent.  */
11544               if (TREE_OPERAND (expression, i)
11545                   && (value_dependent_expression_p
11546                       (TREE_OPERAND (expression, i))))
11547                 return true;
11548             return false;
11549           }
11550         }
11551     }
11552
11553   /* The expression is not value-dependent.  */
11554   return false;
11555 }
11556
11557 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
11558    [temp.dep.expr].  */
11559
11560 bool
11561 type_dependent_expression_p (tree expression)
11562 {
11563   if (!processing_template_decl)
11564     return false;
11565
11566   if (expression == error_mark_node)
11567     return false;
11568
11569   /* An unresolved name is always dependent.  */
11570   if (TREE_CODE (expression) == IDENTIFIER_NODE)
11571     return true;
11572   
11573   /* Some expression forms are never type-dependent.  */
11574   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
11575       || TREE_CODE (expression) == SIZEOF_EXPR
11576       || TREE_CODE (expression) == ALIGNOF_EXPR
11577       || TREE_CODE (expression) == TYPEID_EXPR
11578       || TREE_CODE (expression) == DELETE_EXPR
11579       || TREE_CODE (expression) == VEC_DELETE_EXPR
11580       || TREE_CODE (expression) == THROW_EXPR)
11581     return false;
11582
11583   /* The types of these expressions depends only on the type to which
11584      the cast occurs.  */
11585   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
11586       || TREE_CODE (expression) == STATIC_CAST_EXPR
11587       || TREE_CODE (expression) == CONST_CAST_EXPR
11588       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
11589       || TREE_CODE (expression) == CAST_EXPR)
11590     return dependent_type_p (TREE_TYPE (expression));
11591
11592   /* The types of these expressions depends only on the type created
11593      by the expression.  */
11594   if (TREE_CODE (expression) == NEW_EXPR
11595       || TREE_CODE (expression) == VEC_NEW_EXPR)
11596     {
11597       /* For NEW_EXPR tree nodes created inside a template, either
11598          the object type itself or a TREE_LIST may appear as the
11599          operand 1.  */
11600       tree type = TREE_OPERAND (expression, 1);
11601       if (TREE_CODE (type) == TREE_LIST)
11602         /* This is an array type.  We need to check array dimensions
11603            as well.  */
11604         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
11605                || value_dependent_expression_p
11606                     (TREE_OPERAND (TREE_VALUE (type), 1));
11607       else
11608         return dependent_type_p (type);
11609     }
11610
11611   if (TREE_CODE (expression) == SCOPE_REF
11612       && dependent_scope_ref_p (expression,
11613                                 type_dependent_expression_p))
11614     return true;
11615
11616   if (TREE_CODE (expression) == FUNCTION_DECL
11617       && DECL_LANG_SPECIFIC (expression)
11618       && DECL_TEMPLATE_INFO (expression)
11619       && (dependent_template_id_p
11620           (DECL_TI_TEMPLATE (expression),
11621            INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
11622     return true;
11623
11624   if (TREE_TYPE (expression) == unknown_type_node)
11625     {
11626       if (TREE_CODE (expression) == ADDR_EXPR)
11627         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
11628       if (TREE_CODE (expression) == COMPONENT_REF)
11629         {
11630           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
11631             return true;
11632           expression = TREE_OPERAND (expression, 1);
11633           if (TREE_CODE (expression) == IDENTIFIER_NODE)
11634             return false;
11635         }
11636       
11637       if (TREE_CODE (expression) == BASELINK)
11638         expression = BASELINK_FUNCTIONS (expression);
11639       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
11640         {
11641           if (any_dependent_template_arguments_p
11642               (TREE_OPERAND (expression, 1)))
11643             return true;
11644           expression = TREE_OPERAND (expression, 0);
11645         }
11646       if (TREE_CODE (expression) == OVERLOAD)
11647         {
11648           while (expression)
11649             {
11650               if (type_dependent_expression_p (OVL_CURRENT (expression)))
11651                 return true;
11652               expression = OVL_NEXT (expression);
11653             }
11654           return false;
11655         }
11656       abort ();
11657     }
11658   
11659   return (dependent_type_p (TREE_TYPE (expression)));
11660 }
11661
11662 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
11663    contains a type-dependent expression.  */
11664
11665 bool
11666 any_type_dependent_arguments_p (tree args)
11667 {
11668   while (args)
11669     {
11670       tree arg = TREE_VALUE (args);
11671
11672       if (type_dependent_expression_p (arg))
11673         return true;
11674       args = TREE_CHAIN (args);
11675     }
11676   return false;
11677 }
11678
11679 /* Returns TRUE if the ARG (a template argument) is dependent.  */
11680
11681 static bool
11682 dependent_template_arg_p (tree arg)
11683 {
11684   if (!processing_template_decl)
11685     return false;
11686
11687   if (TREE_CODE (arg) == TEMPLATE_DECL
11688       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11689     return dependent_template_p (arg);
11690   else if (TYPE_P (arg))
11691     return dependent_type_p (arg);
11692   else
11693     return (type_dependent_expression_p (arg)
11694             || value_dependent_expression_p (arg));
11695 }
11696
11697 /* Returns true if ARGS (a collection of template arguments) contains
11698    any dependent arguments.  */
11699
11700 bool
11701 any_dependent_template_arguments_p (tree args)
11702 {
11703   if (!args)
11704     return false;
11705
11706   my_friendly_assert (TREE_CODE (args) == TREE_LIST
11707                       || TREE_CODE (args) == TREE_VEC,
11708                       20030707);
11709
11710   if (TREE_CODE (args) == TREE_LIST)
11711     {
11712       while (args)
11713         {
11714           if (dependent_template_arg_p (TREE_VALUE (args)))
11715             return true;
11716           args = TREE_CHAIN (args);
11717         }
11718     }
11719   else
11720     {
11721       int i; 
11722       for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
11723         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
11724           return true;
11725     }
11726
11727   return false;
11728 }
11729
11730 /* Returns TRUE if the template TMPL is dependent.  */
11731
11732 bool
11733 dependent_template_p (tree tmpl)
11734 {
11735   /* Template template parameters are dependent.  */
11736   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
11737       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
11738     return true;
11739   /* So are qualified names that have not been looked up.  */
11740   if (TREE_CODE (tmpl) == SCOPE_REF)
11741     return true;
11742   /* So are member templates of dependent classes.  */
11743   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
11744     return dependent_type_p (DECL_CONTEXT (tmpl));
11745   return false;
11746 }
11747
11748 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
11749
11750 bool
11751 dependent_template_id_p (tree tmpl, tree args)
11752 {
11753   return (dependent_template_p (tmpl)
11754           || any_dependent_template_arguments_p (args));
11755 }
11756
11757 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
11758    TYPENAME_TYPE corresponds.  Returns ERROR_MARK_NODE if no such TYPE
11759    can be found.  Note that this function peers inside uninstantiated
11760    templates and therefore should be used only in extremely limited
11761    situations.  */
11762
11763 tree
11764 resolve_typename_type (tree type, bool only_current_p)
11765 {
11766   tree scope;
11767   tree name;
11768   tree decl;
11769   int quals;
11770
11771   my_friendly_assert (TREE_CODE (type) == TYPENAME_TYPE,
11772                       20010702);
11773
11774   scope = TYPE_CONTEXT (type);
11775   name = TYPE_IDENTIFIER (type);
11776
11777   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
11778      it first before we can figure out what NAME refers to.  */
11779   if (TREE_CODE (scope) == TYPENAME_TYPE)
11780     scope = resolve_typename_type (scope, only_current_p);
11781   /* If we don't know what SCOPE refers to, then we cannot resolve the
11782      TYPENAME_TYPE.  */
11783   if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
11784     return error_mark_node;
11785   /* If the SCOPE is a template type parameter, we have no way of
11786      resolving the name.  */
11787   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
11788     return type;
11789   /* If the SCOPE is not the current instantiation, there's no reason
11790      to look inside it.  */
11791   if (only_current_p && !currently_open_class (scope))
11792     return error_mark_node;
11793   /* If SCOPE is a partial instantiation, it will not have a valid
11794      TYPE_FIELDS list, so use the original template.  */
11795   scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
11796   /* Enter the SCOPE so that name lookup will be resolved as if we
11797      were in the class definition.  In particular, SCOPE will no
11798      longer be considered a dependent type.  */
11799   push_scope (scope);
11800   /* Look up the declaration.  */
11801   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
11802   /* Obtain the set of qualifiers applied to the TYPE.  */
11803   quals = cp_type_quals (type);
11804   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
11805      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
11806   if (!decl)
11807     type = error_mark_node;
11808   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
11809            && TREE_CODE (decl) == TYPE_DECL)
11810     type = TREE_TYPE (decl);
11811   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
11812            && DECL_CLASS_TEMPLATE_P (decl))
11813     {
11814       tree tmpl;
11815       tree args;
11816       /* Obtain the template and the arguments.  */
11817       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
11818       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
11819       /* Instantiate the template.  */
11820       type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
11821                                     /*entering_scope=*/0, tf_error | tf_user);
11822     }
11823   else
11824     type = error_mark_node;
11825   /* Qualify the resulting type.  */
11826   if (type != error_mark_node && quals)
11827     type = cp_build_qualified_type (type, quals);
11828   /* Leave the SCOPE.  */
11829   pop_scope (scope);
11830
11831   return type;
11832 }
11833
11834 /* EXPR is an expression which is not type-dependent.  Return a proxy
11835    for EXPR that can be used to compute the types of larger
11836    expressions containing EXPR.  */
11837
11838 tree
11839 build_non_dependent_expr (tree expr)
11840 {
11841   /* Preserve null pointer constants so that the type of things like 
11842      "p == 0" where "p" is a pointer can be determined.  */
11843   if (null_ptr_cst_p (expr))
11844     return expr;
11845   /* Preserve OVERLOADs; the functions must be available to resolve
11846      types.  */
11847   if (TREE_CODE (expr) == OVERLOAD)
11848     return expr;
11849   /* Otherwise, build a NON_DEPENDENT_EXPR.  
11850
11851      REFERENCE_TYPEs are not stripped for expressions in templates
11852      because doing so would play havoc with mangling.  Consider, for
11853      example:
11854
11855        template <typename T> void f<T& g>() { g(); } 
11856
11857      In the body of "f", the expression for "g" will have
11858      REFERENCE_TYPE, even though the standard says that it should
11859      not.  The reason is that we must preserve the syntactic form of
11860      the expression so that mangling (say) "f<g>" inside the body of
11861      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
11862      stripped here.  */
11863   return build (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)));
11864 }
11865
11866 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
11867    Return a new TREE_LIST with the various arguments replaced with
11868    equivalent non-dependent expressions.  */
11869
11870 tree
11871 build_non_dependent_args (tree args)
11872 {
11873   tree a;
11874   tree new_args;
11875
11876   new_args = NULL_TREE;
11877   for (a = args; a; a = TREE_CHAIN (a))
11878     new_args = tree_cons (NULL_TREE, 
11879                           build_non_dependent_expr (TREE_VALUE (a)),
11880                           new_args);
11881   return nreverse (new_args);
11882 }
11883
11884 #include "gt-cp-pt.h"