OSDN Git Service

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