OSDN Git Service

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