OSDN Git Service

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