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