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   if (TREE_CODE (arg) != RECORD_TYPE)
3435     is_tmpl_type = ((TREE_CODE (arg) == TEMPLATE_DECL
3436                      && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
3437                     || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3438                     || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
3439   else if (CLASSTYPE_TEMPLATE_INFO (arg) && !CLASSTYPE_USE_TEMPLATE (arg)
3440            && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (arg)))
3441     {
3442       if (is_base_of_enclosing_class (arg, current_class_type))
3443         /* This is a template name used within the scope of the
3444            template. It could be the template, or it could be the
3445            instantiation. Choose whichever makes sense.  */
3446         is_tmpl_type = requires_tmpl_type;
3447       else
3448         is_tmpl_type = 1;
3449     }
3450   else
3451     /* It is a non-template class, or a specialization of a template
3452        class, or a non-template member of a template class.  */
3453     is_tmpl_type = 0;
3454   
3455   if (is_tmpl_type
3456       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3457           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
3458     arg = TYPE_STUB_DECL (arg);
3459   else if (is_tmpl_type && TREE_CODE (arg) == RECORD_TYPE)
3460     arg = CLASSTYPE_TI_TEMPLATE (arg);
3461
3462   is_type = TYPE_P (arg) || is_tmpl_type;
3463
3464   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
3465       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
3466     {
3467       pedwarn ("to refer to a type member of a template parameter, use `typename %E'", arg);
3468       
3469       arg = make_typename_type (TREE_OPERAND (arg, 0),
3470                                 TREE_OPERAND (arg, 1),
3471                                 complain & tf_error);
3472       is_type = 1;
3473     }
3474   if (is_type != requires_type)
3475     {
3476       if (in_decl)
3477         {
3478           if (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_type)
3483                 error ("  expected a constant of type `%T', got `%T'",
3484                           TREE_TYPE (parm),
3485                           (is_tmpl_type ? DECL_NAME (arg) : arg));
3486               else if (requires_tmpl_type)
3487                 error ("  expected a class template, got `%E'", arg);
3488               else
3489                 error ("  expected a type, got `%E'", arg);
3490             }
3491         }
3492       return error_mark_node;
3493     }
3494   if (is_tmpl_type ^ requires_tmpl_type)
3495     {
3496       if (in_decl && (complain & tf_error))
3497         {
3498           error ("type/value mismatch at argument %d in template parameter list for `%D'",
3499                     i + 1, in_decl);
3500           if (is_tmpl_type)
3501             error ("  expected a type, got `%T'", DECL_NAME (arg));
3502           else
3503             error ("  expected a class template, got `%T'", arg);
3504         }
3505       return error_mark_node;
3506     }
3507       
3508   if (is_type)
3509     {
3510       if (requires_tmpl_type)
3511         {
3512           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
3513             /* The number of argument required is not known yet.
3514                Just accept it for now.  */
3515             val = TREE_TYPE (arg);
3516           else
3517             {
3518               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3519               tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3520
3521               if (coerce_template_template_parms (parmparm, argparm,
3522                                                   complain, in_decl,
3523                                                   inner_args))
3524                 {
3525                   val = arg;
3526                   
3527                   /* TEMPLATE_TEMPLATE_PARM node is preferred over 
3528                      TEMPLATE_DECL.  */
3529                   if (val != error_mark_node 
3530                       && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
3531                     val = TREE_TYPE (val);
3532                 }
3533               else
3534                 {
3535                   if (in_decl && (complain & tf_error))
3536                     {
3537                       error ("type/value mismatch at argument %d in template parameter list for `%D'",
3538                                 i + 1, in_decl);
3539                       error ("  expected a template of type `%D', got `%D'", parm, arg);
3540                     }
3541                   
3542                   val = error_mark_node;
3543                 }
3544             }
3545         }
3546       else
3547         val = groktypename (arg);
3548     }
3549   else
3550     {
3551       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
3552
3553       if (invalid_nontype_parm_type_p (t, complain))
3554         return error_mark_node;
3555       
3556       if (!uses_template_parms (arg) && !uses_template_parms (t))
3557         /* We used to call digest_init here.  However, digest_init
3558            will report errors, which we don't want when complain
3559            is zero.  More importantly, digest_init will try too
3560            hard to convert things: for example, `0' should not be
3561            converted to pointer type at this point according to
3562            the standard.  Accepting this is not merely an
3563            extension, since deciding whether or not these
3564            conversions can occur is part of determining which
3565            function template to call, or whether a given explicit
3566            argument specification is valid.  */
3567         val = convert_nontype_argument (t, arg);
3568       else
3569         val = arg;
3570
3571       if (val == NULL_TREE)
3572         val = error_mark_node;
3573       else if (val == error_mark_node && (complain & tf_error))
3574         error ("could not convert template argument `%E' to `%T'", 
3575                   arg, t);
3576     }
3577
3578   return val;
3579 }
3580
3581 /* Convert all template arguments to their appropriate types, and
3582    return a vector containing the innermost resulting template
3583    arguments.  If any error occurs, return error_mark_node. Error and
3584    warning messages are issued under control of COMPLAIN.
3585
3586    If REQUIRE_ALL_ARGUMENTS is nonzero, all arguments must be
3587    provided in ARGLIST, or else trailing parameters must have default
3588    values.  If REQUIRE_ALL_ARGUMENTS is zero, we will attempt argument
3589    deduction for any unspecified trailing arguments.  */
3590    
3591 static tree
3592 coerce_template_parms (tree parms, 
3593                        tree args, 
3594                        tree in_decl,
3595                        tsubst_flags_t complain,
3596                        int require_all_arguments)
3597 {
3598   int nparms, nargs, i, lost = 0;
3599   tree inner_args;
3600   tree new_args;
3601   tree new_inner_args;
3602
3603   inner_args = INNERMOST_TEMPLATE_ARGS (args);
3604   nargs = NUM_TMPL_ARGS (inner_args);
3605   nparms = TREE_VEC_LENGTH (parms);
3606
3607   if (nargs > nparms
3608       || (nargs < nparms
3609           && require_all_arguments
3610           && TREE_PURPOSE (TREE_VEC_ELT (parms, nargs)) == NULL_TREE))
3611     {
3612       if (complain & tf_error) 
3613         {
3614           error ("wrong number of template arguments (%d, should be %d)",
3615                     nargs, nparms);
3616           
3617           if (in_decl)
3618             cp_error_at ("provided for `%D'", in_decl);
3619         }
3620
3621       return error_mark_node;
3622     }
3623
3624   new_inner_args = make_tree_vec (nparms);
3625   new_args = add_outermost_template_args (args, new_inner_args);
3626   for (i = 0; i < nparms; i++)
3627     {
3628       tree arg;
3629       tree parm;
3630
3631       /* Get the Ith template parameter.  */
3632       parm = TREE_VEC_ELT (parms, i);
3633
3634       /* Calculate the Ith argument.  */
3635       if (inner_args && TREE_CODE (inner_args) == TREE_LIST)
3636         {
3637           arg = TREE_VALUE (inner_args);
3638           inner_args = TREE_CHAIN (inner_args);
3639         }
3640       else if (i < nargs)
3641         arg = TREE_VEC_ELT (inner_args, i);
3642       else
3643         /* If no template argument was supplied, look for a default
3644            value.  */
3645         arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
3646                                    complain, in_decl);
3647
3648       /* Now, convert the Ith argument, as necessary.  */
3649       if (arg == NULL_TREE)
3650         /* We're out of arguments.  */
3651         {
3652           my_friendly_assert (!require_all_arguments, 0);
3653           break;
3654         }
3655       else if (arg == error_mark_node)
3656         {
3657           error ("template argument %d is invalid", i + 1);
3658           arg = error_mark_node;
3659         }
3660       else 
3661         arg = convert_template_argument (TREE_VALUE (parm), 
3662                                          arg, new_args, complain, i,
3663                                          in_decl); 
3664       
3665       if (arg == error_mark_node)
3666         lost++;
3667       TREE_VEC_ELT (new_inner_args, i) = arg;
3668     }
3669
3670   if (lost)
3671     return error_mark_node;
3672
3673   return new_inner_args;
3674 }
3675
3676 /* Returns 1 if template args OT and NT are equivalent.  */
3677
3678 static int
3679 template_args_equal (tree ot, tree nt)
3680 {
3681   if (nt == ot)
3682     return 1;
3683
3684   if (TREE_CODE (nt) == TREE_VEC)
3685     /* For member templates */
3686     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
3687   else if (TYPE_P (nt))
3688     return TYPE_P (ot) && same_type_p (ot, nt);
3689   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
3690     return 0;
3691   else
3692     return cp_tree_equal (ot, nt);
3693 }
3694
3695 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
3696    of template arguments.  Returns 0 otherwise.  */
3697
3698 int
3699 comp_template_args (tree oldargs, tree newargs)
3700 {
3701   int i;
3702
3703   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
3704     return 0;
3705
3706   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
3707     {
3708       tree nt = TREE_VEC_ELT (newargs, i);
3709       tree ot = TREE_VEC_ELT (oldargs, i);
3710
3711       if (! template_args_equal (ot, nt))
3712         return 0;
3713     }
3714   return 1;
3715 }
3716
3717 /* Given class template name and parameter list, produce a user-friendly name
3718    for the instantiation.  */
3719
3720 static char *
3721 mangle_class_name_for_template (const char* name, tree parms, tree arglist)
3722 {
3723   static struct obstack scratch_obstack;
3724   static char *scratch_firstobj;
3725   int i, nparms;
3726
3727   if (!scratch_firstobj)
3728     gcc_obstack_init (&scratch_obstack);
3729   else
3730     obstack_free (&scratch_obstack, scratch_firstobj);
3731   scratch_firstobj = obstack_alloc (&scratch_obstack, 1);
3732
3733 #define ccat(C) obstack_1grow (&scratch_obstack, (C));
3734 #define cat(S)  obstack_grow (&scratch_obstack, (S), strlen (S))
3735
3736   cat (name);
3737   ccat ('<');
3738   nparms = TREE_VEC_LENGTH (parms);
3739   arglist = INNERMOST_TEMPLATE_ARGS (arglist);
3740   my_friendly_assert (nparms == TREE_VEC_LENGTH (arglist), 268);
3741   for (i = 0; i < nparms; i++)
3742     {
3743       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
3744       tree arg = TREE_VEC_ELT (arglist, i);
3745
3746       if (i)
3747         ccat (',');
3748
3749       if (TREE_CODE (parm) == TYPE_DECL)
3750         {
3751           cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
3752           continue;
3753         }
3754       else if (TREE_CODE (parm) == TEMPLATE_DECL)
3755         {
3756           if (TREE_CODE (arg) == TEMPLATE_DECL)
3757             {
3758               /* Already substituted with real template.  Just output 
3759                  the template name here */
3760               tree context = DECL_CONTEXT (arg);
3761               if (context)
3762                 {
3763                   /* The template may be defined in a namespace, or
3764                      may be a member template.  */
3765                   my_friendly_assert (TREE_CODE (context) == NAMESPACE_DECL
3766                                       || CLASS_TYPE_P (context), 
3767                                       980422);
3768                   cat(decl_as_string (DECL_CONTEXT (arg), TFF_PLAIN_IDENTIFIER));
3769                   cat("::");
3770                 }
3771               cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
3772             }
3773           else
3774             /* Output the parameter declaration */
3775             cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
3776           continue;
3777         }
3778       else
3779         my_friendly_assert (TREE_CODE (parm) == PARM_DECL, 269);
3780
3781       if (TREE_CODE (arg) == TREE_LIST)
3782         {
3783           /* New list cell was built because old chain link was in
3784              use.  */
3785           my_friendly_assert (TREE_PURPOSE (arg) == NULL_TREE, 270);
3786           arg = TREE_VALUE (arg);
3787         }
3788       /* No need to check arglist against parmlist here; we did that
3789          in coerce_template_parms, called from lookup_template_class.  */
3790       cat (expr_as_string (arg, TFF_PLAIN_IDENTIFIER));
3791     }
3792   {
3793     char *bufp = obstack_next_free (&scratch_obstack);
3794     int offset = 0;
3795     while (bufp[offset - 1] == ' ')
3796       offset--;
3797     obstack_blank_fast (&scratch_obstack, offset);
3798
3799     /* B<C<char> >, not B<C<char>> */
3800     if (bufp[offset - 1] == '>')
3801       ccat (' ');
3802   }
3803   ccat ('>');
3804   ccat ('\0');
3805   return (char *) obstack_base (&scratch_obstack);
3806 }
3807
3808 static tree
3809 classtype_mangled_name (tree t)
3810 {
3811   if (CLASSTYPE_TEMPLATE_INFO (t)
3812       /* Specializations have already had their names set up in
3813          lookup_template_class.  */
3814       && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
3815     {
3816       tree tmpl = most_general_template (CLASSTYPE_TI_TEMPLATE (t));
3817
3818       /* For non-primary templates, the template parameters are
3819          implicit from their surrounding context.  */
3820       if (PRIMARY_TEMPLATE_P (tmpl))
3821         {
3822           tree name = DECL_NAME (tmpl);
3823           char *mangled_name = mangle_class_name_for_template
3824             (IDENTIFIER_POINTER (name), 
3825              DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
3826              CLASSTYPE_TI_ARGS (t));
3827           tree id = get_identifier (mangled_name);
3828           IDENTIFIER_TEMPLATE (id) = name;
3829           return id;
3830         }
3831     }
3832
3833   return TYPE_IDENTIFIER (t);
3834 }
3835
3836 static void
3837 add_pending_template (tree d)
3838 {
3839   tree ti = (TYPE_P (d)
3840              ? CLASSTYPE_TEMPLATE_INFO (d)
3841              : DECL_TEMPLATE_INFO (d));
3842   tree pt;
3843   int level;
3844
3845   if (TI_PENDING_TEMPLATE_FLAG (ti))
3846     return;
3847
3848   /* We are called both from instantiate_decl, where we've already had a
3849      tinst_level pushed, and instantiate_template, where we haven't.
3850      Compensate.  */
3851   level = !(current_tinst_level && TINST_DECL (current_tinst_level) == d);
3852
3853   if (level)
3854     push_tinst_level (d);
3855
3856   pt = tree_cons (current_tinst_level, d, NULL_TREE);
3857   if (last_pending_template)
3858     TREE_CHAIN (last_pending_template) = pt;
3859   else
3860     pending_templates = pt;
3861
3862   last_pending_template = pt;
3863
3864   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
3865
3866   if (level)
3867     pop_tinst_level ();
3868 }
3869
3870
3871 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
3872    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
3873    documentation for TEMPLATE_ID_EXPR.  */
3874
3875 tree
3876 lookup_template_function (tree fns, tree arglist)
3877 {
3878   tree type;
3879
3880   if (fns == error_mark_node || arglist == error_mark_node)
3881     return error_mark_node;
3882
3883   if (fns == NULL_TREE)
3884     {
3885       error ("non-template used as template");
3886       return error_mark_node;
3887     }
3888
3889   my_friendly_assert (TREE_CODE (fns) == TEMPLATE_DECL
3890                       || TREE_CODE (fns) == OVERLOAD
3891                       || BASELINK_P (fns)
3892                       || TREE_CODE (fns) == IDENTIFIER_NODE,
3893                       20020730);
3894
3895   if (BASELINK_P (fns))
3896     {
3897       BASELINK_FUNCTIONS (fns) = build (TEMPLATE_ID_EXPR,
3898                                         unknown_type_node,
3899                                         BASELINK_FUNCTIONS (fns),
3900                                         arglist);
3901       return fns;
3902     }
3903
3904   type = TREE_TYPE (fns);
3905   if (TREE_CODE (fns) == OVERLOAD || !type)
3906     type = unknown_type_node;
3907   
3908   return build (TEMPLATE_ID_EXPR, type, fns, arglist);
3909 }
3910
3911 /* Within the scope of a template class S<T>, the name S gets bound
3912    (in build_self_reference) to a TYPE_DECL for the class, not a
3913    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
3914    or one of its enclosing classes, and that type is a template,
3915    return the associated TEMPLATE_DECL.  Otherwise, the original
3916    DECL is returned.  */
3917
3918 tree
3919 maybe_get_template_decl_from_type_decl (tree decl)
3920 {
3921   return (decl != NULL_TREE
3922           && TREE_CODE (decl) == TYPE_DECL 
3923           && DECL_ARTIFICIAL (decl)
3924           && CLASS_TYPE_P (TREE_TYPE (decl))
3925           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl))) 
3926     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
3927 }
3928
3929 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
3930    parameters, find the desired type.
3931
3932    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
3933    (Actually ARGLIST may be either a TREE_LIST or a TREE_VEC.  It will
3934    be a TREE_LIST if called directly from the parser, and a TREE_VEC
3935    otherwise.)
3936
3937    IN_DECL, if non-NULL, is the template declaration we are trying to
3938    instantiate.  
3939
3940    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
3941    the class we are looking up.
3942    
3943    Issue error and warning messages under control of COMPLAIN.
3944
3945    If the template class is really a local class in a template
3946    function, then the FUNCTION_CONTEXT is the function in which it is
3947    being instantiated.  */
3948
3949 tree
3950 lookup_template_class (tree d1, 
3951                        tree arglist, 
3952                        tree in_decl, 
3953                        tree context, 
3954                        int entering_scope, 
3955                        tsubst_flags_t complain)
3956 {
3957   tree template = NULL_TREE, parmlist;
3958   tree t;
3959   
3960   timevar_push (TV_NAME_LOOKUP);
3961   my_friendly_assert ((!arglist || TREE_CODE (arglist) == TREE_LIST)
3962                       == ((complain & tf_user) != 0), 20030724);
3963   
3964   if (TREE_CODE (d1) == IDENTIFIER_NODE)
3965     {
3966       if (IDENTIFIER_VALUE (d1) 
3967           && DECL_TEMPLATE_TEMPLATE_PARM_P (IDENTIFIER_VALUE (d1)))
3968         template = IDENTIFIER_VALUE (d1);
3969       else
3970         {
3971           if (context)
3972             push_decl_namespace (context);
3973           template = lookup_name (d1, /*prefer_type=*/0);
3974           template = maybe_get_template_decl_from_type_decl (template);
3975           if (context)
3976             pop_decl_namespace ();
3977         }
3978       if (template)
3979         context = DECL_CONTEXT (template);
3980     }
3981   else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
3982     {
3983       tree type = TREE_TYPE (d1);
3984
3985       /* If we are declaring a constructor, say A<T>::A<T>, we will get
3986          an implicit typename for the second A.  Deal with it.  */
3987       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
3988         type = TREE_TYPE (type);
3989         
3990       if (CLASSTYPE_TEMPLATE_INFO (type))
3991         {
3992           template = CLASSTYPE_TI_TEMPLATE (type);
3993           d1 = DECL_NAME (template);
3994         }
3995     }
3996   else if (TREE_CODE (d1) == ENUMERAL_TYPE 
3997            || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
3998     {
3999       template = TYPE_TI_TEMPLATE (d1);
4000       d1 = DECL_NAME (template);
4001     }
4002   else if (TREE_CODE (d1) == TEMPLATE_DECL
4003            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
4004     {
4005       template = d1;
4006       d1 = DECL_NAME (template);
4007       context = DECL_CONTEXT (template);
4008     }
4009
4010   /* With something like `template <class T> class X class X { ... };'
4011      we could end up with D1 having nothing but an IDENTIFIER_VALUE.
4012      We don't want to do that, but we have to deal with the situation,
4013      so let's give them some syntax errors to chew on instead of a
4014      crash. Alternatively D1 might not be a template type at all.  */
4015   if (! template)
4016     {
4017       if (complain & tf_error)
4018         error ("`%T' is not a template", d1);
4019       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4020     }
4021
4022   if (TREE_CODE (template) != TEMPLATE_DECL
4023          /* Make sure it's a user visible template, if it was named by
4024             the user.  */
4025       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
4026           && !PRIMARY_TEMPLATE_P (template)))
4027     {
4028       if (complain & tf_error)
4029         {
4030           error ("non-template type `%T' used as a template", d1);
4031           if (in_decl)
4032             cp_error_at ("for template declaration `%D'", in_decl);
4033         }
4034       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4035     }
4036
4037   complain &= ~tf_user;
4038   
4039   if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
4040     {
4041       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
4042          template arguments */
4043
4044       tree parm;
4045       tree arglist2;
4046
4047       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
4048
4049       /* Consider an example where a template template parameter declared as
4050
4051            template <class T, class U = std::allocator<T> > class TT
4052
4053          The template parameter level of T and U are one level larger than 
4054          of TT.  To proper process the default argument of U, say when an 
4055          instantiation `TT<int>' is seen, we need to build the full
4056          arguments containing {int} as the innermost level.  Outer levels,
4057          available when not appearing as default template argument, can be
4058          obtained from `current_template_args ()'.
4059
4060          Suppose that TT is later substituted with std::vector.  The above
4061          instantiation is `TT<int, std::allocator<T> >' with TT at
4062          level 1, and T at level 2, while the template arguments at level 1
4063          becomes {std::vector} and the inner level 2 is {int}.  */
4064
4065       if (current_template_parms)
4066         arglist = add_to_template_args (current_template_args (), arglist);
4067
4068       arglist2 = coerce_template_parms (parmlist, arglist, template,
4069                                         complain, /*require_all_args=*/1);
4070       if (arglist2 == error_mark_node
4071           || (!uses_template_parms (arglist2)
4072               && check_instantiated_args (template, arglist2, complain)))
4073         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4074
4075       parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
4076       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
4077     }
4078   else 
4079     {
4080       tree template_type = TREE_TYPE (template);
4081       tree gen_tmpl;
4082       tree type_decl;
4083       tree found = NULL_TREE;
4084       tree *tp;
4085       int arg_depth;
4086       int parm_depth;
4087       int is_partial_instantiation;
4088
4089       gen_tmpl = most_general_template (template);
4090       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
4091       parm_depth = TMPL_PARMS_DEPTH (parmlist);
4092       arg_depth = TMPL_ARGS_DEPTH (arglist);
4093
4094       if (arg_depth == 1 && parm_depth > 1)
4095         {
4096           /* We've been given an incomplete set of template arguments.
4097              For example, given:
4098
4099                template <class T> struct S1 {
4100                  template <class U> struct S2 {};
4101                  template <class U> struct S2<U*> {};
4102                 };
4103              
4104              we will be called with an ARGLIST of `U*', but the
4105              TEMPLATE will be `template <class T> template
4106              <class U> struct S1<T>::S2'.  We must fill in the missing
4107              arguments.  */
4108           arglist 
4109             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
4110                                            arglist);
4111           arg_depth = TMPL_ARGS_DEPTH (arglist);
4112         }
4113
4114       /* Now we should have enough arguments.  */
4115       my_friendly_assert (parm_depth == arg_depth, 0);
4116       
4117       /* From here on, we're only interested in the most general
4118          template.  */
4119       template = gen_tmpl;
4120
4121       /* Calculate the BOUND_ARGS.  These will be the args that are
4122          actually tsubst'd into the definition to create the
4123          instantiation.  */
4124       if (parm_depth > 1)
4125         {
4126           /* We have multiple levels of arguments to coerce, at once.  */
4127           int i;
4128           int saved_depth = TMPL_ARGS_DEPTH (arglist);
4129
4130           tree bound_args = make_tree_vec (parm_depth);
4131           
4132           for (i = saved_depth,
4133                  t = DECL_TEMPLATE_PARMS (template); 
4134                i > 0 && t != NULL_TREE;
4135                --i, t = TREE_CHAIN (t))
4136             {
4137               tree a = coerce_template_parms (TREE_VALUE (t), arglist,
4138                                               template, complain,
4139                                               /*require_all_args=*/1);
4140
4141               /* Don't process further if one of the levels fails.  */
4142               if (a == error_mark_node)
4143                 {
4144                   /* Restore the ARGLIST to its full size.  */
4145                   TREE_VEC_LENGTH (arglist) = saved_depth;
4146                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4147                 }
4148               
4149               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
4150
4151               /* We temporarily reduce the length of the ARGLIST so
4152                  that coerce_template_parms will see only the arguments
4153                  corresponding to the template parameters it is
4154                  examining.  */
4155               TREE_VEC_LENGTH (arglist)--;
4156             }
4157
4158           /* Restore the ARGLIST to its full size.  */
4159           TREE_VEC_LENGTH (arglist) = saved_depth;
4160
4161           arglist = bound_args;
4162         }
4163       else
4164         arglist
4165           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
4166                                    INNERMOST_TEMPLATE_ARGS (arglist),
4167                                    template,
4168                                    complain, /*require_all_args=*/1);
4169
4170       if (arglist == error_mark_node
4171           || (!uses_template_parms (INNERMOST_TEMPLATE_ARGS (arglist))
4172               && check_instantiated_args (template,
4173                                           INNERMOST_TEMPLATE_ARGS (arglist),
4174                                           complain)))
4175         /* We were unable to bind the arguments.  */
4176         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4177
4178       /* In the scope of a template class, explicit references to the
4179          template class refer to the type of the template, not any
4180          instantiation of it.  For example, in:
4181          
4182            template <class T> class C { void f(C<T>); }
4183
4184          the `C<T>' is just the same as `C'.  Outside of the
4185          class, however, such a reference is an instantiation.  */
4186       if (comp_template_args (TYPE_TI_ARGS (template_type),
4187                               arglist))
4188         {
4189           found = template_type;
4190           
4191           if (!entering_scope && PRIMARY_TEMPLATE_P (template))
4192             {
4193               tree ctx;
4194               
4195               for (ctx = current_class_type; 
4196                    ctx; 
4197                    ctx = TYPE_CONTEXT (ctx))
4198                 {
4199                   if (TREE_CODE (ctx) == NAMESPACE_DECL)
4200                     break;
4201                   if (same_type_p (ctx, template_type))
4202                     goto found_ctx;
4203                 }
4204               
4205               /* We're not in the scope of the class, so the
4206                  TEMPLATE_TYPE is not the type we want after all.  */
4207               found = NULL_TREE;
4208             found_ctx:;
4209             }
4210         }
4211       if (found)
4212         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4213
4214       for (tp = &DECL_TEMPLATE_INSTANTIATIONS (template);
4215            *tp;
4216            tp = &TREE_CHAIN (*tp))
4217         if (comp_template_args (TREE_PURPOSE (*tp), arglist))
4218           {
4219             found = *tp;
4220
4221             /* Use the move-to-front heuristic to speed up future
4222                searches.  */
4223             *tp = TREE_CHAIN (*tp);
4224             TREE_CHAIN (found) 
4225               = DECL_TEMPLATE_INSTANTIATIONS (template);
4226             DECL_TEMPLATE_INSTANTIATIONS (template) = found;
4227
4228             POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, TREE_VALUE (found));
4229           }
4230
4231       /* This type is a "partial instantiation" if any of the template
4232          arguments still involve template parameters.  Note that we set
4233          IS_PARTIAL_INSTANTIATION for partial specializations as
4234          well.  */
4235       is_partial_instantiation = uses_template_parms (arglist);
4236
4237       if (!is_partial_instantiation 
4238           && !PRIMARY_TEMPLATE_P (template)
4239           && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
4240         {
4241           found = xref_tag_from_type (TREE_TYPE (template),
4242                                       DECL_NAME (template),
4243                                       /*globalize=*/1);
4244           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4245         }
4246       
4247       context = tsubst (DECL_CONTEXT (template), arglist,
4248                         complain, in_decl);
4249       if (!context)
4250         context = global_namespace;
4251
4252       /* Create the type.  */
4253       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
4254         {
4255           if (!is_partial_instantiation)
4256             {
4257               set_current_access_from_decl (TYPE_NAME (template_type));
4258               t = start_enum (TYPE_IDENTIFIER (template_type));
4259             }
4260           else
4261             /* We don't want to call start_enum for this type, since
4262                the values for the enumeration constants may involve
4263                template parameters.  And, no one should be interested
4264                in the enumeration constants for such a type.  */
4265             t = make_node (ENUMERAL_TYPE);
4266         }
4267       else
4268         {
4269           t = make_aggr_type (TREE_CODE (template_type));
4270           CLASSTYPE_DECLARED_CLASS (t) 
4271             = CLASSTYPE_DECLARED_CLASS (template_type);
4272           CLASSTYPE_GOT_SEMICOLON (t) = 1;
4273           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
4274           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
4275
4276           /* A local class.  Make sure the decl gets registered properly.  */
4277           if (context == current_function_decl)
4278             pushtag (DECL_NAME (template), t, 0);
4279         }
4280
4281       /* If we called start_enum or pushtag above, this information
4282          will already be set up.  */
4283       if (!TYPE_NAME (t))
4284         {
4285           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
4286           
4287           type_decl = create_implicit_typedef (DECL_NAME (template), t);
4288           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
4289           TYPE_STUB_DECL (t) = type_decl;
4290           DECL_SOURCE_LOCATION (type_decl) 
4291             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
4292         }
4293       else
4294         type_decl = TYPE_NAME (t);
4295
4296       TREE_PRIVATE (type_decl)
4297         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
4298       TREE_PROTECTED (type_decl)
4299         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
4300
4301       /* Set up the template information.  We have to figure out which
4302          template is the immediate parent if this is a full
4303          instantiation.  */
4304       if (parm_depth == 1 || is_partial_instantiation
4305           || !PRIMARY_TEMPLATE_P (template))
4306         /* This case is easy; there are no member templates involved.  */
4307         found = template;
4308       else
4309         {
4310           /* This is a full instantiation of a member template.  Look
4311              for a partial instantiation of which this is an instance.  */
4312
4313           for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
4314                found; found = TREE_CHAIN (found))
4315             {
4316               int success;
4317               tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
4318
4319               /* We only want partial instantiations, here, not
4320                  specializations or full instantiations.  */
4321               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
4322                   || !uses_template_parms (TREE_VALUE (found)))
4323                 continue;
4324
4325               /* Temporarily reduce by one the number of levels in the
4326                  ARGLIST and in FOUND so as to avoid comparing the
4327                  last set of arguments.  */
4328               TREE_VEC_LENGTH (arglist)--;
4329               TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
4330
4331               /* See if the arguments match.  If they do, then TMPL is
4332                  the partial instantiation we want.  */
4333               success = comp_template_args (TREE_PURPOSE (found), arglist);
4334
4335               /* Restore the argument vectors to their full size.  */
4336               TREE_VEC_LENGTH (arglist)++;
4337               TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
4338
4339               if (success)
4340                 {
4341                   found = tmpl;
4342                   break;
4343                 }
4344             }
4345
4346           if (!found)
4347             {
4348               /* There was no partial instantiation. This happens
4349                  where C<T> is a member template of A<T> and it's used
4350                  in something like
4351                 
4352                   template <typename T> struct B { A<T>::C<int> m; };
4353                   B<float>;
4354                 
4355                  Create the partial instantiation.
4356                */
4357               TREE_VEC_LENGTH (arglist)--;
4358               found = tsubst (template, arglist, complain, NULL_TREE);
4359               TREE_VEC_LENGTH (arglist)++;
4360             }
4361         }
4362
4363       SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));  
4364       DECL_TEMPLATE_INSTANTIATIONS (template) 
4365         = tree_cons (arglist, t, 
4366                      DECL_TEMPLATE_INSTANTIATIONS (template));
4367
4368       if (TREE_CODE (t) == ENUMERAL_TYPE 
4369           && !is_partial_instantiation)
4370         /* Now that the type has been registered on the instantiations
4371            list, we set up the enumerators.  Because the enumeration
4372            constants may involve the enumeration type itself, we make
4373            sure to register the type first, and then create the
4374            constants.  That way, doing tsubst_expr for the enumeration
4375            constants won't result in recursive calls here; we'll find
4376            the instantiation and exit above.  */
4377         tsubst_enum (template_type, t, arglist);
4378
4379       /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
4380          is set up.  */
4381       if (TREE_CODE (t) != ENUMERAL_TYPE)
4382         DECL_NAME (type_decl) = classtype_mangled_name (t);
4383       if (!is_partial_instantiation)
4384         {
4385           /* For backwards compatibility; code that uses
4386              -fexternal-templates expects looking up a template to
4387              instantiate it.  I think DDD still relies on this.
4388              (jason 8/20/1998) */
4389           if (TREE_CODE (t) != ENUMERAL_TYPE
4390               && flag_external_templates
4391               && CLASSTYPE_INTERFACE_KNOWN (TREE_TYPE (template))
4392               && ! CLASSTYPE_INTERFACE_ONLY (TREE_TYPE (template)))
4393             add_pending_template (t);
4394         }
4395       else
4396         /* If the type makes use of template parameters, the
4397            code that generates debugging information will crash.  */
4398         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
4399
4400       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4401     }
4402   timevar_pop (TV_NAME_LOOKUP);
4403 }
4404 \f
4405 struct pair_fn_data 
4406 {
4407   tree_fn_t fn;
4408   void *data;
4409   htab_t visited;
4410 };
4411
4412 /* Called from for_each_template_parm via walk_tree.  */
4413
4414 static tree
4415 for_each_template_parm_r (tree* tp, int* walk_subtrees, void* d)
4416 {
4417   tree t = *tp;
4418   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
4419   tree_fn_t fn = pfd->fn;
4420   void *data = pfd->data;
4421   void **slot;
4422
4423   /* If we have already visited this tree, there's no need to walk
4424      subtrees.  Otherwise, add it to the visited table.  */
4425   slot = htab_find_slot (pfd->visited, *tp, INSERT);
4426   if (*slot)
4427     {
4428       *walk_subtrees = 0;
4429       return NULL_TREE;
4430     }
4431   *slot = *tp;
4432
4433   if (TYPE_P (t)
4434       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
4435     return error_mark_node;
4436
4437   switch (TREE_CODE (t))
4438     {
4439     case RECORD_TYPE:
4440       if (TYPE_PTRMEMFUNC_P (t))
4441         break;
4442       /* Fall through.  */
4443
4444     case UNION_TYPE:
4445     case ENUMERAL_TYPE:
4446       if (!TYPE_TEMPLATE_INFO (t))
4447         *walk_subtrees = 0;
4448       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
4449                                        fn, data, pfd->visited))
4450         return error_mark_node;
4451       break;
4452
4453     case METHOD_TYPE:
4454       /* Since we're not going to walk subtrees, we have to do this
4455          explicitly here.  */
4456       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
4457                                   pfd->visited))
4458         return error_mark_node;
4459       /* Fall through.  */
4460
4461     case FUNCTION_TYPE:
4462       /* Check the return type.  */
4463       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4464         return error_mark_node;
4465
4466       /* Check the parameter types.  Since default arguments are not
4467          instantiated until they are needed, the TYPE_ARG_TYPES may
4468          contain expressions that involve template parameters.  But,
4469          no-one should be looking at them yet.  And, once they're
4470          instantiated, they don't contain template parameters, so
4471          there's no point in looking at them then, either.  */
4472       {
4473         tree parm;
4474
4475         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4476           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
4477                                       pfd->visited))
4478             return error_mark_node;
4479
4480         /* Since we've already handled the TYPE_ARG_TYPES, we don't
4481            want walk_tree walking into them itself.  */
4482         *walk_subtrees = 0;
4483       }
4484       break;
4485
4486     case TYPEOF_TYPE:
4487       if (for_each_template_parm (TYPE_FIELDS (t), fn, data, 
4488                                   pfd->visited))
4489         return error_mark_node;
4490       break;
4491
4492     case FUNCTION_DECL:
4493     case VAR_DECL:
4494       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
4495           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
4496                                      pfd->visited))
4497         return error_mark_node;
4498       /* Fall through.  */
4499
4500     case PARM_DECL:
4501     case CONST_DECL:
4502       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
4503           && for_each_template_parm (DECL_INITIAL (t), fn, data,
4504                                      pfd->visited))
4505         return error_mark_node;
4506       if (DECL_CONTEXT (t) 
4507           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
4508                                      pfd->visited))
4509         return error_mark_node;
4510       break;
4511
4512     case BOUND_TEMPLATE_TEMPLATE_PARM:
4513       /* Record template parameters such as `T' inside `TT<T>'.  */
4514       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
4515         return error_mark_node;
4516       /* Fall through.  */
4517
4518     case TEMPLATE_TEMPLATE_PARM:
4519     case TEMPLATE_TYPE_PARM:
4520     case TEMPLATE_PARM_INDEX:
4521       if (fn && (*fn)(t, data))
4522         return error_mark_node;
4523       else if (!fn)
4524         return error_mark_node;
4525       break;
4526
4527     case TEMPLATE_DECL:
4528       /* A template template parameter is encountered */
4529       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
4530           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4531         return error_mark_node;
4532
4533       /* Already substituted template template parameter */
4534       *walk_subtrees = 0;
4535       break;
4536
4537     case TYPENAME_TYPE:
4538       if (!fn 
4539           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
4540                                      data, pfd->visited))
4541         return error_mark_node;
4542       break;
4543
4544     case CONSTRUCTOR:
4545       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
4546           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4547                                      (TREE_TYPE (t)), fn, data,
4548                                      pfd->visited))
4549         return error_mark_node;
4550       break;
4551       
4552     case INDIRECT_REF:
4553     case COMPONENT_REF:
4554       /* If there's no type, then this thing must be some expression
4555          involving template parameters.  */
4556       if (!fn && !TREE_TYPE (t))
4557         return error_mark_node;
4558       break;
4559
4560     case MODOP_EXPR:
4561     case CAST_EXPR:
4562     case REINTERPRET_CAST_EXPR:
4563     case CONST_CAST_EXPR:
4564     case STATIC_CAST_EXPR:
4565     case DYNAMIC_CAST_EXPR:
4566     case ARROW_EXPR:
4567     case DOTSTAR_EXPR:
4568     case TYPEID_EXPR:
4569     case PSEUDO_DTOR_EXPR:
4570       if (!fn)
4571         return error_mark_node;
4572       break;
4573
4574     case BASELINK:
4575       /* If we do not handle this case specially, we end up walking
4576          the BINFO hierarchy, which is circular, and therefore
4577          confuses walk_tree.  */
4578       *walk_subtrees = 0;
4579       if (for_each_template_parm (BASELINK_FUNCTIONS (*tp), fn, data,
4580                                   pfd->visited))
4581         return error_mark_node;
4582       break;
4583
4584     default:
4585       break;
4586     }
4587
4588   /* We didn't find any template parameters we liked.  */
4589   return NULL_TREE;
4590 }
4591
4592 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM, 
4593    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T, 
4594    call FN with the parameter and the DATA.
4595    If FN returns nonzero, the iteration is terminated, and
4596    for_each_template_parm returns 1.  Otherwise, the iteration
4597    continues.  If FN never returns a nonzero value, the value
4598    returned by for_each_template_parm is 0.  If FN is NULL, it is
4599    considered to be the function which always returns 1.  */
4600
4601 static int
4602 for_each_template_parm (tree t, tree_fn_t fn, void* data, htab_t visited)
4603 {
4604   struct pair_fn_data pfd;
4605   int result;
4606
4607   /* Set up.  */
4608   pfd.fn = fn;
4609   pfd.data = data;
4610
4611   /* Walk the tree.  (Conceptually, we would like to walk without
4612      duplicates, but for_each_template_parm_r recursively calls
4613      for_each_template_parm, so we would need to reorganize a fair
4614      bit to use walk_tree_without_duplicates, so we keep our own
4615      visited list.)  */
4616   if (visited)
4617     pfd.visited = visited;
4618   else
4619     pfd.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer, 
4620                                NULL);
4621   result = walk_tree (&t, 
4622                       for_each_template_parm_r, 
4623                       &pfd,
4624                       NULL) != NULL_TREE;
4625
4626   /* Clean up.  */
4627   if (!visited)
4628     htab_delete (pfd.visited);
4629
4630   return result;
4631 }
4632
4633 int
4634 uses_template_parms (tree t)
4635 {
4636   return for_each_template_parm (t, 0, 0, NULL);
4637 }
4638
4639 static int tinst_depth;
4640 extern int max_tinst_depth;
4641 #ifdef GATHER_STATISTICS
4642 int depth_reached;
4643 #endif
4644 static int tinst_level_tick;
4645 static int last_template_error_tick;
4646
4647 /* We're starting to instantiate D; record the template instantiation context
4648    for diagnostics and to restore it later.  */
4649
4650 int
4651 push_tinst_level (tree d)
4652 {
4653   tree new;
4654
4655   if (tinst_depth >= max_tinst_depth)
4656     {
4657       /* If the instantiation in question still has unbound template parms,
4658          we don't really care if we can't instantiate it, so just return.
4659          This happens with base instantiation for implicit `typename'.  */
4660       if (uses_template_parms (d))
4661         return 0;
4662
4663       last_template_error_tick = tinst_level_tick;
4664       error ("template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'",
4665              max_tinst_depth, d);
4666
4667       print_instantiation_context ();
4668
4669       return 0;
4670     }
4671
4672   new = build_expr_wfl (d, input_filename, input_line, 0);
4673   TREE_CHAIN (new) = current_tinst_level;
4674   current_tinst_level = new;
4675
4676   ++tinst_depth;
4677 #ifdef GATHER_STATISTICS
4678   if (tinst_depth > depth_reached)
4679     depth_reached = tinst_depth;
4680 #endif
4681
4682   ++tinst_level_tick;
4683   return 1;
4684 }
4685
4686 /* We're done instantiating this template; return to the instantiation
4687    context.  */
4688
4689 void
4690 pop_tinst_level (void)
4691 {
4692   tree old = current_tinst_level;
4693
4694   /* Restore the filename and line number stashed away when we started
4695      this instantiation.  */
4696   input_line = TINST_LINE (old);
4697   input_filename = TINST_FILE (old);
4698   extract_interface_info ();
4699   
4700   current_tinst_level = TREE_CHAIN (old);
4701   --tinst_depth;
4702   ++tinst_level_tick;
4703 }
4704
4705 /* We're instantiating a deferred template; restore the template
4706    instantiation context in which the instantiation was requested, which
4707    is one step out from LEVEL.  */
4708
4709 static void
4710 reopen_tinst_level (tree level)
4711 {
4712   tree t;
4713
4714   tinst_depth = 0;
4715   for (t = level; t; t = TREE_CHAIN (t))
4716     ++tinst_depth;
4717
4718   current_tinst_level = level;
4719   pop_tinst_level ();
4720 }
4721
4722 /* Return the outermost template instantiation context, for use with
4723    -falt-external-templates.  */
4724
4725 tree
4726 tinst_for_decl (void)
4727 {
4728   tree p = current_tinst_level;
4729
4730   if (p)
4731     for (; TREE_CHAIN (p) ; p = TREE_CHAIN (p))
4732       ;
4733   return p;
4734 }
4735
4736 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
4737    vector of template arguments, as for tsubst.
4738
4739    Returns an appropriate tsubst'd friend declaration.  */
4740
4741 static tree
4742 tsubst_friend_function (tree decl, tree args)
4743 {
4744   tree new_friend;
4745   location_t saved_loc = input_location;
4746
4747   input_location = DECL_SOURCE_LOCATION (decl);
4748
4749   if (TREE_CODE (decl) == FUNCTION_DECL 
4750       && DECL_TEMPLATE_INSTANTIATION (decl)
4751       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
4752     /* This was a friend declared with an explicit template
4753        argument list, e.g.:
4754        
4755        friend void f<>(T);
4756        
4757        to indicate that f was a template instantiation, not a new
4758        function declaration.  Now, we have to figure out what
4759        instantiation of what template.  */
4760     {
4761       tree template_id, arglist, fns;
4762       tree new_args;
4763       tree tmpl;
4764       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
4765       
4766       /* Friend functions are looked up in the containing namespace scope.
4767          We must enter that scope, to avoid finding member functions of the
4768          current cless with same name.  */
4769       push_nested_namespace (ns);
4770       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
4771                          tf_error | tf_warning, NULL_TREE);
4772       pop_nested_namespace (ns);
4773       arglist = tsubst (DECL_TI_ARGS (decl), args,
4774                         tf_error | tf_warning, NULL_TREE);
4775       template_id = lookup_template_function (fns, arglist);
4776       
4777       new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
4778       tmpl = determine_specialization (template_id, new_friend,
4779                                        &new_args, 
4780                                        /*need_member_template=*/0);
4781       new_friend = instantiate_template (tmpl, new_args, tf_error);
4782       goto done;
4783     }
4784
4785   new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
4786         
4787   /* The NEW_FRIEND will look like an instantiation, to the
4788      compiler, but is not an instantiation from the point of view of
4789      the language.  For example, we might have had:
4790      
4791      template <class T> struct S {
4792        template <class U> friend void f(T, U);
4793      };
4794      
4795      Then, in S<int>, template <class U> void f(int, U) is not an
4796      instantiation of anything.  */
4797   DECL_USE_TEMPLATE (new_friend) = 0;
4798   if (TREE_CODE (decl) == TEMPLATE_DECL)
4799     {
4800       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
4801       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
4802         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
4803     }
4804
4805   /* The mangled name for the NEW_FRIEND is incorrect.  The function
4806      is not a template instantiation and should not be mangled like
4807      one.  Therefore, we forget the mangling here; we'll recompute it
4808      later if we need it.  */
4809   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
4810     {
4811       SET_DECL_RTL (new_friend, NULL_RTX);
4812       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
4813     }
4814       
4815   if (DECL_NAMESPACE_SCOPE_P (new_friend))
4816     {
4817       tree old_decl;
4818       tree new_friend_template_info;
4819       tree new_friend_result_template_info;
4820       tree ns;
4821       int  new_friend_is_defn;
4822
4823       /* We must save some information from NEW_FRIEND before calling
4824          duplicate decls since that function will free NEW_FRIEND if
4825          possible.  */
4826       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
4827       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
4828         {
4829           /* This declaration is a `primary' template.  */
4830           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
4831           
4832           new_friend_is_defn 
4833             = DECL_INITIAL (DECL_TEMPLATE_RESULT (new_friend)) != NULL_TREE;
4834           new_friend_result_template_info
4835             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
4836         }
4837       else
4838         {
4839           new_friend_is_defn = DECL_INITIAL (new_friend) != NULL_TREE;
4840           new_friend_result_template_info = NULL_TREE;
4841         }
4842
4843       /* Inside pushdecl_namespace_level, we will push into the
4844          current namespace. However, the friend function should go
4845          into the namespace of the template.  */
4846       ns = decl_namespace_context (new_friend);
4847       push_nested_namespace (ns);
4848       old_decl = pushdecl_namespace_level (new_friend);
4849       pop_nested_namespace (ns);
4850
4851       if (old_decl != new_friend)
4852         {
4853           /* This new friend declaration matched an existing
4854              declaration.  For example, given:
4855
4856                template <class T> void f(T);
4857                template <class U> class C { 
4858                  template <class T> friend void f(T) {} 
4859                };
4860
4861              the friend declaration actually provides the definition
4862              of `f', once C has been instantiated for some type.  So,
4863              old_decl will be the out-of-class template declaration,
4864              while new_friend is the in-class definition.
4865
4866              But, if `f' was called before this point, the
4867              instantiation of `f' will have DECL_TI_ARGS corresponding
4868              to `T' but not to `U', references to which might appear
4869              in the definition of `f'.  Previously, the most general
4870              template for an instantiation of `f' was the out-of-class
4871              version; now it is the in-class version.  Therefore, we
4872              run through all specialization of `f', adding to their
4873              DECL_TI_ARGS appropriately.  In particular, they need a
4874              new set of outer arguments, corresponding to the
4875              arguments for this class instantiation.  
4876
4877              The same situation can arise with something like this:
4878
4879                friend void f(int);
4880                template <class T> class C { 
4881                  friend void f(T) {}
4882                };
4883
4884              when `C<int>' is instantiated.  Now, `f(int)' is defined
4885              in the class.  */
4886
4887           if (!new_friend_is_defn)
4888             /* On the other hand, if the in-class declaration does
4889                *not* provide a definition, then we don't want to alter
4890                existing definitions.  We can just leave everything
4891                alone.  */
4892             ;
4893           else
4894             {
4895               /* Overwrite whatever template info was there before, if
4896                  any, with the new template information pertaining to
4897                  the declaration.  */
4898               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
4899
4900               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
4901                 reregister_specialization (new_friend,
4902                                            most_general_template (old_decl),
4903                                            old_decl);
4904               else 
4905                 {
4906                   tree t;
4907                   tree new_friend_args;
4908
4909                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl)) 
4910                     = new_friend_result_template_info;
4911                     
4912                   new_friend_args = TI_ARGS (new_friend_template_info);
4913                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl); 
4914                        t != NULL_TREE;
4915                        t = TREE_CHAIN (t))
4916                     {
4917                       tree spec = TREE_VALUE (t);
4918                   
4919                       DECL_TI_ARGS (spec) 
4920                         = add_outermost_template_args (new_friend_args,
4921                                                        DECL_TI_ARGS (spec));
4922                     }
4923
4924                   /* Now, since specializations are always supposed to
4925                      hang off of the most general template, we must move
4926                      them.  */
4927                   t = most_general_template (old_decl);
4928                   if (t != old_decl)
4929                     {
4930                       DECL_TEMPLATE_SPECIALIZATIONS (t)
4931                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
4932                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
4933                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
4934                     }
4935                 }
4936             }
4937
4938           /* The information from NEW_FRIEND has been merged into OLD_DECL
4939              by duplicate_decls.  */
4940           new_friend = old_decl;
4941         }
4942     }
4943   else if (COMPLETE_TYPE_P (DECL_CONTEXT (new_friend)))
4944     {
4945       /* Check to see that the declaration is really present, and,
4946          possibly obtain an improved declaration.  */
4947       tree fn = check_classfn (DECL_CONTEXT (new_friend),
4948                                new_friend);
4949       
4950       if (fn)
4951         new_friend = fn;
4952     }
4953
4954  done:
4955   input_location = saved_loc;
4956   return new_friend;
4957 }
4958
4959 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
4960    template arguments, as for tsubst.
4961
4962    Returns an appropriate tsubst'd friend type or error_mark_node on
4963    failure.  */
4964
4965 static tree
4966 tsubst_friend_class (tree friend_tmpl, tree args)
4967 {
4968   tree friend_type;
4969   tree tmpl;
4970   tree context;
4971
4972   context = DECL_CONTEXT (friend_tmpl);
4973
4974   if (context)
4975     {
4976       if (TREE_CODE (context) == NAMESPACE_DECL)
4977         push_nested_namespace (context);
4978       else
4979         push_nested_class (tsubst (context, args, tf_none, NULL_TREE)); 
4980     }
4981
4982   /* First, we look for a class template.  */
4983   tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/0); 
4984
4985   /* But, if we don't find one, it might be because we're in a
4986      situation like this:
4987
4988        template <class T>
4989        struct S {
4990          template <class U>
4991          friend struct S;
4992        };
4993
4994      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
4995      for `S<int>', not the TEMPLATE_DECL.  */
4996   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
4997     {
4998       tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/1);
4999       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
5000     }
5001
5002   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
5003     {
5004       /* The friend template has already been declared.  Just
5005          check to see that the declarations match, and install any new
5006          default parameters.  We must tsubst the default parameters,
5007          of course.  We only need the innermost template parameters
5008          because that is all that redeclare_class_template will look
5009          at.  */
5010       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
5011           > TMPL_ARGS_DEPTH (args))
5012         {
5013           tree parms;
5014           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
5015                                          args, tf_error | tf_warning);
5016           redeclare_class_template (TREE_TYPE (tmpl), parms);
5017         }
5018
5019       friend_type = TREE_TYPE (tmpl);
5020     }
5021   else
5022     {
5023       /* The friend template has not already been declared.  In this
5024          case, the instantiation of the template class will cause the
5025          injection of this template into the global scope.  */
5026       tmpl = tsubst (friend_tmpl, args, tf_error | tf_warning, NULL_TREE);
5027
5028       /* The new TMPL is not an instantiation of anything, so we
5029          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
5030          the new type because that is supposed to be the corresponding
5031          template decl, i.e., TMPL.  */
5032       DECL_USE_TEMPLATE (tmpl) = 0;
5033       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
5034       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
5035
5036       /* Inject this template into the global scope.  */
5037       friend_type = TREE_TYPE (pushdecl_top_level (tmpl));
5038     }
5039
5040   if (context) 
5041     {
5042       if (TREE_CODE (context) == NAMESPACE_DECL)
5043         pop_nested_namespace (context);
5044       else
5045         pop_nested_class ();
5046     }
5047
5048   return friend_type;
5049 }
5050
5051 /* Returns zero if TYPE cannot be completed later due to circularity.
5052    Otherwise returns one.  */
5053
5054 static int
5055 can_complete_type_without_circularity (tree type)
5056 {
5057   if (type == NULL_TREE || type == error_mark_node)
5058     return 0;
5059   else if (COMPLETE_TYPE_P (type))
5060     return 1;
5061   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
5062     return can_complete_type_without_circularity (TREE_TYPE (type));
5063   else if (CLASS_TYPE_P (type)
5064            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
5065     return 0;
5066   else
5067     return 1;
5068 }
5069
5070 tree
5071 instantiate_class_template (tree type)
5072 {
5073   tree template, args, pattern, t, member;
5074   tree typedecl;
5075   tree pbinfo;
5076   
5077   if (type == error_mark_node)
5078     return error_mark_node;
5079
5080   if (TYPE_BEING_DEFINED (type) 
5081       || COMPLETE_TYPE_P (type)
5082       || dependent_type_p (type))
5083     return type;
5084
5085   /* Figure out which template is being instantiated.  */
5086   template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
5087   my_friendly_assert (TREE_CODE (template) == TEMPLATE_DECL, 279);
5088
5089   /* Figure out which arguments are being used to do the
5090      instantiation.  */
5091   args = CLASSTYPE_TI_ARGS (type);
5092
5093   /* Determine what specialization of the original template to
5094      instantiate.  */
5095   t = most_specialized_class (template, args);
5096   if (t == error_mark_node)
5097     {
5098       const char *str = "candidates are:";
5099       error ("ambiguous class template instantiation for `%#T'", type);
5100       for (t = DECL_TEMPLATE_SPECIALIZATIONS (template); t; 
5101            t = TREE_CHAIN (t))
5102         {
5103           if (get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args))
5104             {
5105               cp_error_at ("%s %+#T", str, TREE_TYPE (t));
5106               str = "               ";
5107             }
5108         }
5109       TYPE_BEING_DEFINED (type) = 1;
5110       return error_mark_node;
5111     }
5112
5113   if (t)
5114     pattern = TREE_TYPE (t);
5115   else
5116     pattern = TREE_TYPE (template);
5117
5118   /* If the template we're instantiating is incomplete, then clearly
5119      there's nothing we can do.  */
5120   if (!COMPLETE_TYPE_P (pattern))
5121     return type;
5122
5123   /* If we've recursively instantiated too many templates, stop.  */
5124   if (! push_tinst_level (type))
5125     return type;
5126
5127   /* Now we're really doing the instantiation.  Mark the type as in
5128      the process of being defined.  */
5129   TYPE_BEING_DEFINED (type) = 1;
5130
5131   /* We may be in the middle of deferred access check.  Disable
5132      it now.  */
5133   push_deferring_access_checks (dk_no_deferred);
5134
5135   maybe_push_to_top_level (uses_template_parms (type));
5136
5137   if (t)
5138     {
5139       /* This TYPE is actually an instantiation of a partial
5140          specialization.  We replace the innermost set of ARGS with
5141          the arguments appropriate for substitution.  For example,
5142          given:
5143
5144            template <class T> struct S {};
5145            template <class T> struct S<T*> {};
5146          
5147          and supposing that we are instantiating S<int*>, ARGS will
5148          present be {int*} but we need {int}.  */
5149       tree inner_args 
5150         = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
5151                               args);
5152
5153       /* If there were multiple levels in ARGS, replacing the
5154          innermost level would alter CLASSTYPE_TI_ARGS, which we don't
5155          want, so we make a copy first.  */
5156       if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
5157         {
5158           args = copy_node (args);
5159           SET_TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args), inner_args);
5160         }
5161       else
5162         args = inner_args;
5163     }
5164
5165   if (flag_external_templates)
5166     {
5167       if (flag_alt_external_templates)
5168         {
5169           CLASSTYPE_INTERFACE_ONLY (type) = interface_only;
5170           SET_CLASSTYPE_INTERFACE_UNKNOWN_X (type, interface_unknown);
5171         }
5172       else
5173         {
5174           CLASSTYPE_INTERFACE_ONLY (type) = CLASSTYPE_INTERFACE_ONLY (pattern);
5175           SET_CLASSTYPE_INTERFACE_UNKNOWN_X
5176             (type, CLASSTYPE_INTERFACE_UNKNOWN (pattern));
5177         }
5178     }
5179   else
5180     {
5181       SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
5182     }
5183
5184   TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
5185   TYPE_HAS_DESTRUCTOR (type) = TYPE_HAS_DESTRUCTOR (pattern);
5186   TYPE_OVERLOADS_CALL_EXPR (type) = TYPE_OVERLOADS_CALL_EXPR (pattern);
5187   TYPE_OVERLOADS_ARRAY_REF (type) = TYPE_OVERLOADS_ARRAY_REF (pattern);
5188   TYPE_OVERLOADS_ARROW (type) = TYPE_OVERLOADS_ARROW (pattern);
5189   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
5190   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
5191   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
5192   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
5193   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
5194   TYPE_HAS_ABSTRACT_ASSIGN_REF (type) = TYPE_HAS_ABSTRACT_ASSIGN_REF (pattern);
5195   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
5196   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
5197   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
5198   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
5199   TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (type)
5200     = TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (pattern);
5201   TYPE_USES_MULTIPLE_INHERITANCE (type)
5202     = TYPE_USES_MULTIPLE_INHERITANCE (pattern);
5203   TYPE_USES_VIRTUAL_BASECLASSES (type)
5204     = TYPE_USES_VIRTUAL_BASECLASSES (pattern);
5205   TYPE_PACKED (type) = TYPE_PACKED (pattern);
5206   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
5207   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
5208   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
5209   if (ANON_AGGR_TYPE_P (pattern))
5210     SET_ANON_AGGR_TYPE_P (type);
5211
5212   pbinfo = TYPE_BINFO (pattern);
5213   
5214   if (BINFO_BASETYPES (pbinfo))
5215     {
5216       tree base_list = NULL_TREE;
5217       tree pbases = BINFO_BASETYPES (pbinfo);
5218       tree paccesses = BINFO_BASEACCESSES (pbinfo);
5219       int i;
5220
5221       /* Substitute into each of the bases to determine the actual
5222          basetypes.  */
5223       for (i = 0; i < TREE_VEC_LENGTH (pbases); ++i)
5224         {
5225           tree base;
5226           tree access;
5227           tree pbase;
5228
5229           pbase = TREE_VEC_ELT (pbases, i);
5230           access = TREE_VEC_ELT (paccesses, i);
5231
5232           /* Substitute to figure out the base class.  */
5233           base = tsubst (BINFO_TYPE (pbase), args, tf_error, NULL_TREE);
5234           if (base == error_mark_node)
5235             continue;
5236           
5237           base_list = tree_cons (access, base, base_list);
5238           TREE_VIA_VIRTUAL (base_list) = TREE_VIA_VIRTUAL (pbase);
5239         }
5240
5241       /* The list is now in reverse order; correct that.  */
5242       base_list = nreverse (base_list);
5243
5244       /* Now call xref_basetypes to set up all the base-class
5245          information.  */
5246       xref_basetypes (type, base_list);
5247     }
5248
5249   /* Now that our base classes are set up, enter the scope of the
5250      class, so that name lookups into base classes, etc. will work
5251      correctly.  This is precisely analogous to what we do in
5252      begin_class_definition when defining an ordinary non-template
5253      class.  */
5254   pushclass (type, true);
5255
5256   /* Now members are processed in the order of declaration.  */
5257   for (member = CLASSTYPE_DECL_LIST (pattern);
5258        member; member = TREE_CHAIN (member))
5259     {
5260       tree t = TREE_VALUE (member);
5261
5262       if (TREE_PURPOSE (member))
5263         {
5264           if (TYPE_P (t))
5265             {
5266               /* Build new CLASSTYPE_NESTED_UTDS.  */
5267
5268               tree tag = t;
5269               tree name = TYPE_IDENTIFIER (tag);
5270               tree newtag;
5271
5272               newtag = tsubst (tag, args, tf_error, NULL_TREE);
5273               my_friendly_assert (newtag != error_mark_node, 20010206);
5274               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
5275                 {
5276                   if (TYPE_LANG_SPECIFIC (tag) && CLASSTYPE_IS_TEMPLATE (tag))
5277                     /* Unfortunately, lookup_template_class sets
5278                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
5279                        instantiation (i.e., for the type of a member template
5280                        class nested within a template class.)  This behavior is
5281                        required for maybe_process_partial_specialization to work
5282                        correctly, but is not accurate in this case; the TAG is not
5283                        an instantiation of anything.  (The corresponding
5284                        TEMPLATE_DECL is an instantiation, but the TYPE is not.) */
5285                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
5286
5287                   /* Now, we call pushtag to put this NEWTAG into the scope of
5288                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
5289                      pushtag calling push_template_decl.  We don't have to do
5290                      this for enums because it will already have been done in
5291                      tsubst_enum.  */
5292                   if (name)
5293                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
5294                   pushtag (name, newtag, /*globalize=*/0);
5295                 }
5296             }
5297           else if (TREE_CODE (t) == FUNCTION_DECL 
5298                    || DECL_FUNCTION_TEMPLATE_P (t))
5299             {
5300               /* Build new TYPE_METHODS.  */
5301
5302               tree r = tsubst (t, args, tf_error, NULL_TREE);
5303               set_current_access_from_decl (r);
5304               grok_special_member_properties (r);
5305               finish_member_declaration (r);
5306             }
5307           else
5308             {
5309               /* Build new TYPE_FIELDS.  */
5310
5311               if (TREE_CODE (t) != CONST_DECL)
5312                 {
5313                   tree r;
5314
5315                   /* The the file and line for this declaration, to
5316                      assist in error message reporting.  Since we
5317                      called push_tinst_level above, we don't need to
5318                      restore these.  */
5319                   input_location = DECL_SOURCE_LOCATION (t);
5320
5321                   if (TREE_CODE (t) == TEMPLATE_DECL)
5322                     processing_template_decl++;
5323                   r = tsubst (t, args, tf_error | tf_warning, NULL_TREE);
5324                   if (TREE_CODE (t) == TEMPLATE_DECL)
5325                     processing_template_decl--;
5326                   if (TREE_CODE (r) == VAR_DECL)
5327                     {
5328                       tree init;
5329
5330                       if (DECL_INITIALIZED_IN_CLASS_P (r))
5331                         init = tsubst_expr (DECL_INITIAL (t), args,
5332                                             tf_error | tf_warning, NULL_TREE);
5333                       else
5334                         init = NULL_TREE;
5335
5336                       finish_static_data_member_decl
5337                         (r, init, /*asmspec_tree=*/NULL_TREE, /*flags=*/0);
5338
5339                       if (DECL_INITIALIZED_IN_CLASS_P (r))
5340                         check_static_variable_definition (r, TREE_TYPE (r));
5341                     }
5342                   else if (TREE_CODE (r) == FIELD_DECL)
5343                     {
5344                       /* Determine whether R has a valid type and can be
5345                          completed later.  If R is invalid, then it is
5346                          replaced by error_mark_node so that it will not be
5347                          added to TYPE_FIELDS.  */
5348                       tree rtype = TREE_TYPE (r);
5349                       if (can_complete_type_without_circularity (rtype))
5350                         complete_type (rtype);
5351
5352                       if (!COMPLETE_TYPE_P (rtype))
5353                         {
5354                           cxx_incomplete_type_error (r, rtype);
5355                           r = error_mark_node;
5356                         }
5357                     }
5358
5359                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
5360                      such a thing will already have been added to the field
5361                      list by tsubst_enum in finish_member_declaration in the
5362                      CLASSTYPE_NESTED_UTDS case above.  */
5363                   if (!(TREE_CODE (r) == TYPE_DECL
5364                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
5365                         && DECL_ARTIFICIAL (r)))
5366                     {
5367                       set_current_access_from_decl (r);
5368                       finish_member_declaration (r);
5369                     }
5370                 }
5371             }
5372         }
5373       else
5374         {
5375           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
5376             {
5377               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
5378
5379               tree friend_type = t;
5380               tree new_friend_type;
5381
5382               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5383                 new_friend_type = tsubst_friend_class (friend_type, args);
5384               else if (uses_template_parms (friend_type))
5385                 new_friend_type = tsubst (friend_type, args,
5386                                           tf_error | tf_warning, NULL_TREE);
5387               else if (CLASSTYPE_USE_TEMPLATE (friend_type))
5388                 new_friend_type = friend_type;
5389               else 
5390                 {
5391                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
5392
5393                   /* The call to xref_tag_from_type does injection for friend
5394                      classes.  */
5395                   push_nested_namespace (ns);
5396                   new_friend_type = 
5397                     xref_tag_from_type (friend_type, NULL_TREE, 1);
5398                   pop_nested_namespace (ns);
5399                 }
5400
5401               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5402                 /* Trick make_friend_class into realizing that the friend
5403                    we're adding is a template, not an ordinary class.  It's
5404                    important that we use make_friend_class since it will
5405                    perform some error-checking and output cross-reference
5406                    information.  */
5407                 ++processing_template_decl;
5408
5409               if (new_friend_type != error_mark_node)
5410                 make_friend_class (type, new_friend_type);
5411
5412               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5413                 --processing_template_decl;
5414             }
5415           else
5416             /* Build new DECL_FRIENDLIST.  */
5417             add_friend (type, tsubst_friend_function (t, args));
5418         }
5419     }
5420
5421   /* Set the file and line number information to whatever is given for
5422      the class itself.  This puts error messages involving generated
5423      implicit functions at a predictable point, and the same point
5424      that would be used for non-template classes.  */
5425   typedecl = TYPE_MAIN_DECL (type);
5426   input_location = DECL_SOURCE_LOCATION (typedecl);
5427   
5428   unreverse_member_declarations (type);
5429   finish_struct_1 (type);
5430   CLASSTYPE_GOT_SEMICOLON (type) = 1;
5431
5432   /* Clear this now so repo_template_used is happy.  */
5433   TYPE_BEING_DEFINED (type) = 0;
5434   repo_template_used (type);
5435
5436   /* Now that the class is complete, instantiate default arguments for
5437      any member functions.  We don't do this earlier because the
5438      default arguments may reference members of the class.  */
5439   if (!PRIMARY_TEMPLATE_P (template))
5440     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
5441       if (TREE_CODE (t) == FUNCTION_DECL 
5442           /* Implicitly generated member functions will not have template
5443              information; they are not instantiations, but instead are
5444              created "fresh" for each instantiation.  */
5445           && DECL_TEMPLATE_INFO (t))
5446         tsubst_default_arguments (t);
5447
5448   popclass ();
5449   pop_from_top_level ();
5450   pop_deferring_access_checks ();
5451   pop_tinst_level ();
5452
5453   if (TYPE_CONTAINS_VPTR_P (type))
5454     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
5455
5456   return type;
5457 }
5458
5459 static int
5460 list_eq (tree t1, tree t2)
5461 {
5462   if (t1 == NULL_TREE)
5463     return t2 == NULL_TREE;
5464   if (t2 == NULL_TREE)
5465     return 0;
5466   /* Don't care if one declares its arg const and the other doesn't -- the
5467      main variant of the arg type is all that matters.  */
5468   if (TYPE_MAIN_VARIANT (TREE_VALUE (t1))
5469       != TYPE_MAIN_VARIANT (TREE_VALUE (t2)))
5470     return 0;
5471   return list_eq (TREE_CHAIN (t1), TREE_CHAIN (t2));
5472 }
5473
5474 static tree
5475 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5476 {
5477   tree r;
5478   
5479   if (!t)
5480     r = t;
5481   else if (TYPE_P (t))
5482     r = tsubst (t, args, complain, in_decl);
5483   else
5484     {
5485       r = tsubst_expr (t, args, complain, in_decl);
5486
5487       if (!uses_template_parms (r))
5488         {
5489           /* Sometimes, one of the args was an expression involving a
5490              template constant parameter, like N - 1.  Now that we've
5491              tsubst'd, we might have something like 2 - 1.  This will
5492              confuse lookup_template_class, so we do constant folding
5493              here.  We have to unset processing_template_decl, to fool
5494              tsubst_copy_and_build() into building an actual tree.  */
5495
5496          /* If the TREE_TYPE of ARG is not NULL_TREE, ARG is already
5497             as simple as it's going to get, and trying to reprocess
5498             the trees will break.  Once tsubst_expr et al DTRT for
5499             non-dependent exprs, this code can go away, as the type
5500             will always be set.  */
5501           if (!TREE_TYPE (r))
5502             {
5503               int saved_processing_template_decl = processing_template_decl; 
5504               processing_template_decl = 0;
5505               r = tsubst_copy_and_build (r, /*args=*/NULL_TREE,
5506                                          tf_error, /*in_decl=*/NULL_TREE,
5507                                          /*function_p=*/false);
5508               processing_template_decl = saved_processing_template_decl; 
5509             }
5510           r = fold (r);
5511         }
5512     }
5513   return r;
5514 }
5515
5516 /* Substitute ARGS into the vector or list of template arguments T.  */
5517
5518 static tree
5519 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5520 {
5521   int is_list = !(t && TREE_CODE (t) == TREE_VEC);
5522   int len = is_list ? list_length (t) : TREE_VEC_LENGTH (t);
5523   int need_new = 0, i;
5524   tree position = t;
5525   tree *elts = alloca (len * sizeof (tree));
5526   
5527   for (i = 0; i < len; i++)
5528     {
5529       tree orig_arg;
5530       tree new_arg = NULL_TREE;
5531
5532       if (is_list)
5533         {
5534           orig_arg = TREE_VALUE (position);
5535           position = TREE_CHAIN (position);
5536         }
5537       else
5538         {
5539           orig_arg = TREE_VEC_ELT (t, i);
5540           if (TREE_CODE (orig_arg) == TREE_VEC)
5541             new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
5542         }
5543
5544       if (!new_arg)
5545         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
5546       
5547       if (new_arg == error_mark_node)
5548         return error_mark_node;
5549
5550       elts[i] = new_arg;
5551       if (new_arg != orig_arg)
5552         need_new = 1;
5553     }
5554   
5555   if (!need_new)
5556     return t;
5557
5558   if (is_list)
5559     {
5560       t = NULL_TREE;
5561
5562       for (i = len; i--;)
5563         t = tree_cons (NULL_TREE, elts[i], t);
5564     }
5565   else
5566     {
5567       t = make_tree_vec (len);
5568       for (i = 0; i < len; i++)
5569         TREE_VEC_ELT (t, i) = elts[i];
5570     }
5571   
5572   return t;
5573 }
5574
5575 /* Return the result of substituting ARGS into the template parameters
5576    given by PARMS.  If there are m levels of ARGS and m + n levels of
5577    PARMS, then the result will contain n levels of PARMS.  For
5578    example, if PARMS is `template <class T> template <class U>
5579    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
5580    result will be `template <int*, double, class V>'.  */
5581
5582 static tree
5583 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
5584 {
5585   tree r = NULL_TREE;
5586   tree* new_parms;
5587
5588   for (new_parms = &r;
5589        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
5590        new_parms = &(TREE_CHAIN (*new_parms)),
5591          parms = TREE_CHAIN (parms))
5592     {
5593       tree new_vec = 
5594         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
5595       int i;
5596       
5597       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
5598         {
5599           tree tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
5600           tree default_value = TREE_PURPOSE (tuple);
5601           tree parm_decl = TREE_VALUE (tuple);
5602
5603           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
5604           default_value = tsubst_template_arg (default_value, args,
5605                                                complain, NULL_TREE);
5606           
5607           tuple = build_tree_list (default_value, parm_decl);
5608           TREE_VEC_ELT (new_vec, i) = tuple;
5609         }
5610       
5611       *new_parms = 
5612         tree_cons (size_int (TMPL_PARMS_DEPTH (parms) 
5613                              - TMPL_ARGS_DEPTH (args)),
5614                    new_vec, NULL_TREE);
5615     }
5616
5617   return r;
5618 }
5619
5620 /* Substitute the ARGS into the indicated aggregate (or enumeration)
5621    type T.  If T is not an aggregate or enumeration type, it is
5622    handled as if by tsubst.  IN_DECL is as for tsubst.  If
5623    ENTERING_SCOPE is nonzero, T is the context for a template which
5624    we are presently tsubst'ing.  Return the substituted value.  */
5625
5626 static tree
5627 tsubst_aggr_type (tree t, 
5628                   tree args, 
5629                   tsubst_flags_t complain, 
5630                   tree in_decl, 
5631                   int entering_scope)
5632 {
5633   if (t == NULL_TREE)
5634     return NULL_TREE;
5635
5636   switch (TREE_CODE (t))
5637     {
5638     case RECORD_TYPE:
5639       if (TYPE_PTRMEMFUNC_P (t))
5640         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
5641
5642       /* else fall through */
5643     case ENUMERAL_TYPE:
5644     case UNION_TYPE:
5645       if (TYPE_TEMPLATE_INFO (t))
5646         {
5647           tree argvec;
5648           tree context;
5649           tree r;
5650
5651           /* First, determine the context for the type we are looking
5652              up.  */
5653           if (TYPE_CONTEXT (t) != NULL_TREE)
5654             context = tsubst_aggr_type (TYPE_CONTEXT (t), args,
5655                                         complain,
5656                                         in_decl, /*entering_scope=*/1);
5657           else
5658             context = NULL_TREE;
5659
5660           /* Then, figure out what arguments are appropriate for the
5661              type we are trying to find.  For example, given:
5662
5663                template <class T> struct S;
5664                template <class T, class U> void f(T, U) { S<U> su; }
5665
5666              and supposing that we are instantiating f<int, double>,
5667              then our ARGS will be {int, double}, but, when looking up
5668              S we only want {double}.  */
5669           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
5670                                          complain, in_decl);
5671           if (argvec == error_mark_node)
5672             return error_mark_node;
5673
5674           r = lookup_template_class (t, argvec, in_decl, context,
5675                                      entering_scope, complain);
5676
5677           return cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
5678         }
5679       else 
5680         /* This is not a template type, so there's nothing to do.  */
5681         return t;
5682
5683     default:
5684       return tsubst (t, args, complain, in_decl);
5685     }
5686 }
5687
5688 /* Substitute into the default argument ARG (a default argument for
5689    FN), which has the indicated TYPE.  */
5690
5691 tree
5692 tsubst_default_argument (tree fn, tree type, tree arg)
5693 {
5694   /* This default argument came from a template.  Instantiate the
5695      default argument here, not in tsubst.  In the case of
5696      something like: 
5697      
5698        template <class T>
5699        struct S {
5700          static T t();
5701          void f(T = t());
5702        };
5703      
5704      we must be careful to do name lookup in the scope of S<T>,
5705      rather than in the current class.
5706
5707      ??? current_class_type affects a lot more than name lookup.  This is
5708      very fragile.  Fortunately, it will go away when we do 2-phase name
5709      binding properly.  */
5710
5711   /* FN is already the desired FUNCTION_DECL.  */
5712   push_access_scope (fn);
5713
5714   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
5715                      tf_error | tf_warning, NULL_TREE);
5716   
5717   pop_access_scope (fn);
5718
5719   /* Make sure the default argument is reasonable.  */
5720   arg = check_default_argument (type, arg);
5721
5722   return arg;
5723 }
5724
5725 /* Substitute into all the default arguments for FN.  */
5726
5727 static void
5728 tsubst_default_arguments (tree fn)
5729 {
5730   tree arg;
5731   tree tmpl_args;
5732
5733   tmpl_args = DECL_TI_ARGS (fn);
5734
5735   /* If this function is not yet instantiated, we certainly don't need
5736      its default arguments.  */
5737   if (uses_template_parms (tmpl_args))
5738     return;
5739
5740   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn)); 
5741        arg; 
5742        arg = TREE_CHAIN (arg))
5743     if (TREE_PURPOSE (arg))
5744       TREE_PURPOSE (arg) = tsubst_default_argument (fn, 
5745                                                     TREE_VALUE (arg),
5746                                                     TREE_PURPOSE (arg));
5747 }
5748
5749 /* Substitute the ARGS into the T, which is a _DECL.  TYPE is the
5750    (already computed) substitution of ARGS into TREE_TYPE (T), if
5751    appropriate.  Return the result of the substitution.  Issue error
5752    and warning messages under control of COMPLAIN.  */
5753
5754 static tree
5755 tsubst_decl (tree t, tree args, tree type, tsubst_flags_t complain)
5756 {
5757   location_t saved_loc;
5758   tree r = NULL_TREE;
5759   tree in_decl = t;
5760
5761   /* Set the filename and linenumber to improve error-reporting.  */
5762   saved_loc = input_location;
5763   input_location = DECL_SOURCE_LOCATION (t);
5764
5765   switch (TREE_CODE (t))
5766     {
5767     case TEMPLATE_DECL:
5768       {
5769         /* We can get here when processing a member template function
5770            of a template class.  */
5771         tree decl = DECL_TEMPLATE_RESULT (t);
5772         tree spec;
5773         int is_template_template_parm = DECL_TEMPLATE_TEMPLATE_PARM_P (t);
5774
5775         if (!is_template_template_parm)
5776           {
5777             /* We might already have an instance of this template.
5778                The ARGS are for the surrounding class type, so the
5779                full args contain the tsubst'd args for the context,
5780                plus the innermost args from the template decl.  */
5781             tree tmpl_args = DECL_CLASS_TEMPLATE_P (t) 
5782               ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
5783               : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
5784             tree full_args;
5785             
5786             full_args = tsubst_template_args (tmpl_args, args,
5787                                               complain, in_decl);
5788
5789             /* tsubst_template_args doesn't copy the vector if
5790                nothing changed.  But, *something* should have
5791                changed.  */
5792             my_friendly_assert (full_args != tmpl_args, 0);
5793
5794             spec = retrieve_specialization (t, full_args);
5795             if (spec != NULL_TREE)
5796               {
5797                 r = spec;
5798                 break;
5799               }
5800           }
5801
5802         /* Make a new template decl.  It will be similar to the
5803            original, but will record the current template arguments. 
5804            We also create a new function declaration, which is just
5805            like the old one, but points to this new template, rather
5806            than the old one.  */
5807         r = copy_decl (t);
5808         my_friendly_assert (DECL_LANG_SPECIFIC (r) != 0, 0);
5809         TREE_CHAIN (r) = NULL_TREE;
5810
5811         if (is_template_template_parm)
5812           {
5813             tree new_decl = tsubst (decl, args, complain, in_decl);
5814             DECL_TEMPLATE_RESULT (r) = new_decl;
5815             TREE_TYPE (r) = TREE_TYPE (new_decl);
5816             break;
5817           }
5818
5819         DECL_CONTEXT (r) 
5820           = tsubst_aggr_type (DECL_CONTEXT (t), args, 
5821                               complain, in_decl, 
5822                               /*entering_scope=*/1); 
5823         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
5824
5825         if (TREE_CODE (decl) == TYPE_DECL)
5826           {
5827             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
5828             TREE_TYPE (r) = new_type;
5829             CLASSTYPE_TI_TEMPLATE (new_type) = r;
5830             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
5831             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
5832           }
5833         else
5834           {
5835             tree new_decl = tsubst (decl, args, complain, in_decl);
5836             if (new_decl == error_mark_node)
5837               return error_mark_node;
5838
5839             DECL_TEMPLATE_RESULT (r) = new_decl;
5840             DECL_TI_TEMPLATE (new_decl) = r;
5841             TREE_TYPE (r) = TREE_TYPE (new_decl);
5842             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
5843           }
5844
5845         SET_DECL_IMPLICIT_INSTANTIATION (r);
5846         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
5847         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
5848
5849         /* The template parameters for this new template are all the
5850            template parameters for the old template, except the
5851            outermost level of parameters.  */
5852         DECL_TEMPLATE_PARMS (r) 
5853           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
5854                                    complain);
5855
5856         if (PRIMARY_TEMPLATE_P (t))
5857           DECL_PRIMARY_TEMPLATE (r) = r;
5858
5859         if (TREE_CODE (decl) != TYPE_DECL)
5860           /* Record this non-type partial instantiation.  */
5861           register_specialization (r, t, 
5862                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)));
5863       }
5864       break;
5865
5866     case FUNCTION_DECL:
5867       {
5868         tree ctx;
5869         tree argvec = NULL_TREE;
5870         tree *friends;
5871         tree gen_tmpl;
5872         int member;
5873         int args_depth;
5874         int parms_depth;
5875
5876         /* Nobody should be tsubst'ing into non-template functions.  */
5877         my_friendly_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE, 0);
5878
5879         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
5880           {
5881             tree spec;
5882             bool dependent_p;
5883
5884             /* If T is not dependent, just return it.  We have to
5885                increment PROCESSING_TEMPLATE_DECL because
5886                value_dependent_expression_p assumes that nothing is
5887                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
5888             ++processing_template_decl;
5889             dependent_p = value_dependent_expression_p (t);
5890             --processing_template_decl;
5891             if (!dependent_p)
5892               return t;
5893
5894             /* Calculate the most general template of which R is a
5895                specialization, and the complete set of arguments used to
5896                specialize R.  */
5897             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
5898             argvec = tsubst_template_args (DECL_TI_ARGS 
5899                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
5900                                            args, complain, in_decl); 
5901
5902             /* Check to see if we already have this specialization.  */
5903             spec = retrieve_specialization (gen_tmpl, argvec);
5904
5905             if (spec)
5906               {
5907                 r = spec;
5908                 break;
5909               }
5910
5911             /* We can see more levels of arguments than parameters if
5912                there was a specialization of a member template, like
5913                this:
5914
5915                  template <class T> struct S { template <class U> void f(); }
5916                  template <> template <class U> void S<int>::f(U); 
5917
5918                Here, we'll be substituting into the specialization,
5919                because that's where we can find the code we actually
5920                want to generate, but we'll have enough arguments for
5921                the most general template.              
5922
5923                We also deal with the peculiar case:
5924
5925                  template <class T> struct S { 
5926                    template <class U> friend void f();
5927                  };
5928                  template <class U> void f() {}
5929                  template S<int>;
5930                  template void f<double>();
5931
5932                Here, the ARGS for the instantiation of will be {int,
5933                double}.  But, we only need as many ARGS as there are
5934                levels of template parameters in CODE_PATTERN.  We are
5935                careful not to get fooled into reducing the ARGS in
5936                situations like:
5937
5938                  template <class T> struct S { template <class U> void f(U); }
5939                  template <class T> template <> void S<T>::f(int) {}
5940
5941                which we can spot because the pattern will be a
5942                specialization in this case.  */
5943             args_depth = TMPL_ARGS_DEPTH (args);
5944             parms_depth = 
5945               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t))); 
5946             if (args_depth > parms_depth
5947                 && !DECL_TEMPLATE_SPECIALIZATION (t))
5948               args = get_innermost_template_args (args, parms_depth);
5949           }
5950         else
5951           {
5952             /* This special case arises when we have something like this:
5953
5954                  template <class T> struct S { 
5955                    friend void f<int>(int, double); 
5956                  };
5957
5958                Here, the DECL_TI_TEMPLATE for the friend declaration
5959                will be an IDENTIFIER_NODE.  We are being called from
5960                tsubst_friend_function, and we want only to create a
5961                new decl (R) with appropriate types so that we can call
5962                determine_specialization.  */
5963             gen_tmpl = NULL_TREE;
5964           }
5965
5966         if (DECL_CLASS_SCOPE_P (t))
5967           {
5968             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
5969               member = 2;
5970             else
5971               member = 1;
5972             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, 
5973                                     complain, t, /*entering_scope=*/1);
5974           }
5975         else
5976           {
5977             member = 0;
5978             ctx = DECL_CONTEXT (t);
5979           }
5980         type = tsubst (type, args, complain, in_decl);
5981         if (type == error_mark_node)
5982           return error_mark_node;
5983
5984         /* We do NOT check for matching decls pushed separately at this
5985            point, as they may not represent instantiations of this
5986            template, and in any case are considered separate under the
5987            discrete model.  */
5988         r = copy_decl (t);
5989         DECL_USE_TEMPLATE (r) = 0;
5990         TREE_TYPE (r) = type;
5991         /* Clear out the mangled name and RTL for the instantiation.  */
5992         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
5993         SET_DECL_RTL (r, NULL_RTX);
5994
5995         DECL_CONTEXT (r) = ctx;
5996
5997         if (member && DECL_CONV_FN_P (r)) 
5998           /* Type-conversion operator.  Reconstruct the name, in
5999              case it's the name of one of the template's parameters.  */
6000           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
6001
6002         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
6003                                      complain, t);
6004         DECL_RESULT (r) = NULL_TREE;
6005
6006         TREE_STATIC (r) = 0;
6007         TREE_PUBLIC (r) = TREE_PUBLIC (t);
6008         DECL_EXTERNAL (r) = 1;
6009         DECL_INTERFACE_KNOWN (r) = 0;
6010         DECL_DEFER_OUTPUT (r) = 0;
6011         TREE_CHAIN (r) = NULL_TREE;
6012         DECL_PENDING_INLINE_INFO (r) = 0;
6013         DECL_PENDING_INLINE_P (r) = 0;
6014         DECL_SAVED_TREE (r) = NULL_TREE;
6015         TREE_USED (r) = 0;
6016         if (DECL_CLONED_FUNCTION (r))
6017           {
6018             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
6019                                                args, complain, t);
6020             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
6021             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
6022           }
6023
6024         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
6025            this in the special friend case mentioned above where
6026            GEN_TMPL is NULL.  */
6027         if (gen_tmpl)
6028           {
6029             DECL_TEMPLATE_INFO (r) 
6030               = tree_cons (gen_tmpl, argvec, NULL_TREE);
6031             SET_DECL_IMPLICIT_INSTANTIATION (r);
6032             register_specialization (r, gen_tmpl, argvec);
6033
6034             /* We're not supposed to instantiate default arguments
6035                until they are called, for a template.  But, for a
6036                declaration like:
6037
6038                  template <class T> void f () 
6039                  { extern void g(int i = T()); }
6040                  
6041                we should do the substitution when the template is
6042                instantiated.  We handle the member function case in
6043                instantiate_class_template since the default arguments
6044                might refer to other members of the class.  */
6045             if (!member
6046                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
6047                 && !uses_template_parms (argvec))
6048               tsubst_default_arguments (r);
6049           }
6050
6051         /* Copy the list of befriending classes.  */
6052         for (friends = &DECL_BEFRIENDING_CLASSES (r);
6053              *friends;
6054              friends = &TREE_CHAIN (*friends)) 
6055           {
6056             *friends = copy_node (*friends);
6057             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
6058                                             args, complain,
6059                                             in_decl);
6060           }
6061
6062         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
6063           {
6064             maybe_retrofit_in_chrg (r);
6065             if (DECL_CONSTRUCTOR_P (r))
6066               grok_ctor_properties (ctx, r);
6067             /* If this is an instantiation of a member template, clone it.
6068                If it isn't, that'll be handled by
6069                clone_constructors_and_destructors.  */
6070             if (PRIMARY_TEMPLATE_P (gen_tmpl))
6071               clone_function_decl (r, /*update_method_vec_p=*/0);
6072           }
6073         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r)))
6074           grok_op_properties (r, DECL_FRIEND_P (r));
6075       }
6076       break;
6077
6078     case PARM_DECL:
6079       {
6080         r = copy_node (t);
6081         if (DECL_TEMPLATE_PARM_P (t))
6082           SET_DECL_TEMPLATE_PARM_P (r);
6083
6084         TREE_TYPE (r) = type;
6085         c_apply_type_quals_to_decl (cp_type_quals (type), r);
6086
6087         if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
6088           DECL_INITIAL (r) = TREE_TYPE (r);
6089         else
6090           DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
6091                                      complain, in_decl);
6092
6093         DECL_CONTEXT (r) = NULL_TREE;
6094
6095         if (!DECL_TEMPLATE_PARM_P (r))
6096           DECL_ARG_TYPE (r) = type_passed_as (type);
6097         if (TREE_CHAIN (t))
6098           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
6099                                    complain, TREE_CHAIN (t));
6100       }
6101       break;
6102
6103     case FIELD_DECL:
6104       {
6105         r = copy_decl (t);
6106         TREE_TYPE (r) = type;
6107         c_apply_type_quals_to_decl (cp_type_quals (type), r);
6108
6109         /* We don't have to set DECL_CONTEXT here; it is set by
6110            finish_member_declaration.  */
6111         DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args,
6112                                         complain, in_decl);
6113         TREE_CHAIN (r) = NULL_TREE;
6114         if (VOID_TYPE_P (type)) 
6115           cp_error_at ("instantiation of `%D' as type `%T'", r, type);
6116       }
6117       break;
6118
6119     case USING_DECL:
6120       {
6121         r = copy_node (t);
6122         DECL_INITIAL (r)
6123           = tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
6124         TREE_CHAIN (r) = NULL_TREE;
6125       }
6126       break;
6127
6128     case TYPE_DECL:
6129       if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
6130           || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
6131         {
6132           /* If this is the canonical decl, we don't have to mess with
6133              instantiations, and often we can't (for typename, template
6134              type parms and such).  Note that TYPE_NAME is not correct for
6135              the above test if we've copied the type for a typedef.  */
6136           r = TYPE_NAME (type);
6137           break;
6138         }
6139
6140       /* Fall through.  */
6141
6142     case VAR_DECL:
6143       {
6144         tree argvec = NULL_TREE;
6145         tree gen_tmpl = NULL_TREE;
6146         tree spec;
6147         tree tmpl = NULL_TREE;
6148         tree ctx;
6149         int local_p;
6150
6151         /* Assume this is a non-local variable.  */
6152         local_p = 0;
6153
6154         if (TYPE_P (CP_DECL_CONTEXT (t)))
6155           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, 
6156                                   complain,
6157                                   in_decl, /*entering_scope=*/1);
6158         else if (DECL_NAMESPACE_SCOPE_P (t))
6159           ctx = DECL_CONTEXT (t);
6160         else
6161           {
6162             /* Subsequent calls to pushdecl will fill this in.  */
6163             ctx = NULL_TREE;
6164             local_p = 1;
6165           }
6166
6167         /* Check to see if we already have this specialization.  */
6168         if (!local_p)
6169           {
6170             tmpl = DECL_TI_TEMPLATE (t);
6171             gen_tmpl = most_general_template (tmpl);
6172             argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
6173             spec = retrieve_specialization (gen_tmpl, argvec);
6174           }
6175         else
6176           spec = retrieve_local_specialization (t);
6177
6178         if (spec)
6179           {
6180             r = spec;
6181             break;
6182           }
6183
6184         r = copy_decl (t);
6185         if (TREE_CODE (r) == VAR_DECL)
6186           {
6187             type = complete_type (type);
6188             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
6189               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
6190           }
6191         else if (DECL_SELF_REFERENCE_P (t))
6192           SET_DECL_SELF_REFERENCE_P (r);
6193         TREE_TYPE (r) = type;
6194         c_apply_type_quals_to_decl (cp_type_quals (type), r);
6195         DECL_CONTEXT (r) = ctx;
6196         /* Clear out the mangled name and RTL for the instantiation.  */
6197         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6198         SET_DECL_RTL (r, NULL_RTX);
6199
6200         /* Don't try to expand the initializer until someone tries to use
6201            this variable; otherwise we run into circular dependencies.  */
6202         DECL_INITIAL (r) = NULL_TREE;
6203         SET_DECL_RTL (r, NULL_RTX);
6204         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
6205
6206         /* Even if the original location is out of scope, the newly
6207            substituted one is not.  */
6208         if (TREE_CODE (r) == VAR_DECL)
6209           {
6210             DECL_DEAD_FOR_LOCAL (r) = 0;
6211             DECL_INITIALIZED_P (r) = 0;
6212           }
6213
6214         if (!local_p)
6215           {
6216             /* A static data member declaration is always marked
6217                external when it is declared in-class, even if an
6218                initializer is present.  We mimic the non-template
6219                processing here.  */
6220             DECL_EXTERNAL (r) = 1;
6221
6222             register_specialization (r, gen_tmpl, argvec);
6223             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
6224             SET_DECL_IMPLICIT_INSTANTIATION (r);
6225           }
6226         else
6227           register_local_specialization (r, t);
6228
6229         TREE_CHAIN (r) = NULL_TREE;
6230         if (TREE_CODE (r) == VAR_DECL && VOID_TYPE_P (type))
6231           cp_error_at ("instantiation of `%D' as type `%T'", r, type);
6232         /* Compute the size, alignment, etc. of R.  */
6233         layout_decl (r, 0);
6234       }
6235       break;
6236
6237     default:
6238       abort ();
6239     } 
6240
6241   /* Restore the file and line information.  */
6242   input_location = saved_loc;
6243
6244   return r;
6245 }
6246
6247 /* Substitute into the ARG_TYPES of a function type.  */
6248
6249 static tree
6250 tsubst_arg_types (tree arg_types, 
6251                   tree args, 
6252                   tsubst_flags_t complain, 
6253                   tree in_decl)
6254 {
6255   tree remaining_arg_types;
6256   tree type;
6257
6258   if (!arg_types || arg_types == void_list_node)
6259     return arg_types;
6260   
6261   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
6262                                           args, complain, in_decl);
6263   if (remaining_arg_types == error_mark_node)
6264     return error_mark_node;
6265
6266   type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
6267   if (type == error_mark_node)
6268     return error_mark_node;
6269   if (VOID_TYPE_P (type))
6270     {
6271       if (complain & tf_error)
6272         {
6273           error ("invalid parameter type `%T'", type);
6274           if (in_decl)
6275             cp_error_at ("in declaration `%D'", in_decl);
6276         }
6277       return error_mark_node;
6278     }
6279
6280   /* Do array-to-pointer, function-to-pointer conversion, and ignore
6281      top-level qualifiers as required.  */
6282   type = TYPE_MAIN_VARIANT (type_decays_to (type));
6283
6284   /* Note that we do not substitute into default arguments here.  The
6285      standard mandates that they be instantiated only when needed,
6286      which is done in build_over_call.  */
6287   return hash_tree_cons (TREE_PURPOSE (arg_types), type,
6288                          remaining_arg_types);
6289                          
6290 }
6291
6292 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
6293    *not* handle the exception-specification for FNTYPE, because the
6294    initial substitution of explicitly provided template parameters
6295    during argument deduction forbids substitution into the
6296    exception-specification:
6297
6298      [temp.deduct]
6299
6300      All references in the function type of the function template to  the
6301      corresponding template parameters are replaced by the specified tem-
6302      plate argument values.  If a substitution in a template parameter or
6303      in  the function type of the function template results in an invalid
6304      type, type deduction fails.  [Note: The equivalent  substitution  in
6305      exception specifications is done only when the function is instanti-
6306      ated, at which point a program is  ill-formed  if  the  substitution
6307      results in an invalid type.]  */
6308
6309 static tree
6310 tsubst_function_type (tree t, 
6311                       tree args, 
6312                       tsubst_flags_t complain, 
6313                       tree in_decl)
6314 {
6315   tree return_type;
6316   tree arg_types;
6317   tree fntype;
6318
6319   /* The TYPE_CONTEXT is not used for function/method types.  */
6320   my_friendly_assert (TYPE_CONTEXT (t) == NULL_TREE, 0);
6321
6322   /* Substitute the return type.  */
6323   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6324   if (return_type == error_mark_node)
6325     return error_mark_node;
6326
6327   /* Substitute the argument types.  */
6328   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
6329                                 complain, in_decl); 
6330   if (arg_types == error_mark_node)
6331     return error_mark_node;
6332   
6333   /* Construct a new type node and return it.  */
6334   if (TREE_CODE (t) == FUNCTION_TYPE)
6335     fntype = build_function_type (return_type, arg_types);
6336   else
6337     {
6338       tree r = TREE_TYPE (TREE_VALUE (arg_types));
6339       if (! IS_AGGR_TYPE (r))
6340         {
6341           /* [temp.deduct]
6342              
6343              Type deduction may fail for any of the following
6344              reasons:
6345              
6346              -- Attempting to create "pointer to member of T" when T
6347              is not a class type.  */
6348           if (complain & tf_error)
6349             error ("creating pointer to member function of non-class type `%T'",
6350                       r);
6351           return error_mark_node;
6352         }
6353       
6354       fntype = build_cplus_method_type (r, return_type, TREE_CHAIN
6355                                         (arg_types));
6356     }
6357   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
6358   fntype = build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
6359   
6360   return fntype;  
6361 }
6362
6363 /* Substitute into the PARMS of a call-declarator.  */
6364
6365 static tree
6366 tsubst_call_declarator_parms (tree parms, 
6367                               tree args, 
6368                               tsubst_flags_t complain, 
6369                               tree in_decl)
6370 {
6371   tree new_parms;
6372   tree type;
6373   tree defarg;
6374
6375   if (!parms || parms == void_list_node)
6376     return parms;
6377   
6378   new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
6379                                             args, complain, in_decl);
6380
6381   /* Figure out the type of this parameter.  */
6382   type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
6383   
6384   /* Figure out the default argument as well.  Note that we use
6385      tsubst_expr since the default argument is really an expression.  */
6386   defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
6387
6388   /* Chain this parameter on to the front of those we have already
6389      processed.  We don't use hash_tree_cons because that function
6390      doesn't check TREE_PARMLIST.  */
6391   new_parms = tree_cons (defarg, type, new_parms);
6392
6393   /* And note that these are parameters.  */
6394   TREE_PARMLIST (new_parms) = 1;
6395   
6396   return new_parms;
6397 }
6398
6399 /* Take the tree structure T and replace template parameters used
6400    therein with the argument vector ARGS.  IN_DECL is an associated
6401    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
6402    Issue error and warning messages under control of COMPLAIN.  Note
6403    that we must be relatively non-tolerant of extensions here, in
6404    order to preserve conformance; if we allow substitutions that
6405    should not be allowed, we may allow argument deductions that should
6406    not succeed, and therefore report ambiguous overload situations
6407    where there are none.  In theory, we could allow the substitution,
6408    but indicate that it should have failed, and allow our caller to
6409    make sure that the right thing happens, but we don't try to do this
6410    yet.
6411
6412    This function is used for dealing with types, decls and the like;
6413    for expressions, use tsubst_expr or tsubst_copy.  */
6414
6415 static tree
6416 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
6417 {
6418   tree type, r;
6419
6420   if (t == NULL_TREE || t == error_mark_node
6421       || t == integer_type_node
6422       || t == void_type_node
6423       || t == char_type_node
6424       || TREE_CODE (t) == NAMESPACE_DECL)
6425     return t;
6426
6427   if (TREE_CODE (t) == IDENTIFIER_NODE)
6428     type = IDENTIFIER_TYPE_VALUE (t);
6429   else
6430     type = TREE_TYPE (t);
6431
6432   my_friendly_assert (type != unknown_type_node
6433                       || TREE_CODE (t) == USING_DECL, 20030716);
6434
6435   if (type && TREE_CODE (t) != FUNCTION_DECL
6436       && TREE_CODE (t) != TYPENAME_TYPE
6437       && TREE_CODE (t) != TEMPLATE_DECL
6438       && TREE_CODE (t) != IDENTIFIER_NODE
6439       && TREE_CODE (t) != FUNCTION_TYPE
6440       && TREE_CODE (t) != USING_DECL
6441       && TREE_CODE (t) != METHOD_TYPE)
6442     type = tsubst (type, args, complain, in_decl);
6443   if (type == error_mark_node)
6444     return error_mark_node;
6445
6446   if (DECL_P (t))
6447     return tsubst_decl (t, args, type, complain);
6448
6449   switch (TREE_CODE (t))
6450     {
6451     case RECORD_TYPE:
6452     case UNION_TYPE:
6453     case ENUMERAL_TYPE:
6454       return tsubst_aggr_type (t, args, complain, in_decl,
6455                                /*entering_scope=*/0);
6456
6457     case ERROR_MARK:
6458     case IDENTIFIER_NODE:
6459     case VOID_TYPE:
6460     case REAL_TYPE:
6461     case COMPLEX_TYPE:
6462     case VECTOR_TYPE:
6463     case BOOLEAN_TYPE:
6464     case INTEGER_CST:
6465     case REAL_CST:
6466     case STRING_CST:
6467       return t;
6468
6469     case INTEGER_TYPE:
6470       if (t == integer_type_node)
6471         return t;
6472
6473       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
6474           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
6475         return t;
6476
6477       {
6478         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
6479
6480         /* The array dimension behaves like a non-type template arg,
6481            in that we want to fold it as much as possible.  */
6482         max = tsubst_template_arg (omax, args, complain, in_decl);
6483         if (!processing_template_decl)
6484           max = decl_constant_value (max);
6485
6486         if (processing_template_decl 
6487             /* When providing explicit arguments to a template
6488                function, but leaving some arguments for subsequent
6489                deduction, MAX may be template-dependent even if we're
6490                not PROCESSING_TEMPLATE_DECL.  We still need to check for
6491                template parms, though; MAX won't be an INTEGER_CST for
6492                dynamic arrays, either.  */
6493             || (TREE_CODE (max) != INTEGER_CST
6494                 && uses_template_parms (max)))
6495           {
6496             tree itype = make_node (INTEGER_TYPE);
6497             TYPE_MIN_VALUE (itype) = size_zero_node;
6498             TYPE_MAX_VALUE (itype) = build_min (MINUS_EXPR, sizetype, max,
6499                                                 integer_one_node);
6500             return itype;
6501           }
6502
6503         if (integer_zerop (omax))
6504           {
6505             /* Still allow an explicit array of size zero.  */
6506             if (pedantic)
6507               pedwarn ("creating array with size zero");
6508           }
6509         else if (integer_zerop (max) 
6510                  || (TREE_CODE (max) == INTEGER_CST 
6511                      && INT_CST_LT (max, integer_zero_node)))
6512           {
6513             /* [temp.deduct]
6514
6515                Type deduction may fail for any of the following
6516                reasons:  
6517
6518                  Attempting to create an array with a size that is
6519                  zero or negative.  */
6520             if (complain & tf_error)
6521               error ("creating array with size zero (`%E')", max);
6522
6523             return error_mark_node;
6524           }
6525
6526         return compute_array_index_type (NULL_TREE, max);
6527       }
6528
6529     case TEMPLATE_TYPE_PARM:
6530     case TEMPLATE_TEMPLATE_PARM:
6531     case BOUND_TEMPLATE_TEMPLATE_PARM:
6532     case TEMPLATE_PARM_INDEX:
6533       {
6534         int idx;
6535         int level;
6536         int levels;
6537
6538         r = NULL_TREE;
6539
6540         if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
6541             || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
6542             || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6543           {
6544             idx = TEMPLATE_TYPE_IDX (t);
6545             level = TEMPLATE_TYPE_LEVEL (t);
6546           }
6547         else
6548           {
6549             idx = TEMPLATE_PARM_IDX (t);
6550             level = TEMPLATE_PARM_LEVEL (t);
6551           }
6552
6553         if (TREE_VEC_LENGTH (args) > 0)
6554           {
6555             tree arg = NULL_TREE;
6556
6557             levels = TMPL_ARGS_DEPTH (args);
6558             if (level <= levels)
6559               arg = TMPL_ARG (args, level, idx);
6560
6561             if (arg == error_mark_node)
6562               return error_mark_node;
6563             else if (arg != NULL_TREE)
6564               {
6565                 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
6566                   {
6567                     my_friendly_assert (TYPE_P (arg), 0);
6568                     return cp_build_qualified_type_real
6569                       (arg, cp_type_quals (arg) | cp_type_quals (t),
6570                        complain | tf_ignore_bad_quals);
6571                   }
6572                 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6573                   {
6574                     /* We are processing a type constructed from
6575                        a template template parameter */
6576                     tree argvec = tsubst (TYPE_TI_ARGS (t),
6577                                           args, complain, in_decl);
6578                     if (argvec == error_mark_node)
6579                       return error_mark_node;
6580                         
6581                     /* We can get a TEMPLATE_TEMPLATE_PARM here when 
6582                        we are resolving nested-types in the signature of 
6583                        a member function templates.
6584                        Otherwise ARG is a TEMPLATE_DECL and is the real 
6585                        template to be instantiated.  */
6586                     if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
6587                       arg = TYPE_NAME (arg);
6588
6589                     r = lookup_template_class (arg, 
6590                                                argvec, in_decl, 
6591                                                DECL_CONTEXT (arg),
6592                                                /*entering_scope=*/0,
6593                                                complain);
6594                     return cp_build_qualified_type_real
6595                       (r, TYPE_QUALS (t), complain);
6596                   }
6597                 else
6598                   /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
6599                   return arg;
6600               }
6601           }
6602         else
6603           abort ();
6604
6605         if (level == 1)
6606           /* This can happen during the attempted tsubst'ing in
6607              unify.  This means that we don't yet have any information
6608              about the template parameter in question.  */
6609           return t;
6610
6611         /* If we get here, we must have been looking at a parm for a
6612            more deeply nested template.  Make a new version of this
6613            template parameter, but with a lower level.  */
6614         switch (TREE_CODE (t))
6615           {
6616           case TEMPLATE_TYPE_PARM:
6617           case TEMPLATE_TEMPLATE_PARM:
6618           case BOUND_TEMPLATE_TEMPLATE_PARM:
6619             if (cp_type_quals (t))
6620               {
6621                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
6622                 r = cp_build_qualified_type_real
6623                   (r, cp_type_quals (t),
6624                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
6625                                ? tf_ignore_bad_quals : 0));
6626               }
6627             else
6628               {
6629                 r = copy_type (t);
6630                 TEMPLATE_TYPE_PARM_INDEX (r)
6631                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
6632                                                 r, levels);
6633                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
6634                 TYPE_MAIN_VARIANT (r) = r;
6635                 TYPE_POINTER_TO (r) = NULL_TREE;
6636                 TYPE_REFERENCE_TO (r) = NULL_TREE;
6637
6638                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6639                   {
6640                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
6641                                           complain, in_decl); 
6642                     if (argvec == error_mark_node)
6643                       return error_mark_node;
6644
6645                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
6646                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
6647                   }
6648               }
6649             break;
6650
6651           case TEMPLATE_PARM_INDEX:
6652             r = reduce_template_parm_level (t, type, levels);
6653             break;
6654            
6655           default:
6656             abort ();
6657           }
6658
6659         return r;
6660       }
6661
6662     case TREE_LIST:
6663       {
6664         tree purpose, value, chain, result;
6665
6666         if (t == void_list_node)
6667           return t;
6668
6669         purpose = TREE_PURPOSE (t);
6670         if (purpose)
6671           {
6672             purpose = tsubst (purpose, args, complain, in_decl);
6673             if (purpose == error_mark_node)
6674               return error_mark_node;
6675           }
6676         value = TREE_VALUE (t);
6677         if (value)
6678           {
6679             value = tsubst (value, args, complain, in_decl);
6680             if (value == error_mark_node)
6681               return error_mark_node;
6682           }
6683         chain = TREE_CHAIN (t);
6684         if (chain && chain != void_type_node)
6685           {
6686             chain = tsubst (chain, args, complain, in_decl);
6687             if (chain == error_mark_node)
6688               return error_mark_node;
6689           }
6690         if (purpose == TREE_PURPOSE (t)
6691             && value == TREE_VALUE (t)
6692             && chain == TREE_CHAIN (t))
6693           return t;
6694         if (TREE_PARMLIST (t))
6695           {
6696             result = tree_cons (purpose, value, chain);
6697             TREE_PARMLIST (result) = 1;
6698           }
6699         else
6700           result = hash_tree_cons (purpose, value, chain);
6701         return result;
6702       }
6703     case TREE_VEC:
6704       if (type != NULL_TREE)
6705         {
6706           /* A binfo node.  We always need to make a copy, of the node
6707              itself and of its BINFO_BASETYPES.  */
6708
6709           t = copy_node (t);
6710
6711           /* Make sure type isn't a typedef copy.  */
6712           type = BINFO_TYPE (TYPE_BINFO (type));
6713
6714           TREE_TYPE (t) = complete_type (type);
6715           if (IS_AGGR_TYPE (type))
6716             {
6717               BINFO_VTABLE (t) = TYPE_BINFO_VTABLE (type);
6718               BINFO_VIRTUALS (t) = TYPE_BINFO_VIRTUALS (type);
6719               if (TYPE_BINFO_BASETYPES (type) != NULL_TREE)
6720                 BINFO_BASETYPES (t) = copy_node (TYPE_BINFO_BASETYPES (type));
6721             }
6722           return t;
6723         }
6724
6725       /* Otherwise, a vector of template arguments.  */
6726       return tsubst_template_args (t, args, complain, in_decl);
6727
6728     case POINTER_TYPE:
6729     case REFERENCE_TYPE:
6730       {
6731         enum tree_code code;
6732
6733         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
6734           return t;
6735
6736         code = TREE_CODE (t);
6737
6738
6739         /* [temp.deduct]
6740            
6741            Type deduction may fail for any of the following
6742            reasons:  
6743
6744            -- Attempting to create a pointer to reference type.
6745            -- Attempting to create a reference to a reference type or
6746               a reference to void.  */
6747         if (TREE_CODE (type) == REFERENCE_TYPE
6748             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
6749           {
6750             static location_t last_loc;
6751
6752             /* We keep track of the last time we issued this error
6753                message to avoid spewing a ton of messages during a
6754                single bad template instantiation.  */
6755             if (complain & tf_error
6756                 && (last_loc.line != input_line
6757                     || last_loc.file != input_filename))
6758               {
6759                 if (TREE_CODE (type) == VOID_TYPE)
6760                   error ("forming reference to void");
6761                 else
6762                   error ("forming %s to reference type `%T'",
6763                             (code == POINTER_TYPE) ? "pointer" : "reference",
6764                             type);
6765                 last_loc = input_location;
6766               }
6767
6768             return error_mark_node;
6769           }
6770         else if (code == POINTER_TYPE)
6771           {
6772             r = build_pointer_type (type);
6773             if (TREE_CODE (type) == METHOD_TYPE)
6774               r = build_ptrmemfunc_type (r);
6775           }
6776         else
6777           r = build_reference_type (type);
6778         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
6779
6780         if (r != error_mark_node)
6781           /* Will this ever be needed for TYPE_..._TO values?  */
6782           layout_type (r);
6783         
6784         return r;
6785       }
6786     case OFFSET_TYPE:
6787       {
6788         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
6789         if (r == error_mark_node || !IS_AGGR_TYPE (r))
6790           {
6791             /* [temp.deduct]
6792
6793                Type deduction may fail for any of the following
6794                reasons:
6795                
6796                -- Attempting to create "pointer to member of T" when T
6797                   is not a class type.  */
6798             if (complain & tf_error)
6799               error ("creating pointer to member of non-class type `%T'", r);
6800             return error_mark_node;
6801           }
6802         if (TREE_CODE (type) == REFERENCE_TYPE)
6803           {
6804             if (complain & tf_error)
6805               error ("creating pointer to member reference type `%T'", type);
6806             
6807             return error_mark_node;
6808           }
6809         my_friendly_assert (TREE_CODE (type) != METHOD_TYPE, 20011231);
6810         if (TREE_CODE (type) == FUNCTION_TYPE)
6811           {
6812             /* This is really a method type. The cv qualifiers of the
6813                this pointer should _not_ be determined by the cv
6814                qualifiers of the class type.  They should be held
6815                somewhere in the FUNCTION_TYPE, but we don't do that at
6816                the moment.  Consider
6817                   typedef void (Func) () const;
6818
6819                   template <typename T1> void Foo (Func T1::*);
6820
6821                 */
6822             tree method_type;
6823
6824             method_type = build_cplus_method_type (TYPE_MAIN_VARIANT (r),
6825                                                    TREE_TYPE (type),
6826                                                    TYPE_ARG_TYPES (type));
6827             return build_ptrmemfunc_type (build_pointer_type (method_type));
6828           }
6829         else
6830           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
6831                                                TYPE_QUALS (t),
6832                                                complain);
6833       }
6834     case FUNCTION_TYPE:
6835     case METHOD_TYPE:
6836       {
6837         tree fntype;
6838         tree raises;
6839
6840         fntype = tsubst_function_type (t, args, complain, in_decl);
6841         if (fntype == error_mark_node)
6842           return error_mark_node;
6843
6844         /* Substitute the exception specification.  */
6845         raises = TYPE_RAISES_EXCEPTIONS (t);
6846         if (raises)
6847           {
6848             tree   list = NULL_TREE;
6849             
6850             if (! TREE_VALUE (raises))
6851               list = raises;
6852             else
6853               for (; raises != NULL_TREE; raises = TREE_CHAIN (raises))
6854                 {
6855                   tree spec = TREE_VALUE (raises);
6856                   
6857                   spec = tsubst (spec, args, complain, in_decl);
6858                   if (spec == error_mark_node)
6859                     return spec;
6860                   list = add_exception_specifier (list, spec, complain);
6861                 }
6862             fntype = build_exception_variant (fntype, list);
6863           }
6864         return fntype;
6865       }
6866     case ARRAY_TYPE:
6867       {
6868         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
6869         if (domain == error_mark_node)
6870           return error_mark_node;
6871
6872         /* As an optimization, we avoid regenerating the array type if
6873            it will obviously be the same as T.  */
6874         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
6875           return t;
6876
6877         /* These checks should match the ones in grokdeclarator.  
6878
6879            [temp.deduct] 
6880         
6881            The deduction may fail for any of the following reasons: 
6882
6883            -- Attempting to create an array with an element type that
6884               is void, a function type, or a reference type.  */
6885         if (TREE_CODE (type) == VOID_TYPE 
6886             || TREE_CODE (type) == FUNCTION_TYPE
6887             || TREE_CODE (type) == REFERENCE_TYPE)
6888           {
6889             if (complain & tf_error)
6890               error ("creating array of `%T'", type);
6891             return error_mark_node;
6892           }
6893
6894         r = build_cplus_array_type (type, domain);
6895         return r;
6896       }
6897
6898     case PLUS_EXPR:
6899     case MINUS_EXPR:
6900       {
6901         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
6902         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
6903
6904         if (e1 == error_mark_node || e2 == error_mark_node)
6905           return error_mark_node;
6906
6907         return fold (build (TREE_CODE (t), TREE_TYPE (t), e1, e2));
6908       }
6909
6910     case NEGATE_EXPR:
6911     case NOP_EXPR:
6912       {
6913         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
6914         if (e == error_mark_node)
6915           return error_mark_node;
6916
6917         return fold (build (TREE_CODE (t), TREE_TYPE (t), e));
6918       }
6919
6920     case TYPENAME_TYPE:
6921       {
6922         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
6923                                      in_decl, /*entering_scope=*/1);
6924         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
6925                               complain, in_decl); 
6926
6927         if (ctx == error_mark_node || f == error_mark_node)
6928           return error_mark_node;
6929
6930         if (!IS_AGGR_TYPE (ctx))
6931           {
6932             if (complain & tf_error)
6933               error ("`%T' is not a class, struct, or union type",
6934                         ctx);
6935             return error_mark_node;
6936           }
6937         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
6938           {
6939             /* Normally, make_typename_type does not require that the CTX
6940                have complete type in order to allow things like:
6941              
6942                  template <class T> struct S { typename S<T>::X Y; };
6943
6944                But, such constructs have already been resolved by this
6945                point, so here CTX really should have complete type, unless
6946                it's a partial instantiation.  */
6947             ctx = complete_type (ctx);
6948             if (!COMPLETE_TYPE_P (ctx))
6949               {
6950                 if (complain & tf_error)
6951                   cxx_incomplete_type_error (NULL_TREE, ctx);
6952                 return error_mark_node;
6953               }
6954           }
6955
6956         f = make_typename_type (ctx, f,
6957                                 (complain & tf_error) | tf_keep_type_decl);
6958         if (f == error_mark_node)
6959           return f;
6960         if (TREE_CODE (f) == TYPE_DECL)
6961           {
6962             complain |= tf_ignore_bad_quals;
6963             f = TREE_TYPE (f);
6964           }
6965         
6966         return cp_build_qualified_type_real
6967           (f, cp_type_quals (f) | cp_type_quals (t), complain);
6968       }
6969                
6970     case UNBOUND_CLASS_TEMPLATE:
6971       {
6972         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
6973                                      in_decl, /*entering_scope=*/1);
6974         tree name = TYPE_IDENTIFIER (t);
6975
6976         if (ctx == error_mark_node || name == error_mark_node)
6977           return error_mark_node;
6978
6979         return make_unbound_class_template (ctx, name, complain);
6980       }
6981
6982     case INDIRECT_REF:
6983       {
6984         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
6985         if (e == error_mark_node)
6986           return error_mark_node;
6987         return make_pointer_declarator (type, e);
6988       }
6989
6990     case ADDR_EXPR:
6991       {
6992         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
6993         if (e == error_mark_node)
6994           return error_mark_node;
6995         return make_reference_declarator (type, e);
6996       }
6997
6998     case ARRAY_REF:
6999       {
7000         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7001         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl);
7002         if (e1 == error_mark_node || e2 == error_mark_node)
7003           return error_mark_node;
7004
7005         return build_nt (ARRAY_REF, e1, e2, tsubst_expr);
7006       }
7007
7008     case CALL_EXPR:
7009       {
7010         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7011         tree e2 = (tsubst_call_declarator_parms
7012                    (CALL_DECLARATOR_PARMS (t), args, complain, in_decl));
7013         tree e3 = tsubst (CALL_DECLARATOR_EXCEPTION_SPEC (t), args,
7014                           complain, in_decl);
7015
7016         if (e1 == error_mark_node || e2 == error_mark_node 
7017             || e3 == error_mark_node)
7018           return error_mark_node;
7019
7020         return make_call_declarator (e1, e2, CALL_DECLARATOR_QUALS (t), e3);
7021       }
7022
7023     case SCOPE_REF:
7024       {
7025         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7026         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7027         if (e1 == error_mark_node || e2 == error_mark_node)
7028           return error_mark_node;
7029
7030         return build_nt (TREE_CODE (t), e1, e2);
7031       }
7032
7033     case TYPEOF_TYPE:
7034       {
7035         tree e1 = tsubst_expr (TYPE_FIELDS (t), args, complain, in_decl);
7036         if (e1 == error_mark_node)
7037           return error_mark_node;
7038
7039         return cp_build_qualified_type_real (TREE_TYPE (e1),
7040                                              cp_type_quals (t)
7041                                              | cp_type_quals (TREE_TYPE (e1)),
7042                                              complain);
7043       }
7044
7045     default:
7046       sorry ("use of `%s' in template",
7047              tree_code_name [(int) TREE_CODE (t)]);
7048       return error_mark_node;
7049     }
7050 }
7051
7052 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
7053    type of the expression on the left-hand side of the "." or "->"
7054    operator.  */
7055
7056 static tree
7057 tsubst_baselink (tree baselink, tree object_type,
7058                  tree args, tsubst_flags_t complain, tree in_decl)
7059 {
7060     tree name;
7061     tree qualifying_scope;
7062     tree fns;
7063     tree template_args = 0;
7064     bool template_id_p = false;
7065
7066     /* A baselink indicates a function from a base class.  The
7067        BASELINK_ACCESS_BINFO and BASELINK_BINFO are going to have
7068        non-dependent types; otherwise, the lookup could not have
7069        succeeded.  However, they may indicate bases of the template
7070        class, rather than the instantiated class.  
7071
7072        In addition, lookups that were not ambiguous before may be
7073        ambiguous now.  Therefore, we perform the lookup again. */
7074     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
7075     fns = BASELINK_FUNCTIONS (baselink);
7076     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7077       {
7078         template_id_p = true;
7079         template_args = TREE_OPERAND (fns, 1);
7080         fns = TREE_OPERAND (fns, 0);
7081         template_args = tsubst_copy_and_build (template_args, args,
7082                                                complain, in_decl,
7083                                                /*function_p=*/false);
7084       }
7085     name = DECL_NAME (get_first_fn (fns));
7086     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
7087     if (BASELINK_P (baselink) && template_id_p)
7088       BASELINK_FUNCTIONS (baselink) 
7089         = build_nt (TEMPLATE_ID_EXPR,
7090                     BASELINK_FUNCTIONS (baselink),
7091                     template_args);
7092     if (!object_type)
7093       object_type = current_class_type;
7094     return adjust_result_of_qualified_name_lookup (baselink, 
7095                                                    qualifying_scope,
7096                                                    object_type);
7097 }
7098
7099 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
7100    true if the qualified-id will be a postfix-expression in-and-of
7101    itself; false if more of the postfix-expression follows the
7102    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
7103    of "&".  */
7104
7105 static tree
7106 tsubst_qualified_id (tree qualified_id, tree args, 
7107                      tsubst_flags_t complain, tree in_decl,
7108                      bool done, bool address_p)
7109 {
7110   tree expr;
7111   tree scope;
7112   tree name;
7113   bool is_template;
7114   tree template_args;
7115
7116   my_friendly_assert (TREE_CODE (qualified_id) == SCOPE_REF, 20030706);
7117
7118   /* Figure out what name to look up.  */
7119   name = TREE_OPERAND (qualified_id, 1);
7120   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
7121     {
7122       is_template = true;
7123       template_args = tsubst_copy_and_build (TREE_OPERAND (name, 1), 
7124                                              args, complain, in_decl,
7125                                              /*function_p=*/false);
7126       name = TREE_OPERAND (name, 0);
7127     }
7128   else
7129     {
7130       is_template = false;
7131       template_args = NULL_TREE;
7132     }
7133
7134   /* Substitute into the qualifying scope.  When there are no ARGS, we
7135      are just trying to simplify a non-dependent expression.  In that
7136      case the qualifying scope may be dependent, and, in any case,
7137      substituting will not help.  */
7138   scope = TREE_OPERAND (qualified_id, 0);
7139   if (args)
7140     {
7141       scope = tsubst (scope, args, complain, in_decl);
7142       expr = tsubst_copy (name, args, complain, in_decl);
7143     }
7144   else
7145     expr = name;
7146
7147   my_friendly_assert (!dependent_type_p (scope), 20030729);
7148   
7149   if (!BASELINK_P (name) && !DECL_P (expr))
7150     expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
7151   
7152   if (DECL_P (expr))
7153     check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
7154                                          scope);
7155   
7156   /* Remember that there was a reference to this entity.  */
7157   if (DECL_P (expr))
7158     {
7159       mark_used (expr);
7160       if (!args && TREE_CODE (expr) == VAR_DECL)
7161         expr = DECL_INITIAL (expr);
7162     }
7163
7164   if (is_template)
7165     expr = lookup_template_function (expr, template_args);
7166
7167   if (expr == error_mark_node && complain & tf_error)
7168     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1));
7169   else if (TYPE_P (scope))
7170     {
7171       expr = (adjust_result_of_qualified_name_lookup 
7172               (expr, scope, current_class_type));
7173       expr = finish_qualified_id_expr (scope, expr, done, address_p);
7174     }
7175
7176   return expr;
7177 }
7178
7179 /* Like tsubst, but deals with expressions.  This function just replaces
7180    template parms; to finish processing the resultant expression, use
7181    tsubst_expr.  */
7182
7183 static tree
7184 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7185 {
7186   enum tree_code code;
7187   tree r;
7188
7189   if (t == NULL_TREE || t == error_mark_node)
7190     return t;
7191
7192   code = TREE_CODE (t);
7193
7194   switch (code)
7195     {
7196     case PARM_DECL:
7197       r = retrieve_local_specialization (t);
7198       my_friendly_assert (r != NULL, 20020903);
7199       return r;
7200
7201     case CONST_DECL:
7202       {
7203         tree enum_type;
7204         tree v;
7205
7206         if (DECL_TEMPLATE_PARM_P (t))
7207           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
7208         /* There is no need to substitute into namespace-scope
7209            enumerators.  */
7210         if (DECL_NAMESPACE_SCOPE_P (t))
7211           return t;
7212
7213         /* Unfortunately, we cannot just call lookup_name here.
7214            Consider:
7215            
7216              template <int I> int f() {
7217              enum E { a = I };
7218              struct S { void g() { E e = a; } };
7219              };
7220            
7221            When we instantiate f<7>::S::g(), say, lookup_name is not
7222            clever enough to find f<7>::a.  */
7223         enum_type 
7224           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl, 
7225                               /*entering_scope=*/0);
7226
7227         for (v = TYPE_VALUES (enum_type); 
7228              v != NULL_TREE; 
7229              v = TREE_CHAIN (v))
7230           if (TREE_PURPOSE (v) == DECL_NAME (t))
7231             return TREE_VALUE (v);
7232
7233           /* We didn't find the name.  That should never happen; if
7234              name-lookup found it during preliminary parsing, we
7235              should find it again here during instantiation.  */
7236         abort ();
7237       }
7238       return t;
7239
7240     case FIELD_DECL:
7241       if (DECL_CONTEXT (t))
7242         {
7243           tree ctx;
7244
7245           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
7246                                   /*entering_scope=*/1);
7247           if (ctx != DECL_CONTEXT (t))
7248             return lookup_field (ctx, DECL_NAME (t), 0, false);
7249         }
7250       return t;
7251
7252     case VAR_DECL:
7253     case FUNCTION_DECL:
7254       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
7255           || local_variable_p (t))
7256         t = tsubst (t, args, complain, in_decl);
7257       mark_used (t);
7258       return t;
7259
7260     case BASELINK:
7261       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
7262
7263     case TEMPLATE_DECL:
7264       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7265         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)), 
7266                        args, complain, in_decl);
7267       else if (is_member_template (t))
7268         return tsubst (t, args, complain, in_decl);
7269       else if (DECL_CLASS_SCOPE_P (t)
7270                && uses_template_parms (DECL_CONTEXT (t)))
7271         {
7272           /* Template template argument like the following example need
7273              special treatment:
7274
7275                template <template <class> class TT> struct C {};
7276                template <class T> struct D {
7277                  template <class U> struct E {};
7278                  C<E> c;                                // #1
7279                };
7280                D<int> d;                                // #2
7281
7282              We are processing the template argument `E' in #1 for
7283              the template instantiation #2.  Originally, `E' is a
7284              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
7285              have to substitute this with one having context `D<int>'.  */
7286
7287           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
7288           return lookup_field (context, DECL_NAME(t), 0, false);
7289         }
7290       else
7291         /* Ordinary template template argument.  */
7292         return t;
7293
7294     case CAST_EXPR:
7295     case REINTERPRET_CAST_EXPR:
7296     case CONST_CAST_EXPR:
7297     case STATIC_CAST_EXPR:
7298     case DYNAMIC_CAST_EXPR:
7299     case NOP_EXPR:
7300       return build1
7301         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7302          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7303
7304     case INDIRECT_REF:
7305     case NEGATE_EXPR:
7306     case TRUTH_NOT_EXPR:
7307     case BIT_NOT_EXPR:
7308     case ADDR_EXPR:
7309     case CONVERT_EXPR:      /* Unary + */
7310     case SIZEOF_EXPR:
7311     case ALIGNOF_EXPR:
7312     case ARROW_EXPR:
7313     case THROW_EXPR:
7314     case TYPEID_EXPR:
7315     case REALPART_EXPR:
7316     case IMAGPART_EXPR:
7317       return build1
7318         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7319          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7320
7321     case COMPONENT_REF:
7322       {
7323         tree object;
7324         tree name;
7325
7326         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
7327         name = TREE_OPERAND (t, 1);
7328         if (TREE_CODE (name) == BIT_NOT_EXPR) 
7329           {
7330             name = tsubst_copy (TREE_OPERAND (name, 0), args,
7331                                 complain, in_decl);
7332             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7333           }
7334         else if (TREE_CODE (name) == SCOPE_REF
7335                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
7336           {
7337             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
7338                                      complain, in_decl);
7339             name = TREE_OPERAND (name, 1);
7340             name = tsubst_copy (TREE_OPERAND (name, 0), args,
7341                                 complain, in_decl);
7342             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7343             name = build_nt (SCOPE_REF, base, name);
7344           }
7345         else if (TREE_CODE (name) == BASELINK)
7346           name = tsubst_baselink (name, 
7347                                   non_reference (TREE_TYPE (object)), 
7348                                   args, complain, 
7349                                   in_decl);
7350         else
7351           name = tsubst_copy (name, args, complain, in_decl);
7352         return build_nt (COMPONENT_REF, object, name);
7353       }
7354
7355     case PLUS_EXPR:
7356     case MINUS_EXPR:
7357     case MULT_EXPR:
7358     case TRUNC_DIV_EXPR:
7359     case CEIL_DIV_EXPR:
7360     case FLOOR_DIV_EXPR:
7361     case ROUND_DIV_EXPR:
7362     case EXACT_DIV_EXPR:
7363     case BIT_AND_EXPR:
7364     case BIT_ANDTC_EXPR:
7365     case BIT_IOR_EXPR:
7366     case BIT_XOR_EXPR:
7367     case TRUNC_MOD_EXPR:
7368     case FLOOR_MOD_EXPR:
7369     case TRUTH_ANDIF_EXPR:
7370     case TRUTH_ORIF_EXPR:
7371     case TRUTH_AND_EXPR:
7372     case TRUTH_OR_EXPR:
7373     case RSHIFT_EXPR:
7374     case LSHIFT_EXPR:
7375     case RROTATE_EXPR:
7376     case LROTATE_EXPR:
7377     case EQ_EXPR:
7378     case NE_EXPR:
7379     case MAX_EXPR:
7380     case MIN_EXPR:
7381     case LE_EXPR:
7382     case GE_EXPR:
7383     case LT_EXPR:
7384     case GT_EXPR:
7385     case ARRAY_REF:
7386     case COMPOUND_EXPR:
7387     case SCOPE_REF:
7388     case DOTSTAR_EXPR:
7389     case MEMBER_REF:
7390     case PREDECREMENT_EXPR:
7391     case PREINCREMENT_EXPR:
7392     case POSTDECREMENT_EXPR:
7393     case POSTINCREMENT_EXPR:
7394       return build_nt
7395         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7396          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7397
7398     case CALL_EXPR:
7399       return build_nt (code, 
7400                        tsubst_copy (TREE_OPERAND (t, 0), args,
7401                                     complain, in_decl),
7402                        tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7403                                     in_decl),
7404                        NULL_TREE);
7405
7406     case STMT_EXPR:
7407       /* This processing should really occur in tsubst_expr.  However,
7408          tsubst_expr does not recurse into expressions, since it
7409          assumes that there aren't any statements inside them.  So, we
7410          need to expand the STMT_EXPR here.  */
7411       if (!processing_template_decl)
7412         {
7413           tree stmt_expr = begin_stmt_expr ();
7414           tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl);
7415           return finish_stmt_expr (stmt_expr);
7416         }
7417       
7418       return t;
7419
7420     case COND_EXPR:
7421     case MODOP_EXPR:
7422     case PSEUDO_DTOR_EXPR:
7423       {
7424         r = build_nt
7425           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7426            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7427            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7428         return r;
7429       }
7430
7431     case NEW_EXPR:
7432       {
7433         r = build_nt
7434         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7435          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7436          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7437         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
7438         return r;
7439       }
7440
7441     case DELETE_EXPR:
7442       {
7443         r = build_nt
7444         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7445          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7446         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
7447         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
7448         return r;
7449       }
7450
7451     case TEMPLATE_ID_EXPR:
7452       {
7453         /* Substituted template arguments */
7454         tree fn = TREE_OPERAND (t, 0);
7455         tree targs = TREE_OPERAND (t, 1);
7456
7457         fn = tsubst_copy (fn, args, complain, in_decl);
7458         targs = tsubst_template_args (targs, args, complain, in_decl);
7459         
7460         return lookup_template_function (fn, targs);
7461       }
7462
7463     case TREE_LIST:
7464       {
7465         tree purpose, value, chain;
7466
7467         if (t == void_list_node)
7468           return t;
7469
7470         purpose = TREE_PURPOSE (t);
7471         if (purpose)
7472           purpose = tsubst_copy (purpose, args, complain, in_decl);
7473         value = TREE_VALUE (t);
7474         if (value)
7475           value = tsubst_copy (value, args, complain, in_decl);
7476         chain = TREE_CHAIN (t);
7477         if (chain && chain != void_type_node)
7478           chain = tsubst_copy (chain, args, complain, in_decl);
7479         if (purpose == TREE_PURPOSE (t)
7480             && value == TREE_VALUE (t)
7481             && chain == TREE_CHAIN (t))
7482           return t;
7483         return tree_cons (purpose, value, chain);
7484       }
7485
7486     case RECORD_TYPE:
7487     case UNION_TYPE:
7488     case ENUMERAL_TYPE:
7489     case INTEGER_TYPE:
7490     case TEMPLATE_TYPE_PARM:
7491     case TEMPLATE_TEMPLATE_PARM:
7492     case BOUND_TEMPLATE_TEMPLATE_PARM:
7493     case TEMPLATE_PARM_INDEX:
7494     case POINTER_TYPE:
7495     case REFERENCE_TYPE:
7496     case OFFSET_TYPE:
7497     case FUNCTION_TYPE:
7498     case METHOD_TYPE:
7499     case ARRAY_TYPE:
7500     case TYPENAME_TYPE:
7501     case UNBOUND_CLASS_TEMPLATE:
7502     case TYPEOF_TYPE:
7503     case TYPE_DECL:
7504       return tsubst (t, args, complain, in_decl);
7505
7506     case IDENTIFIER_NODE:
7507       if (IDENTIFIER_TYPENAME_P (t))
7508         {
7509           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7510           return mangle_conv_op_name_for_type (new_type);
7511         }
7512       else
7513         return t;
7514
7515     case CONSTRUCTOR:
7516       {
7517         r = build_constructor
7518           (tsubst (TREE_TYPE (t), args, complain, in_decl), 
7519            tsubst_copy (CONSTRUCTOR_ELTS (t), args, complain, in_decl));
7520         TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
7521         return r;
7522       }
7523
7524     case VA_ARG_EXPR:
7525       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
7526                                           in_decl),
7527                              tsubst (TREE_TYPE (t), args, complain, in_decl));
7528
7529     default:
7530       return t;
7531     }
7532 }
7533
7534 /* Like tsubst_copy for expressions, etc. but also does semantic
7535    processing.  */
7536
7537 static tree
7538 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7539 {
7540   tree stmt, tmp;
7541
7542   if (t == NULL_TREE || t == error_mark_node)
7543     return t;
7544
7545   if (processing_template_decl)
7546     return tsubst_copy (t, args, complain, in_decl);
7547
7548   if (!STATEMENT_CODE_P (TREE_CODE (t)))
7549     return tsubst_copy_and_build (t, args, complain, in_decl,
7550                                   /*function_p=*/false);
7551     
7552   switch (TREE_CODE (t))
7553     {
7554     case CTOR_INITIALIZER:
7555       prep_stmt (t);
7556       finish_mem_initializers (tsubst_initializer_list 
7557                                (TREE_OPERAND (t, 0), args));
7558       break;
7559
7560     case RETURN_STMT:
7561       prep_stmt (t);
7562       finish_return_stmt (tsubst_expr (RETURN_STMT_EXPR (t),
7563                                        args, complain, in_decl));
7564       break;
7565
7566     case EXPR_STMT:
7567       prep_stmt (t);
7568       finish_expr_stmt (tsubst_expr (EXPR_STMT_EXPR (t),
7569                                      args, complain, in_decl));
7570       break;
7571
7572     case USING_STMT:
7573       prep_stmt (t);
7574       do_using_directive (tsubst_expr (USING_STMT_NAMESPACE (t),
7575                                        args, complain, in_decl));
7576       break;
7577       
7578     case DECL_STMT:
7579       {
7580         tree decl;
7581         tree init;
7582
7583         prep_stmt (t);
7584         decl = DECL_STMT_DECL (t);
7585         if (TREE_CODE (decl) == LABEL_DECL)
7586           finish_label_decl (DECL_NAME (decl));
7587         else if (TREE_CODE (decl) == USING_DECL)
7588           {
7589             tree scope = DECL_INITIAL (decl);
7590             tree name = DECL_NAME (decl);
7591             tree decl;
7592             
7593             scope = tsubst_expr (scope, args, complain, in_decl);
7594             decl = lookup_qualified_name (scope, name,
7595                                           /*is_type_p=*/0, /*complain=*/false);
7596             if (decl == error_mark_node)
7597               qualified_name_lookup_error (scope, name);
7598             else
7599               do_local_using_decl (decl);
7600           }
7601         else
7602           {
7603             init = DECL_INITIAL (decl);
7604             decl = tsubst (decl, args, complain, in_decl);
7605             if (decl != error_mark_node)
7606               {
7607                 if (init)
7608                   DECL_INITIAL (decl) = error_mark_node;
7609                 /* By marking the declaration as instantiated, we avoid
7610                    trying to instantiate it.  Since instantiate_decl can't
7611                    handle local variables, and since we've already done
7612                    all that needs to be done, that's the right thing to
7613                    do.  */
7614                 if (TREE_CODE (decl) == VAR_DECL)
7615                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
7616                 if (TREE_CODE (decl) == VAR_DECL
7617                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
7618                   /* Anonymous aggregates are a special case.  */
7619                   finish_anon_union (decl);
7620                 else 
7621                   {
7622                     maybe_push_decl (decl);
7623                     if (TREE_CODE (decl) == VAR_DECL
7624                         && DECL_PRETTY_FUNCTION_P (decl))
7625                       {
7626                         /* For __PRETTY_FUNCTION__ we have to adjust the
7627                            initializer.  */
7628                         const char *const name
7629                           = cxx_printable_name (current_function_decl, 2);
7630                         init = cp_fname_init (name);
7631                         TREE_TYPE (decl) = TREE_TYPE (init);
7632                       }
7633                     else
7634                       init = tsubst_expr (init, args, complain, in_decl);
7635                     cp_finish_decl (decl, init, NULL_TREE, 0);
7636                   }
7637               }
7638           }
7639
7640         /* A DECL_STMT can also be used as an expression, in the condition
7641            clause of an if/for/while construct.  If we aren't followed by
7642            another statement, return our decl.  */
7643         if (TREE_CHAIN (t) == NULL_TREE)
7644           return decl;
7645       }
7646       break;
7647
7648     case FOR_STMT:
7649       {
7650         prep_stmt (t);
7651
7652         stmt = begin_for_stmt ();
7653         tsubst_expr (FOR_INIT_STMT (t), args, complain, in_decl);
7654         finish_for_init_stmt (stmt);
7655         finish_for_cond (tsubst_expr (FOR_COND (t),
7656                                       args, complain, in_decl),
7657                          stmt);
7658         tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
7659         finish_for_expr (tmp, stmt);
7660         tsubst_expr (FOR_BODY (t), args, complain, in_decl);
7661         finish_for_stmt (stmt);
7662       }
7663       break;
7664
7665     case WHILE_STMT:
7666       {
7667         prep_stmt (t);
7668         stmt = begin_while_stmt ();
7669         finish_while_stmt_cond (tsubst_expr (WHILE_COND (t),
7670                                              args, complain, in_decl),
7671                                 stmt);
7672         tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
7673         finish_while_stmt (stmt);
7674       }
7675       break;
7676
7677     case DO_STMT:
7678       {
7679         prep_stmt (t);
7680         stmt = begin_do_stmt ();
7681         tsubst_expr (DO_BODY (t), args, complain, in_decl);
7682         finish_do_body (stmt);
7683         finish_do_stmt (tsubst_expr (DO_COND (t),
7684                                      args, complain, in_decl),
7685                         stmt);
7686       }
7687       break;
7688
7689     case IF_STMT:
7690       {
7691         prep_stmt (t);
7692         stmt = begin_if_stmt ();
7693         finish_if_stmt_cond (tsubst_expr (IF_COND (t),
7694                                           args, complain, in_decl),
7695                              stmt);
7696
7697         if (tmp = THEN_CLAUSE (t), tmp)
7698           {
7699             tsubst_expr (tmp, args, complain, in_decl);
7700             finish_then_clause (stmt);
7701           }
7702
7703         if (tmp = ELSE_CLAUSE (t), tmp)
7704           {
7705             begin_else_clause ();
7706             tsubst_expr (tmp, args, complain, in_decl);
7707             finish_else_clause (stmt);
7708           }
7709
7710         finish_if_stmt ();
7711       }
7712       break;
7713
7714     case COMPOUND_STMT:
7715       {
7716         prep_stmt (t);
7717         if (COMPOUND_STMT_BODY_BLOCK (t))
7718           stmt = begin_function_body ();
7719         else
7720           stmt = begin_compound_stmt (COMPOUND_STMT_NO_SCOPE (t));
7721
7722         tsubst_expr (COMPOUND_BODY (t), args, complain, in_decl);
7723
7724         if (COMPOUND_STMT_BODY_BLOCK (t))
7725           finish_function_body (stmt);
7726         else
7727           finish_compound_stmt (stmt);
7728       }
7729       break;
7730
7731     case BREAK_STMT:
7732       prep_stmt (t);
7733       finish_break_stmt ();
7734       break;
7735
7736     case CONTINUE_STMT:
7737       prep_stmt (t);
7738       finish_continue_stmt ();
7739       break;
7740
7741     case SWITCH_STMT:
7742       {
7743         tree val;
7744
7745         prep_stmt (t);
7746         stmt = begin_switch_stmt ();
7747         val = tsubst_expr (SWITCH_COND (t), args, complain, in_decl);
7748         finish_switch_cond (val, stmt);
7749         tsubst_expr (SWITCH_BODY (t), args, complain, in_decl);
7750         finish_switch_stmt (stmt);
7751       }
7752       break;
7753
7754     case CASE_LABEL:
7755       prep_stmt (t);
7756       finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
7757                          tsubst_expr (CASE_HIGH (t), args, complain,
7758                                       in_decl));
7759       break;
7760
7761     case LABEL_STMT:
7762       input_line = STMT_LINENO (t);
7763       finish_label_stmt (DECL_NAME (LABEL_STMT_LABEL (t)));
7764       break;
7765
7766     case FILE_STMT:
7767       input_filename = FILE_STMT_FILENAME (t);
7768       add_stmt (build_nt (FILE_STMT, FILE_STMT_FILENAME_NODE (t)));
7769       break;
7770
7771     case GOTO_STMT:
7772       prep_stmt (t);
7773       tmp = GOTO_DESTINATION (t);
7774       if (TREE_CODE (tmp) != LABEL_DECL)
7775         /* Computed goto's must be tsubst'd into.  On the other hand,
7776            non-computed gotos must not be; the identifier in question
7777            will have no binding.  */
7778         tmp = tsubst_expr (tmp, args, complain, in_decl);
7779       else
7780         tmp = DECL_NAME (tmp);
7781       finish_goto_stmt (tmp);
7782       break;
7783
7784     case ASM_STMT:
7785       prep_stmt (t);
7786       tmp = finish_asm_stmt
7787         (ASM_CV_QUAL (t),
7788          tsubst_expr (ASM_STRING (t), args, complain, in_decl),
7789          tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl),
7790          tsubst_expr (ASM_INPUTS (t), args, complain, in_decl), 
7791          tsubst_expr (ASM_CLOBBERS (t), args, complain, in_decl));
7792       ASM_INPUT_P (tmp) = ASM_INPUT_P (t);
7793       break;
7794
7795     case TRY_BLOCK:
7796       prep_stmt (t);
7797       if (CLEANUP_P (t))
7798         {
7799           stmt = begin_try_block ();
7800           tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
7801           finish_cleanup_try_block (stmt);
7802           finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
7803                                        complain, in_decl),
7804                           stmt);
7805         }
7806       else
7807         {
7808           if (FN_TRY_BLOCK_P (t))
7809             stmt = begin_function_try_block ();
7810           else
7811             stmt = begin_try_block ();
7812
7813           tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
7814
7815           if (FN_TRY_BLOCK_P (t))
7816             finish_function_try_block (stmt);
7817           else
7818             finish_try_block (stmt);
7819
7820           tsubst_expr (TRY_HANDLERS (t), args, complain, in_decl);
7821           if (FN_TRY_BLOCK_P (t))
7822             finish_function_handler_sequence (stmt);
7823           else
7824             finish_handler_sequence (stmt);
7825         }
7826       break;
7827       
7828     case HANDLER:
7829       {
7830         tree decl;
7831
7832         prep_stmt (t);
7833         stmt = begin_handler ();
7834         if (HANDLER_PARMS (t))
7835           {
7836             decl = DECL_STMT_DECL (HANDLER_PARMS (t));
7837             decl = tsubst (decl, args, complain, in_decl);
7838             /* Prevent instantiate_decl from trying to instantiate
7839                this variable.  We've already done all that needs to be
7840                done.  */
7841             DECL_TEMPLATE_INSTANTIATED (decl) = 1;
7842           }
7843         else
7844           decl = NULL_TREE;
7845         finish_handler_parms (decl, stmt);
7846         tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
7847         finish_handler (stmt);
7848       }
7849       break;
7850
7851     case TAG_DEFN:
7852       prep_stmt (t);
7853       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
7854       break;
7855
7856     default:
7857       abort ();
7858     }
7859
7860   return tsubst_expr (TREE_CHAIN (t), args, complain, in_decl);
7861 }
7862
7863 /* T is a postfix-expression that is not being used in a function
7864    call.  Return the substituted version of T.  */
7865
7866 static tree
7867 tsubst_non_call_postfix_expression (tree t, tree args, 
7868                                     tsubst_flags_t complain,
7869                                     tree in_decl)
7870 {
7871   if (TREE_CODE (t) == SCOPE_REF)
7872     t = tsubst_qualified_id (t, args, complain, in_decl,
7873                              /*done=*/false, /*address_p=*/false);
7874   else
7875     t = tsubst_copy_and_build (t, args, complain, in_decl,
7876                                /*function_p=*/false);
7877
7878   return t;
7879 }
7880
7881 /* Like tsubst but deals with expressions and performs semantic
7882    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
7883
7884 tree
7885 tsubst_copy_and_build (tree t, 
7886                        tree args, 
7887                        tsubst_flags_t complain, 
7888                        tree in_decl,
7889                        bool function_p)
7890 {
7891 #define RECUR(NODE) \
7892   tsubst_copy_and_build (NODE, args, complain, in_decl, /*function_p=*/false)
7893
7894   tree op1;
7895
7896   if (t == NULL_TREE || t == error_mark_node)
7897     return t;
7898
7899   switch (TREE_CODE (t))
7900     {
7901     case USING_DECL:
7902       t = DECL_NAME (t);
7903       /* Fallthrough. */
7904     case IDENTIFIER_NODE:
7905       {
7906         tree decl;
7907         cp_id_kind idk;
7908         tree qualifying_class;
7909         bool non_constant_expression_p;
7910         const char *error_msg;
7911
7912         if (IDENTIFIER_TYPENAME_P (t))
7913           {
7914             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7915             t = mangle_conv_op_name_for_type (new_type);
7916           }
7917
7918         /* Look up the name.  */
7919         decl = lookup_name (t, 0);
7920
7921         /* By convention, expressions use ERROR_MARK_NODE to indicate
7922            failure, not NULL_TREE.  */
7923         if (decl == NULL_TREE)
7924           decl = error_mark_node;
7925
7926         decl = finish_id_expression (t, decl, NULL_TREE,
7927                                      &idk,
7928                                      &qualifying_class,
7929                                      /*constant_expression_p=*/false,
7930                                      /*allow_non_constant_expression_p=*/false,
7931                                      &non_constant_expression_p,
7932                                      &error_msg);
7933         if (error_msg)
7934           error (error_msg);
7935         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
7936           decl = unqualified_name_lookup_error (decl);
7937         return decl;
7938       }
7939
7940     case TEMPLATE_ID_EXPR:
7941       {
7942         tree object;
7943         tree template = RECUR (TREE_OPERAND (t, 0));
7944         tree targs = RECUR (TREE_OPERAND (t, 1));
7945         
7946         if (TREE_CODE (template) == COMPONENT_REF)
7947           {
7948             object = TREE_OPERAND (template, 0);
7949             template = TREE_OPERAND (template, 1);
7950           }
7951         else
7952           object = NULL_TREE;
7953         template = lookup_template_function (template, targs);
7954         
7955         if (object)
7956           return build (COMPONENT_REF, TREE_TYPE (template), 
7957                         object, template);
7958         else
7959           return template;
7960       }
7961
7962     case INDIRECT_REF:
7963       return build_x_indirect_ref (RECUR (TREE_OPERAND (t, 0)), "unary *");
7964
7965     case CAST_EXPR:
7966       return build_functional_cast
7967         (tsubst (TREE_TYPE (t), args, complain, in_decl),
7968          RECUR (TREE_OPERAND (t, 0)));
7969
7970     case REINTERPRET_CAST_EXPR:
7971       return build_reinterpret_cast
7972         (tsubst (TREE_TYPE (t), args, complain, in_decl),
7973          RECUR (TREE_OPERAND (t, 0)));
7974
7975     case CONST_CAST_EXPR:
7976       return build_const_cast
7977         (tsubst (TREE_TYPE (t), args, complain, in_decl),
7978          RECUR (TREE_OPERAND (t, 0)));
7979
7980     case DYNAMIC_CAST_EXPR:
7981       return build_dynamic_cast
7982         (tsubst (TREE_TYPE (t), args, complain, in_decl),
7983          RECUR (TREE_OPERAND (t, 0)));
7984
7985     case STATIC_CAST_EXPR:
7986       return build_static_cast
7987         (tsubst (TREE_TYPE (t), args, complain, in_decl),
7988          RECUR (TREE_OPERAND (t, 0)));
7989
7990     case POSTDECREMENT_EXPR:
7991     case POSTINCREMENT_EXPR:
7992       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
7993                                                 args, complain, in_decl);
7994       return build_x_unary_op (TREE_CODE (t), op1);
7995
7996     case PREDECREMENT_EXPR:
7997     case PREINCREMENT_EXPR:
7998     case NEGATE_EXPR:
7999     case BIT_NOT_EXPR:
8000     case ABS_EXPR:
8001     case TRUTH_NOT_EXPR:
8002     case CONVERT_EXPR:  /* Unary + */
8003     case REALPART_EXPR:
8004     case IMAGPART_EXPR:
8005       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
8006
8007     case ADDR_EXPR:
8008       op1 = TREE_OPERAND (t, 0);
8009       if (TREE_CODE (op1) == SCOPE_REF)
8010         op1 = tsubst_qualified_id (op1, args, complain, in_decl, 
8011                                    /*done=*/true, /*address_p=*/true);
8012       else
8013         op1 = tsubst_non_call_postfix_expression (op1, args, complain, 
8014                                                   in_decl);
8015       return build_x_unary_op (ADDR_EXPR, op1);
8016
8017     case PLUS_EXPR:
8018     case MINUS_EXPR:
8019     case MULT_EXPR:
8020     case TRUNC_DIV_EXPR:
8021     case CEIL_DIV_EXPR:
8022     case FLOOR_DIV_EXPR:
8023     case ROUND_DIV_EXPR:
8024     case EXACT_DIV_EXPR:
8025     case BIT_AND_EXPR:
8026     case BIT_ANDTC_EXPR:
8027     case BIT_IOR_EXPR:
8028     case BIT_XOR_EXPR:
8029     case TRUNC_MOD_EXPR:
8030     case FLOOR_MOD_EXPR:
8031     case TRUTH_ANDIF_EXPR:
8032     case TRUTH_ORIF_EXPR:
8033     case TRUTH_AND_EXPR:
8034     case TRUTH_OR_EXPR:
8035     case RSHIFT_EXPR:
8036     case LSHIFT_EXPR:
8037     case RROTATE_EXPR:
8038     case LROTATE_EXPR:
8039     case EQ_EXPR:
8040     case NE_EXPR:
8041     case MAX_EXPR:
8042     case MIN_EXPR:
8043     case LE_EXPR:
8044     case GE_EXPR:
8045     case LT_EXPR:
8046     case GT_EXPR:
8047     case MEMBER_REF:
8048     case DOTSTAR_EXPR:
8049       return build_x_binary_op
8050         (TREE_CODE (t), 
8051          RECUR (TREE_OPERAND (t, 0)),
8052          RECUR (TREE_OPERAND (t, 1)));
8053
8054     case SCOPE_REF:
8055       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
8056                                   /*address_p=*/false);
8057
8058     case ARRAY_REF:
8059       if (tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl)
8060           == NULL_TREE)
8061         /* new-type-id */
8062         return build_nt (ARRAY_REF, NULL_TREE, RECUR (TREE_OPERAND (t, 1)));
8063
8064       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8065                                                 args, complain, in_decl);
8066       /* Remember that there was a reference to this entity.  */
8067       if (DECL_P (op1))
8068         mark_used (op1);
8069       return grok_array_decl (op1, RECUR (TREE_OPERAND (t, 1)));
8070
8071     case SIZEOF_EXPR:
8072     case ALIGNOF_EXPR:
8073       op1 = TREE_OPERAND (t, 0);
8074       if (!args)
8075         {
8076           /* When there are no ARGS, we are trying to evaluate a
8077              non-dependent expression from the parser.  Trying to do
8078              the substitutions may not work.  */
8079           if (!TYPE_P (op1))
8080             op1 = TREE_TYPE (op1);
8081         }
8082       else
8083         {
8084           ++skip_evaluation;
8085           op1 = RECUR (op1);
8086           --skip_evaluation;
8087         }
8088       if (TREE_CODE (t) == SIZEOF_EXPR)
8089         return finish_sizeof (op1);
8090       else
8091         return finish_alignof (op1);
8092
8093     case MODOP_EXPR:
8094       return build_x_modify_expr
8095         (RECUR (TREE_OPERAND (t, 0)),
8096          TREE_CODE (TREE_OPERAND (t, 1)),
8097          RECUR (TREE_OPERAND (t, 2)));
8098
8099     case ARROW_EXPR:
8100       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8101                                                 args, complain, in_decl);
8102       /* Remember that there was a reference to this entity.  */
8103       if (DECL_P (op1))
8104         mark_used (op1);
8105       return build_x_arrow (op1);
8106
8107     case NEW_EXPR:
8108       return build_new
8109         (RECUR (TREE_OPERAND (t, 0)),
8110          RECUR (TREE_OPERAND (t, 1)),
8111          RECUR (TREE_OPERAND (t, 2)),
8112          NEW_EXPR_USE_GLOBAL (t));
8113
8114     case DELETE_EXPR:
8115      return delete_sanity
8116        (RECUR (TREE_OPERAND (t, 0)),
8117         RECUR (TREE_OPERAND (t, 1)),
8118         DELETE_EXPR_USE_VEC (t),
8119         DELETE_EXPR_USE_GLOBAL (t));
8120
8121     case COMPOUND_EXPR:
8122       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
8123                                     RECUR (TREE_OPERAND (t, 1)));
8124
8125     case CALL_EXPR:
8126       {
8127         tree function;
8128         tree call_args;
8129         bool qualified_p;
8130
8131         function = TREE_OPERAND (t, 0);
8132         if (TREE_CODE (function) == SCOPE_REF)
8133           {
8134             qualified_p = true;
8135             function = tsubst_qualified_id (function, args, complain, in_decl,
8136                                             /*done=*/false, 
8137                                             /*address_p=*/false);
8138           }
8139         else
8140           {
8141             qualified_p = (TREE_CODE (function) == COMPONENT_REF
8142                            && (TREE_CODE (TREE_OPERAND (function, 1))
8143                                == SCOPE_REF));
8144             function = tsubst_copy_and_build (function, args, complain, 
8145                                               in_decl,
8146                                               !qualified_p);
8147           }
8148
8149         call_args = RECUR (TREE_OPERAND (t, 1));
8150           
8151         if (BASELINK_P (function))
8152           qualified_p = 1;
8153
8154         if (!qualified_p
8155             && TREE_CODE (function) != TEMPLATE_ID_EXPR
8156             && (is_overloaded_fn (function)
8157                 || DECL_P (function)
8158                 || TREE_CODE (function) == IDENTIFIER_NODE))
8159           {
8160             if (call_args)
8161               function = perform_koenig_lookup (function, call_args);
8162             else if (TREE_CODE (function) == IDENTIFIER_NODE)
8163               function = unqualified_name_lookup_error (function);
8164           }
8165
8166         /* Remember that there was a reference to this entity.  */
8167         if (DECL_P (function))
8168           mark_used (function);
8169
8170         function = convert_from_reference (function);
8171
8172         if (TREE_CODE (function) == OFFSET_REF)
8173           return build_offset_ref_call_from_tree (function, call_args);
8174         if (TREE_CODE (function) == COMPONENT_REF)
8175           return (build_new_method_call 
8176                   (TREE_OPERAND (function, 0),
8177                    TREE_OPERAND (function, 1),
8178                    call_args, NULL_TREE, 
8179                    qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL));
8180         return finish_call_expr (function, call_args, 
8181                                  /*disallow_virtual=*/qualified_p);
8182       }
8183
8184     case COND_EXPR:
8185       return build_x_conditional_expr
8186         (RECUR (TREE_OPERAND (t, 0)),
8187          RECUR (TREE_OPERAND (t, 1)),
8188          RECUR (TREE_OPERAND (t, 2)));
8189
8190     case PSEUDO_DTOR_EXPR:
8191       return finish_pseudo_destructor_expr 
8192         (RECUR (TREE_OPERAND (t, 0)),
8193          RECUR (TREE_OPERAND (t, 1)),
8194          RECUR (TREE_OPERAND (t, 2)));
8195
8196     case TREE_LIST:
8197       {
8198         tree purpose, value, chain;
8199
8200         if (t == void_list_node)
8201           return t;
8202
8203         purpose = TREE_PURPOSE (t);
8204         if (purpose)
8205           purpose = RECUR (purpose);
8206         value = TREE_VALUE (t);
8207         if (value)
8208           value = RECUR (value);
8209         chain = TREE_CHAIN (t);
8210         if (chain && chain != void_type_node)
8211           chain = RECUR (chain);
8212         if (purpose == TREE_PURPOSE (t)
8213             && value == TREE_VALUE (t)
8214             && chain == TREE_CHAIN (t))
8215           return t;
8216         return tree_cons (purpose, value, chain);
8217       }
8218
8219     case COMPONENT_REF:
8220       {
8221         tree object;
8222         tree member;
8223
8224         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8225                                                      args, complain, in_decl);
8226         /* Remember that there was a reference to this entity.  */
8227         if (DECL_P (object))
8228           mark_used (object);
8229
8230         member = TREE_OPERAND (t, 1);
8231         if (BASELINK_P (member))
8232           member = tsubst_baselink (member, 
8233                                     non_reference (TREE_TYPE (object)),
8234                                     args, complain, in_decl);
8235         else
8236           member = tsubst_copy (member, args, complain, in_decl);
8237
8238         if (!CLASS_TYPE_P (TREE_TYPE (object)))
8239           {
8240             if (TREE_CODE (member) == BIT_NOT_EXPR)
8241               return finish_pseudo_destructor_expr (object, 
8242                                                     NULL_TREE,
8243                                                     TREE_TYPE (object));
8244             else if (TREE_CODE (member) == SCOPE_REF
8245                      && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
8246               return finish_pseudo_destructor_expr (object, 
8247                                                     object,
8248                                                     TREE_TYPE (object));
8249           }
8250         else if (TREE_CODE (member) == SCOPE_REF
8251                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
8252           {
8253             tree tmpl;
8254             tree args;
8255         
8256             /* Lookup the template functions now that we know what the
8257                scope is.  */
8258             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
8259             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
8260             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl, 
8261                                             /*is_type=*/0, /*complain=*/false);
8262             if (BASELINK_P (member))
8263               BASELINK_FUNCTIONS (member) 
8264                 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
8265                             args);
8266             else
8267               {
8268                 qualified_name_lookup_error (TREE_TYPE (object), tmpl);
8269                 return error_mark_node;
8270               }
8271           }
8272         else if (TREE_CODE (member) == FIELD_DECL)
8273           return finish_non_static_data_member (member, object, NULL_TREE);
8274
8275         return finish_class_member_access_expr (object, member);
8276       }
8277
8278     case THROW_EXPR:
8279       return build_throw
8280         (RECUR (TREE_OPERAND (t, 0)));
8281
8282     case CONSTRUCTOR:
8283       {
8284         tree r;
8285         tree elts;
8286         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8287         bool purpose_p;
8288
8289         /* digest_init will do the wrong thing if we let it.  */
8290         if (type && TYPE_PTRMEMFUNC_P (type))
8291           return t;
8292
8293         r = NULL_TREE;
8294         /* We do not want to process the purpose of aggregate
8295            initializers as they are identifier nodes which will be
8296            looked up by digest_init.  */
8297         purpose_p = !(type && IS_AGGR_TYPE (type));
8298         for (elts = CONSTRUCTOR_ELTS (t);
8299              elts;
8300              elts = TREE_CHAIN (elts))
8301           {
8302             tree purpose = TREE_PURPOSE (elts);
8303             tree value = TREE_VALUE (elts);
8304             
8305             if (purpose && purpose_p)
8306               purpose = RECUR (purpose);
8307             value = RECUR (value);
8308             r = tree_cons (purpose, value, r);
8309           }
8310         
8311         r = build_constructor (NULL_TREE, nreverse (r));
8312         TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
8313
8314         if (type)
8315           return digest_init (type, r, 0);
8316         return r;
8317       }
8318
8319     case TYPEID_EXPR:
8320       {
8321         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
8322         if (TYPE_P (operand_0))
8323           return get_typeid (operand_0);
8324         return build_typeid (operand_0);
8325       }
8326
8327     case PARM_DECL:
8328       return convert_from_reference (tsubst_copy (t, args, complain, in_decl));
8329
8330     case VAR_DECL:
8331       if (args)
8332         t = tsubst_copy (t, args, complain, in_decl);
8333       else
8334         /* If there are no ARGS, then we are evaluating a
8335            non-dependent expression.  If the expression is
8336            non-dependent, the variable must be a constant.  */
8337         t = DECL_INITIAL (t);
8338       return convert_from_reference (t);
8339
8340     case VA_ARG_EXPR:
8341       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
8342                              tsubst_copy (TREE_TYPE (t), args, complain, 
8343                                           in_decl));
8344
8345     default:
8346       return tsubst_copy (t, args, complain, in_decl);
8347     }
8348
8349 #undef RECUR
8350 }
8351
8352 /* Verify that the instantiated ARGS are valid. For type arguments,
8353    make sure that the type's linkage is ok. For non-type arguments,
8354    make sure they are constants if they are integral or enumerations.
8355    Emit an error under control of COMPLAIN, and return TRUE on error.  */
8356
8357 static bool
8358 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
8359 {
8360   int ix, len = DECL_NTPARMS (tmpl);
8361   bool result = false;
8362
8363   for (ix = 0; ix != len; ix++)
8364     {
8365       tree t = TREE_VEC_ELT (args, ix);
8366       
8367       if (TYPE_P (t))
8368         {
8369           /* [basic.link]: A name with no linkage (notably, the name
8370              of a class or enumeration declared in a local scope)
8371              shall not be used to declare an entity with linkage.
8372              This implies that names with no linkage cannot be used as
8373              template arguments.  */
8374           tree nt = no_linkage_check (t);
8375
8376           if (nt)
8377             {
8378               if (!(complain & tf_error))
8379                 /*OK*/;
8380               else if (TYPE_ANONYMOUS_P (nt))
8381                 error ("`%T' uses anonymous type", t);
8382               else
8383                 error ("`%T' uses local type `%T'", t, nt);
8384               result = true;
8385             }
8386           /* In order to avoid all sorts of complications, we do not
8387              allow variably-modified types as template arguments.  */
8388           else if (variably_modified_type_p (t))
8389             {
8390               if (complain & tf_error)
8391                 error ("`%T' is a variably modified type", t);
8392               result = true;
8393             }
8394         }
8395       /* A non-type argument of integral or enumerated type must be a
8396          constant.  */
8397       else if (TREE_TYPE (t)
8398                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
8399                && !TREE_CONSTANT (t))
8400         {
8401           if (complain & tf_error)
8402             error ("integral expression `%E' is not constant", t);
8403           result = true;
8404         }
8405     }
8406   if (result && complain & tf_error)
8407     error ("  trying to instantiate `%D'", tmpl);
8408   return result;
8409 }
8410
8411 /* Instantiate the indicated variable or function template TMPL with
8412    the template arguments in TARG_PTR.  */
8413
8414 tree
8415 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
8416 {
8417   tree fndecl;
8418   tree gen_tmpl;
8419   tree spec;
8420
8421   if (tmpl == error_mark_node)
8422     return error_mark_node;
8423
8424   my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 283);
8425
8426   /* If this function is a clone, handle it specially.  */
8427   if (DECL_CLONED_FUNCTION_P (tmpl))
8428     {
8429       tree spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
8430                                         complain);
8431       tree clone;
8432       
8433       /* Look for the clone.  */
8434       for (clone = TREE_CHAIN (spec);
8435            clone && DECL_CLONED_FUNCTION_P (clone);
8436            clone = TREE_CHAIN (clone))
8437         if (DECL_NAME (clone) == DECL_NAME (tmpl))
8438           return clone;
8439       /* We should always have found the clone by now.  */
8440       abort ();
8441       return NULL_TREE;
8442     }
8443   
8444   /* Check to see if we already have this specialization.  */
8445   spec = retrieve_specialization (tmpl, targ_ptr);
8446   if (spec != NULL_TREE)
8447     return spec;
8448
8449   gen_tmpl = most_general_template (tmpl);
8450   if (tmpl != gen_tmpl)
8451     {
8452       /* The TMPL is a partial instantiation.  To get a full set of
8453          arguments we must add the arguments used to perform the
8454          partial instantiation.  */
8455       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
8456                                               targ_ptr);
8457
8458       /* Check to see if we already have this specialization.  */
8459       spec = retrieve_specialization (gen_tmpl, targ_ptr);
8460       if (spec != NULL_TREE)
8461         return spec;
8462     }
8463
8464   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
8465                                complain))
8466     return error_mark_node;
8467   
8468   /* We are building a FUNCTION_DECL, during which the access of its
8469      parameters and return types have to be checked.  However this
8470      FUNCTION_DECL which is the desired context for access checking
8471      is not built yet.  We solve this chicken-and-egg problem by
8472      deferring all checks until we have the FUNCTION_DECL.  */
8473   push_deferring_access_checks (dk_deferred);
8474
8475   /* substitute template parameters */
8476   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
8477                    targ_ptr, complain, gen_tmpl);
8478
8479   /* Now we know the specialization, compute access previously
8480      deferred.  */
8481   push_access_scope (fndecl);
8482   perform_deferred_access_checks ();
8483   pop_access_scope (fndecl);
8484   pop_deferring_access_checks ();
8485
8486   /* The DECL_TI_TEMPLATE should always be the immediate parent
8487      template, not the most general template.  */
8488   DECL_TI_TEMPLATE (fndecl) = tmpl;
8489
8490   if (flag_external_templates)
8491     add_pending_template (fndecl);
8492
8493   /* If we've just instantiated the main entry point for a function,
8494      instantiate all the alternate entry points as well.  We do this
8495      by cloning the instantiation of the main entry point, not by
8496      instantiating the template clones.  */
8497   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
8498     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
8499
8500   return fndecl;
8501 }
8502
8503 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
8504    arguments that are being used when calling it.  TARGS is a vector
8505    into which the deduced template arguments are placed.  
8506
8507    Return zero for success, 2 for an incomplete match that doesn't resolve
8508    all the types, and 1 for complete failure.  An error message will be
8509    printed only for an incomplete match.
8510
8511    If FN is a conversion operator, or we are trying to produce a specific
8512    specialization, RETURN_TYPE is the return type desired.
8513
8514    The EXPLICIT_TARGS are explicit template arguments provided via a
8515    template-id.
8516
8517    The parameter STRICT is one of:
8518
8519    DEDUCE_CALL: 
8520      We are deducing arguments for a function call, as in
8521      [temp.deduct.call].
8522
8523    DEDUCE_CONV:
8524      We are deducing arguments for a conversion function, as in 
8525      [temp.deduct.conv].
8526
8527    DEDUCE_EXACT:
8528      We are deducing arguments when doing an explicit instantiation
8529      as in [temp.explicit], when determining an explicit specialization
8530      as in [temp.expl.spec], or when taking the address of a function
8531      template, as in [temp.deduct.funcaddr]. 
8532
8533    DEDUCE_ORDER:
8534      We are deducing arguments when calculating the partial
8535      ordering between specializations of function or class
8536      templates, as in [temp.func.order] and [temp.class.order].
8537
8538    LEN is the number of parms to consider before returning success, or -1
8539    for all.  This is used in partial ordering to avoid comparing parms for
8540    which no actual argument was passed, since they are not considered in
8541    overload resolution (and are explicitly excluded from consideration in
8542    partial ordering in [temp.func.order]/6).  */
8543
8544 int
8545 fn_type_unification (tree fn, 
8546                      tree explicit_targs, 
8547                      tree targs, 
8548                      tree args, 
8549                      tree return_type,
8550                      unification_kind_t strict, 
8551                      int len)
8552 {
8553   tree parms;
8554   tree fntype;
8555   int result;
8556
8557   my_friendly_assert (TREE_CODE (fn) == TEMPLATE_DECL, 0);
8558
8559   fntype = TREE_TYPE (fn);
8560   if (explicit_targs)
8561     {
8562       /* [temp.deduct]
8563           
8564          The specified template arguments must match the template
8565          parameters in kind (i.e., type, nontype, template), and there
8566          must not be more arguments than there are parameters;
8567          otherwise type deduction fails.
8568
8569          Nontype arguments must match the types of the corresponding
8570          nontype template parameters, or must be convertible to the
8571          types of the corresponding nontype parameters as specified in
8572          _temp.arg.nontype_, otherwise type deduction fails.
8573
8574          All references in the function type of the function template
8575          to the corresponding template parameters are replaced by the
8576          specified template argument values.  If a substitution in a
8577          template parameter or in the function type of the function
8578          template results in an invalid type, type deduction fails.  */
8579       int i;
8580       tree converted_args;
8581
8582       converted_args
8583         = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn), 
8584                                   explicit_targs, NULL_TREE, tf_none, 
8585                                   /*require_all_arguments=*/0));
8586       if (converted_args == error_mark_node)
8587         return 1;
8588
8589       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
8590       if (fntype == error_mark_node)
8591         return 1;
8592
8593       /* Place the explicitly specified arguments in TARGS.  */
8594       for (i = 0; i < TREE_VEC_LENGTH (targs); i++)
8595         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
8596     }
8597      
8598   parms = TYPE_ARG_TYPES (fntype);
8599   /* Never do unification on the 'this' parameter.  */
8600   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
8601     parms = TREE_CHAIN (parms);
8602   
8603   if (return_type)
8604     {
8605       /* We've been given a return type to match, prepend it.  */
8606       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
8607       args = tree_cons (NULL_TREE, return_type, args);
8608       if (len >= 0)
8609         ++len;
8610     }
8611
8612   /* We allow incomplete unification without an error message here
8613      because the standard doesn't seem to explicitly prohibit it.  Our
8614      callers must be ready to deal with unification failures in any
8615      event.  */
8616   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn), 
8617                                   targs, parms, args, /*subr=*/0,
8618                                   strict, /*allow_incomplete*/1, len);
8619
8620   if (result == 0) 
8621     /* All is well so far.  Now, check:
8622        
8623        [temp.deduct] 
8624        
8625        When all template arguments have been deduced, all uses of
8626        template parameters in nondeduced contexts are replaced with
8627        the corresponding deduced argument values.  If the
8628        substitution results in an invalid type, as described above,
8629        type deduction fails.  */
8630     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
8631         == error_mark_node)
8632       return 1;
8633
8634   return result;
8635 }
8636
8637 /* Adjust types before performing type deduction, as described in
8638    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
8639    sections are symmetric.  PARM is the type of a function parameter
8640    or the return type of the conversion function.  ARG is the type of
8641    the argument passed to the call, or the type of the value
8642    initialized with the result of the conversion function.  */
8643
8644 static int
8645 maybe_adjust_types_for_deduction (unification_kind_t strict, 
8646                                   tree* parm, 
8647                                   tree* arg)
8648 {
8649   int result = 0;
8650   
8651   switch (strict)
8652     {
8653     case DEDUCE_CALL:
8654       break;
8655
8656     case DEDUCE_CONV:
8657       {
8658         /* Swap PARM and ARG throughout the remainder of this
8659            function; the handling is precisely symmetric since PARM
8660            will initialize ARG rather than vice versa.  */
8661         tree* temp = parm;
8662         parm = arg;
8663         arg = temp;
8664         break;
8665       }
8666
8667     case DEDUCE_EXACT:
8668       /* There is nothing to do in this case.  */
8669       return 0;
8670
8671     case DEDUCE_ORDER:
8672       /* DR 214. [temp.func.order] is underspecified, and leads to no
8673          ordering between things like `T *' and `T const &' for `U *'.
8674          The former has T=U and the latter T=U*. The former looks more
8675          specialized and John Spicer considers it well-formed (the EDG
8676          compiler accepts it).
8677
8678          John also confirms that deduction should proceed as in a function
8679          call. Which implies the usual ARG and PARM conversions as DEDUCE_CALL.
8680          However, in ordering, ARG can have REFERENCE_TYPE, but no argument
8681          to an actual call can have such a type.
8682          
8683          If both ARG and PARM are REFERENCE_TYPE, we change neither.
8684          If only ARG is a REFERENCE_TYPE, we look through that and then
8685          proceed as with DEDUCE_CALL (which could further convert it).  */
8686       if (TREE_CODE (*arg) == REFERENCE_TYPE)
8687         {
8688           if (TREE_CODE (*parm) == REFERENCE_TYPE)
8689             return 0;
8690           *arg = TREE_TYPE (*arg);
8691         }
8692       break;
8693     default:
8694       abort ();
8695     }
8696
8697   if (TREE_CODE (*parm) != REFERENCE_TYPE)
8698     {
8699       /* [temp.deduct.call]
8700          
8701          If P is not a reference type:
8702          
8703          --If A is an array type, the pointer type produced by the
8704          array-to-pointer standard conversion (_conv.array_) is
8705          used in place of A for type deduction; otherwise,
8706          
8707          --If A is a function type, the pointer type produced by
8708          the function-to-pointer standard conversion
8709          (_conv.func_) is used in place of A for type deduction;
8710          otherwise,
8711          
8712          --If A is a cv-qualified type, the top level
8713          cv-qualifiers of A's type are ignored for type
8714          deduction.  */
8715       if (TREE_CODE (*arg) == ARRAY_TYPE)
8716         *arg = build_pointer_type (TREE_TYPE (*arg));
8717       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
8718         *arg = build_pointer_type (*arg);
8719       else
8720         *arg = TYPE_MAIN_VARIANT (*arg);
8721     }
8722   
8723   /* [temp.deduct.call]
8724      
8725      If P is a cv-qualified type, the top level cv-qualifiers
8726      of P's type are ignored for type deduction.  If P is a
8727      reference type, the type referred to by P is used for
8728      type deduction.  */
8729   *parm = TYPE_MAIN_VARIANT (*parm);
8730   if (TREE_CODE (*parm) == REFERENCE_TYPE)
8731     {
8732       *parm = TREE_TYPE (*parm);
8733       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
8734     }
8735
8736   /* DR 322. For conversion deduction, remove a reference type on parm
8737      too (which has been swapped into ARG).  */
8738   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
8739     *arg = TREE_TYPE (*arg);
8740   
8741   return result;
8742 }
8743
8744 /* Most parms like fn_type_unification.
8745
8746    If SUBR is 1, we're being called recursively (to unify the
8747    arguments of a function or method parameter of a function
8748    template).  */
8749
8750 static int
8751 type_unification_real (tree tparms, 
8752                        tree targs, 
8753                        tree xparms, 
8754                        tree xargs, 
8755                        int subr,
8756                        unification_kind_t strict, 
8757                        int allow_incomplete, 
8758                        int xlen)
8759 {
8760   tree parm, arg;
8761   int i;
8762   int ntparms = TREE_VEC_LENGTH (tparms);
8763   int sub_strict;
8764   int saw_undeduced = 0;
8765   tree parms, args;
8766   int len;
8767
8768   my_friendly_assert (TREE_CODE (tparms) == TREE_VEC, 289);
8769   my_friendly_assert (xparms == NULL_TREE 
8770                       || TREE_CODE (xparms) == TREE_LIST, 290);
8771   /* ARGS could be NULL.  */
8772   if (xargs)
8773     my_friendly_assert (TREE_CODE (xargs) == TREE_LIST, 291);
8774   my_friendly_assert (ntparms > 0, 292);
8775
8776   switch (strict)
8777     {
8778     case DEDUCE_CALL:
8779       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
8780                     | UNIFY_ALLOW_DERIVED);
8781       break;
8782       
8783     case DEDUCE_CONV:
8784       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
8785       break;
8786
8787     case DEDUCE_EXACT:
8788       sub_strict = UNIFY_ALLOW_NONE;
8789       break;
8790     
8791     case DEDUCE_ORDER:
8792       sub_strict = UNIFY_ALLOW_NONE;
8793       break;
8794       
8795     default:
8796       abort ();
8797     }
8798
8799   if (xlen == 0)
8800     return 0;
8801
8802  again:
8803   parms = xparms;
8804   args = xargs;
8805   len = xlen;
8806
8807   while (parms
8808          && parms != void_list_node
8809          && args
8810          && args != void_list_node)
8811     {
8812       parm = TREE_VALUE (parms);
8813       parms = TREE_CHAIN (parms);
8814       arg = TREE_VALUE (args);
8815       args = TREE_CHAIN (args);
8816
8817       if (arg == error_mark_node)
8818         return 1;
8819       if (arg == unknown_type_node)
8820         /* We can't deduce anything from this, but we might get all the
8821            template args from other function args.  */
8822         continue;
8823
8824       /* Conversions will be performed on a function argument that
8825          corresponds with a function parameter that contains only
8826          non-deducible template parameters and explicitly specified
8827          template parameters.  */
8828       if (! uses_template_parms (parm))
8829         {
8830           tree type;
8831
8832           if (!TYPE_P (arg))
8833             type = TREE_TYPE (arg);
8834           else
8835             {
8836               type = arg;
8837               arg = NULL_TREE;
8838             }
8839
8840           if (strict == DEDUCE_EXACT || strict == DEDUCE_ORDER)
8841             {
8842               if (same_type_p (parm, type))
8843                 continue;
8844             }
8845           else
8846             /* It might work; we shouldn't check now, because we might
8847                get into infinite recursion.  Overload resolution will
8848                handle it.  */
8849             continue;
8850
8851           return 1;
8852         }
8853         
8854       if (!TYPE_P (arg))
8855         {
8856           my_friendly_assert (TREE_TYPE (arg) != NULL_TREE, 293);
8857           if (type_unknown_p (arg))
8858             {
8859               /* [temp.deduct.type] A template-argument can be deduced from
8860                  a pointer to function or pointer to member function
8861                  argument if the set of overloaded functions does not
8862                  contain function templates and at most one of a set of
8863                  overloaded functions provides a unique match.  */
8864
8865               if (resolve_overloaded_unification
8866                   (tparms, targs, parm, arg, strict, sub_strict)
8867                   != 0)
8868                 return 1;
8869               continue;
8870             }
8871           arg = TREE_TYPE (arg);
8872           if (arg == error_mark_node)
8873             return 1;
8874         }
8875       
8876       {
8877         int arg_strict = sub_strict;
8878         
8879         if (!subr)
8880           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
8881
8882         if (unify (tparms, targs, parm, arg, arg_strict))
8883           return 1;
8884       }
8885
8886       /* Are we done with the interesting parms?  */
8887       if (--len == 0)
8888         goto done;
8889     }
8890   /* Fail if we've reached the end of the parm list, and more args
8891      are present, and the parm list isn't variadic.  */
8892   if (args && args != void_list_node && parms == void_list_node)
8893     return 1;
8894   /* Fail if parms are left and they don't have default values.  */
8895   if (parms
8896       && parms != void_list_node
8897       && TREE_PURPOSE (parms) == NULL_TREE)
8898     return 1;
8899
8900  done:
8901   if (!subr)
8902     for (i = 0; i < ntparms; i++)
8903       if (TREE_VEC_ELT (targs, i) == NULL_TREE)
8904         {
8905           tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
8906
8907           /* If this is an undeduced nontype parameter that depends on
8908              a type parameter, try another pass; its type may have been
8909              deduced from a later argument than the one from which
8910              this parameter can be deduced.  */
8911           if (TREE_CODE (tparm) == PARM_DECL
8912               && uses_template_parms (TREE_TYPE (tparm))
8913               && !saw_undeduced++)
8914             goto again;
8915
8916           if (!allow_incomplete)
8917             error ("incomplete type unification");
8918           return 2;
8919         }
8920   return 0;
8921 }
8922
8923 /* Subroutine of type_unification_real.  Args are like the variables at the
8924    call site.  ARG is an overloaded function (or template-id); we try
8925    deducing template args from each of the overloads, and if only one
8926    succeeds, we go with that.  Modifies TARGS and returns 0 on success.  */
8927
8928 static int
8929 resolve_overloaded_unification (tree tparms, 
8930                                 tree targs,
8931                                 tree parm,
8932                                 tree arg, 
8933                                 unification_kind_t strict,
8934                                 int sub_strict)
8935 {
8936   tree tempargs = copy_node (targs);
8937   int good = 0;
8938
8939   if (TREE_CODE (arg) == ADDR_EXPR)
8940     arg = TREE_OPERAND (arg, 0);
8941
8942   if (TREE_CODE (arg) == COMPONENT_REF)
8943     /* Handle `&x' where `x' is some static or non-static member
8944        function name.  */
8945     arg = TREE_OPERAND (arg, 1);
8946
8947   if (TREE_CODE (arg) == OFFSET_REF)
8948     arg = TREE_OPERAND (arg, 1);
8949
8950   /* Strip baselink information.  */
8951   if (BASELINK_P (arg))
8952     arg = BASELINK_FUNCTIONS (arg);
8953
8954   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
8955     {
8956       /* If we got some explicit template args, we need to plug them into
8957          the affected templates before we try to unify, in case the
8958          explicit args will completely resolve the templates in question.  */
8959
8960       tree expl_subargs = TREE_OPERAND (arg, 1);
8961       arg = TREE_OPERAND (arg, 0);
8962
8963       for (; arg; arg = OVL_NEXT (arg))
8964         {
8965           tree fn = OVL_CURRENT (arg);
8966           tree subargs, elem;
8967
8968           if (TREE_CODE (fn) != TEMPLATE_DECL)
8969             continue;
8970
8971           subargs = get_bindings_overload (fn, DECL_TEMPLATE_RESULT (fn),
8972                                            expl_subargs);
8973           if (subargs)
8974             {
8975               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
8976               if (TREE_CODE (elem) == METHOD_TYPE)
8977                 elem = build_ptrmemfunc_type (build_pointer_type (elem));
8978               good += try_one_overload (tparms, targs, tempargs, parm, elem,
8979                                         strict, sub_strict);
8980             }
8981         }
8982     }
8983   else if (TREE_CODE (arg) == OVERLOAD
8984            || TREE_CODE (arg) == FUNCTION_DECL)
8985     {
8986       for (; arg; arg = OVL_NEXT (arg))
8987         {
8988           tree type = TREE_TYPE (OVL_CURRENT (arg));
8989           if (TREE_CODE (type) == METHOD_TYPE)
8990             type = build_ptrmemfunc_type (build_pointer_type (type));
8991           good += try_one_overload (tparms, targs, tempargs, parm,
8992                                     type,
8993                                     strict, sub_strict);
8994         }
8995     }
8996   else
8997     abort ();
8998
8999   /* [temp.deduct.type] A template-argument can be deduced from a pointer
9000      to function or pointer to member function argument if the set of
9001      overloaded functions does not contain function templates and at most
9002      one of a set of overloaded functions provides a unique match.
9003
9004      So if we found multiple possibilities, we return success but don't
9005      deduce anything.  */
9006
9007   if (good == 1)
9008     {
9009       int i = TREE_VEC_LENGTH (targs);
9010       for (; i--; )
9011         if (TREE_VEC_ELT (tempargs, i))
9012           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
9013     }
9014   if (good)
9015     return 0;
9016
9017   return 1;
9018 }
9019
9020 /* Subroutine of resolve_overloaded_unification; does deduction for a single
9021    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
9022    different overloads deduce different arguments for a given parm.
9023    Returns 1 on success.  */
9024
9025 static int
9026 try_one_overload (tree tparms,
9027                   tree orig_targs,
9028                   tree targs, 
9029                   tree parm, 
9030                   tree arg, 
9031                   unification_kind_t strict,
9032                   int sub_strict)
9033 {
9034   int nargs;
9035   tree tempargs;
9036   int i;
9037
9038   /* [temp.deduct.type] A template-argument can be deduced from a pointer
9039      to function or pointer to member function argument if the set of
9040      overloaded functions does not contain function templates and at most
9041      one of a set of overloaded functions provides a unique match.
9042
9043      So if this is a template, just return success.  */
9044
9045   if (uses_template_parms (arg))
9046     return 1;
9047
9048   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9049
9050   /* We don't copy orig_targs for this because if we have already deduced
9051      some template args from previous args, unify would complain when we
9052      try to deduce a template parameter for the same argument, even though
9053      there isn't really a conflict.  */
9054   nargs = TREE_VEC_LENGTH (targs);
9055   tempargs = make_tree_vec (nargs);
9056
9057   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
9058     return 0;
9059
9060   /* First make sure we didn't deduce anything that conflicts with
9061      explicitly specified args.  */
9062   for (i = nargs; i--; )
9063     {
9064       tree elt = TREE_VEC_ELT (tempargs, i);
9065       tree oldelt = TREE_VEC_ELT (orig_targs, i);
9066
9067       if (elt == NULL_TREE)
9068         continue;
9069       else if (uses_template_parms (elt))
9070         {
9071           /* Since we're unifying against ourselves, we will fill in template
9072              args used in the function parm list with our own template parms.
9073              Discard them.  */
9074           TREE_VEC_ELT (tempargs, i) = NULL_TREE;
9075           continue;
9076         }
9077       else if (oldelt && ! template_args_equal (oldelt, elt))
9078         return 0;
9079     }
9080
9081   for (i = nargs; i--; )
9082     {
9083       tree elt = TREE_VEC_ELT (tempargs, i);
9084
9085       if (elt)
9086         TREE_VEC_ELT (targs, i) = elt;
9087     }
9088
9089   return 1;
9090 }
9091
9092 /* Verify that nondeduce template argument agrees with the type
9093    obtained from argument deduction.  Return nonzero if the
9094    verification fails.
9095
9096    For example:
9097
9098      struct A { typedef int X; };
9099      template <class T, class U> struct C {};
9100      template <class T> struct C<T, typename T::X> {};
9101
9102    Then with the instantiation `C<A, int>', we can deduce that
9103    `T' is `A' but unify () does not check whether `typename T::X'
9104    is `int'.  This function ensure that they agree.
9105
9106    TARGS, PARMS are the same as the arguments of unify.
9107    ARGS contains template arguments from all levels.  */
9108
9109 static int
9110 verify_class_unification (tree targs, tree parms, tree args)
9111 {
9112   parms = tsubst (parms, add_outermost_template_args (args, targs),
9113                   tf_none, NULL_TREE);
9114   if (parms == error_mark_node)
9115     return 1;
9116
9117   return !comp_template_args (parms, INNERMOST_TEMPLATE_ARGS (args));
9118 }
9119
9120 /* PARM is a template class (perhaps with unbound template
9121    parameters).  ARG is a fully instantiated type.  If ARG can be
9122    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
9123    TARGS are as for unify.  */
9124
9125 static tree
9126 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
9127 {
9128   tree copy_of_targs;
9129
9130   if (!CLASSTYPE_TEMPLATE_INFO (arg)
9131       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg)) 
9132           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
9133     return NULL_TREE;
9134
9135   /* We need to make a new template argument vector for the call to
9136      unify.  If we used TARGS, we'd clutter it up with the result of
9137      the attempted unification, even if this class didn't work out.
9138      We also don't want to commit ourselves to all the unifications
9139      we've already done, since unification is supposed to be done on
9140      an argument-by-argument basis.  In other words, consider the
9141      following pathological case:
9142
9143        template <int I, int J, int K>
9144        struct S {};
9145        
9146        template <int I, int J>
9147        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
9148        
9149        template <int I, int J, int K>
9150        void f(S<I, J, K>, S<I, I, I>);
9151        
9152        void g() {
9153          S<0, 0, 0> s0;
9154          S<0, 1, 2> s2;
9155        
9156          f(s0, s2);
9157        }
9158
9159      Now, by the time we consider the unification involving `s2', we
9160      already know that we must have `f<0, 0, 0>'.  But, even though
9161      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
9162      because there are two ways to unify base classes of S<0, 1, 2>
9163      with S<I, I, I>.  If we kept the already deduced knowledge, we
9164      would reject the possibility I=1.  */
9165   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
9166   
9167   /* If unification failed, we're done.  */
9168   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
9169              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
9170     return NULL_TREE;
9171
9172   return arg;
9173 }
9174
9175 /* Subroutine of get_template_base.  RVAL, if non-NULL, is a base we
9176    have already discovered to be satisfactory.  ARG_BINFO is the binfo
9177    for the base class of ARG that we are currently examining.  */
9178
9179 static tree
9180 get_template_base_recursive (tree tparms, 
9181                              tree targs, 
9182                              tree parm,
9183                              tree arg_binfo, 
9184                              tree rval, 
9185                              int flags)
9186 {
9187   tree binfos;
9188   int i, n_baselinks;
9189   tree arg = BINFO_TYPE (arg_binfo);
9190
9191   if (!(flags & GTB_IGNORE_TYPE))
9192     {
9193       tree r = try_class_unification (tparms, targs,
9194                                       parm, arg);
9195
9196       /* If there is more than one satisfactory baseclass, then:
9197
9198            [temp.deduct.call]
9199
9200            If they yield more than one possible deduced A, the type
9201            deduction fails.
9202
9203            applies.  */
9204       if (r && rval && !same_type_p (r, rval))
9205         return error_mark_node;
9206       else if (r)
9207         rval = r;
9208     }
9209
9210   binfos = BINFO_BASETYPES (arg_binfo);
9211   n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
9212
9213   /* Process base types.  */
9214   for (i = 0; i < n_baselinks; i++)
9215     {
9216       tree base_binfo = TREE_VEC_ELT (binfos, i);
9217       int this_virtual;
9218
9219       /* Skip this base, if we've already seen it.  */
9220       if (BINFO_MARKED (base_binfo))
9221         continue;
9222
9223       this_virtual = 
9224         (flags & GTB_VIA_VIRTUAL) || TREE_VIA_VIRTUAL (base_binfo);
9225       
9226       /* When searching for a non-virtual, we cannot mark virtually
9227          found binfos.  */
9228       if (! this_virtual)
9229         BINFO_MARKED (base_binfo) = 1;
9230       
9231       rval = get_template_base_recursive (tparms, targs,
9232                                           parm,
9233                                           base_binfo, 
9234                                           rval,
9235                                           GTB_VIA_VIRTUAL * this_virtual);
9236       
9237       /* If we discovered more than one matching base class, we can
9238          stop now.  */
9239       if (rval == error_mark_node)
9240         return error_mark_node;
9241     }
9242
9243   return rval;
9244 }
9245
9246 /* Given a template type PARM and a class type ARG, find the unique
9247    base type in ARG that is an instance of PARM.  We do not examine
9248    ARG itself; only its base-classes.  If there is no appropriate base
9249    class, return NULL_TREE.  If there is more than one, return
9250    error_mark_node.  PARM may be the type of a partial specialization,
9251    as well as a plain template type.  Used by unify.  */
9252
9253 static tree
9254 get_template_base (tree tparms, tree targs, tree parm, tree arg)
9255 {
9256   tree rval;
9257   tree arg_binfo;
9258
9259   my_friendly_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)), 92);
9260   
9261   arg_binfo = TYPE_BINFO (complete_type (arg));
9262   rval = get_template_base_recursive (tparms, targs,
9263                                       parm, arg_binfo, 
9264                                       NULL_TREE,
9265                                       GTB_IGNORE_TYPE);
9266
9267   /* Since get_template_base_recursive marks the bases classes, we
9268      must unmark them here.  */
9269   dfs_walk (arg_binfo, dfs_unmark, markedp, 0);
9270
9271   return rval;
9272 }
9273
9274 /* Returns the level of DECL, which declares a template parameter.  */
9275
9276 static int
9277 template_decl_level (tree decl)
9278 {
9279   switch (TREE_CODE (decl))
9280     {
9281     case TYPE_DECL:
9282     case TEMPLATE_DECL:
9283       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
9284
9285     case PARM_DECL:
9286       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
9287
9288     default:
9289       abort ();
9290       return 0;
9291     }
9292 }
9293
9294 /* Decide whether ARG can be unified with PARM, considering only the
9295    cv-qualifiers of each type, given STRICT as documented for unify.
9296    Returns nonzero iff the unification is OK on that basis.*/
9297
9298 static int
9299 check_cv_quals_for_unify (int strict, tree arg, tree parm)
9300 {
9301   int arg_quals = cp_type_quals (arg);
9302   int parm_quals = cp_type_quals (parm);
9303
9304   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM)
9305     {
9306       /* If the cvr quals of parm will not unify with ARG, they'll be
9307          ignored in instantiation, so we have to do the same here.  */
9308       if (TREE_CODE (arg) == REFERENCE_TYPE)
9309         parm_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
9310       if (!POINTER_TYPE_P (arg) &&
9311           TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
9312         parm_quals &= ~TYPE_QUAL_RESTRICT;
9313     }
9314   
9315   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9316       && (arg_quals & parm_quals) != parm_quals)
9317     return 0;
9318
9319   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
9320       && (parm_quals & arg_quals) != arg_quals)
9321     return 0;
9322
9323   return 1;
9324 }
9325
9326 /* Takes parameters as for type_unification.  Returns 0 if the
9327    type deduction succeeds, 1 otherwise.  The parameter STRICT is a
9328    bitwise or of the following flags:
9329
9330      UNIFY_ALLOW_NONE:
9331        Require an exact match between PARM and ARG.
9332      UNIFY_ALLOW_MORE_CV_QUAL:
9333        Allow the deduced ARG to be more cv-qualified (by qualification
9334        conversion) than ARG.
9335      UNIFY_ALLOW_LESS_CV_QUAL:
9336        Allow the deduced ARG to be less cv-qualified than ARG.
9337      UNIFY_ALLOW_DERIVED:
9338        Allow the deduced ARG to be a template base class of ARG,
9339        or a pointer to a template base class of the type pointed to by
9340        ARG.
9341      UNIFY_ALLOW_INTEGER:
9342        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
9343        case for more information. 
9344      UNIFY_ALLOW_OUTER_LEVEL:
9345        This is the outermost level of a deduction. Used to determine validity
9346        of qualification conversions. A valid qualification conversion must
9347        have const qualified pointers leading up to the inner type which
9348        requires additional CV quals, except at the outer level, where const
9349        is not required [conv.qual]. It would be normal to set this flag in
9350        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
9351      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
9352        This is the outermost level of a deduction, and PARM can be more CV
9353        qualified at this point.
9354      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
9355        This is the outermost level of a deduction, and PARM can be less CV
9356        qualified at this point.
9357      UNIFY_ALLOW_MAX_CORRECTION:
9358        This is an INTEGER_TYPE's maximum value.  Used if the range may
9359        have been derived from a size specification, such as an array size.
9360        If the size was given by a nontype template parameter N, the maximum
9361        value will have the form N-1.  The flag says that we can (and indeed
9362        must) unify N with (ARG + 1), an exception to the normal rules on
9363        folding PARM.  */
9364
9365 static int
9366 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
9367 {
9368   int idx;
9369   tree targ;
9370   tree tparm;
9371   int strict_in = strict;
9372
9373   /* I don't think this will do the right thing with respect to types.
9374      But the only case I've seen it in so far has been array bounds, where
9375      signedness is the only information lost, and I think that will be
9376      okay.  */
9377   while (TREE_CODE (parm) == NOP_EXPR)
9378     parm = TREE_OPERAND (parm, 0);
9379
9380   if (arg == error_mark_node)
9381     return 1;
9382   if (arg == unknown_type_node)
9383     /* We can't deduce anything from this, but we might get all the
9384        template args from other function args.  */
9385     return 0;
9386
9387   /* If PARM uses template parameters, then we can't bail out here,
9388      even if ARG == PARM, since we won't record unifications for the
9389      template parameters.  We might need them if we're trying to
9390      figure out which of two things is more specialized.  */
9391   if (arg == parm && !uses_template_parms (parm))
9392     return 0;
9393
9394   /* Immediately reject some pairs that won't unify because of
9395      cv-qualification mismatches.  */
9396   if (TREE_CODE (arg) == TREE_CODE (parm)
9397       && TYPE_P (arg)
9398       /* It is the elements of the array which hold the cv quals of an array
9399          type, and the elements might be template type parms. We'll check
9400          when we recurse.  */
9401       && TREE_CODE (arg) != ARRAY_TYPE
9402       /* We check the cv-qualifiers when unifying with template type
9403          parameters below.  We want to allow ARG `const T' to unify with
9404          PARM `T' for example, when computing which of two templates
9405          is more specialized, for example.  */
9406       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
9407       && !check_cv_quals_for_unify (strict_in, arg, parm))
9408     return 1;
9409
9410   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
9411       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
9412     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
9413   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
9414   strict &= ~UNIFY_ALLOW_DERIVED;
9415   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9416   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
9417   strict &= ~UNIFY_ALLOW_MAX_CORRECTION;
9418   
9419   switch (TREE_CODE (parm))
9420     {
9421     case TYPENAME_TYPE:
9422     case SCOPE_REF:
9423     case UNBOUND_CLASS_TEMPLATE:
9424       /* In a type which contains a nested-name-specifier, template
9425          argument values cannot be deduced for template parameters used
9426          within the nested-name-specifier.  */
9427       return 0;
9428
9429     case TEMPLATE_TYPE_PARM:
9430     case TEMPLATE_TEMPLATE_PARM:
9431     case BOUND_TEMPLATE_TEMPLATE_PARM:
9432       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9433
9434       if (TEMPLATE_TYPE_LEVEL (parm)
9435           != template_decl_level (tparm))
9436         /* The PARM is not one we're trying to unify.  Just check
9437            to see if it matches ARG.  */
9438         return (TREE_CODE (arg) == TREE_CODE (parm)
9439                 && same_type_p (parm, arg)) ? 0 : 1;
9440       idx = TEMPLATE_TYPE_IDX (parm);
9441       targ = TREE_VEC_ELT (targs, idx);
9442       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
9443
9444       /* Check for mixed types and values.  */
9445       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9446            && TREE_CODE (tparm) != TYPE_DECL)
9447           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM 
9448               && TREE_CODE (tparm) != TEMPLATE_DECL))
9449         return 1;
9450
9451       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9452         {
9453           /* ARG must be constructed from a template class or a template
9454              template parameter.  */
9455           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
9456               && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
9457             return 1;
9458
9459           {
9460             tree parmtmpl = TYPE_TI_TEMPLATE (parm);
9461             tree parmvec = TYPE_TI_ARGS (parm);
9462             tree argvec = TYPE_TI_ARGS (arg);
9463             tree argtmplvec
9464               = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
9465             int i;
9466
9467             /* The parameter and argument roles have to be switched here 
9468                in order to handle default arguments properly.  For example, 
9469                template<template <class> class TT> void f(TT<int>) 
9470                should be able to accept vector<int> which comes from 
9471                template <class T, class Allocator = allocator> 
9472                class vector.  */
9473
9474             if (coerce_template_parms (argtmplvec, parmvec, parmtmpl,
9475                                        tf_none, 1) == error_mark_node)
9476               return 1;
9477           
9478             /* Deduce arguments T, i from TT<T> or TT<i>.  
9479                We check each element of PARMVEC and ARGVEC individually
9480                rather than the whole TREE_VEC since they can have
9481                different number of elements.  */
9482
9483             for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
9484               {
9485                 tree t = TREE_VEC_ELT (parmvec, i);
9486
9487                 if (unify (tparms, targs, t, 
9488                            TREE_VEC_ELT (argvec, i), 
9489                            UNIFY_ALLOW_NONE))
9490                   return 1;
9491               }
9492           }
9493           arg = TYPE_TI_TEMPLATE (arg);
9494
9495           /* Fall through to deduce template name.  */
9496         }
9497
9498       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9499           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9500         {
9501           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
9502
9503           /* Simple cases: Value already set, does match or doesn't.  */
9504           if (targ != NULL_TREE && template_args_equal (targ, arg))
9505             return 0;
9506           else if (targ)
9507             return 1;
9508         }
9509       else
9510         {
9511           /* If PARM is `const T' and ARG is only `int', we don't have
9512              a match unless we are allowing additional qualification.
9513              If ARG is `const int' and PARM is just `T' that's OK;
9514              that binds `const int' to `T'.  */
9515           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL, 
9516                                          arg, parm))
9517             return 1;
9518
9519           /* Consider the case where ARG is `const volatile int' and
9520              PARM is `const T'.  Then, T should be `volatile int'.  */
9521           arg = cp_build_qualified_type_real
9522             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
9523           if (arg == error_mark_node)
9524             return 1;
9525
9526           /* Simple cases: Value already set, does match or doesn't.  */
9527           if (targ != NULL_TREE && same_type_p (targ, arg))
9528             return 0;
9529           else if (targ)
9530             return 1;
9531
9532           /* Make sure that ARG is not a variable-sized array.  (Note
9533              that were talking about variable-sized arrays (like
9534              `int[n]'), rather than arrays of unknown size (like
9535              `int[]').)  We'll get very confused by such a type since
9536              the bound of the array will not be computable in an
9537              instantiation.  Besides, such types are not allowed in
9538              ISO C++, so we can do as we please here.  */
9539           if (variably_modified_type_p (arg))
9540             return 1;
9541         }
9542
9543       TREE_VEC_ELT (targs, idx) = arg;
9544       return 0;
9545
9546     case TEMPLATE_PARM_INDEX:
9547       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9548
9549       if (TEMPLATE_PARM_LEVEL (parm) 
9550           != template_decl_level (tparm))
9551         /* The PARM is not one we're trying to unify.  Just check
9552            to see if it matches ARG.  */
9553         return !(TREE_CODE (arg) == TREE_CODE (parm)
9554                  && cp_tree_equal (parm, arg));
9555
9556       idx = TEMPLATE_PARM_IDX (parm);
9557       targ = TREE_VEC_ELT (targs, idx);
9558
9559       if (targ)
9560         return !cp_tree_equal (targ, arg);
9561
9562       /* [temp.deduct.type] If, in the declaration of a function template
9563          with a non-type template-parameter, the non-type
9564          template-parameter is used in an expression in the function
9565          parameter-list and, if the corresponding template-argument is
9566          deduced, the template-argument type shall match the type of the
9567          template-parameter exactly, except that a template-argument
9568          deduced from an array bound may be of any integral type. 
9569          The non-type parameter might use already deduced type parameters.  */
9570       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
9571       if (!TREE_TYPE (arg))
9572         /* Template-parameter dependent expression.  Just accept it for now.
9573            It will later be processed in convert_template_argument.  */
9574         ;
9575       else if (same_type_p (TREE_TYPE (arg), tparm))
9576         /* OK */;
9577       else if ((strict & UNIFY_ALLOW_INTEGER)
9578                && (TREE_CODE (tparm) == INTEGER_TYPE
9579                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
9580         /* OK */;
9581       else if (uses_template_parms (tparm))
9582         /* We haven't deduced the type of this parameter yet.  Try again
9583            later.  */
9584         return 0;
9585       else
9586         return 1;
9587
9588       TREE_VEC_ELT (targs, idx) = arg;
9589       return 0;
9590
9591     case POINTER_TYPE:
9592       {
9593         if (TREE_CODE (arg) != POINTER_TYPE)
9594           return 1;
9595         
9596         /* [temp.deduct.call]
9597
9598            A can be another pointer or pointer to member type that can
9599            be converted to the deduced A via a qualification
9600            conversion (_conv.qual_).
9601
9602            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
9603            This will allow for additional cv-qualification of the
9604            pointed-to types if appropriate.  */
9605         
9606         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
9607           /* The derived-to-base conversion only persists through one
9608              level of pointers.  */
9609           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
9610
9611         return unify (tparms, targs, TREE_TYPE (parm), 
9612                       TREE_TYPE (arg), strict);
9613       }
9614
9615     case REFERENCE_TYPE:
9616       if (TREE_CODE (arg) != REFERENCE_TYPE)
9617         return 1;
9618       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
9619                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
9620
9621     case ARRAY_TYPE:
9622       if (TREE_CODE (arg) != ARRAY_TYPE)
9623         return 1;
9624       if ((TYPE_DOMAIN (parm) == NULL_TREE)
9625           != (TYPE_DOMAIN (arg) == NULL_TREE))
9626         return 1;
9627       if (TYPE_DOMAIN (parm) != NULL_TREE
9628           && unify (tparms, targs, TYPE_DOMAIN (parm),
9629                     TYPE_DOMAIN (arg), UNIFY_ALLOW_NONE) != 0)
9630         return 1;
9631       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
9632                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
9633
9634     case REAL_TYPE:
9635     case COMPLEX_TYPE:
9636     case VECTOR_TYPE:
9637     case INTEGER_TYPE:
9638     case BOOLEAN_TYPE:
9639     case VOID_TYPE:
9640       if (TREE_CODE (arg) != TREE_CODE (parm))
9641         return 1;
9642
9643       if (TREE_CODE (parm) == INTEGER_TYPE
9644           && TREE_CODE (TYPE_MAX_VALUE (parm)) != INTEGER_CST)
9645         {
9646           if (TYPE_MIN_VALUE (parm) && TYPE_MIN_VALUE (arg)
9647               && unify (tparms, targs, TYPE_MIN_VALUE (parm),
9648                         TYPE_MIN_VALUE (arg), UNIFY_ALLOW_INTEGER))
9649             return 1;
9650           if (TYPE_MAX_VALUE (parm) && TYPE_MAX_VALUE (arg)
9651               && unify (tparms, targs, TYPE_MAX_VALUE (parm),
9652                         TYPE_MAX_VALUE (arg),
9653                         UNIFY_ALLOW_INTEGER | UNIFY_ALLOW_MAX_CORRECTION))
9654             return 1;
9655         }
9656       /* We have already checked cv-qualification at the top of the
9657          function.  */
9658       else if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
9659         return 1;
9660
9661       /* As far as unification is concerned, this wins.  Later checks
9662          will invalidate it if necessary.  */
9663       return 0;
9664
9665       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
9666       /* Type INTEGER_CST can come from ordinary constant template args.  */
9667     case INTEGER_CST:
9668       while (TREE_CODE (arg) == NOP_EXPR)
9669         arg = TREE_OPERAND (arg, 0);
9670
9671       if (TREE_CODE (arg) != INTEGER_CST)
9672         return 1;
9673       return !tree_int_cst_equal (parm, arg);
9674
9675     case TREE_VEC:
9676       {
9677         int i;
9678         if (TREE_CODE (arg) != TREE_VEC)
9679           return 1;
9680         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
9681           return 1;
9682         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
9683           if (unify (tparms, targs,
9684                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
9685                      UNIFY_ALLOW_NONE))
9686             return 1;
9687         return 0;
9688       }
9689
9690     case RECORD_TYPE:
9691     case UNION_TYPE:
9692       if (TREE_CODE (arg) != TREE_CODE (parm))
9693         return 1;
9694   
9695       if (TYPE_PTRMEMFUNC_P (parm))
9696         {
9697           if (!TYPE_PTRMEMFUNC_P (arg))
9698             return 1;
9699
9700           return unify (tparms, targs, 
9701                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
9702                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
9703                         strict);
9704         }
9705
9706       if (CLASSTYPE_TEMPLATE_INFO (parm))
9707         {
9708           tree t = NULL_TREE;
9709
9710           if (strict_in & UNIFY_ALLOW_DERIVED)
9711             {
9712               /* First, we try to unify the PARM and ARG directly.  */
9713               t = try_class_unification (tparms, targs,
9714                                          parm, arg);
9715
9716               if (!t)
9717                 {
9718                   /* Fallback to the special case allowed in
9719                      [temp.deduct.call]:
9720                      
9721                        If P is a class, and P has the form
9722                        template-id, then A can be a derived class of
9723                        the deduced A.  Likewise, if P is a pointer to
9724                        a class of the form template-id, A can be a
9725                        pointer to a derived class pointed to by the
9726                        deduced A.  */
9727                   t = get_template_base (tparms, targs,
9728                                          parm, arg);
9729
9730                   if (! t || t == error_mark_node)
9731                     return 1;
9732                 }
9733             }
9734           else if (CLASSTYPE_TEMPLATE_INFO (arg) 
9735                    && (CLASSTYPE_TI_TEMPLATE (parm) 
9736                        == CLASSTYPE_TI_TEMPLATE (arg)))
9737             /* Perhaps PARM is something like S<U> and ARG is S<int>.
9738                Then, we should unify `int' and `U'.  */
9739             t = arg;
9740           else
9741             /* There's no chance of unification succeeding.  */
9742             return 1;
9743
9744           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
9745                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
9746         }
9747       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
9748         return 1;
9749       return 0;
9750
9751     case METHOD_TYPE:
9752     case FUNCTION_TYPE:
9753       if (TREE_CODE (arg) != TREE_CODE (parm))
9754         return 1;
9755
9756       if (unify (tparms, targs, TREE_TYPE (parm),
9757                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
9758         return 1;
9759       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
9760                                     TYPE_ARG_TYPES (arg), 1, 
9761                                     DEDUCE_EXACT, 0, -1);
9762
9763     case OFFSET_TYPE:
9764       if (TREE_CODE (arg) != OFFSET_TYPE)
9765         return 1;
9766       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
9767                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
9768         return 1;
9769       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
9770                     strict);
9771
9772     case CONST_DECL:
9773       if (DECL_TEMPLATE_PARM_P (parm))
9774         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
9775       if (arg != decl_constant_value (parm)) 
9776         return 1;
9777       return 0;
9778
9779     case TEMPLATE_DECL:
9780       /* Matched cases are handled by the ARG == PARM test above.  */
9781       return 1;
9782
9783     case MINUS_EXPR:
9784       if (tree_int_cst_equal (TREE_OPERAND (parm, 1), integer_one_node)
9785           && (strict_in & UNIFY_ALLOW_MAX_CORRECTION))
9786         {
9787           /* We handle this case specially, since it comes up with
9788              arrays.  In particular, something like:
9789
9790              template <int N> void f(int (&x)[N]);
9791
9792              Here, we are trying to unify the range type, which
9793              looks like [0 ... (N - 1)].  */
9794           tree t, t1, t2;
9795           t1 = TREE_OPERAND (parm, 0);
9796           t2 = TREE_OPERAND (parm, 1);
9797
9798           t = fold (build (PLUS_EXPR, integer_type_node, arg, t2));
9799
9800           return unify (tparms, targs, t1, t, strict);
9801         }
9802       /* else fall through */
9803
9804     default:
9805       if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (parm))))
9806         {
9807
9808           /* We're looking at an expression.  This can happen with
9809              something like: 
9810            
9811                template <int I>
9812                void foo(S<I>, S<I + 2>);
9813
9814              This is a "nondeduced context":
9815
9816                [deduct.type]
9817            
9818                The nondeduced contexts are:
9819
9820                --A type that is a template-id in which one or more of
9821                  the template-arguments is an expression that references
9822                  a template-parameter.  
9823
9824              In these cases, we assume deduction succeeded, but don't
9825              actually infer any unifications.  */
9826
9827           if (!uses_template_parms (parm)
9828               && !template_args_equal (parm, arg))
9829             return 1;
9830           else
9831             return 0;
9832         }
9833       else
9834         sorry ("use of `%s' in template type unification",
9835                tree_code_name [(int) TREE_CODE (parm)]);
9836
9837       return 1;
9838     }
9839 }
9840 \f
9841 /* Called if RESULT is explicitly instantiated, or is a member of an
9842    explicitly instantiated class, or if using -frepo and the
9843    instantiation of RESULT has been assigned to this file.  */
9844
9845 void
9846 mark_decl_instantiated (tree result, int extern_p)
9847 {
9848   /* We used to set this unconditionally; we moved that to
9849      do_decl_instantiation so it wouldn't get set on members of
9850      explicit class template instantiations.  But we still need to set
9851      it here for the 'extern template' case in order to suppress
9852      implicit instantiations.  */
9853   if (extern_p)
9854     SET_DECL_EXPLICIT_INSTANTIATION (result);
9855
9856   /* If this entity has already been written out, it's too late to
9857      make any modifications.  */
9858   if (TREE_ASM_WRITTEN (result))
9859     return;
9860
9861   if (TREE_CODE (result) != FUNCTION_DECL)
9862     /* The TREE_PUBLIC flag for function declarations will have been
9863        set correctly by tsubst.  */
9864     TREE_PUBLIC (result) = 1;
9865
9866   /* This might have been set by an earlier implicit instantiation.  */
9867   DECL_COMDAT (result) = 0;
9868
9869   if (! extern_p)
9870     {
9871       DECL_INTERFACE_KNOWN (result) = 1;
9872       DECL_NOT_REALLY_EXTERN (result) = 1;
9873
9874       /* Always make artificials weak.  */
9875       if (DECL_ARTIFICIAL (result) && flag_weak)
9876         comdat_linkage (result);
9877       /* For WIN32 we also want to put explicit instantiations in
9878          linkonce sections.  */
9879       else if (TREE_PUBLIC (result))
9880         maybe_make_one_only (result);
9881     }
9882
9883   if (TREE_CODE (result) == FUNCTION_DECL)
9884     defer_fn (result);
9885 }
9886
9887 /* Given two function templates PAT1 and PAT2, return:
9888
9889    DEDUCE should be DEDUCE_EXACT or DEDUCE_ORDER.
9890    
9891    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
9892    -1 if PAT2 is more specialized than PAT1.
9893    0 if neither is more specialized.
9894
9895    LEN is passed through to fn_type_unification.  */
9896    
9897 int
9898 more_specialized (tree pat1, tree pat2, int deduce, int len)
9899 {
9900   tree targs;
9901   int winner = 0;
9902
9903   targs = get_bindings_real (pat1, DECL_TEMPLATE_RESULT (pat2),
9904                              NULL_TREE, 0, deduce, len);
9905   if (targs)
9906     --winner;
9907
9908   targs = get_bindings_real (pat2, DECL_TEMPLATE_RESULT (pat1),
9909                              NULL_TREE, 0, deduce, len);
9910   if (targs)
9911     ++winner;
9912
9913   return winner;
9914 }
9915
9916 /* Given two class template specialization list nodes PAT1 and PAT2, return:
9917
9918    1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
9919    -1 if PAT2 is more specialized than PAT1.
9920    0 if neither is more specialized.
9921
9922    FULL_ARGS is the full set of template arguments that triggers this
9923    partial ordering.  */
9924    
9925 int
9926 more_specialized_class (tree pat1, tree pat2, tree full_args)
9927 {
9928   tree targs;
9929   int winner = 0;
9930
9931   targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
9932                               add_outermost_template_args (full_args, TREE_PURPOSE (pat2)));
9933   if (targs)
9934     --winner;
9935
9936   targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
9937                               add_outermost_template_args (full_args, TREE_PURPOSE (pat1)));
9938   if (targs)
9939     ++winner;
9940
9941   return winner;
9942 }
9943
9944 /* Return the template arguments that will produce the function signature
9945    DECL from the function template FN, with the explicit template
9946    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is 1, the return type must
9947    also match.  Return NULL_TREE if no satisfactory arguments could be
9948    found.  DEDUCE and LEN are passed through to fn_type_unification.  */
9949    
9950 static tree
9951 get_bindings_real (tree fn, 
9952                    tree decl, 
9953                    tree explicit_args, 
9954                    int check_rettype, 
9955                    int deduce, 
9956                    int len)
9957 {
9958   int ntparms = DECL_NTPARMS (fn);
9959   tree targs = make_tree_vec (ntparms);
9960   tree decl_type;
9961   tree decl_arg_types;
9962   int i;
9963
9964   /* Substitute the explicit template arguments into the type of DECL.
9965      The call to fn_type_unification will handle substitution into the
9966      FN.  */
9967   decl_type = TREE_TYPE (decl);
9968   if (explicit_args && uses_template_parms (decl_type))
9969     {
9970       tree tmpl;
9971       tree converted_args;
9972
9973       if (DECL_TEMPLATE_INFO (decl))
9974         tmpl = DECL_TI_TEMPLATE (decl);
9975       else
9976         /* We can get here for some invalid specializations.  */
9977         return NULL_TREE;
9978
9979       converted_args
9980         = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
9981                                   explicit_args, NULL_TREE,
9982                                   tf_none, /*require_all_arguments=*/0));
9983       if (converted_args == error_mark_node)
9984         return NULL_TREE;
9985       
9986       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE); 
9987       if (decl_type == error_mark_node)
9988         return NULL_TREE;
9989     }
9990
9991   decl_arg_types = TYPE_ARG_TYPES (decl_type);
9992   /* Never do unification on the 'this' parameter.  */
9993   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
9994     decl_arg_types = TREE_CHAIN (decl_arg_types);
9995
9996   i = fn_type_unification (fn, explicit_args, targs, 
9997                            decl_arg_types,
9998                            (check_rettype || DECL_CONV_FN_P (fn)
9999                             ? TREE_TYPE (decl_type) : NULL_TREE),
10000                            deduce, len);
10001
10002   if (i != 0)
10003     return NULL_TREE;
10004
10005   return targs;
10006 }
10007
10008 /* For most uses, we want to check the return type.  */
10009
10010 static tree 
10011 get_bindings (tree fn, tree decl, tree explicit_args)
10012 {
10013   return get_bindings_real (fn, decl, explicit_args, 1, DEDUCE_EXACT, -1);
10014 }
10015
10016 /* But for resolve_overloaded_unification, we only care about the parameter
10017    types.  */
10018
10019 static tree
10020 get_bindings_overload (tree fn, tree decl, tree explicit_args)
10021 {
10022   return get_bindings_real (fn, decl, explicit_args, 0, DEDUCE_EXACT, -1);
10023 }
10024
10025 /* Return the innermost template arguments that, when applied to a
10026    template specialization whose innermost template parameters are
10027    TPARMS, and whose specialization arguments are PARMS, yield the
10028    ARGS.  
10029
10030    For example, suppose we have:
10031
10032      template <class T, class U> struct S {};
10033      template <class T> struct S<T*, int> {};
10034
10035    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
10036    {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
10037    int}.  The resulting vector will be {double}, indicating that `T'
10038    is bound to `double'.  */
10039
10040 static tree
10041 get_class_bindings (tree tparms, tree parms, tree args)
10042 {
10043   int i, ntparms = TREE_VEC_LENGTH (tparms);
10044   tree vec = make_tree_vec (ntparms);
10045
10046   if (unify (tparms, vec, parms, INNERMOST_TEMPLATE_ARGS (args),
10047              UNIFY_ALLOW_NONE))
10048     return NULL_TREE;
10049
10050   for (i =  0; i < ntparms; ++i)
10051     if (! TREE_VEC_ELT (vec, i))
10052       return NULL_TREE;
10053
10054   if (verify_class_unification (vec, parms, args))
10055     return NULL_TREE;
10056
10057   return vec;
10058 }
10059
10060 /* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
10061    Pick the most specialized template, and return the corresponding
10062    instantiation, or if there is no corresponding instantiation, the
10063    template itself.  If there is no most specialized template,
10064    error_mark_node is returned.  If there are no templates at all,
10065    NULL_TREE is returned.  */
10066
10067 tree
10068 most_specialized_instantiation (tree instantiations)
10069 {
10070   tree fn, champ;
10071   int fate;
10072
10073   if (!instantiations)
10074     return NULL_TREE;
10075
10076   champ = instantiations;
10077   for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
10078     {
10079       fate = more_specialized (TREE_VALUE (champ), TREE_VALUE (fn),
10080                                DEDUCE_EXACT, -1);
10081       if (fate == 1)
10082         ;
10083       else
10084         {
10085           if (fate == 0)
10086             {
10087               fn = TREE_CHAIN (fn);
10088               if (! fn)
10089                 return error_mark_node;
10090             }
10091           champ = fn;
10092         }
10093     }
10094
10095   for (fn = instantiations; fn && fn != champ; fn = TREE_CHAIN (fn))
10096     {
10097       fate = more_specialized (TREE_VALUE (champ), TREE_VALUE (fn),
10098                                DEDUCE_EXACT, -1);
10099       if (fate != 1)
10100         return error_mark_node;
10101     }
10102
10103   return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
10104 }
10105
10106 /* Return the most specialized of the list of templates in FNS that can
10107    produce an instantiation matching DECL, given the explicit template
10108    arguments EXPLICIT_ARGS.  */
10109
10110 static tree
10111 most_specialized (tree fns, tree decl, tree explicit_args)
10112 {
10113   tree candidates = NULL_TREE;
10114   tree fn, args;
10115
10116   for (fn = fns; fn; fn = TREE_CHAIN (fn))
10117     {
10118       tree candidate = TREE_VALUE (fn);
10119
10120       args = get_bindings (candidate, decl, explicit_args);
10121       if (args)
10122         candidates = tree_cons (NULL_TREE, candidate, candidates);
10123     }
10124
10125   return most_specialized_instantiation (candidates);
10126 }
10127
10128 /* If DECL is a specialization of some template, return the most
10129    general such template.  Otherwise, returns NULL_TREE.
10130
10131    For example, given:
10132
10133      template <class T> struct S { template <class U> void f(U); };
10134
10135    if TMPL is `template <class U> void S<int>::f(U)' this will return
10136    the full template.  This function will not trace past partial
10137    specializations, however.  For example, given in addition:
10138
10139      template <class T> struct S<T*> { template <class U> void f(U); };
10140
10141    if TMPL is `template <class U> void S<int*>::f(U)' this will return
10142    `template <class T> template <class U> S<T*>::f(U)'.  */
10143
10144 tree
10145 most_general_template (tree decl)
10146 {
10147   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
10148      an immediate specialization.  */
10149   if (TREE_CODE (decl) == FUNCTION_DECL)
10150     {
10151       if (DECL_TEMPLATE_INFO (decl)) {
10152         decl = DECL_TI_TEMPLATE (decl);
10153
10154         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
10155            template friend.  */
10156         if (TREE_CODE (decl) != TEMPLATE_DECL)
10157           return NULL_TREE;
10158       } else
10159         return NULL_TREE;
10160     }
10161
10162   /* Look for more and more general templates.  */
10163   while (DECL_TEMPLATE_INFO (decl))
10164     {
10165       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
10166          (See cp-tree.h for details.)  */
10167       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
10168         break;
10169
10170       if (CLASS_TYPE_P (TREE_TYPE (decl))
10171           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
10172         break;
10173
10174       /* Stop if we run into an explicitly specialized class template.  */
10175       if (!DECL_NAMESPACE_SCOPE_P (decl)
10176           && DECL_CONTEXT (decl)
10177           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
10178         break;
10179
10180       decl = DECL_TI_TEMPLATE (decl);
10181     }
10182
10183   return decl;
10184 }
10185
10186 /* Return the most specialized of the class template specializations
10187    of TMPL which can produce an instantiation matching ARGS, or
10188    error_mark_node if the choice is ambiguous.  */
10189
10190 static tree
10191 most_specialized_class (tree tmpl, tree args)
10192 {
10193   tree list = NULL_TREE;
10194   tree t;
10195   tree champ;
10196   int fate;
10197
10198   tmpl = most_general_template (tmpl);
10199   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
10200     {
10201       tree spec_args 
10202         = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
10203       if (spec_args)
10204         {
10205           list = tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
10206           TREE_TYPE (list) = TREE_TYPE (t);
10207         }
10208     }
10209
10210   if (! list)
10211     return NULL_TREE;
10212
10213   t = list;
10214   champ = t;
10215   t = TREE_CHAIN (t);
10216   for (; t; t = TREE_CHAIN (t))
10217     {
10218       fate = more_specialized_class (champ, t, args);
10219       if (fate == 1)
10220         ;
10221       else
10222         {
10223           if (fate == 0)
10224             {
10225               t = TREE_CHAIN (t);
10226               if (! t)
10227                 return error_mark_node;
10228             }
10229           champ = t;
10230         }
10231     }
10232
10233   for (t = list; t && t != champ; t = TREE_CHAIN (t))
10234     {
10235       fate = more_specialized_class (champ, t, args);
10236       if (fate != 1)
10237         return error_mark_node;
10238     }
10239
10240   return champ;
10241 }
10242
10243 /* Explicitly instantiate DECL.  */
10244
10245 void
10246 do_decl_instantiation (tree decl, tree storage)
10247 {
10248   tree result = NULL_TREE;
10249   int extern_p = 0;
10250
10251   if (!decl)
10252     /* An error occurred, for which grokdeclarator has already issued
10253        an appropriate message.  */
10254     return;
10255   else if (! DECL_LANG_SPECIFIC (decl))
10256     {
10257       error ("explicit instantiation of non-template `%#D'", decl);
10258       return;
10259     }
10260   else if (TREE_CODE (decl) == VAR_DECL)
10261     {
10262       /* There is an asymmetry here in the way VAR_DECLs and
10263          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
10264          the latter, the DECL we get back will be marked as a
10265          template instantiation, and the appropriate
10266          DECL_TEMPLATE_INFO will be set up.  This does not happen for
10267          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
10268          should handle VAR_DECLs as it currently handles
10269          FUNCTION_DECLs.  */
10270       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
10271       if (!result || TREE_CODE (result) != VAR_DECL)
10272         {
10273           error ("no matching template for `%D' found", decl);
10274           return;
10275         }
10276     }
10277   else if (TREE_CODE (decl) != FUNCTION_DECL)
10278     {
10279       error ("explicit instantiation of `%#D'", decl);
10280       return;
10281     }
10282   else
10283     result = decl;
10284
10285   /* Check for various error cases.  Note that if the explicit
10286      instantiation is valid the RESULT will currently be marked as an
10287      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
10288      until we get here.  */
10289
10290   if (DECL_TEMPLATE_SPECIALIZATION (result))
10291     {
10292       /* DR 259 [temp.spec].
10293
10294          Both an explicit instantiation and a declaration of an explicit
10295          specialization shall not appear in a program unless the explicit
10296          instantiation follows a declaration of the explicit specialization.
10297
10298          For a given set of template parameters, if an explicit
10299          instantiation of a template appears after a declaration of an
10300          explicit specialization for that template, the explicit
10301          instantiation has no effect.  */
10302       return;
10303     }
10304   else if (DECL_EXPLICIT_INSTANTIATION (result))
10305     {
10306       /* [temp.spec]
10307
10308          No program shall explicitly instantiate any template more
10309          than once.  
10310
10311          We check DECL_INTERFACE_KNOWN so as not to complain when the first
10312          instantiation was `extern' and the second is not, and EXTERN_P for
10313          the opposite case.  If -frepo, chances are we already got marked
10314          as an explicit instantiation because of the repo file.  */
10315       if (DECL_INTERFACE_KNOWN (result) && !extern_p && !flag_use_repository)
10316         pedwarn ("duplicate explicit instantiation of `%#D'", result);
10317
10318       /* If we've already instantiated the template, just return now.  */
10319       if (DECL_INTERFACE_KNOWN (result))
10320         return;
10321     }
10322   else if (!DECL_IMPLICIT_INSTANTIATION (result))
10323     {
10324       error ("no matching template for `%D' found", result);
10325       return;
10326     }
10327   else if (!DECL_TEMPLATE_INFO (result))
10328     {
10329       pedwarn ("explicit instantiation of non-template `%#D'", result);
10330       return;
10331     }
10332
10333   if (flag_external_templates)
10334     return;
10335
10336   if (storage == NULL_TREE)
10337     ;
10338   else if (storage == ridpointers[(int) RID_EXTERN])
10339     {
10340       if (pedantic && !in_system_header)
10341         pedwarn ("ISO C++ forbids the use of `extern' on explicit instantiations");
10342       extern_p = 1;
10343     }
10344   else
10345     error ("storage class `%D' applied to template instantiation",
10346               storage);
10347
10348   SET_DECL_EXPLICIT_INSTANTIATION (result);
10349   mark_decl_instantiated (result, extern_p);
10350   repo_template_instantiated (result, extern_p);
10351   if (! extern_p)
10352     instantiate_decl (result, /*defer_ok=*/1);
10353 }
10354
10355 void
10356 mark_class_instantiated (tree t, int extern_p)
10357 {
10358   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
10359   SET_CLASSTYPE_INTERFACE_KNOWN (t);
10360   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
10361   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
10362   if (! extern_p)
10363     {
10364       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
10365       rest_of_type_compilation (t, 1);
10366     }
10367 }     
10368
10369 /* Called from do_type_instantiation through binding_table_foreach to
10370    do recursive instantiation for the type bound in ENTRY.  */
10371 static void
10372 bt_instantiate_type_proc (binding_entry entry, void *data)
10373 {
10374   tree storage = *(tree *) data;
10375
10376   if (IS_AGGR_TYPE (entry->type)
10377       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
10378     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
10379 }
10380
10381 /* Perform an explicit instantiation of template class T.  STORAGE, if
10382    non-null, is the RID for extern, inline or static.  COMPLAIN is
10383    nonzero if this is called from the parser, zero if called recursively,
10384    since the standard is unclear (as detailed below).  */
10385  
10386 void
10387 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
10388 {
10389   int extern_p = 0;
10390   int nomem_p = 0;
10391   int static_p = 0;
10392
10393   if (TREE_CODE (t) == TYPE_DECL)
10394     t = TREE_TYPE (t);
10395
10396   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
10397     {
10398       error ("explicit instantiation of non-template type `%T'", t);
10399       return;
10400     }
10401
10402   complete_type (t);
10403
10404   /* With -fexternal-templates, explicit instantiations are treated the same
10405      as implicit ones.  */
10406   if (flag_external_templates)
10407     return;
10408
10409   if (!COMPLETE_TYPE_P (t))
10410     {
10411       if (complain & tf_error)
10412         error ("explicit instantiation of `%#T' before definition of template",
10413                   t);
10414       return;
10415     }
10416
10417   if (storage != NULL_TREE)
10418     {
10419       if (pedantic && !in_system_header)
10420         pedwarn("ISO C++ forbids the use of `%s' on explicit instantiations", 
10421                    IDENTIFIER_POINTER (storage));
10422
10423       if (storage == ridpointers[(int) RID_INLINE])
10424         nomem_p = 1;
10425       else if (storage == ridpointers[(int) RID_EXTERN])
10426         extern_p = 1;
10427       else if (storage == ridpointers[(int) RID_STATIC])
10428         static_p = 1;
10429       else
10430         {
10431           error ("storage class `%D' applied to template instantiation",
10432                     storage);
10433           extern_p = 0;
10434         }
10435     }
10436
10437   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10438     {
10439       /* DR 259 [temp.spec].
10440
10441          Both an explicit instantiation and a declaration of an explicit
10442          specialization shall not appear in a program unless the explicit
10443          instantiation follows a declaration of the explicit specialization.
10444
10445          For a given set of template parameters, if an explicit
10446          instantiation of a template appears after a declaration of an
10447          explicit specialization for that template, the explicit
10448          instantiation has no effect.  */
10449       return;
10450     }
10451   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
10452     {
10453       /* [temp.spec]
10454
10455          No program shall explicitly instantiate any template more
10456          than once.  
10457
10458          If CLASSTYPE_INTERFACE_ONLY, then the first explicit instantiation
10459          was `extern'.  If EXTERN_P then the second is.  If -frepo, chances
10460          are we already got marked as an explicit instantiation because of the
10461          repo file.  All these cases are OK.  */
10462       if (!CLASSTYPE_INTERFACE_ONLY (t) && !extern_p && !flag_use_repository
10463           && (complain & tf_error))
10464         pedwarn ("duplicate explicit instantiation of `%#T'", t);
10465       
10466       /* If we've already instantiated the template, just return now.  */
10467       if (!CLASSTYPE_INTERFACE_ONLY (t))
10468         return;
10469     }
10470
10471   mark_class_instantiated (t, extern_p);
10472   repo_template_instantiated (t, extern_p);
10473
10474   if (nomem_p)
10475     return;
10476
10477   {
10478     tree tmp;
10479
10480     /* In contrast to implicit instantiation, where only the
10481        declarations, and not the definitions, of members are
10482        instantiated, we have here:
10483
10484          [temp.explicit]
10485
10486          The explicit instantiation of a class template specialization
10487          implies the instantiation of all of its members not
10488          previously explicitly specialized in the translation unit
10489          containing the explicit instantiation.  
10490
10491        Of course, we can't instantiate member template classes, since
10492        we don't have any arguments for them.  Note that the standard
10493        is unclear on whether the instantiation of the members are
10494        *explicit* instantiations or not.  We choose to be generous,
10495        and not set DECL_EXPLICIT_INSTANTIATION.  Therefore, we allow
10496        the explicit instantiation of a class where some of the members
10497        have no definition in the current translation unit.  */
10498
10499     if (! static_p)
10500       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
10501         if (TREE_CODE (tmp) == FUNCTION_DECL
10502             && DECL_TEMPLATE_INSTANTIATION (tmp))
10503           {
10504             mark_decl_instantiated (tmp, extern_p);
10505             repo_template_instantiated (tmp, extern_p);
10506             if (! extern_p)
10507               instantiate_decl (tmp, /*defer_ok=*/1);
10508           }
10509
10510     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
10511       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
10512         {
10513           mark_decl_instantiated (tmp, extern_p);
10514           repo_template_instantiated (tmp, extern_p);
10515           if (! extern_p)
10516             instantiate_decl (tmp, /*defer_ok=*/1);
10517         }
10518
10519     if (CLASSTYPE_NESTED_UTDS (t))
10520       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
10521                              bt_instantiate_type_proc, &storage);
10522   }
10523 }
10524
10525 /* Given a function DECL, which is a specialization of TMPL, modify
10526    DECL to be a re-instantiation of TMPL with the same template
10527    arguments.  TMPL should be the template into which tsubst'ing
10528    should occur for DECL, not the most general template.
10529
10530    One reason for doing this is a scenario like this:
10531
10532      template <class T>
10533      void f(const T&, int i);
10534
10535      void g() { f(3, 7); }
10536
10537      template <class T>
10538      void f(const T& t, const int i) { }
10539
10540    Note that when the template is first instantiated, with
10541    instantiate_template, the resulting DECL will have no name for the
10542    first parameter, and the wrong type for the second.  So, when we go
10543    to instantiate the DECL, we regenerate it.  */
10544
10545 static void
10546 regenerate_decl_from_template (tree decl, tree tmpl)
10547 {
10548   /* The most general version of TMPL.  */
10549   tree gen_tmpl;
10550   /* The arguments used to instantiate DECL, from the most general
10551      template.  */
10552   tree args;
10553   tree code_pattern;
10554   tree new_decl;
10555   bool unregistered;
10556
10557   args = DECL_TI_ARGS (decl);
10558   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
10559
10560   /* Unregister the specialization so that when we tsubst we will not
10561      just return DECL.  We don't have to unregister DECL from TMPL
10562      because if would only be registered there if it were a partial
10563      instantiation of a specialization, which it isn't: it's a full
10564      instantiation.  */
10565   gen_tmpl = most_general_template (tmpl);
10566   unregistered = reregister_specialization (decl, gen_tmpl,
10567                                             /*new_spec=*/NULL_TREE);
10568
10569   /* If the DECL was not unregistered then something peculiar is
10570      happening: we created a specialization but did not call
10571      register_specialization for it.  */
10572   my_friendly_assert (unregistered, 0);
10573
10574   /* Make sure that we can see identifiers, and compute access
10575      correctly.  */
10576   push_access_scope (decl);
10577
10578   /* Do the substitution to get the new declaration.  */
10579   new_decl = tsubst (code_pattern, args, tf_error, NULL_TREE);
10580
10581   if (TREE_CODE (decl) == VAR_DECL)
10582     {
10583       /* Set up DECL_INITIAL, since tsubst doesn't.  */
10584       if (!DECL_INITIALIZED_IN_CLASS_P (decl))
10585         DECL_INITIAL (new_decl) = 
10586           tsubst_expr (DECL_INITIAL (code_pattern), args, 
10587                        tf_error, DECL_TI_TEMPLATE (decl));
10588     }
10589   else if (TREE_CODE (decl) == FUNCTION_DECL)
10590     {
10591       /* Convince duplicate_decls to use the DECL_ARGUMENTS from the
10592          new decl.  */ 
10593       DECL_INITIAL (new_decl) = error_mark_node;
10594       /* And don't complain about a duplicate definition.  */
10595       DECL_INITIAL (decl) = NULL_TREE;
10596     }
10597
10598   pop_access_scope (decl);
10599
10600   /* The immediate parent of the new template is still whatever it was
10601      before, even though tsubst sets DECL_TI_TEMPLATE up as the most
10602      general template.  We also reset the DECL_ASSEMBLER_NAME since
10603      tsubst always calculates the name as if the function in question
10604      were really a template instance, and sometimes, with friend
10605      functions, this is not so.  See tsubst_friend_function for
10606      details.  */
10607   DECL_TI_TEMPLATE (new_decl) = DECL_TI_TEMPLATE (decl);
10608   COPY_DECL_ASSEMBLER_NAME (decl, new_decl);
10609   COPY_DECL_RTL (decl, new_decl);
10610   DECL_USE_TEMPLATE (new_decl) = DECL_USE_TEMPLATE (decl);
10611
10612   /* Call duplicate decls to merge the old and new declarations.  */
10613   duplicate_decls (new_decl, decl);
10614
10615   /* Now, re-register the specialization.  */
10616   register_specialization (decl, gen_tmpl, args);
10617 }
10618
10619 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
10620    substituted to get DECL.  */
10621
10622 tree
10623 template_for_substitution (tree decl)
10624 {
10625   tree tmpl = DECL_TI_TEMPLATE (decl);
10626
10627   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
10628      for the instantiation.  This is not always the most general
10629      template.  Consider, for example:
10630
10631         template <class T>
10632         struct S { template <class U> void f();
10633                    template <> void f<int>(); };
10634
10635      and an instantiation of S<double>::f<int>.  We want TD to be the
10636      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
10637   while (/* An instantiation cannot have a definition, so we need a
10638             more general template.  */
10639          DECL_TEMPLATE_INSTANTIATION (tmpl)
10640            /* We must also deal with friend templates.  Given:
10641
10642                 template <class T> struct S { 
10643                   template <class U> friend void f() {};
10644                 };
10645
10646               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
10647               so far as the language is concerned, but that's still
10648               where we get the pattern for the instantiation from.  On
10649               other hand, if the definition comes outside the class, say:
10650
10651                 template <class T> struct S { 
10652                   template <class U> friend void f();
10653                 };
10654                 template <class U> friend void f() {}
10655
10656               we don't need to look any further.  That's what the check for
10657               DECL_INITIAL is for.  */
10658           || (TREE_CODE (decl) == FUNCTION_DECL
10659               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
10660               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
10661     {
10662       /* The present template, TD, should not be a definition.  If it
10663          were a definition, we should be using it!  Note that we
10664          cannot restructure the loop to just keep going until we find
10665          a template with a definition, since that might go too far if
10666          a specialization was declared, but not defined.  */
10667       my_friendly_assert (!(TREE_CODE (decl) == VAR_DECL
10668                             && !DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl))), 
10669                           0); 
10670       
10671       /* Fetch the more general template.  */
10672       tmpl = DECL_TI_TEMPLATE (tmpl);
10673     }
10674
10675   return tmpl;
10676 }
10677
10678 /* Produce the definition of D, a _DECL generated from a template.  If
10679    DEFER_OK is nonzero, then we don't have to actually do the
10680    instantiation now; we just have to do it sometime.  */
10681
10682 tree
10683 instantiate_decl (tree d, int defer_ok)
10684 {
10685   tree tmpl = DECL_TI_TEMPLATE (d);
10686   tree gen_args;
10687   tree args;
10688   tree td;
10689   tree code_pattern;
10690   tree spec;
10691   tree gen_tmpl;
10692   int pattern_defined;
10693   int need_push;
10694   location_t saved_loc = input_location;
10695   
10696   /* This function should only be used to instantiate templates for
10697      functions and static member variables.  */
10698   my_friendly_assert (TREE_CODE (d) == FUNCTION_DECL
10699                       || TREE_CODE (d) == VAR_DECL, 0);
10700
10701   /* Variables are never deferred; if instantiation is required, they
10702      are instantiated right away.  That allows for better code in the
10703      case that an expression refers to the value of the variable --
10704      if the variable has a constant value the referring expression can
10705      take advantage of that fact.  */
10706   if (TREE_CODE (d) == VAR_DECL)
10707     defer_ok = 0;
10708
10709   /* Don't instantiate cloned functions.  Instead, instantiate the
10710      functions they cloned.  */
10711   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
10712     d = DECL_CLONED_FUNCTION (d);
10713
10714   if (DECL_TEMPLATE_INSTANTIATED (d))
10715     /* D has already been instantiated.  It might seem reasonable to
10716        check whether or not D is an explicit instantiation, and, if so,
10717        stop here.  But when an explicit instantiation is deferred
10718        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
10719        is set, even though we still need to do the instantiation.  */
10720     return d;
10721
10722   /* If we already have a specialization of this declaration, then
10723      there's no reason to instantiate it.  Note that
10724      retrieve_specialization gives us both instantiations and
10725      specializations, so we must explicitly check
10726      DECL_TEMPLATE_SPECIALIZATION.  */
10727   gen_tmpl = most_general_template (tmpl);
10728   gen_args = DECL_TI_ARGS (d);
10729   spec = retrieve_specialization (gen_tmpl, gen_args);
10730   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
10731     return spec;
10732
10733   /* This needs to happen before any tsubsting.  */
10734   if (! push_tinst_level (d))
10735     return d;
10736
10737   timevar_push (TV_PARSE);
10738
10739   /* We may be in the middle of deferred access check.  Disable
10740      it now.  */
10741   push_deferring_access_checks (dk_no_deferred);
10742
10743   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
10744      for the instantiation.  */
10745   td = template_for_substitution (d);
10746   code_pattern = DECL_TEMPLATE_RESULT (td);
10747
10748   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
10749       || DECL_TEMPLATE_SPECIALIZATION (td))
10750     /* In the case of a friend template whose definition is provided
10751        outside the class, we may have too many arguments.  Drop the
10752        ones we don't need.  The same is true for specializations.  */
10753     args = get_innermost_template_args
10754       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
10755   else
10756     args = gen_args;
10757
10758   if (TREE_CODE (d) == FUNCTION_DECL)
10759     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
10760   else
10761     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
10762
10763   input_location = DECL_SOURCE_LOCATION (d);
10764
10765   if (pattern_defined)
10766     {
10767       /* Let the repository code that this template definition is
10768          available.
10769
10770          The repository doesn't need to know about cloned functions
10771          because they never actually show up in the object file.  It
10772          does need to know about the clones; those are the symbols
10773          that the linker will be emitting error messages about.  */
10774       if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (d)
10775           || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (d))
10776         {
10777           tree t;
10778
10779           for (t = TREE_CHAIN (d);
10780                t && DECL_CLONED_FUNCTION_P (t); 
10781                t = TREE_CHAIN (t))
10782             repo_template_used (t);
10783         }
10784       else
10785         repo_template_used (d);
10786
10787       if (flag_external_templates && ! DECL_INTERFACE_KNOWN (d))
10788         {
10789           if (flag_alt_external_templates)
10790             {
10791               if (interface_unknown)
10792                 warn_if_unknown_interface (d);
10793             }
10794           else if (DECL_INTERFACE_KNOWN (code_pattern))
10795             {
10796               DECL_INTERFACE_KNOWN (d) = 1;
10797               DECL_NOT_REALLY_EXTERN (d) = ! DECL_EXTERNAL (code_pattern);
10798             }
10799           else
10800             warn_if_unknown_interface (code_pattern);
10801         }
10802
10803       if (at_eof)
10804         import_export_decl (d);
10805     }
10806
10807   if (!defer_ok)
10808     {
10809       /* Recheck the substitutions to obtain any warning messages
10810          about ignoring cv qualifiers.  */
10811       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
10812       tree type = TREE_TYPE (gen);
10813
10814       /* Make sure that we can see identifiers, and compute access
10815          correctly.  D is already the target FUNCTION_DECL with the
10816          right context.  */
10817       push_access_scope (d);
10818
10819       if (TREE_CODE (gen) == FUNCTION_DECL)
10820         {
10821           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_error | tf_warning, d);
10822           tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
10823                   tf_error | tf_warning, d);
10824           /* Don't simply tsubst the function type, as that will give
10825              duplicate warnings about poor parameter qualifications.
10826              The function arguments are the same as the decl_arguments
10827              without the top level cv qualifiers.  */
10828           type = TREE_TYPE (type);
10829         }
10830       tsubst (type, gen_args, tf_error | tf_warning, d);
10831
10832       pop_access_scope (d);
10833     }
10834   
10835   if (TREE_CODE (d) == VAR_DECL && DECL_INITIALIZED_IN_CLASS_P (d)
10836       && DECL_INITIAL (d) == NULL_TREE)
10837     /* We should have set up DECL_INITIAL in instantiate_class_template.  */
10838     abort ();
10839   /* Reject all external templates except inline functions.  */
10840   else if (DECL_INTERFACE_KNOWN (d)
10841            && ! DECL_NOT_REALLY_EXTERN (d)
10842            && ! (TREE_CODE (d) == FUNCTION_DECL 
10843                  && DECL_INLINE (d)))
10844     goto out;
10845   /* Defer all other templates, unless we have been explicitly
10846      forbidden from doing so.  We restore the source position here
10847      because it's used by add_pending_template.  */
10848   else if (! pattern_defined || defer_ok)
10849     {
10850       input_location = saved_loc;
10851
10852       if (at_eof && !pattern_defined 
10853           && DECL_EXPLICIT_INSTANTIATION (d))
10854         /* [temp.explicit]
10855
10856            The definition of a non-exported function template, a
10857            non-exported member function template, or a non-exported
10858            member function or static data member of a class template
10859            shall be present in every translation unit in which it is
10860            explicitly instantiated.  */
10861         pedwarn
10862           ("explicit instantiation of `%D' but no definition available", d);
10863
10864       add_pending_template (d);
10865       goto out;
10866     }
10867
10868   need_push = !global_bindings_p ();
10869   if (need_push)
10870     push_to_top_level ();
10871
10872   /* Regenerate the declaration in case the template has been modified
10873      by a subsequent redeclaration.  */
10874   regenerate_decl_from_template (d, td);
10875   
10876   /* We already set the file and line above.  Reset them now in case
10877      they changed as a result of calling
10878      regenerate_decl_from_template.  */
10879   input_location = DECL_SOURCE_LOCATION (d);
10880
10881   if (TREE_CODE (d) == VAR_DECL)
10882     {
10883       /* Clear out DECL_RTL; whatever was there before may not be right
10884          since we've reset the type of the declaration.  */
10885       SET_DECL_RTL (d, NULL_RTX);
10886
10887       DECL_IN_AGGR_P (d) = 0;
10888       import_export_decl (d);
10889       DECL_EXTERNAL (d) = ! DECL_NOT_REALLY_EXTERN (d);
10890
10891       if (DECL_EXTERNAL (d))
10892         {
10893           /* The fact that this code is executing indicates that:
10894              
10895              (1) D is a template static data member, for which a
10896                  definition is available.
10897
10898              (2) An implicit or explicit instantiation has occurred.
10899
10900              (3) We are not going to emit a definition of the static
10901                  data member at this time.
10902
10903              This situation is peculiar, but it occurs on platforms
10904              without weak symbols when performing an implicit
10905              instantiation.  There, we cannot implicitly instantiate a
10906              defined static data member in more than one translation
10907              unit, so import_export_decl marks the declaration as
10908              external; we must rely on explicit instantiation.  */
10909         }
10910       else
10911         {
10912           /* Mark D as instantiated so that recursive calls to
10913              instantiate_decl do not try to instantiate it again.  */
10914           DECL_TEMPLATE_INSTANTIATED (d) = 1;
10915           cp_finish_decl (d, 
10916                           (!DECL_INITIALIZED_IN_CLASS_P (d) 
10917                            ? DECL_INITIAL (d) : NULL_TREE),
10918                           NULL_TREE, 0);
10919         }
10920     }
10921   else if (TREE_CODE (d) == FUNCTION_DECL)
10922     {
10923       htab_t saved_local_specializations;
10924       tree subst_decl;
10925       tree tmpl_parm;
10926       tree spec_parm;
10927
10928       /* Mark D as instantiated so that recursive calls to
10929          instantiate_decl do not try to instantiate it again.  */
10930       DECL_TEMPLATE_INSTANTIATED (d) = 1;
10931
10932       /* Save away the current list, in case we are instantiating one
10933          template from within the body of another.  */
10934       saved_local_specializations = local_specializations;
10935
10936       /* Set up the list of local specializations.  */
10937       local_specializations = htab_create (37, 
10938                                            hash_local_specialization,
10939                                            eq_local_specializations,
10940                                            NULL);
10941
10942       /* Set up context.  */
10943       import_export_decl (d);
10944       start_function (NULL_TREE, d, NULL_TREE, SF_PRE_PARSED);
10945
10946       /* Create substitution entries for the parameters.  */
10947       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
10948       tmpl_parm = DECL_ARGUMENTS (subst_decl);
10949       spec_parm = DECL_ARGUMENTS (d);
10950       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
10951         {
10952           register_local_specialization (spec_parm, tmpl_parm);
10953           spec_parm = skip_artificial_parms_for (d, spec_parm);
10954           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
10955         }
10956       while (tmpl_parm)
10957         {
10958           register_local_specialization (spec_parm, tmpl_parm);
10959           tmpl_parm = TREE_CHAIN (tmpl_parm);
10960           spec_parm = TREE_CHAIN (spec_parm);
10961         }
10962       my_friendly_assert (!spec_parm, 20020813);
10963
10964       /* Substitute into the body of the function.  */
10965       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
10966                    tf_error | tf_warning, tmpl);
10967
10968       /* We don't need the local specializations any more.  */
10969       htab_delete (local_specializations);
10970       local_specializations = saved_local_specializations;
10971
10972       /* Finish the function.  */
10973       d = finish_function (0);
10974       expand_or_defer_fn (d);
10975     }
10976
10977   /* We're not deferring instantiation any more.  */
10978   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
10979
10980   if (need_push)
10981     pop_from_top_level ();
10982
10983 out:
10984   input_location = saved_loc;
10985   pop_deferring_access_checks ();
10986   pop_tinst_level ();
10987
10988   timevar_pop (TV_PARSE);
10989
10990   return d;
10991 }
10992
10993 /* Run through the list of templates that we wish we could
10994    instantiate, and instantiate any we can.  */
10995
10996 int
10997 instantiate_pending_templates (void)
10998 {
10999   tree *t;
11000   tree last = NULL_TREE;
11001   int instantiated_something = 0;
11002   int reconsider;
11003   
11004   do 
11005     {
11006       reconsider = 0;
11007
11008       t = &pending_templates;
11009       while (*t)
11010         {
11011           tree instantiation = TREE_VALUE (*t);
11012
11013           reopen_tinst_level (TREE_PURPOSE (*t));
11014
11015           if (TYPE_P (instantiation))
11016             {
11017               tree fn;
11018
11019               if (!COMPLETE_TYPE_P (instantiation))
11020                 {
11021                   instantiate_class_template (instantiation);
11022                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
11023                     for (fn = TYPE_METHODS (instantiation); 
11024                          fn;
11025                          fn = TREE_CHAIN (fn))
11026                       if (! DECL_ARTIFICIAL (fn))
11027                         instantiate_decl (fn, /*defer_ok=*/0);
11028                   if (COMPLETE_TYPE_P (instantiation))
11029                     {
11030                       instantiated_something = 1;
11031                       reconsider = 1;
11032                     }
11033                 }
11034
11035               if (COMPLETE_TYPE_P (instantiation))
11036                 /* If INSTANTIATION has been instantiated, then we don't
11037                    need to consider it again in the future.  */
11038                 *t = TREE_CHAIN (*t);
11039               else
11040                 {
11041                   last = *t;
11042                   t = &TREE_CHAIN (*t);
11043                 }
11044             }
11045           else
11046             {
11047               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
11048                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
11049                 {
11050                   instantiation = instantiate_decl (instantiation,
11051                                                     /*defer_ok=*/0);
11052                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
11053                     {
11054                       instantiated_something = 1;
11055                       reconsider = 1;
11056                     }
11057                 }
11058
11059               if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
11060                   || DECL_TEMPLATE_INSTANTIATED (instantiation))
11061                 /* If INSTANTIATION has been instantiated, then we don't
11062                    need to consider it again in the future.  */
11063                 *t = TREE_CHAIN (*t);
11064               else
11065                 {
11066                   last = *t;
11067                   t = &TREE_CHAIN (*t);
11068                 }
11069             }
11070           tinst_depth = 0;
11071           current_tinst_level = NULL_TREE;
11072         }
11073       last_pending_template = last;
11074     } 
11075   while (reconsider);
11076
11077   return instantiated_something;
11078 }
11079
11080 /* Substitute ARGVEC into T, which is a list of initializers for
11081    either base class or a non-static data member.  The TREE_PURPOSEs
11082    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
11083    instantiate_decl.  */
11084
11085 static tree
11086 tsubst_initializer_list (tree t, tree argvec)
11087 {
11088   tree inits = NULL_TREE;
11089
11090   for (; t; t = TREE_CHAIN (t))
11091     {
11092       tree decl;
11093       tree init;
11094       tree val;
11095
11096       decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_error | tf_warning,
11097                           NULL_TREE);
11098       decl = expand_member_init (decl);
11099       if (decl && !DECL_P (decl))
11100         in_base_initializer = 1;
11101       
11102       init = tsubst_expr (TREE_VALUE (t), argvec, tf_error | tf_warning,
11103                           NULL_TREE);
11104       if (!init)
11105         ;
11106       else if (TREE_CODE (init) == TREE_LIST)
11107         for (val = init; val; val = TREE_CHAIN (val))
11108           TREE_VALUE (val) = convert_from_reference (TREE_VALUE (val));
11109       else if (init != void_type_node)
11110         init = convert_from_reference (init);
11111
11112       in_base_initializer = 0;
11113
11114       if (decl)
11115         {
11116           init = build_tree_list (decl, init);
11117           TREE_CHAIN (init) = inits;
11118           inits = init;
11119         }
11120     }
11121   return inits;
11122 }
11123
11124 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
11125
11126 static void
11127 set_current_access_from_decl (tree decl)
11128 {
11129   if (TREE_PRIVATE (decl))
11130     current_access_specifier = access_private_node;
11131   else if (TREE_PROTECTED (decl))
11132     current_access_specifier = access_protected_node;
11133   else
11134     current_access_specifier = access_public_node;
11135 }
11136
11137 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
11138    is the instantiation (which should have been created with
11139    start_enum) and ARGS are the template arguments to use.  */
11140
11141 static void
11142 tsubst_enum (tree tag, tree newtag, tree args)
11143 {
11144   tree e;
11145
11146   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
11147     {
11148       tree value;
11149       tree decl;
11150
11151       decl = TREE_VALUE (e);
11152       /* Note that in a template enum, the TREE_VALUE is the
11153          CONST_DECL, not the corresponding INTEGER_CST.  */
11154       value = tsubst_expr (DECL_INITIAL (decl), 
11155                            args, tf_error | tf_warning,
11156                            NULL_TREE);
11157
11158       /* Give this enumeration constant the correct access.  */
11159       set_current_access_from_decl (decl);
11160
11161       /* Actually build the enumerator itself.  */
11162       build_enumerator (DECL_NAME (decl), value, newtag); 
11163     }
11164
11165   finish_enum (newtag);
11166   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
11167     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
11168 }
11169
11170 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
11171    its type -- but without substituting the innermost set of template
11172    arguments.  So, innermost set of template parameters will appear in
11173    the type.  */
11174
11175 tree 
11176 get_mostly_instantiated_function_type (tree decl)
11177 {
11178   tree fn_type;
11179   tree tmpl;
11180   tree targs;
11181   tree tparms;
11182   int parm_depth;
11183
11184   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11185   targs = DECL_TI_ARGS (decl);
11186   tparms = DECL_TEMPLATE_PARMS (tmpl);
11187   parm_depth = TMPL_PARMS_DEPTH (tparms);
11188
11189   /* There should be as many levels of arguments as there are levels
11190      of parameters.  */
11191   my_friendly_assert (parm_depth == TMPL_ARGS_DEPTH (targs), 0);
11192
11193   fn_type = TREE_TYPE (tmpl);
11194
11195   if (parm_depth == 1)
11196     /* No substitution is necessary.  */
11197     ;
11198   else
11199     {
11200       int i;
11201       tree partial_args;
11202
11203       /* Replace the innermost level of the TARGS with NULL_TREEs to
11204          let tsubst know not to substitute for those parameters.  */
11205       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
11206       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
11207         SET_TMPL_ARGS_LEVEL (partial_args, i,
11208                              TMPL_ARGS_LEVEL (targs, i));
11209       SET_TMPL_ARGS_LEVEL (partial_args,
11210                            TMPL_ARGS_DEPTH (targs),
11211                            make_tree_vec (DECL_NTPARMS (tmpl)));
11212
11213       /* Make sure that we can see identifiers, and compute access
11214          correctly.  We can just use the context of DECL for the
11215          partial substitution here.  It depends only on outer template
11216          parameters, regardless of whether the innermost level is
11217          specialized or not.  */
11218       push_access_scope (decl);
11219
11220       /* Now, do the (partial) substitution to figure out the
11221          appropriate function type.  */
11222       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
11223
11224       /* Substitute into the template parameters to obtain the real
11225          innermost set of parameters.  This step is important if the
11226          innermost set of template parameters contains value
11227          parameters whose types depend on outer template parameters.  */
11228       TREE_VEC_LENGTH (partial_args)--;
11229       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
11230
11231       pop_access_scope (decl);
11232     }
11233
11234   return fn_type;
11235 }
11236
11237 /* Return truthvalue if we're processing a template different from
11238    the last one involved in diagnostics.  */
11239 int
11240 problematic_instantiation_changed (void)
11241 {
11242   return last_template_error_tick != tinst_level_tick;
11243 }
11244
11245 /* Remember current template involved in diagnostics.  */
11246 void
11247 record_last_problematic_instantiation (void)
11248 {
11249   last_template_error_tick = tinst_level_tick;
11250 }
11251
11252 tree
11253 current_instantiation (void)
11254 {
11255   return current_tinst_level;
11256 }
11257
11258 /* [temp.param] Check that template non-type parm TYPE is of an allowable
11259    type. Return zero for ok, nonzero for disallowed. Issue error and
11260    warning messages under control of COMPLAIN.  */
11261
11262 static int
11263 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
11264 {
11265   if (INTEGRAL_TYPE_P (type))
11266     return 0;
11267   else if (POINTER_TYPE_P (type))
11268     return 0;
11269   else if (TYPE_PTR_TO_MEMBER_P (type))
11270     return 0;
11271   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11272     return 0;
11273   else if (TREE_CODE (type) == TYPENAME_TYPE)
11274     return 0;
11275            
11276   if (complain & tf_error)
11277     error ("`%#T' is not a valid type for a template constant parameter",
11278               type);
11279   return 1;
11280 }
11281
11282 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
11283    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
11284
11285 static bool
11286 dependent_type_p_r (tree type)
11287 {
11288   tree scope;
11289
11290   /* [temp.dep.type]
11291
11292      A type is dependent if it is:
11293
11294      -- a template parameter.  */
11295   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11296     return true;
11297   /* -- a qualified-id with a nested-name-specifier which contains a
11298         class-name that names a dependent type or whose unqualified-id
11299         names a dependent type.  */
11300   if (TREE_CODE (type) == TYPENAME_TYPE)
11301     return true;
11302   /* -- a cv-qualified type where the cv-unqualified type is
11303         dependent.  */
11304   type = TYPE_MAIN_VARIANT (type);
11305   /* -- a compound type constructed from any dependent type.  */
11306   if (TYPE_PTR_TO_MEMBER_P (type))
11307     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
11308             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE 
11309                                            (type)));
11310   else if (TREE_CODE (type) == POINTER_TYPE
11311            || TREE_CODE (type) == REFERENCE_TYPE)
11312     return dependent_type_p (TREE_TYPE (type));
11313   else if (TREE_CODE (type) == FUNCTION_TYPE
11314            || TREE_CODE (type) == METHOD_TYPE)
11315     {
11316       tree arg_type;
11317
11318       if (dependent_type_p (TREE_TYPE (type)))
11319         return true;
11320       for (arg_type = TYPE_ARG_TYPES (type); 
11321            arg_type; 
11322            arg_type = TREE_CHAIN (arg_type))
11323         if (dependent_type_p (TREE_VALUE (arg_type)))
11324           return true;
11325       return false;
11326     }
11327   /* -- an array type constructed from any dependent type or whose
11328         size is specified by a constant expression that is
11329         value-dependent.  */
11330   if (TREE_CODE (type) == ARRAY_TYPE)
11331     {
11332       if (TYPE_DOMAIN (type)
11333           && ((value_dependent_expression_p 
11334                (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
11335               || (type_dependent_expression_p
11336                   (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
11337         return true;
11338       return dependent_type_p (TREE_TYPE (type));
11339     }
11340   /* -- a template-id in which either the template name is a template
11341         parameter or any of the template arguments is a dependent type or
11342         an expression that is type-dependent or value-dependent.  
11343
11344      This language seems somewhat confused; for example, it does not
11345      discuss template template arguments.  Therefore, we use the
11346      definition for dependent template arguments in [temp.dep.temp].  */
11347   if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
11348       && (dependent_template_id_p
11349           (CLASSTYPE_TI_TEMPLATE (type),
11350            CLASSTYPE_TI_ARGS (type))))
11351     return true;
11352   else if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
11353     return true;
11354   /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
11355      expression is not type-dependent, then it should already been
11356      have resolved.  */
11357   if (TREE_CODE (type) == TYPEOF_TYPE)
11358     return true;
11359   /* The standard does not specifically mention types that are local
11360      to template functions or local classes, but they should be
11361      considered dependent too.  For example:
11362
11363        template <int I> void f() { 
11364          enum E { a = I }; 
11365          S<sizeof (E)> s;
11366        }
11367
11368      The size of `E' cannot be known until the value of `I' has been
11369      determined.  Therefore, `E' must be considered dependent.  */
11370   scope = TYPE_CONTEXT (type);
11371   if (scope && TYPE_P (scope))
11372     return dependent_type_p (scope);
11373   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
11374     return type_dependent_expression_p (scope);
11375
11376   /* Other types are non-dependent.  */
11377   return false;
11378 }
11379
11380 /* Returns TRUE if TYPE is dependent, in the sense of
11381    [temp.dep.type].  */
11382
11383 bool
11384 dependent_type_p (tree type)
11385 {
11386   /* If there are no template parameters in scope, then there can't be
11387      any dependent types.  */
11388   if (!processing_template_decl)
11389     return false;
11390
11391   /* If the type is NULL, we have not computed a type for the entity
11392      in question; in that case, the type is dependent.  */
11393   if (!type)
11394     return true;
11395
11396   /* Erroneous types can be considered non-dependent.  */
11397   if (type == error_mark_node)
11398     return false;
11399
11400   /* If we have not already computed the appropriate value for TYPE,
11401      do so now.  */
11402   if (!TYPE_DEPENDENT_P_VALID (type))
11403     {
11404       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
11405       TYPE_DEPENDENT_P_VALID (type) = 1;
11406     }
11407
11408   return TYPE_DEPENDENT_P (type);
11409 }
11410
11411 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
11412
11413 static bool
11414 dependent_scope_ref_p (tree expression, bool criterion (tree))
11415 {
11416   tree scope;
11417   tree name;
11418
11419   my_friendly_assert (TREE_CODE (expression) == SCOPE_REF, 20030714);
11420
11421   if (!TYPE_P (TREE_OPERAND (expression, 0)))
11422     return true;
11423
11424   scope = TREE_OPERAND (expression, 0);
11425   name = TREE_OPERAND (expression, 1);
11426
11427   /* [temp.dep.expr]
11428
11429      An id-expression is type-dependent if it contains a
11430      nested-name-specifier that contains a class-name that names a
11431      dependent type.  */
11432   /* The suggested resolution to Core Issue 2 implies that if the
11433      qualifying type is the current class, then we must peek
11434      inside it.  */
11435   if (DECL_P (name) 
11436       && currently_open_class (scope)
11437       && !criterion (name))
11438     return false;
11439   if (dependent_type_p (scope))
11440     return true;
11441
11442   return false;
11443 }
11444
11445 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
11446    [temp.dep.constexpr] */
11447
11448 bool
11449 value_dependent_expression_p (tree expression)
11450 {
11451   if (!processing_template_decl)
11452     return false;
11453
11454   /* A name declared with a dependent type.  */
11455   if (TREE_CODE (expression) == IDENTIFIER_NODE
11456       || (DECL_P (expression) 
11457           && type_dependent_expression_p (expression)))
11458     return true;
11459   /* A non-type template parameter.  */
11460   if ((TREE_CODE (expression) == CONST_DECL
11461        && DECL_TEMPLATE_PARM_P (expression))
11462       || TREE_CODE (expression) == TEMPLATE_PARM_INDEX)
11463     return true;
11464   /* A constant with integral or enumeration type and is initialized 
11465      with an expression that is value-dependent.  */
11466   if (TREE_CODE (expression) == VAR_DECL
11467       && DECL_INITIAL (expression)
11468       && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
11469       && value_dependent_expression_p (DECL_INITIAL (expression)))
11470     return true;
11471   /* These expressions are value-dependent if the type to which the
11472      cast occurs is dependent or the expression being casted is
11473      value-dependent.  */
11474   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
11475       || TREE_CODE (expression) == STATIC_CAST_EXPR
11476       || TREE_CODE (expression) == CONST_CAST_EXPR
11477       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
11478       || TREE_CODE (expression) == CAST_EXPR)
11479     {
11480       if (dependent_type_p (TREE_TYPE (expression)))
11481         return true;
11482       /* A functional cast has a list of operands.  */
11483       expression = TREE_OPERAND (expression, 0);
11484       if (TREE_CODE (expression) == TREE_LIST)
11485         {
11486           do
11487             {
11488               if (value_dependent_expression_p (TREE_VALUE (expression)))
11489                 return true;
11490               expression = TREE_CHAIN (expression);
11491             }
11492           while (expression);
11493           return false;
11494         }
11495       else
11496         return value_dependent_expression_p (expression);
11497     }
11498   /* A `sizeof' expression is value-dependent if the operand is
11499      type-dependent.  */
11500   if (TREE_CODE (expression) == SIZEOF_EXPR
11501       || TREE_CODE (expression) == ALIGNOF_EXPR)
11502     {
11503       expression = TREE_OPERAND (expression, 0);
11504       if (TYPE_P (expression))
11505         return dependent_type_p (expression);
11506       return type_dependent_expression_p (expression);
11507     }
11508   if (TREE_CODE (expression) == SCOPE_REF)
11509     return dependent_scope_ref_p (expression, value_dependent_expression_p);
11510   /* A constant expression is value-dependent if any subexpression is
11511      value-dependent.  */
11512   if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (expression))))
11513     {
11514       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
11515         {
11516         case '1':
11517           return (value_dependent_expression_p 
11518                   (TREE_OPERAND (expression, 0)));
11519         case '<':
11520         case '2':
11521           return ((value_dependent_expression_p 
11522                    (TREE_OPERAND (expression, 0)))
11523                   || (value_dependent_expression_p 
11524                       (TREE_OPERAND (expression, 1))));
11525         case 'e':
11526           {
11527             int i;
11528             for (i = 0; i < first_rtl_op (TREE_CODE (expression)); ++i)
11529               /* In some cases, some of the operands may be missing.
11530                  (For example, in the case of PREDECREMENT_EXPR, the
11531                  amount to increment by may be missing.)  That doesn't
11532                  make the expression dependent.  */
11533               if (TREE_OPERAND (expression, i)
11534                   && (value_dependent_expression_p
11535                       (TREE_OPERAND (expression, i))))
11536                 return true;
11537             return false;
11538           }
11539         }
11540     }
11541
11542   /* The expression is not value-dependent.  */
11543   return false;
11544 }
11545
11546 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
11547    [temp.dep.expr].  */
11548
11549 bool
11550 type_dependent_expression_p (tree expression)
11551 {
11552   if (!processing_template_decl)
11553     return false;
11554
11555   if (expression == error_mark_node)
11556     return false;
11557
11558   /* An unresolved name is always dependent.  */
11559   if (TREE_CODE (expression) == IDENTIFIER_NODE)
11560     return true;
11561   
11562   /* Some expression forms are never type-dependent.  */
11563   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
11564       || TREE_CODE (expression) == SIZEOF_EXPR
11565       || TREE_CODE (expression) == ALIGNOF_EXPR
11566       || TREE_CODE (expression) == TYPEID_EXPR
11567       || TREE_CODE (expression) == DELETE_EXPR
11568       || TREE_CODE (expression) == VEC_DELETE_EXPR
11569       || TREE_CODE (expression) == THROW_EXPR)
11570     return false;
11571
11572   /* The types of these expressions depends only on the type to which
11573      the cast occurs.  */
11574   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
11575       || TREE_CODE (expression) == STATIC_CAST_EXPR
11576       || TREE_CODE (expression) == CONST_CAST_EXPR
11577       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
11578       || TREE_CODE (expression) == CAST_EXPR)
11579     return dependent_type_p (TREE_TYPE (expression));
11580
11581   /* The types of these expressions depends only on the type created
11582      by the expression.  */
11583   if (TREE_CODE (expression) == NEW_EXPR
11584       || TREE_CODE (expression) == VEC_NEW_EXPR)
11585     {
11586       /* For NEW_EXPR tree nodes created inside a template, either
11587          the object type itself or a TREE_LIST may appear as the
11588          operand 1.  */
11589       tree type = TREE_OPERAND (expression, 1);
11590       if (TREE_CODE (type) == TREE_LIST)
11591         /* This is an array type.  We need to check array dimensions
11592            as well.  */
11593         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
11594                || value_dependent_expression_p
11595                     (TREE_OPERAND (TREE_VALUE (type), 1));
11596       else
11597         return dependent_type_p (type);
11598     }
11599
11600   if (TREE_CODE (expression) == SCOPE_REF
11601       && dependent_scope_ref_p (expression,
11602                                 type_dependent_expression_p))
11603     return true;
11604
11605   if (TREE_CODE (expression) == FUNCTION_DECL
11606       && DECL_LANG_SPECIFIC (expression)
11607       && DECL_TEMPLATE_INFO (expression)
11608       && (dependent_template_id_p
11609           (DECL_TI_TEMPLATE (expression),
11610            INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
11611     return true;
11612
11613   if (TREE_TYPE (expression) == unknown_type_node)
11614     {
11615       if (TREE_CODE (expression) == USING_DECL)
11616         return true;
11617       if (TREE_CODE (expression) == ADDR_EXPR)
11618         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
11619       if (TREE_CODE (expression) == BASELINK)
11620         expression = BASELINK_FUNCTIONS (expression);
11621       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
11622         {
11623           if (any_dependent_template_arguments_p (TREE_OPERAND (expression, 
11624                                                                 1)))
11625             return true;
11626           expression = TREE_OPERAND (expression, 0);
11627         }
11628       if (TREE_CODE (expression) == OVERLOAD)
11629         {
11630           while (expression)
11631             {
11632               if (type_dependent_expression_p (OVL_CURRENT (expression)))
11633                 return true;
11634               expression = OVL_NEXT (expression);
11635             }
11636           return false;
11637         }
11638       abort ();
11639     }
11640   
11641   return (dependent_type_p (TREE_TYPE (expression)));
11642 }
11643
11644 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
11645    contains a type-dependent expression.  */
11646
11647 bool
11648 any_type_dependent_arguments_p (tree args)
11649 {
11650   while (args)
11651     {
11652       tree arg = TREE_VALUE (args);
11653
11654       if (type_dependent_expression_p (arg))
11655         return true;
11656       args = TREE_CHAIN (args);
11657     }
11658   return false;
11659 }
11660
11661 /* Returns TRUE if the ARG (a template argument) is dependent.  */
11662
11663 static bool
11664 dependent_template_arg_p (tree arg)
11665 {
11666   if (!processing_template_decl)
11667     return false;
11668
11669   if (TREE_CODE (arg) == TEMPLATE_DECL
11670       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11671     return dependent_template_p (arg);
11672   else if (TYPE_P (arg))
11673     return dependent_type_p (arg);
11674   else
11675     return (type_dependent_expression_p (arg)
11676             || value_dependent_expression_p (arg));
11677 }
11678
11679 /* Returns true if ARGS (a collection of template arguments) contains
11680    any dependent arguments.  */
11681
11682 bool
11683 any_dependent_template_arguments_p (tree args)
11684 {
11685   if (!args)
11686     return false;
11687
11688   my_friendly_assert (TREE_CODE (args) == TREE_LIST
11689                       || TREE_CODE (args) == TREE_VEC,
11690                       20030707);
11691
11692   if (TREE_CODE (args) == TREE_LIST)
11693     {
11694       while (args)
11695         {
11696           if (dependent_template_arg_p (TREE_VALUE (args)))
11697             return true;
11698           args = TREE_CHAIN (args);
11699         }
11700     }
11701   else
11702     {
11703       int i; 
11704       for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
11705         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
11706           return true;
11707     }
11708
11709   return false;
11710 }
11711
11712 /* Returns TRUE if the template TMPL is dependent.  */
11713
11714 bool
11715 dependent_template_p (tree tmpl)
11716 {
11717   /* Template template parameters are dependent.  */
11718   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
11719       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
11720     return true;
11721   /* So are qualified names that have not been looked up.  */
11722   if (TREE_CODE (tmpl) == SCOPE_REF)
11723     return true;
11724   /* So are member templates of dependent classes.  */
11725   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
11726     return dependent_type_p (DECL_CONTEXT (tmpl));
11727   return false;
11728 }
11729
11730 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
11731
11732 bool
11733 dependent_template_id_p (tree tmpl, tree args)
11734 {
11735   return (dependent_template_p (tmpl)
11736           || any_dependent_template_arguments_p (args));
11737 }
11738
11739 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
11740    TYPENAME_TYPE corresponds.  Returns ERROR_MARK_NODE if no such TYPE
11741    can be found.  Note that this function peers inside uninstantiated
11742    templates and therefore should be used only in extremely limited
11743    situations.  */
11744
11745 tree
11746 resolve_typename_type (tree type, bool only_current_p)
11747 {
11748   tree scope;
11749   tree name;
11750   tree decl;
11751   int quals;
11752
11753   my_friendly_assert (TREE_CODE (type) == TYPENAME_TYPE,
11754                       20010702);
11755
11756   scope = TYPE_CONTEXT (type);
11757   name = TYPE_IDENTIFIER (type);
11758
11759   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
11760      it first before we can figure out what NAME refers to.  */
11761   if (TREE_CODE (scope) == TYPENAME_TYPE)
11762     scope = resolve_typename_type (scope, only_current_p);
11763   /* If we don't know what SCOPE refers to, then we cannot resolve the
11764      TYPENAME_TYPE.  */
11765   if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
11766     return error_mark_node;
11767   /* If the SCOPE is a template type parameter, we have no way of
11768      resolving the name.  */
11769   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
11770     return type;
11771   /* If the SCOPE is not the current instantiation, there's no reason
11772      to look inside it.  */
11773   if (only_current_p && !currently_open_class (scope))
11774     return error_mark_node;
11775   /* If SCOPE is a partial instantiation, it will not have a valid
11776      TYPE_FIELDS list, so use the original template.  */
11777   scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
11778   /* Enter the SCOPE so that name lookup will be resolved as if we
11779      were in the class definition.  In particular, SCOPE will no
11780      longer be considered a dependent type.  */
11781   push_scope (scope);
11782   /* Look up the declaration.  */
11783   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
11784   /* Obtain the set of qualifiers applied to the TYPE.  */
11785   quals = cp_type_quals (type);
11786   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
11787      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
11788   if (!decl)
11789     type = error_mark_node;
11790   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
11791            && TREE_CODE (decl) == TYPE_DECL)
11792     type = TREE_TYPE (decl);
11793   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
11794            && DECL_CLASS_TEMPLATE_P (decl))
11795     {
11796       tree tmpl;
11797       tree args;
11798       /* Obtain the template and the arguments.  */
11799       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
11800       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
11801       /* Instantiate the template.  */
11802       type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
11803                                     /*entering_scope=*/0, tf_error | tf_user);
11804     }
11805   else
11806     type = error_mark_node;
11807   /* Qualify the resulting type.  */
11808   if (type != error_mark_node && quals)
11809     type = cp_build_qualified_type (type, quals);
11810   /* Leave the SCOPE.  */
11811   pop_scope (scope);
11812
11813   return type;
11814 }
11815
11816 /* EXPR is an expression which is not type-dependent.  Return a proxy
11817    for EXPR that can be used to compute the types of larger
11818    expressions containing EXPR.  */
11819
11820 tree
11821 build_non_dependent_expr (tree expr)
11822 {
11823   /* Preserve null pointer constants so that the type of things like 
11824      "p == 0" where "p" is a pointer can be determined.  */
11825   if (null_ptr_cst_p (expr))
11826     return expr;
11827   /* Preserve OVERLOADs; the functions must be available to resolve
11828      types.  */
11829   if (TREE_CODE (expr) == OVERLOAD)
11830     return expr;
11831   /* Otherwise, build a NON_DEPENDENT_EXPR.  
11832
11833      REFERENCE_TYPEs are not stripped for expressions in templates
11834      because doing so would play havoc with mangling.  Consider, for
11835      example:
11836
11837        template <typename T> void f<T& g>() { g(); } 
11838
11839      In the body of "f", the expression for "g" will have
11840      REFERENCE_TYPE, even though the standard says that it should
11841      not.  The reason is that we must preserve the syntactic form of
11842      the expression so that mangling (say) "f<g>" inside the body of
11843      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
11844      stripped here.  */
11845   return build (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)));
11846 }
11847
11848 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
11849    Return a new TREE_LIST with the various arguments replaced with
11850    equivalent non-dependent expressions.  */
11851
11852 tree
11853 build_non_dependent_args (tree args)
11854 {
11855   tree a;
11856   tree new_args;
11857
11858   new_args = NULL_TREE;
11859   for (a = args; a; a = TREE_CHAIN (a))
11860     new_args = tree_cons (NULL_TREE, 
11861                           build_non_dependent_expr (TREE_VALUE (a)),
11862                           new_args);
11863   return nreverse (new_args);
11864 }
11865
11866 #include "gt-cp-pt.h"