OSDN Git Service

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