OSDN Git Service

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