OSDN Git Service

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