OSDN Git Service

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