OSDN Git Service

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