re PR c++/33955 (internal compiler error: in dependent_type_p, at cp/pt.c:15245 ...
[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, 2007  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 3, 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 COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23 /* Known bugs or deficiencies include:
24
25      all methods must be provided in header files; can't use a source
26      file that contains only the method templates and "just win".  */
27
28 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "tm.h"
32 #include "obstack.h"
33 #include "tree.h"
34 #include "pointer-set.h"
35 #include "flags.h"
36 #include "c-common.h"
37 #include "cp-tree.h"
38 #include "cp-objcp-common.h"
39 #include "tree-inline.h"
40 #include "decl.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "rtl.h"
45 #include "timevar.h"
46 #include "tree-iterator.h"
47 #include "vecprim.h"
48
49 /* The type of functions taking a tree, and some additional data, and
50    returning an int.  */
51 typedef int (*tree_fn_t) (tree, void*);
52
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54    instantiations have been deferred, either because their definitions
55    were not yet available, or because we were putting off doing the work.  */
56 struct pending_template GTY (()) {
57   struct pending_template *next;
58   struct tinst_level *tinst;
59 };
60
61 static GTY(()) struct pending_template *pending_templates;
62 static GTY(()) struct pending_template *last_pending_template;
63
64 int processing_template_parmlist;
65 static int template_header_count;
66
67 static GTY(()) tree saved_trees;
68 static VEC(int,heap) *inline_parm_levels;
69
70 static GTY(()) struct tinst_level *current_tinst_level;
71
72 static GTY(()) tree saved_access_scope;
73
74 /* Live only within one (recursive) call to tsubst_expr.  We use
75    this to pass the statement expression node from the STMT_EXPR
76    to the EXPR_STMT that is its result.  */
77 static tree cur_stmt_expr;
78
79 /* A map from local variable declarations in the body of the template
80    presently being instantiated to the corresponding instantiated
81    local variables.  */
82 static htab_t local_specializations;
83
84 /* Contains canonical template parameter types. The vector is indexed by
85    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
86    TREE_LIST, whose TREE_VALUEs contain the canonical template
87    parameters of various types and levels.  */
88 static GTY(()) VEC(tree,gc) *canonical_template_parms;
89
90 #define UNIFY_ALLOW_NONE 0
91 #define UNIFY_ALLOW_MORE_CV_QUAL 1
92 #define UNIFY_ALLOW_LESS_CV_QUAL 2
93 #define UNIFY_ALLOW_DERIVED 4
94 #define UNIFY_ALLOW_INTEGER 8
95 #define UNIFY_ALLOW_OUTER_LEVEL 16
96 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
97 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
98
99 static void push_access_scope (tree);
100 static void pop_access_scope (tree);
101 static bool resolve_overloaded_unification (tree, tree, tree, tree,
102                                             unification_kind_t, int);
103 static int try_one_overload (tree, tree, tree, tree, tree,
104                              unification_kind_t, int, bool);
105 static int unify (tree, tree, tree, tree, int);
106 static void add_pending_template (tree);
107 static int push_tinst_level (tree);
108 static void pop_tinst_level (void);
109 static tree reopen_tinst_level (struct tinst_level *);
110 static tree tsubst_initializer_list (tree, tree);
111 static tree get_class_bindings (tree, tree, tree);
112 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
113                                    bool, bool);
114 static void tsubst_enum (tree, tree, tree);
115 static tree add_to_template_args (tree, tree);
116 static tree add_outermost_template_args (tree, tree);
117 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
118 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
119                                              tree);
120 static int  type_unification_real (tree, tree, tree, tree,
121                                    int, unification_kind_t, int);
122 static void note_template_header (int);
123 static tree convert_nontype_argument_function (tree, tree);
124 static tree convert_nontype_argument (tree, tree);
125 static tree convert_template_argument (tree, tree, tree,
126                                        tsubst_flags_t, int, tree);
127 static int for_each_template_parm (tree, tree_fn_t, void*,
128                                    struct pointer_set_t*);
129 static tree expand_template_argument_pack (tree);
130 static tree build_template_parm_index (int, int, int, tree, tree);
131 static bool inline_needs_template_parms (tree);
132 static void push_inline_template_parms_recursive (tree, int);
133 static tree retrieve_local_specialization (tree);
134 static void register_local_specialization (tree, tree);
135 static tree reduce_template_parm_level (tree, tree, int);
136 static int mark_template_parm (tree, void *);
137 static int template_parm_this_level_p (tree, void *);
138 static tree tsubst_friend_function (tree, tree);
139 static tree tsubst_friend_class (tree, tree);
140 static int can_complete_type_without_circularity (tree);
141 static tree get_bindings (tree, tree, tree, bool);
142 static int template_decl_level (tree);
143 static int check_cv_quals_for_unify (int, tree, tree);
144 static void template_parm_level_and_index (tree, int*, int*);
145 static int unify_pack_expansion (tree, tree, tree, tree, int, bool, bool);
146 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
147 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
148 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
149 static void regenerate_decl_from_template (tree, tree);
150 static tree most_specialized_class (tree, tree);
151 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
152 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
153 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
154 static bool check_specialization_scope (void);
155 static tree process_partial_specialization (tree);
156 static void set_current_access_from_decl (tree);
157 static tree get_template_base (tree, tree, tree, tree);
158 static tree try_class_unification (tree, tree, tree, tree);
159 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
160                                            tree, tree);
161 static int template_args_equal (tree, tree);
162 static void tsubst_default_arguments (tree);
163 static tree for_each_template_parm_r (tree *, int *, void *);
164 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
165 static void copy_default_args_to_explicit_spec (tree);
166 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
167 static int eq_local_specializations (const void *, const void *);
168 static bool dependent_template_arg_p (tree);
169 static bool any_template_arguments_need_structural_equality_p (tree);
170 static bool dependent_type_p_r (tree);
171 static tree tsubst (tree, tree, tsubst_flags_t, tree);
172 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
173 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
174 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
175
176 /* Make the current scope suitable for access checking when we are
177    processing T.  T can be FUNCTION_DECL for instantiated function
178    template, or VAR_DECL for static member variable (need by
179    instantiate_decl).  */
180
181 static void
182 push_access_scope (tree t)
183 {
184   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
185               || TREE_CODE (t) == VAR_DECL);
186
187   if (DECL_FRIEND_CONTEXT (t))
188     push_nested_class (DECL_FRIEND_CONTEXT (t));
189   else if (DECL_CLASS_SCOPE_P (t))
190     push_nested_class (DECL_CONTEXT (t));
191   else
192     push_to_top_level ();
193
194   if (TREE_CODE (t) == FUNCTION_DECL)
195     {
196       saved_access_scope = tree_cons
197         (NULL_TREE, current_function_decl, saved_access_scope);
198       current_function_decl = t;
199     }
200 }
201
202 /* Restore the scope set up by push_access_scope.  T is the node we
203    are processing.  */
204
205 static void
206 pop_access_scope (tree t)
207 {
208   if (TREE_CODE (t) == FUNCTION_DECL)
209     {
210       current_function_decl = TREE_VALUE (saved_access_scope);
211       saved_access_scope = TREE_CHAIN (saved_access_scope);
212     }
213
214   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
215     pop_nested_class ();
216   else
217     pop_from_top_level ();
218 }
219
220 /* Do any processing required when DECL (a member template
221    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
222    to DECL, unless it is a specialization, in which case the DECL
223    itself is returned.  */
224
225 tree
226 finish_member_template_decl (tree decl)
227 {
228   if (decl == error_mark_node)
229     return error_mark_node;
230
231   gcc_assert (DECL_P (decl));
232
233   if (TREE_CODE (decl) == TYPE_DECL)
234     {
235       tree type;
236
237       type = TREE_TYPE (decl);
238       if (IS_AGGR_TYPE (type)
239           && CLASSTYPE_TEMPLATE_INFO (type)
240           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
241         {
242           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
243           check_member_template (tmpl);
244           return tmpl;
245         }
246       return NULL_TREE;
247     }
248   else if (TREE_CODE (decl) == FIELD_DECL)
249     error ("data member %qD cannot be a member template", decl);
250   else if (DECL_TEMPLATE_INFO (decl))
251     {
252       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
253         {
254           check_member_template (DECL_TI_TEMPLATE (decl));
255           return DECL_TI_TEMPLATE (decl);
256         }
257       else
258         return decl;
259     }
260   else
261     error ("invalid member template declaration %qD", decl);
262
263   return error_mark_node;
264 }
265
266 /* Return the template info node corresponding to T, whatever T is.  */
267
268 tree
269 get_template_info (tree t)
270 {
271   tree tinfo = NULL_TREE;
272
273   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
274     tinfo = DECL_TEMPLATE_INFO (t);
275
276   if (!tinfo && TREE_CODE (t) == TYPE_DECL)
277     t = TREE_TYPE (t);
278
279   if (TAGGED_TYPE_P (t))
280     tinfo = TYPE_TEMPLATE_INFO (t);
281
282   return tinfo;
283 }
284
285 /* Returns the template nesting level of the indicated class TYPE.
286
287    For example, in:
288      template <class T>
289      struct A
290      {
291        template <class U>
292        struct B {};
293      };
294
295    A<T>::B<U> has depth two, while A<T> has depth one.
296    Both A<T>::B<int> and A<int>::B<U> have depth one, if
297    they are instantiations, not specializations.
298
299    This function is guaranteed to return 0 if passed NULL_TREE so
300    that, for example, `template_class_depth (current_class_type)' is
301    always safe.  */
302
303 int
304 template_class_depth (tree type)
305 {
306   int depth;
307
308   for (depth = 0;
309        type && TREE_CODE (type) != NAMESPACE_DECL;
310        type = (TREE_CODE (type) == FUNCTION_DECL)
311          ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
312     {
313       tree tinfo = get_template_info (type);
314
315       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
316           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
317         ++depth;
318     }
319
320   return depth;
321 }
322
323 /* Subroutine of maybe_begin_member_template_processing.
324    Returns true if processing DECL needs us to push template parms.  */
325
326 static bool
327 inline_needs_template_parms (tree decl)
328 {
329   if (! DECL_TEMPLATE_INFO (decl))
330     return false;
331
332   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
333           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
334 }
335
336 /* Subroutine of maybe_begin_member_template_processing.
337    Push the template parms in PARMS, starting from LEVELS steps into the
338    chain, and ending at the beginning, since template parms are listed
339    innermost first.  */
340
341 static void
342 push_inline_template_parms_recursive (tree parmlist, int levels)
343 {
344   tree parms = TREE_VALUE (parmlist);
345   int i;
346
347   if (levels > 1)
348     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
349
350   ++processing_template_decl;
351   current_template_parms
352     = tree_cons (size_int (processing_template_decl),
353                  parms, current_template_parms);
354   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
355
356   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
357                NULL);
358   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
359     {
360       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
361
362       if (parm == error_mark_node)
363         continue;
364
365       gcc_assert (DECL_P (parm));
366
367       switch (TREE_CODE (parm))
368         {
369         case TYPE_DECL:
370         case TEMPLATE_DECL:
371           pushdecl (parm);
372           break;
373
374         case PARM_DECL:
375           {
376             /* Make a CONST_DECL as is done in process_template_parm.
377                It is ugly that we recreate this here; the original
378                version built in process_template_parm is no longer
379                available.  */
380             tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
381                                     TREE_TYPE (parm));
382             DECL_ARTIFICIAL (decl) = 1;
383             TREE_CONSTANT (decl) = 1;
384             TREE_INVARIANT (decl) = 1;
385             TREE_READONLY (decl) = 1;
386             DECL_INITIAL (decl) = DECL_INITIAL (parm);
387             SET_DECL_TEMPLATE_PARM_P (decl);
388             pushdecl (decl);
389           }
390           break;
391
392         default:
393           gcc_unreachable ();
394         }
395     }
396 }
397
398 /* Restore the template parameter context for a member template or
399    a friend template defined in a class definition.  */
400
401 void
402 maybe_begin_member_template_processing (tree decl)
403 {
404   tree parms;
405   int levels = 0;
406
407   if (inline_needs_template_parms (decl))
408     {
409       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
410       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
411
412       if (DECL_TEMPLATE_SPECIALIZATION (decl))
413         {
414           --levels;
415           parms = TREE_CHAIN (parms);
416         }
417
418       push_inline_template_parms_recursive (parms, levels);
419     }
420
421   /* Remember how many levels of template parameters we pushed so that
422      we can pop them later.  */
423   VEC_safe_push (int, heap, inline_parm_levels, levels);
424 }
425
426 /* Undo the effects of maybe_begin_member_template_processing.  */
427
428 void
429 maybe_end_member_template_processing (void)
430 {
431   int i;
432   int last;
433
434   if (VEC_length (int, inline_parm_levels) == 0)
435     return;
436
437   last = VEC_pop (int, inline_parm_levels);
438   for (i = 0; i < last; ++i)
439     {
440       --processing_template_decl;
441       current_template_parms = TREE_CHAIN (current_template_parms);
442       poplevel (0, 0, 0);
443     }
444 }
445
446 /* Return a new template argument vector which contains all of ARGS,
447    but has as its innermost set of arguments the EXTRA_ARGS.  */
448
449 static tree
450 add_to_template_args (tree args, tree extra_args)
451 {
452   tree new_args;
453   int extra_depth;
454   int i;
455   int j;
456
457   extra_depth = TMPL_ARGS_DEPTH (extra_args);
458   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
459
460   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
461     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
462
463   for (j = 1; j <= extra_depth; ++j, ++i)
464     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
465
466   return new_args;
467 }
468
469 /* Like add_to_template_args, but only the outermost ARGS are added to
470    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
471    (EXTRA_ARGS) levels are added.  This function is used to combine
472    the template arguments from a partial instantiation with the
473    template arguments used to attain the full instantiation from the
474    partial instantiation.  */
475
476 static tree
477 add_outermost_template_args (tree args, tree extra_args)
478 {
479   tree new_args;
480
481   /* If there are more levels of EXTRA_ARGS than there are ARGS,
482      something very fishy is going on.  */
483   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
484
485   /* If *all* the new arguments will be the EXTRA_ARGS, just return
486      them.  */
487   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
488     return extra_args;
489
490   /* For the moment, we make ARGS look like it contains fewer levels.  */
491   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
492
493   new_args = add_to_template_args (args, extra_args);
494
495   /* Now, we restore ARGS to its full dimensions.  */
496   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
497
498   return new_args;
499 }
500
501 /* Return the N levels of innermost template arguments from the ARGS.  */
502
503 tree
504 get_innermost_template_args (tree args, int n)
505 {
506   tree new_args;
507   int extra_levels;
508   int i;
509
510   gcc_assert (n >= 0);
511
512   /* If N is 1, just return the innermost set of template arguments.  */
513   if (n == 1)
514     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
515
516   /* If we're not removing anything, just return the arguments we were
517      given.  */
518   extra_levels = TMPL_ARGS_DEPTH (args) - n;
519   gcc_assert (extra_levels >= 0);
520   if (extra_levels == 0)
521     return args;
522
523   /* Make a new set of arguments, not containing the outer arguments.  */
524   new_args = make_tree_vec (n);
525   for (i = 1; i <= n; ++i)
526     SET_TMPL_ARGS_LEVEL (new_args, i,
527                          TMPL_ARGS_LEVEL (args, i + extra_levels));
528
529   return new_args;
530 }
531
532 /* The inverse of get_innermost_template_args: Return all but the innermost
533    EXTRA_LEVELS levels of template arguments from the ARGS.  */
534
535 static tree
536 strip_innermost_template_args (tree args, int extra_levels)
537 {
538   tree new_args;
539   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
540   int i;
541
542   gcc_assert (n >= 0);
543
544   /* If N is 1, just return the outermost set of template arguments.  */
545   if (n == 1)
546     return TMPL_ARGS_LEVEL (args, 1);
547
548   /* If we're not removing anything, just return the arguments we were
549      given.  */
550   gcc_assert (extra_levels >= 0);
551   if (extra_levels == 0)
552     return args;
553
554   /* Make a new set of arguments, not containing the inner arguments.  */
555   new_args = make_tree_vec (n);
556   for (i = 1; i <= n; ++i)
557     SET_TMPL_ARGS_LEVEL (new_args, i,
558                          TMPL_ARGS_LEVEL (args, i));
559
560   return new_args;
561 }
562
563 /* We've got a template header coming up; push to a new level for storing
564    the parms.  */
565
566 void
567 begin_template_parm_list (void)
568 {
569   /* We use a non-tag-transparent scope here, which causes pushtag to
570      put tags in this scope, rather than in the enclosing class or
571      namespace scope.  This is the right thing, since we want
572      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
573      global template class, push_template_decl handles putting the
574      TEMPLATE_DECL into top-level scope.  For a nested template class,
575      e.g.:
576
577        template <class T> struct S1 {
578          template <class T> struct S2 {};
579        };
580
581      pushtag contains special code to call pushdecl_with_scope on the
582      TEMPLATE_DECL for S2.  */
583   begin_scope (sk_template_parms, NULL);
584   ++processing_template_decl;
585   ++processing_template_parmlist;
586   note_template_header (0);
587 }
588
589 /* This routine is called when a specialization is declared.  If it is
590    invalid to declare a specialization here, an error is reported and
591    false is returned, otherwise this routine will return true.  */
592
593 static bool
594 check_specialization_scope (void)
595 {
596   tree scope = current_scope ();
597
598   /* [temp.expl.spec]
599
600      An explicit specialization shall be declared in the namespace of
601      which the template is a member, or, for member templates, in the
602      namespace of which the enclosing class or enclosing class
603      template is a member.  An explicit specialization of a member
604      function, member class or static data member of a class template
605      shall be declared in the namespace of which the class template
606      is a member.  */
607   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
608     {
609       error ("explicit specialization in non-namespace scope %qD", scope);
610       return false;
611     }
612
613   /* [temp.expl.spec]
614
615      In an explicit specialization declaration for a member of a class
616      template or a member template that appears in namespace scope,
617      the member template and some of its enclosing class templates may
618      remain unspecialized, except that the declaration shall not
619      explicitly specialize a class member template if its enclosing
620      class templates are not explicitly specialized as well.  */
621   if (current_template_parms)
622     {
623       error ("enclosing class templates are not explicitly specialized");
624       return false;
625     }
626
627   return true;
628 }
629
630 /* We've just seen template <>.  */
631
632 bool
633 begin_specialization (void)
634 {
635   begin_scope (sk_template_spec, NULL);
636   note_template_header (1);
637   return check_specialization_scope ();
638 }
639
640 /* Called at then end of processing a declaration preceded by
641    template<>.  */
642
643 void
644 end_specialization (void)
645 {
646   finish_scope ();
647   reset_specialization ();
648 }
649
650 /* Any template <>'s that we have seen thus far are not referring to a
651    function specialization.  */
652
653 void
654 reset_specialization (void)
655 {
656   processing_specialization = 0;
657   template_header_count = 0;
658 }
659
660 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
661    it was of the form template <>.  */
662
663 static void
664 note_template_header (int specialization)
665 {
666   processing_specialization = specialization;
667   template_header_count++;
668 }
669
670 /* We're beginning an explicit instantiation.  */
671
672 void
673 begin_explicit_instantiation (void)
674 {
675   gcc_assert (!processing_explicit_instantiation);
676   processing_explicit_instantiation = true;
677 }
678
679
680 void
681 end_explicit_instantiation (void)
682 {
683   gcc_assert (processing_explicit_instantiation);
684   processing_explicit_instantiation = false;
685 }
686
687 /* An explicit specialization or partial specialization TMPL is being
688    declared.  Check that the namespace in which the specialization is
689    occurring is permissible.  Returns false iff it is invalid to
690    specialize TMPL in the current namespace.  */
691
692 static bool
693 check_specialization_namespace (tree tmpl)
694 {
695   tree tpl_ns = decl_namespace_context (tmpl);
696
697   /* [tmpl.expl.spec]
698
699      An explicit specialization shall be declared in the namespace of
700      which the template is a member, or, for member templates, in the
701      namespace of which the enclosing class or enclosing class
702      template is a member.  An explicit specialization of a member
703      function, member class or static data member of a class template
704      shall be declared in the namespace of which the class template is
705      a member.  */
706   if (is_associated_namespace (current_namespace, tpl_ns))
707     /* Same or super-using namespace.  */
708     return true;
709   else
710     {
711       pedwarn ("specialization of %qD in different namespace", tmpl);
712       pedwarn ("  from definition of %q+#D", tmpl);
713       return false;
714     }
715 }
716
717 /* SPEC is an explicit instantiation.  Check that it is valid to
718    perform this explicit instantiation in the current namespace.  */
719
720 static void
721 check_explicit_instantiation_namespace (tree spec)
722 {
723   tree ns;
724
725   /* DR 275: An explicit instantiation shall appear in an enclosing
726      namespace of its template.  */
727   ns = decl_namespace_context (spec);
728   if (!is_ancestor (current_namespace, ns))
729     pedwarn ("explicit instantiation of %qD in namespace %qD "
730              "(which does not enclose namespace %qD)",
731              spec, current_namespace, ns);
732 }
733
734 /* The TYPE is being declared.  If it is a template type, that means it
735    is a partial specialization.  Do appropriate error-checking.  */
736
737 tree
738 maybe_process_partial_specialization (tree type)
739 {
740   tree context;
741
742   if (type == error_mark_node)
743     return error_mark_node;
744
745   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
746     {
747       error ("name of class shadows template template parameter %qD",
748              TYPE_NAME (type));
749       return error_mark_node;
750     }
751
752   context = TYPE_CONTEXT (type);
753
754   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
755     {
756       /* This is for ordinary explicit specialization and partial
757          specialization of a template class such as:
758
759            template <> class C<int>;
760
761          or:
762
763            template <class T> class C<T*>;
764
765          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
766
767       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
768           && !COMPLETE_TYPE_P (type))
769         {
770           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
771           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
772           if (processing_template_decl)
773             push_template_decl (TYPE_MAIN_DECL (type));
774         }
775       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
776         error ("specialization of %qT after instantiation", type);
777     }
778   else if (CLASS_TYPE_P (type)
779            && !CLASSTYPE_USE_TEMPLATE (type)
780            && CLASSTYPE_TEMPLATE_INFO (type)
781            && context && CLASS_TYPE_P (context)
782            && CLASSTYPE_TEMPLATE_INFO (context))
783     {
784       /* This is for an explicit specialization of member class
785          template according to [temp.expl.spec/18]:
786
787            template <> template <class U> class C<int>::D;
788
789          The context `C<int>' must be an implicit instantiation.
790          Otherwise this is just a member class template declared
791          earlier like:
792
793            template <> class C<int> { template <class U> class D; };
794            template <> template <class U> class C<int>::D;
795
796          In the first case, `C<int>::D' is a specialization of `C<T>::D'
797          while in the second case, `C<int>::D' is a primary template
798          and `C<T>::D' may not exist.  */
799
800       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
801           && !COMPLETE_TYPE_P (type))
802         {
803           tree t;
804
805           if (current_namespace
806               != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
807             {
808               pedwarn ("specializing %q#T in different namespace", type);
809               pedwarn ("  from definition of %q+#D",
810                        CLASSTYPE_TI_TEMPLATE (type));
811             }
812
813           /* Check for invalid specialization after instantiation:
814
815                template <> template <> class C<int>::D<int>;
816                template <> template <class U> class C<int>::D;  */
817
818           for (t = DECL_TEMPLATE_INSTANTIATIONS
819                  (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
820                t; t = TREE_CHAIN (t))
821             if (TREE_VALUE (t) != type
822                 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
823               error ("specialization %qT after instantiation %qT",
824                      type, TREE_VALUE (t));
825
826           /* Mark TYPE as a specialization.  And as a result, we only
827              have one level of template argument for the innermost
828              class template.  */
829           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
830           CLASSTYPE_TI_ARGS (type)
831             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
832         }
833     }
834   else if (processing_specialization)
835     {
836       error ("explicit specialization of non-template %qT", type);
837       return error_mark_node;
838     }
839
840   return type;
841 }
842
843 /* Returns nonzero if we can optimize the retrieval of specializations
844    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
845    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
846
847 static inline bool
848 optimize_specialization_lookup_p (tree tmpl)
849 {
850   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
851           && DECL_CLASS_SCOPE_P (tmpl)
852           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
853              parameter.  */
854           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
855           /* The optimized lookup depends on the fact that the
856              template arguments for the member function template apply
857              purely to the containing class, which is not true if the
858              containing class is an explicit or partial
859              specialization.  */
860           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
861           && !DECL_MEMBER_TEMPLATE_P (tmpl)
862           && !DECL_CONV_FN_P (tmpl)
863           /* It is possible to have a template that is not a member
864              template and is not a member of a template class:
865
866              template <typename T>
867              struct S { friend A::f(); };
868
869              Here, the friend function is a template, but the context does
870              not have template information.  The optimized lookup relies
871              on having ARGS be the template arguments for both the class
872              and the function template.  */
873           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
874 }
875
876 /* Retrieve the specialization (in the sense of [temp.spec] - a
877    specialization is either an instantiation or an explicit
878    specialization) of TMPL for the given template ARGS.  If there is
879    no such specialization, return NULL_TREE.  The ARGS are a vector of
880    arguments, or a vector of vectors of arguments, in the case of
881    templates with more than one level of parameters.
882
883    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
884    then we search for a partial specialization matching ARGS.  This
885    parameter is ignored if TMPL is not a class template.  */
886
887 static tree
888 retrieve_specialization (tree tmpl, tree args,
889                          bool class_specializations_p)
890 {
891   if (args == error_mark_node)
892     return NULL_TREE;
893
894   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
895
896   /* There should be as many levels of arguments as there are
897      levels of parameters.  */
898   gcc_assert (TMPL_ARGS_DEPTH (args)
899               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
900
901   if (optimize_specialization_lookup_p (tmpl))
902     {
903       tree class_template;
904       tree class_specialization;
905       VEC(tree,gc) *methods;
906       tree fns;
907       int idx;
908
909       /* The template arguments actually apply to the containing
910          class.  Find the class specialization with those
911          arguments.  */
912       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
913       class_specialization
914         = retrieve_specialization (class_template, args,
915                                    /*class_specializations_p=*/false);
916       if (!class_specialization)
917         return NULL_TREE;
918       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
919          for the specialization.  */
920       idx = class_method_index_for_fn (class_specialization, tmpl);
921       if (idx == -1)
922         return NULL_TREE;
923       /* Iterate through the methods with the indicated name, looking
924          for the one that has an instance of TMPL.  */
925       methods = CLASSTYPE_METHOD_VEC (class_specialization);
926       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
927         {
928           tree fn = OVL_CURRENT (fns);
929           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
930             return fn;
931         }
932       return NULL_TREE;
933     }
934   else
935     {
936       tree *sp;
937       tree *head;
938
939       /* Class templates store their instantiations on the
940          DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
941          DECL_TEMPLATE_SPECIALIZATIONS list.  */
942       if (!class_specializations_p
943           && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL
944           && TAGGED_TYPE_P (TREE_TYPE (tmpl)))
945         sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
946       else
947         sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
948       head = sp;
949       /* Iterate through the list until we find a matching template.  */
950       while (*sp != NULL_TREE)
951         {
952           tree spec = *sp;
953
954           if (comp_template_args (TREE_PURPOSE (spec), args))
955             {
956               /* Use the move-to-front heuristic to speed up future
957                  searches.  */
958               if (spec != *head)
959                 {
960                   *sp = TREE_CHAIN (*sp);
961                   TREE_CHAIN (spec) = *head;
962                   *head = spec;
963                 }
964               return TREE_VALUE (spec);
965             }
966           sp = &TREE_CHAIN (spec);
967         }
968     }
969
970   return NULL_TREE;
971 }
972
973 /* Like retrieve_specialization, but for local declarations.  */
974
975 static tree
976 retrieve_local_specialization (tree tmpl)
977 {
978   tree spec = (tree) htab_find_with_hash (local_specializations, tmpl,
979                                           htab_hash_pointer (tmpl));
980   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
981 }
982
983 /* Returns nonzero iff DECL is a specialization of TMPL.  */
984
985 int
986 is_specialization_of (tree decl, tree tmpl)
987 {
988   tree t;
989
990   if (TREE_CODE (decl) == FUNCTION_DECL)
991     {
992       for (t = decl;
993            t != NULL_TREE;
994            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
995         if (t == tmpl)
996           return 1;
997     }
998   else
999     {
1000       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1001
1002       for (t = TREE_TYPE (decl);
1003            t != NULL_TREE;
1004            t = CLASSTYPE_USE_TEMPLATE (t)
1005              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1006         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1007           return 1;
1008     }
1009
1010   return 0;
1011 }
1012
1013 /* Returns nonzero iff DECL is a specialization of friend declaration
1014    FRIEND according to [temp.friend].  */
1015
1016 bool
1017 is_specialization_of_friend (tree decl, tree friend)
1018 {
1019   bool need_template = true;
1020   int template_depth;
1021
1022   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1023               || TREE_CODE (decl) == TYPE_DECL);
1024
1025   /* For [temp.friend/6] when FRIEND is an ordinary member function
1026      of a template class, we want to check if DECL is a specialization
1027      if this.  */
1028   if (TREE_CODE (friend) == FUNCTION_DECL
1029       && DECL_TEMPLATE_INFO (friend)
1030       && !DECL_USE_TEMPLATE (friend))
1031     {
1032       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1033       friend = DECL_TI_TEMPLATE (friend);
1034       need_template = false;
1035     }
1036   else if (TREE_CODE (friend) == TEMPLATE_DECL
1037            && !PRIMARY_TEMPLATE_P (friend))
1038     need_template = false;
1039
1040   /* There is nothing to do if this is not a template friend.  */
1041   if (TREE_CODE (friend) != TEMPLATE_DECL)
1042     return false;
1043
1044   if (is_specialization_of (decl, friend))
1045     return true;
1046
1047   /* [temp.friend/6]
1048      A member of a class template may be declared to be a friend of a
1049      non-template class.  In this case, the corresponding member of
1050      every specialization of the class template is a friend of the
1051      class granting friendship.
1052
1053      For example, given a template friend declaration
1054
1055        template <class T> friend void A<T>::f();
1056
1057      the member function below is considered a friend
1058
1059        template <> struct A<int> {
1060          void f();
1061        };
1062
1063      For this type of template friend, TEMPLATE_DEPTH below will be
1064      nonzero.  To determine if DECL is a friend of FRIEND, we first
1065      check if the enclosing class is a specialization of another.  */
1066
1067   template_depth = template_class_depth (DECL_CONTEXT (friend));
1068   if (template_depth
1069       && DECL_CLASS_SCOPE_P (decl)
1070       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1071                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
1072     {
1073       /* Next, we check the members themselves.  In order to handle
1074          a few tricky cases, such as when FRIEND's are
1075
1076            template <class T> friend void A<T>::g(T t);
1077            template <class T> template <T t> friend void A<T>::h();
1078
1079          and DECL's are
1080
1081            void A<int>::g(int);
1082            template <int> void A<int>::h();
1083
1084          we need to figure out ARGS, the template arguments from
1085          the context of DECL.  This is required for template substitution
1086          of `T' in the function parameter of `g' and template parameter
1087          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1088
1089       tree context = DECL_CONTEXT (decl);
1090       tree args = NULL_TREE;
1091       int current_depth = 0;
1092
1093       while (current_depth < template_depth)
1094         {
1095           if (CLASSTYPE_TEMPLATE_INFO (context))
1096             {
1097               if (current_depth == 0)
1098                 args = TYPE_TI_ARGS (context);
1099               else
1100                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1101               current_depth++;
1102             }
1103           context = TYPE_CONTEXT (context);
1104         }
1105
1106       if (TREE_CODE (decl) == FUNCTION_DECL)
1107         {
1108           bool is_template;
1109           tree friend_type;
1110           tree decl_type;
1111           tree friend_args_type;
1112           tree decl_args_type;
1113
1114           /* Make sure that both DECL and FRIEND are templates or
1115              non-templates.  */
1116           is_template = DECL_TEMPLATE_INFO (decl)
1117                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1118           if (need_template ^ is_template)
1119             return false;
1120           else if (is_template)
1121             {
1122               /* If both are templates, check template parameter list.  */
1123               tree friend_parms
1124                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1125                                          args, tf_none);
1126               if (!comp_template_parms
1127                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1128                       friend_parms))
1129                 return false;
1130
1131               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1132             }
1133           else
1134             decl_type = TREE_TYPE (decl);
1135
1136           friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1137                                               tf_none, NULL_TREE);
1138           if (friend_type == error_mark_node)
1139             return false;
1140
1141           /* Check if return types match.  */
1142           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1143             return false;
1144
1145           /* Check if function parameter types match, ignoring the
1146              `this' parameter.  */
1147           friend_args_type = TYPE_ARG_TYPES (friend_type);
1148           decl_args_type = TYPE_ARG_TYPES (decl_type);
1149           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1150             friend_args_type = TREE_CHAIN (friend_args_type);
1151           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1152             decl_args_type = TREE_CHAIN (decl_args_type);
1153
1154           return compparms (decl_args_type, friend_args_type);
1155         }
1156       else
1157         {
1158           /* DECL is a TYPE_DECL */
1159           bool is_template;
1160           tree decl_type = TREE_TYPE (decl);
1161
1162           /* Make sure that both DECL and FRIEND are templates or
1163              non-templates.  */
1164           is_template
1165             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1166               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1167
1168           if (need_template ^ is_template)
1169             return false;
1170           else if (is_template)
1171             {
1172               tree friend_parms;
1173               /* If both are templates, check the name of the two
1174                  TEMPLATE_DECL's first because is_friend didn't.  */
1175               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1176                   != DECL_NAME (friend))
1177                 return false;
1178
1179               /* Now check template parameter list.  */
1180               friend_parms
1181                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1182                                          args, tf_none);
1183               return comp_template_parms
1184                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1185                  friend_parms);
1186             }
1187           else
1188             return (DECL_NAME (decl)
1189                     == DECL_NAME (friend));
1190         }
1191     }
1192   return false;
1193 }
1194
1195 /* Register the specialization SPEC as a specialization of TMPL with
1196    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1197    is actually just a friend declaration.  Returns SPEC, or an
1198    equivalent prior declaration, if available.  */
1199
1200 static tree
1201 register_specialization (tree spec, tree tmpl, tree args, bool is_friend)
1202 {
1203   tree fn;
1204
1205   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1206
1207   if (TREE_CODE (spec) == FUNCTION_DECL
1208       && uses_template_parms (DECL_TI_ARGS (spec)))
1209     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1210        register it; we want the corresponding TEMPLATE_DECL instead.
1211        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1212        the more obvious `uses_template_parms (spec)' to avoid problems
1213        with default function arguments.  In particular, given
1214        something like this:
1215
1216           template <class T> void f(T t1, T t = T())
1217
1218        the default argument expression is not substituted for in an
1219        instantiation unless and until it is actually needed.  */
1220     return spec;
1221
1222   fn = retrieve_specialization (tmpl, args,
1223                                 /*class_specializations_p=*/false);
1224   /* We can sometimes try to re-register a specialization that we've
1225      already got.  In particular, regenerate_decl_from_template calls
1226      duplicate_decls which will update the specialization list.  But,
1227      we'll still get called again here anyhow.  It's more convenient
1228      to simply allow this than to try to prevent it.  */
1229   if (fn == spec)
1230     return spec;
1231   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1232     {
1233       if (DECL_TEMPLATE_INSTANTIATION (fn))
1234         {
1235           if (TREE_USED (fn)
1236               || DECL_EXPLICIT_INSTANTIATION (fn))
1237             {
1238               error ("specialization of %qD after instantiation",
1239                      fn);
1240               return error_mark_node;
1241             }
1242           else
1243             {
1244               tree clone;
1245               /* This situation should occur only if the first
1246                  specialization is an implicit instantiation, the
1247                  second is an explicit specialization, and the
1248                  implicit instantiation has not yet been used.  That
1249                  situation can occur if we have implicitly
1250                  instantiated a member function and then specialized
1251                  it later.
1252
1253                  We can also wind up here if a friend declaration that
1254                  looked like an instantiation turns out to be a
1255                  specialization:
1256
1257                    template <class T> void foo(T);
1258                    class S { friend void foo<>(int) };
1259                    template <> void foo(int);
1260
1261                  We transform the existing DECL in place so that any
1262                  pointers to it become pointers to the updated
1263                  declaration.
1264
1265                  If there was a definition for the template, but not
1266                  for the specialization, we want this to look as if
1267                  there were no definition, and vice versa.  */
1268               DECL_INITIAL (fn) = NULL_TREE;
1269               duplicate_decls (spec, fn, is_friend);
1270               /* The call to duplicate_decls will have applied
1271                  [temp.expl.spec]:
1272
1273                    An explicit specialization of a function template
1274                    is inline only if it is explicitly declared to be,
1275                    and independently of whether its function template
1276                    is.
1277
1278                 to the primary function; now copy the inline bits to
1279                 the various clones.  */
1280               FOR_EACH_CLONE (clone, fn)
1281                 {
1282                   DECL_DECLARED_INLINE_P (clone)
1283                     = DECL_DECLARED_INLINE_P (fn);
1284                   DECL_INLINE (clone)
1285                     = DECL_INLINE (fn);
1286                 }
1287               check_specialization_namespace (fn);
1288
1289               return fn;
1290             }
1291         }
1292       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1293         {
1294           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1295             /* Dup decl failed, but this is a new definition. Set the
1296                line number so any errors match this new
1297                definition.  */
1298             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1299
1300           return fn;
1301         }
1302     }
1303
1304   /* A specialization must be declared in the same namespace as the
1305      template it is specializing.  */
1306   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1307       && !check_specialization_namespace (tmpl))
1308     DECL_CONTEXT (spec) = FROB_CONTEXT (decl_namespace_context (tmpl));
1309
1310   if (!optimize_specialization_lookup_p (tmpl))
1311     DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1312       = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1313
1314   return spec;
1315 }
1316
1317 /* Unregister the specialization SPEC as a specialization of TMPL.
1318    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1319    if the SPEC was listed as a specialization of TMPL.  */
1320
1321 bool
1322 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1323 {
1324   tree* s;
1325
1326   for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1327        *s != NULL_TREE;
1328        s = &TREE_CHAIN (*s))
1329     if (TREE_VALUE (*s) == spec)
1330       {
1331         if (!new_spec)
1332           *s = TREE_CHAIN (*s);
1333         else
1334           TREE_VALUE (*s) = new_spec;
1335         return 1;
1336       }
1337
1338   return 0;
1339 }
1340
1341 /* Compare an entry in the local specializations hash table P1 (which
1342    is really a pointer to a TREE_LIST) with P2 (which is really a
1343    DECL).  */
1344
1345 static int
1346 eq_local_specializations (const void *p1, const void *p2)
1347 {
1348   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1349 }
1350
1351 /* Hash P1, an entry in the local specializations table.  */
1352
1353 static hashval_t
1354 hash_local_specialization (const void* p1)
1355 {
1356   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1357 }
1358
1359 /* Like register_specialization, but for local declarations.  We are
1360    registering SPEC, an instantiation of TMPL.  */
1361
1362 static void
1363 register_local_specialization (tree spec, tree tmpl)
1364 {
1365   void **slot;
1366
1367   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1368                                    htab_hash_pointer (tmpl), INSERT);
1369   *slot = build_tree_list (spec, tmpl);
1370 }
1371
1372 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1373    specialized class.  */
1374
1375 bool
1376 explicit_class_specialization_p (tree type)
1377 {
1378   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1379     return false;
1380   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1381 }
1382
1383 /* Print the list of candidate FNS in an error message.  */
1384
1385 void
1386 print_candidates (tree fns)
1387 {
1388   tree fn;
1389
1390   const char *str = "candidates are:";
1391
1392   for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1393     {
1394       tree f;
1395
1396       for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1397         error ("%s %+#D", str, OVL_CURRENT (f));
1398       str = "               ";
1399     }
1400 }
1401
1402 /* Returns the template (one of the functions given by TEMPLATE_ID)
1403    which can be specialized to match the indicated DECL with the
1404    explicit template args given in TEMPLATE_ID.  The DECL may be
1405    NULL_TREE if none is available.  In that case, the functions in
1406    TEMPLATE_ID are non-members.
1407
1408    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1409    specialization of a member template.
1410
1411    The TEMPLATE_COUNT is the number of references to qualifying
1412    template classes that appeared in the name of the function. See
1413    check_explicit_specialization for a more accurate description.
1414
1415    TSK indicates what kind of template declaration (if any) is being
1416    declared.  TSK_TEMPLATE indicates that the declaration given by
1417    DECL, though a FUNCTION_DECL, has template parameters, and is
1418    therefore a template function.
1419
1420    The template args (those explicitly specified and those deduced)
1421    are output in a newly created vector *TARGS_OUT.
1422
1423    If it is impossible to determine the result, an error message is
1424    issued.  The error_mark_node is returned to indicate failure.  */
1425
1426 static tree
1427 determine_specialization (tree template_id,
1428                           tree decl,
1429                           tree* targs_out,
1430                           int need_member_template,
1431                           int template_count,
1432                           tmpl_spec_kind tsk)
1433 {
1434   tree fns;
1435   tree targs;
1436   tree explicit_targs;
1437   tree candidates = NULL_TREE;
1438   /* A TREE_LIST of templates of which DECL may be a specialization.
1439      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1440      corresponding TREE_PURPOSE is the set of template arguments that,
1441      when used to instantiate the template, would produce a function
1442      with the signature of DECL.  */
1443   tree templates = NULL_TREE;
1444   int header_count;
1445   struct cp_binding_level *b;
1446
1447   *targs_out = NULL_TREE;
1448
1449   if (template_id == error_mark_node || decl == error_mark_node)
1450     return error_mark_node;
1451
1452   fns = TREE_OPERAND (template_id, 0);
1453   explicit_targs = TREE_OPERAND (template_id, 1);
1454
1455   if (fns == error_mark_node)
1456     return error_mark_node;
1457
1458   /* Check for baselinks.  */
1459   if (BASELINK_P (fns))
1460     fns = BASELINK_FUNCTIONS (fns);
1461
1462   if (!is_overloaded_fn (fns))
1463     {
1464       error ("%qD is not a function template", fns);
1465       return error_mark_node;
1466     }
1467
1468   /* Count the number of template headers specified for this
1469      specialization.  */
1470   header_count = 0;
1471   for (b = current_binding_level;
1472        b->kind == sk_template_parms;
1473        b = b->level_chain)
1474     ++header_count;
1475
1476   for (; fns; fns = OVL_NEXT (fns))
1477     {
1478       tree fn = OVL_CURRENT (fns);
1479
1480       if (TREE_CODE (fn) == TEMPLATE_DECL)
1481         {
1482           tree decl_arg_types;
1483           tree fn_arg_types;
1484
1485           /* In case of explicit specialization, we need to check if
1486              the number of template headers appearing in the specialization
1487              is correct. This is usually done in check_explicit_specialization,
1488              but the check done there cannot be exhaustive when specializing
1489              member functions. Consider the following code:
1490
1491              template <> void A<int>::f(int);
1492              template <> template <> void A<int>::f(int);
1493
1494              Assuming that A<int> is not itself an explicit specialization
1495              already, the first line specializes "f" which is a non-template
1496              member function, whilst the second line specializes "f" which
1497              is a template member function. So both lines are syntactically
1498              correct, and check_explicit_specialization does not reject
1499              them.
1500
1501              Here, we can do better, as we are matching the specialization
1502              against the declarations. We count the number of template
1503              headers, and we check if they match TEMPLATE_COUNT + 1
1504              (TEMPLATE_COUNT is the number of qualifying template classes,
1505              plus there must be another header for the member template
1506              itself).
1507
1508              Notice that if header_count is zero, this is not a
1509              specialization but rather a template instantiation, so there
1510              is no check we can perform here.  */
1511           if (header_count && header_count != template_count + 1)
1512             continue;
1513
1514           /* Check that the number of template arguments at the
1515              innermost level for DECL is the same as for FN.  */
1516           if (current_binding_level->kind == sk_template_parms
1517               && !current_binding_level->explicit_spec_p
1518               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1519                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1520                                       (current_template_parms))))
1521             continue;
1522
1523           /* DECL might be a specialization of FN.  */
1524           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1525           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1526
1527           /* For a non-static member function, we need to make sure
1528              that the const qualification is the same.  Since
1529              get_bindings does not try to merge the "this" parameter,
1530              we must do the comparison explicitly.  */
1531           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1532               && !same_type_p (TREE_VALUE (fn_arg_types),
1533                                TREE_VALUE (decl_arg_types)))
1534             continue;
1535
1536           /* Skip the "this" parameter and, for constructors of
1537              classes with virtual bases, the VTT parameter.  A
1538              full specialization of a constructor will have a VTT
1539              parameter, but a template never will.  */ 
1540           decl_arg_types 
1541             = skip_artificial_parms_for (decl, decl_arg_types);
1542           fn_arg_types 
1543             = skip_artificial_parms_for (fn, fn_arg_types);
1544
1545           /* Check that the number of function parameters matches.
1546              For example,
1547                template <class T> void f(int i = 0);
1548                template <> void f<int>();
1549              The specialization f<int> is invalid but is not caught
1550              by get_bindings below.  */
1551           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1552             continue;
1553
1554           /* Function templates cannot be specializations; there are
1555              no partial specializations of functions.  Therefore, if
1556              the type of DECL does not match FN, there is no
1557              match.  */
1558           if (tsk == tsk_template)
1559             {
1560               if (compparms (fn_arg_types, decl_arg_types))
1561                 candidates = tree_cons (NULL_TREE, fn, candidates);
1562               continue;
1563             }
1564
1565           /* See whether this function might be a specialization of this
1566              template.  */
1567           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1568
1569           if (!targs)
1570             /* We cannot deduce template arguments that when used to
1571                specialize TMPL will produce DECL.  */
1572             continue;
1573
1574           /* Save this template, and the arguments deduced.  */
1575           templates = tree_cons (targs, fn, templates);
1576         }
1577       else if (need_member_template)
1578         /* FN is an ordinary member function, and we need a
1579            specialization of a member template.  */
1580         ;
1581       else if (TREE_CODE (fn) != FUNCTION_DECL)
1582         /* We can get IDENTIFIER_NODEs here in certain erroneous
1583            cases.  */
1584         ;
1585       else if (!DECL_FUNCTION_MEMBER_P (fn))
1586         /* This is just an ordinary non-member function.  Nothing can
1587            be a specialization of that.  */
1588         ;
1589       else if (DECL_ARTIFICIAL (fn))
1590         /* Cannot specialize functions that are created implicitly.  */
1591         ;
1592       else
1593         {
1594           tree decl_arg_types;
1595
1596           /* This is an ordinary member function.  However, since
1597              we're here, we can assume it's enclosing class is a
1598              template class.  For example,
1599
1600                template <typename T> struct S { void f(); };
1601                template <> void S<int>::f() {}
1602
1603              Here, S<int>::f is a non-template, but S<int> is a
1604              template class.  If FN has the same type as DECL, we
1605              might be in business.  */
1606
1607           if (!DECL_TEMPLATE_INFO (fn))
1608             /* Its enclosing class is an explicit specialization
1609                of a template class.  This is not a candidate.  */
1610             continue;
1611
1612           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1613                             TREE_TYPE (TREE_TYPE (fn))))
1614             /* The return types differ.  */
1615             continue;
1616
1617           /* Adjust the type of DECL in case FN is a static member.  */
1618           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1619           if (DECL_STATIC_FUNCTION_P (fn)
1620               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1621             decl_arg_types = TREE_CHAIN (decl_arg_types);
1622
1623           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1624                          decl_arg_types))
1625             /* They match!  */
1626             candidates = tree_cons (NULL_TREE, fn, candidates);
1627         }
1628     }
1629
1630   if (templates && TREE_CHAIN (templates))
1631     {
1632       /* We have:
1633
1634            [temp.expl.spec]
1635
1636            It is possible for a specialization with a given function
1637            signature to be instantiated from more than one function
1638            template.  In such cases, explicit specification of the
1639            template arguments must be used to uniquely identify the
1640            function template specialization being specialized.
1641
1642          Note that here, there's no suggestion that we're supposed to
1643          determine which of the candidate templates is most
1644          specialized.  However, we, also have:
1645
1646            [temp.func.order]
1647
1648            Partial ordering of overloaded function template
1649            declarations is used in the following contexts to select
1650            the function template to which a function template
1651            specialization refers:
1652
1653            -- when an explicit specialization refers to a function
1654               template.
1655
1656          So, we do use the partial ordering rules, at least for now.
1657          This extension can only serve to make invalid programs valid,
1658          so it's safe.  And, there is strong anecdotal evidence that
1659          the committee intended the partial ordering rules to apply;
1660          the EDG front end has that behavior, and John Spicer claims
1661          that the committee simply forgot to delete the wording in
1662          [temp.expl.spec].  */
1663       tree tmpl = most_specialized_instantiation (templates);
1664       if (tmpl != error_mark_node)
1665         {
1666           templates = tmpl;
1667           TREE_CHAIN (templates) = NULL_TREE;
1668         }
1669     }
1670
1671   if (templates == NULL_TREE && candidates == NULL_TREE)
1672     {
1673       error ("template-id %qD for %q+D does not match any template "
1674              "declaration", template_id, decl);
1675       return error_mark_node;
1676     }
1677   else if ((templates && TREE_CHAIN (templates))
1678            || (candidates && TREE_CHAIN (candidates))
1679            || (templates && candidates))
1680     {
1681       error ("ambiguous template specialization %qD for %q+D",
1682              template_id, decl);
1683       chainon (candidates, templates);
1684       print_candidates (candidates);
1685       return error_mark_node;
1686     }
1687
1688   /* We have one, and exactly one, match.  */
1689   if (candidates)
1690     {
1691       tree fn = TREE_VALUE (candidates);
1692       /* DECL is a re-declaration of a template function.  */
1693       if (TREE_CODE (fn) == TEMPLATE_DECL)
1694         return fn;
1695       /* It was a specialization of an ordinary member function in a
1696          template class.  */
1697       *targs_out = copy_node (DECL_TI_ARGS (fn));
1698       return DECL_TI_TEMPLATE (fn);
1699     }
1700
1701   /* It was a specialization of a template.  */
1702   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1703   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1704     {
1705       *targs_out = copy_node (targs);
1706       SET_TMPL_ARGS_LEVEL (*targs_out,
1707                            TMPL_ARGS_DEPTH (*targs_out),
1708                            TREE_PURPOSE (templates));
1709     }
1710   else
1711     *targs_out = TREE_PURPOSE (templates);
1712   return TREE_VALUE (templates);
1713 }
1714
1715 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1716    but with the default argument values filled in from those in the
1717    TMPL_TYPES.  */
1718
1719 static tree
1720 copy_default_args_to_explicit_spec_1 (tree spec_types,
1721                                       tree tmpl_types)
1722 {
1723   tree new_spec_types;
1724
1725   if (!spec_types)
1726     return NULL_TREE;
1727
1728   if (spec_types == void_list_node)
1729     return void_list_node;
1730
1731   /* Substitute into the rest of the list.  */
1732   new_spec_types =
1733     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1734                                           TREE_CHAIN (tmpl_types));
1735
1736   /* Add the default argument for this parameter.  */
1737   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1738                          TREE_VALUE (spec_types),
1739                          new_spec_types);
1740 }
1741
1742 /* DECL is an explicit specialization.  Replicate default arguments
1743    from the template it specializes.  (That way, code like:
1744
1745      template <class T> void f(T = 3);
1746      template <> void f(double);
1747      void g () { f (); }
1748
1749    works, as required.)  An alternative approach would be to look up
1750    the correct default arguments at the call-site, but this approach
1751    is consistent with how implicit instantiations are handled.  */
1752
1753 static void
1754 copy_default_args_to_explicit_spec (tree decl)
1755 {
1756   tree tmpl;
1757   tree spec_types;
1758   tree tmpl_types;
1759   tree new_spec_types;
1760   tree old_type;
1761   tree new_type;
1762   tree t;
1763   tree object_type = NULL_TREE;
1764   tree in_charge = NULL_TREE;
1765   tree vtt = NULL_TREE;
1766
1767   /* See if there's anything we need to do.  */
1768   tmpl = DECL_TI_TEMPLATE (decl);
1769   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1770   for (t = tmpl_types; t; t = TREE_CHAIN (t))
1771     if (TREE_PURPOSE (t))
1772       break;
1773   if (!t)
1774     return;
1775
1776   old_type = TREE_TYPE (decl);
1777   spec_types = TYPE_ARG_TYPES (old_type);
1778
1779   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1780     {
1781       /* Remove the this pointer, but remember the object's type for
1782          CV quals.  */
1783       object_type = TREE_TYPE (TREE_VALUE (spec_types));
1784       spec_types = TREE_CHAIN (spec_types);
1785       tmpl_types = TREE_CHAIN (tmpl_types);
1786
1787       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1788         {
1789           /* DECL may contain more parameters than TMPL due to the extra
1790              in-charge parameter in constructors and destructors.  */
1791           in_charge = spec_types;
1792           spec_types = TREE_CHAIN (spec_types);
1793         }
1794       if (DECL_HAS_VTT_PARM_P (decl))
1795         {
1796           vtt = spec_types;
1797           spec_types = TREE_CHAIN (spec_types);
1798         }
1799     }
1800
1801   /* Compute the merged default arguments.  */
1802   new_spec_types =
1803     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1804
1805   /* Compute the new FUNCTION_TYPE.  */
1806   if (object_type)
1807     {
1808       if (vtt)
1809         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1810                                          TREE_VALUE (vtt),
1811                                          new_spec_types);
1812
1813       if (in_charge)
1814         /* Put the in-charge parameter back.  */
1815         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1816                                          TREE_VALUE (in_charge),
1817                                          new_spec_types);
1818
1819       new_type = build_method_type_directly (object_type,
1820                                              TREE_TYPE (old_type),
1821                                              new_spec_types);
1822     }
1823   else
1824     new_type = build_function_type (TREE_TYPE (old_type),
1825                                     new_spec_types);
1826   new_type = cp_build_type_attribute_variant (new_type,
1827                                               TYPE_ATTRIBUTES (old_type));
1828   new_type = build_exception_variant (new_type,
1829                                       TYPE_RAISES_EXCEPTIONS (old_type));
1830   TREE_TYPE (decl) = new_type;
1831 }
1832
1833 /* Check to see if the function just declared, as indicated in
1834    DECLARATOR, and in DECL, is a specialization of a function
1835    template.  We may also discover that the declaration is an explicit
1836    instantiation at this point.
1837
1838    Returns DECL, or an equivalent declaration that should be used
1839    instead if all goes well.  Issues an error message if something is
1840    amiss.  Returns error_mark_node if the error is not easily
1841    recoverable.
1842
1843    FLAGS is a bitmask consisting of the following flags:
1844
1845    2: The function has a definition.
1846    4: The function is a friend.
1847
1848    The TEMPLATE_COUNT is the number of references to qualifying
1849    template classes that appeared in the name of the function.  For
1850    example, in
1851
1852      template <class T> struct S { void f(); };
1853      void S<int>::f();
1854
1855    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
1856    classes are not counted in the TEMPLATE_COUNT, so that in
1857
1858      template <class T> struct S {};
1859      template <> struct S<int> { void f(); }
1860      template <> void S<int>::f();
1861
1862    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
1863    invalid; there should be no template <>.)
1864
1865    If the function is a specialization, it is marked as such via
1866    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
1867    is set up correctly, and it is added to the list of specializations
1868    for that template.  */
1869
1870 tree
1871 check_explicit_specialization (tree declarator,
1872                                tree decl,
1873                                int template_count,
1874                                int flags)
1875 {
1876   int have_def = flags & 2;
1877   int is_friend = flags & 4;
1878   int specialization = 0;
1879   int explicit_instantiation = 0;
1880   int member_specialization = 0;
1881   tree ctype = DECL_CLASS_CONTEXT (decl);
1882   tree dname = DECL_NAME (decl);
1883   tmpl_spec_kind tsk;
1884
1885   if (is_friend)
1886     {
1887       if (!processing_specialization)
1888         tsk = tsk_none;
1889       else
1890         tsk = tsk_excessive_parms;
1891     }
1892   else
1893     tsk = current_tmpl_spec_kind (template_count);
1894
1895   switch (tsk)
1896     {
1897     case tsk_none:
1898       if (processing_specialization)
1899         {
1900           specialization = 1;
1901           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1902         }
1903       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1904         {
1905           if (is_friend)
1906             /* This could be something like:
1907
1908                template <class T> void f(T);
1909                class S { friend void f<>(int); }  */
1910             specialization = 1;
1911           else
1912             {
1913               /* This case handles bogus declarations like template <>
1914                  template <class T> void f<int>(); */
1915
1916               error ("template-id %qD in declaration of primary template",
1917                      declarator);
1918               return decl;
1919             }
1920         }
1921       break;
1922
1923     case tsk_invalid_member_spec:
1924       /* The error has already been reported in
1925          check_specialization_scope.  */
1926       return error_mark_node;
1927
1928     case tsk_invalid_expl_inst:
1929       error ("template parameter list used in explicit instantiation");
1930
1931       /* Fall through.  */
1932
1933     case tsk_expl_inst:
1934       if (have_def)
1935         error ("definition provided for explicit instantiation");
1936
1937       explicit_instantiation = 1;
1938       break;
1939
1940     case tsk_excessive_parms:
1941     case tsk_insufficient_parms:
1942       if (tsk == tsk_excessive_parms)
1943         error ("too many template parameter lists in declaration of %qD",
1944                decl);
1945       else if (template_header_count)
1946         error("too few template parameter lists in declaration of %qD", decl);
1947       else
1948         error("explicit specialization of %qD must be introduced by "
1949               "%<template <>%>", decl);
1950
1951       /* Fall through.  */
1952     case tsk_expl_spec:
1953       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1954       if (ctype)
1955         member_specialization = 1;
1956       else
1957         specialization = 1;
1958       break;
1959
1960     case tsk_template:
1961       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1962         {
1963           /* This case handles bogus declarations like template <>
1964              template <class T> void f<int>(); */
1965
1966           if (uses_template_parms (declarator))
1967             error ("function template partial specialization %qD "
1968                    "is not allowed", declarator);
1969           else
1970             error ("template-id %qD in declaration of primary template",
1971                    declarator);
1972           return decl;
1973         }
1974
1975       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1976         /* This is a specialization of a member template, without
1977            specialization the containing class.  Something like:
1978
1979              template <class T> struct S {
1980                template <class U> void f (U);
1981              };
1982              template <> template <class U> void S<int>::f(U) {}
1983
1984            That's a specialization -- but of the entire template.  */
1985         specialization = 1;
1986       break;
1987
1988     default:
1989       gcc_unreachable ();
1990     }
1991
1992   if (specialization || member_specialization)
1993     {
1994       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1995       for (; t; t = TREE_CHAIN (t))
1996         if (TREE_PURPOSE (t))
1997           {
1998             pedwarn
1999               ("default argument specified in explicit specialization");
2000             break;
2001           }
2002     }
2003
2004   if (specialization || member_specialization || explicit_instantiation)
2005     {
2006       tree tmpl = NULL_TREE;
2007       tree targs = NULL_TREE;
2008
2009       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2010       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2011         {
2012           tree fns;
2013
2014           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2015           if (ctype)
2016             fns = dname;
2017           else
2018             {
2019               /* If there is no class context, the explicit instantiation
2020                  must be at namespace scope.  */
2021               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2022
2023               /* Find the namespace binding, using the declaration
2024                  context.  */
2025               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2026                                            false, true);
2027               if (fns == error_mark_node || !is_overloaded_fn (fns))
2028                 {
2029                   error ("%qD is not a template function", dname);
2030                   fns = error_mark_node;
2031                 }
2032               else
2033                 {
2034                   tree fn = OVL_CURRENT (fns);
2035                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2036                                                 CP_DECL_CONTEXT (fn)))
2037                     error ("%qD is not declared in %qD",
2038                            decl, current_namespace);
2039                 }
2040             }
2041
2042           declarator = lookup_template_function (fns, NULL_TREE);
2043         }
2044
2045       if (declarator == error_mark_node)
2046         return error_mark_node;
2047
2048       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2049         {
2050           if (!explicit_instantiation)
2051             /* A specialization in class scope.  This is invalid,
2052                but the error will already have been flagged by
2053                check_specialization_scope.  */
2054             return error_mark_node;
2055           else
2056             {
2057               /* It's not valid to write an explicit instantiation in
2058                  class scope, e.g.:
2059
2060                    class C { template void f(); }
2061
2062                    This case is caught by the parser.  However, on
2063                    something like:
2064
2065                    template class C { void f(); };
2066
2067                    (which is invalid) we can get here.  The error will be
2068                    issued later.  */
2069               ;
2070             }
2071
2072           return decl;
2073         }
2074       else if (ctype != NULL_TREE
2075                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2076                    IDENTIFIER_NODE))
2077         {
2078           /* Find the list of functions in ctype that have the same
2079              name as the declared function.  */
2080           tree name = TREE_OPERAND (declarator, 0);
2081           tree fns = NULL_TREE;
2082           int idx;
2083
2084           if (constructor_name_p (name, ctype))
2085             {
2086               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2087
2088               if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
2089                   : !CLASSTYPE_DESTRUCTORS (ctype))
2090                 {
2091                   /* From [temp.expl.spec]:
2092
2093                      If such an explicit specialization for the member
2094                      of a class template names an implicitly-declared
2095                      special member function (clause _special_), the
2096                      program is ill-formed.
2097
2098                      Similar language is found in [temp.explicit].  */
2099                   error ("specialization of implicitly-declared special member function");
2100                   return error_mark_node;
2101                 }
2102
2103               name = is_constructor ? ctor_identifier : dtor_identifier;
2104             }
2105
2106           if (!DECL_CONV_FN_P (decl))
2107             {
2108               idx = lookup_fnfields_1 (ctype, name);
2109               if (idx >= 0)
2110                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2111             }
2112           else
2113             {
2114               VEC(tree,gc) *methods;
2115               tree ovl;
2116
2117               /* For a type-conversion operator, we cannot do a
2118                  name-based lookup.  We might be looking for `operator
2119                  int' which will be a specialization of `operator T'.
2120                  So, we find *all* the conversion operators, and then
2121                  select from them.  */
2122               fns = NULL_TREE;
2123
2124               methods = CLASSTYPE_METHOD_VEC (ctype);
2125               if (methods)
2126                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2127                      VEC_iterate (tree, methods, idx, ovl);
2128                      ++idx)
2129                   {
2130                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2131                       /* There are no more conversion functions.  */
2132                       break;
2133
2134                     /* Glue all these conversion functions together
2135                        with those we already have.  */
2136                     for (; ovl; ovl = OVL_NEXT (ovl))
2137                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2138                   }
2139             }
2140
2141           if (fns == NULL_TREE)
2142             {
2143               error ("no member function %qD declared in %qT", name, ctype);
2144               return error_mark_node;
2145             }
2146           else
2147             TREE_OPERAND (declarator, 0) = fns;
2148         }
2149
2150       /* Figure out what exactly is being specialized at this point.
2151          Note that for an explicit instantiation, even one for a
2152          member function, we cannot tell apriori whether the
2153          instantiation is for a member template, or just a member
2154          function of a template class.  Even if a member template is
2155          being instantiated, the member template arguments may be
2156          elided if they can be deduced from the rest of the
2157          declaration.  */
2158       tmpl = determine_specialization (declarator, decl,
2159                                        &targs,
2160                                        member_specialization,
2161                                        template_count,
2162                                        tsk);
2163
2164       if (!tmpl || tmpl == error_mark_node)
2165         /* We couldn't figure out what this declaration was
2166            specializing.  */
2167         return error_mark_node;
2168       else
2169         {
2170           tree gen_tmpl = most_general_template (tmpl);
2171
2172           if (explicit_instantiation)
2173             {
2174               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2175                  is done by do_decl_instantiation later.  */
2176
2177               int arg_depth = TMPL_ARGS_DEPTH (targs);
2178               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2179
2180               if (arg_depth > parm_depth)
2181                 {
2182                   /* If TMPL is not the most general template (for
2183                      example, if TMPL is a friend template that is
2184                      injected into namespace scope), then there will
2185                      be too many levels of TARGS.  Remove some of them
2186                      here.  */
2187                   int i;
2188                   tree new_targs;
2189
2190                   new_targs = make_tree_vec (parm_depth);
2191                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2192                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2193                       = TREE_VEC_ELT (targs, i);
2194                   targs = new_targs;
2195                 }
2196
2197               return instantiate_template (tmpl, targs, tf_error);
2198             }
2199
2200           /* If we thought that the DECL was a member function, but it
2201              turns out to be specializing a static member function,
2202              make DECL a static member function as well.  */
2203           if (DECL_STATIC_FUNCTION_P (tmpl)
2204               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2205             revert_static_member_fn (decl);
2206
2207           /* If this is a specialization of a member template of a
2208              template class, we want to return the TEMPLATE_DECL, not
2209              the specialization of it.  */
2210           if (tsk == tsk_template)
2211             {
2212               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2213               DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2214               if (have_def)
2215                 {
2216                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2217                   DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2218                     = DECL_SOURCE_LOCATION (decl);
2219                   /* We want to use the argument list specified in the
2220                      definition, not in the original declaration.  */
2221                   DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2222                     = DECL_ARGUMENTS (decl);
2223                 }
2224               return tmpl;
2225             }
2226
2227           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2228           DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2229
2230           /* Inherit default function arguments from the template
2231              DECL is specializing.  */
2232           copy_default_args_to_explicit_spec (decl);
2233
2234           /* This specialization has the same protection as the
2235              template it specializes.  */
2236           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2237           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2238
2239           /* 7.1.1-1 [dcl.stc]
2240
2241              A storage-class-specifier shall not be specified in an
2242              explicit specialization...
2243
2244              The parser rejects these, so unless action is taken here,
2245              explicit function specializations will always appear with
2246              global linkage.
2247
2248              The action recommended by the C++ CWG in response to C++
2249              defect report 605 is to make the storage class and linkage
2250              of the explicit specialization match the templated function:
2251
2252              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2253            */
2254           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2255             {
2256               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2257               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2258
2259               /* This specialization has the same linkage and visibility as
2260                  the function template it specializes.  */
2261               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2262               if (! TREE_PUBLIC (decl))
2263                 {
2264                   DECL_INTERFACE_KNOWN (decl) = 1;
2265                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2266                 }
2267               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2268               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2269                 {
2270                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2271                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2272                 }
2273             }
2274
2275           /* If DECL is a friend declaration, declared using an
2276              unqualified name, the namespace associated with DECL may
2277              have been set incorrectly.  For example, in:
2278
2279                template <typename T> void f(T);
2280                namespace N {
2281                  struct S { friend void f<int>(int); }
2282                }
2283
2284              we will have set the DECL_CONTEXT for the friend
2285              declaration to N, rather than to the global namespace.  */
2286           if (DECL_NAMESPACE_SCOPE_P (decl))
2287             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2288
2289           if (is_friend && !have_def)
2290             /* This is not really a declaration of a specialization.
2291                It's just the name of an instantiation.  But, it's not
2292                a request for an instantiation, either.  */
2293             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2294           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2295             /* This is indeed a specialization.  In case of constructors
2296                and destructors, we need in-charge and not-in-charge
2297                versions in V3 ABI.  */
2298             clone_function_decl (decl, /*update_method_vec_p=*/0);
2299
2300           /* Register this specialization so that we can find it
2301              again.  */
2302           decl = register_specialization (decl, gen_tmpl, targs, is_friend);
2303         }
2304     }
2305
2306   return decl;
2307 }
2308
2309 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2310    parameters.  These are represented in the same format used for
2311    DECL_TEMPLATE_PARMS.  */
2312
2313 int
2314 comp_template_parms (const_tree parms1, const_tree parms2)
2315 {
2316   const_tree p1;
2317   const_tree p2;
2318
2319   if (parms1 == parms2)
2320     return 1;
2321
2322   for (p1 = parms1, p2 = parms2;
2323        p1 != NULL_TREE && p2 != NULL_TREE;
2324        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2325     {
2326       tree t1 = TREE_VALUE (p1);
2327       tree t2 = TREE_VALUE (p2);
2328       int i;
2329
2330       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2331       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2332
2333       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2334         return 0;
2335
2336       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2337         {
2338           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2339           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2340
2341           /* If either of the template parameters are invalid, assume
2342              they match for the sake of error recovery. */
2343           if (parm1 == error_mark_node || parm2 == error_mark_node)
2344             return 1;
2345
2346           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2347             return 0;
2348
2349           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2350               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2351                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2352             continue;
2353           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2354             return 0;
2355         }
2356     }
2357
2358   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2359     /* One set of parameters has more parameters lists than the
2360        other.  */
2361     return 0;
2362
2363   return 1;
2364 }
2365
2366 /* Determine whether PARM is a parameter pack.  */
2367 bool 
2368 template_parameter_pack_p (const_tree parm)
2369 {
2370   /* Determine if we have a non-type template parameter pack.  */
2371   if (TREE_CODE (parm) == PARM_DECL)
2372     return (DECL_TEMPLATE_PARM_P (parm) 
2373             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2374
2375   /* If this is a list of template parameters, we could get a
2376      TYPE_DECL or a TEMPLATE_DECL.  */ 
2377   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2378     parm = TREE_TYPE (parm);
2379
2380   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2381            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2382           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2383 }
2384
2385 /* Determine whether ARGS describes a variadic template args list,
2386    i.e., one that is terminated by a template argument pack.  */
2387 static bool 
2388 template_args_variadic_p (tree args)
2389 {
2390   int nargs;
2391   tree last_parm;
2392
2393   if (args == NULL_TREE)
2394     return false;
2395
2396   args = INNERMOST_TEMPLATE_ARGS (args);
2397   nargs = TREE_VEC_LENGTH (args);
2398
2399   if (nargs == 0)
2400     return false;
2401
2402   last_parm = TREE_VEC_ELT (args, nargs - 1);
2403
2404   return ARGUMENT_PACK_P (last_parm);
2405 }
2406
2407 /* Generate a new name for the parameter pack name NAME (an
2408    IDENTIFIER_NODE) that incorporates its */
2409 static tree
2410 make_ith_pack_parameter_name (tree name, int i)
2411 {
2412   /* Munge the name to include the parameter index.  */
2413   char numbuf[128];
2414   char* newname;
2415   
2416   sprintf(numbuf, "%i", i);
2417   newname = (char*)alloca (IDENTIFIER_LENGTH (name) + strlen(numbuf) + 2);
2418   sprintf(newname, "%s#%i", IDENTIFIER_POINTER (name), i);
2419   return get_identifier (newname);
2420 }
2421
2422 /* Structure used to track the progress of find_parameter_pack_r.  */
2423 struct find_parameter_pack_data 
2424 {
2425   tree* parameter_packs;
2426   struct pointer_set_t *visited;
2427 };
2428
2429 /* Identifies all of the argument packs that occur in a template
2430    argument and appends them to the TREE_LIST inside DATA, which is a
2431    find_parameter_pack_data structure. This is a subroutine of
2432    make_pack_expansion and uses_parameter_packs.  */
2433 static tree
2434 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2435 {
2436   tree t = *tp;
2437   struct find_parameter_pack_data* ppd = 
2438     (struct find_parameter_pack_data*)data;
2439
2440   if (TYPE_P (t))
2441     {
2442       tree context = TYPE_CONTEXT (t);
2443       cp_walk_tree (&context, &find_parameter_packs_r, ppd, ppd->visited);
2444     }
2445
2446   /* This switch statement will return immediately if we don't find a
2447      parameter pack.  */
2448   switch (TREE_CODE (t)) 
2449     {
2450     case TEMPLATE_PARM_INDEX:
2451       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2452         break;
2453       return NULL_TREE;
2454
2455     case BOUND_TEMPLATE_TEMPLATE_PARM:
2456       /* Check the template arguments.  */
2457       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
2458                     ppd->visited);
2459
2460       /* Dig out the underlying TEMPLATE_TEMPLATE_PARM.  */
2461       t = TYPE_TI_TEMPLATE (t);
2462       if (DECL_P (t) && TREE_TYPE (t))
2463         t = TREE_TYPE (t);
2464       *walk_subtrees = 0;
2465       
2466       /* Fall through.  */
2467
2468     case TEMPLATE_TYPE_PARM:
2469     case TEMPLATE_TEMPLATE_PARM:
2470       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2471         break;
2472       return NULL_TREE;
2473
2474     case PARM_DECL:
2475       if (FUNCTION_PARAMETER_PACK_P (t))
2476         {
2477           /* We don't want to walk into the type of a PARM_DECL,
2478              because we don't want to see the type parameter pack.*/
2479           *walk_subtrees = 0;
2480           break;
2481         }
2482       return NULL_TREE;
2483
2484     case RECORD_TYPE:
2485       if (TYPE_PTRMEMFUNC_P (t))
2486         return NULL_TREE;
2487       /* Fall through.  */
2488
2489     case UNION_TYPE:
2490     case ENUMERAL_TYPE:
2491       if (TYPE_TEMPLATE_INFO (t))
2492         {
2493           tree args = TREE_VALUE (TYPE_TEMPLATE_INFO (t));
2494           cp_walk_tree (&args, &find_parameter_packs_r, ppd, ppd->visited);
2495         }
2496
2497       *walk_subtrees = 0;
2498       return NULL_TREE;
2499
2500     case TEMPLATE_DECL:
2501       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
2502           && TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (t)))
2503         break;
2504       
2505       *walk_subtrees = 0;
2506       return NULL_TREE;
2507  
2508     case TYPENAME_TYPE:
2509       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
2510                    ppd, ppd->visited);
2511       *walk_subtrees = 0;
2512       return NULL_TREE;
2513
2514       
2515     case TYPE_PACK_EXPANSION:
2516     case EXPR_PACK_EXPANSION:
2517       *walk_subtrees = 0;
2518       return NULL_TREE;
2519
2520     case INTEGER_TYPE:
2521       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
2522                     ppd, ppd->visited);
2523       *walk_subtrees = 0;
2524       return NULL_TREE;
2525
2526     default:
2527       return NULL_TREE;
2528     }
2529   
2530   /* Add this parameter pack to the list.  */
2531   *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2532
2533   return NULL_TREE;
2534 }
2535
2536 /* Determines if the expression or type T uses any parameter packs.  */
2537 bool
2538 uses_parameter_packs (tree t)
2539 {
2540   tree parameter_packs = NULL_TREE;
2541   struct find_parameter_pack_data ppd;
2542   ppd.parameter_packs = &parameter_packs;
2543   ppd.visited = pointer_set_create ();
2544   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2545   pointer_set_destroy (ppd.visited);
2546   return parameter_packs != NULL_TREE;
2547 }
2548
2549 /* Turn ARG, which may be an expression, type, or a TREE_LIST
2550    representation a base-class initializer into a parameter pack
2551    expansion. If all goes well, the resulting node will be an
2552    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
2553    respectively.  */
2554 tree 
2555 make_pack_expansion (tree arg)
2556 {
2557   tree result;
2558   tree parameter_packs = NULL_TREE;
2559   bool for_types = false;
2560   struct find_parameter_pack_data ppd;
2561
2562   if (!arg || arg == error_mark_node)
2563     return arg;
2564
2565   if (TREE_CODE (arg) == TREE_LIST)
2566     {
2567       /* The only time we will see a TREE_LIST here is for a base
2568          class initializer.  In this case, the TREE_PURPOSE will be a
2569          _TYPE node (representing the base class expansion we're
2570          initializing) and the TREE_VALUE will be a TREE_LIST
2571          containing the initialization arguments. 
2572
2573          The resulting expansion looks somewhat different from most
2574          expansions. Rather than returning just one _EXPANSION, we
2575          return a TREE_LIST whose TREE_PURPOSE is a
2576          TYPE_PACK_EXPANSION containing the bases that will be
2577          initialized.  The TREE_VALUE will be identical to the
2578          original TREE_VALUE, which is a list of arguments that will
2579          be passed to each base.  We do not introduce any new pack
2580          expansion nodes into the TREE_VALUE (although it is possible
2581          that some already exist), because the TREE_PURPOSE and
2582          TREE_VALUE all need to be expanded together with the same
2583          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
2584          resulting TREE_PURPOSE will mention the parameter packs in
2585          both the bases and the arguments to the bases.  */
2586       tree purpose;
2587       tree value;
2588       tree parameter_packs = NULL_TREE;
2589
2590       /* Determine which parameter packs will be used by the base
2591          class expansion.  */
2592       ppd.visited = pointer_set_create ();
2593       ppd.parameter_packs = &parameter_packs;
2594       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
2595                     &ppd, ppd.visited);
2596
2597       if (parameter_packs == NULL_TREE)
2598         {
2599           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
2600           pointer_set_destroy (ppd.visited);
2601           return error_mark_node;
2602         }
2603
2604       if (TREE_VALUE (arg) != void_type_node)
2605         {
2606           /* Collect the sets of parameter packs used in each of the
2607              initialization arguments.  */
2608           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
2609             {
2610               /* Determine which parameter packs will be expanded in this
2611                  argument.  */
2612               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
2613                             &ppd, ppd.visited);
2614             }
2615         }
2616
2617       pointer_set_destroy (ppd.visited);
2618
2619       /* Create the pack expansion type for the base type.  */
2620       purpose = make_node (TYPE_PACK_EXPANSION);
2621       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
2622       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
2623
2624       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2625          they will rarely be compared to anything.  */
2626       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
2627
2628       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
2629     }
2630
2631   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
2632     for_types = true;
2633
2634   /* Build the PACK_EXPANSION_* node.  */
2635   result = make_node (for_types ? TYPE_PACK_EXPANSION : EXPR_PACK_EXPANSION);
2636   SET_PACK_EXPANSION_PATTERN (result, arg);
2637   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
2638     {
2639       /* Propagate type and const-expression information.  */
2640       TREE_TYPE (result) = TREE_TYPE (arg);
2641       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
2642     }
2643   else
2644     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2645        they will rarely be compared to anything.  */
2646     SET_TYPE_STRUCTURAL_EQUALITY (result);
2647
2648   /* Determine which parameter packs will be expanded.  */
2649   ppd.parameter_packs = &parameter_packs;
2650   ppd.visited = pointer_set_create ();
2651   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
2652   pointer_set_destroy (ppd.visited);
2653
2654   /* Make sure we found some parameter packs.  */
2655   if (parameter_packs == NULL_TREE)
2656     {
2657       if (TYPE_P (arg))
2658         error ("expansion pattern %<%T%> contains no argument packs", arg);
2659       else
2660         error ("expansion pattern %<%E%> contains no argument packs", arg);
2661       return error_mark_node;
2662     }
2663   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
2664
2665   return result;
2666 }
2667
2668 /* Checks T for any "bare" parameter packs, which have not yet been
2669    expanded, and issues an error if any are found. This operation can
2670    only be done on full expressions or types (e.g., an expression
2671    statement, "if" condition, etc.), because we could have expressions like:
2672
2673      foo(f(g(h(args)))...)
2674
2675    where "args" is a parameter pack. check_for_bare_parameter_packs
2676    should not be called for the subexpressions args, h(args),
2677    g(h(args)), or f(g(h(args))), because we would produce erroneous
2678    error messages. 
2679
2680    Returns TRUE if there were no bare parameter packs, returns FALSE
2681    (and emits an error) if there were bare parameter packs.*/
2682 bool 
2683 check_for_bare_parameter_packs (tree t)
2684 {
2685   tree parameter_packs = NULL_TREE;
2686   struct find_parameter_pack_data ppd;
2687
2688   if (!processing_template_decl || !t || t == error_mark_node)
2689     return true;
2690
2691   if (TREE_CODE (t) == TYPE_DECL)
2692     t = TREE_TYPE (t);
2693
2694   ppd.parameter_packs = &parameter_packs;
2695   ppd.visited = pointer_set_create ();
2696   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2697   pointer_set_destroy (ppd.visited);
2698
2699   if (parameter_packs) 
2700     {
2701       error ("parameter packs not expanded with `...':");
2702       while (parameter_packs)
2703         {
2704           tree pack = TREE_VALUE (parameter_packs);
2705           tree name = NULL_TREE;
2706
2707           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
2708               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
2709             name = TYPE_NAME (pack);
2710           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
2711             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
2712           else
2713             name = DECL_NAME (pack);
2714           inform ("        %qD", name);
2715
2716           parameter_packs = TREE_CHAIN (parameter_packs);
2717         }
2718
2719       return false;
2720     }
2721
2722   return true;
2723 }
2724
2725 /* Expand any parameter packs that occur in the template arguments in
2726    ARGS.  */
2727 tree
2728 expand_template_argument_pack (tree args)
2729 {
2730   tree result_args = NULL_TREE;
2731   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
2732   int num_result_args = -1;
2733
2734   /* First, determine if we need to expand anything, and the number of
2735      slots we'll need.  */
2736   for (in_arg = 0; in_arg < nargs; ++in_arg)
2737     {
2738       tree arg = TREE_VEC_ELT (args, in_arg);
2739       if (ARGUMENT_PACK_P (arg))
2740         {
2741           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
2742           if (num_result_args < 0)
2743             num_result_args = in_arg + num_packed;
2744           else
2745             num_result_args += num_packed;
2746         }
2747       else
2748         {
2749           if (num_result_args >= 0)
2750             num_result_args++;
2751         }
2752     }
2753
2754   /* If no expansion is necessary, we're done.  */
2755   if (num_result_args < 0)
2756     return args;
2757
2758   /* Expand arguments.  */
2759   result_args = make_tree_vec (num_result_args);
2760   for (in_arg = 0; in_arg < nargs; ++in_arg)
2761     {
2762       tree arg = TREE_VEC_ELT (args, in_arg);
2763       if (ARGUMENT_PACK_P (arg))
2764         {
2765           tree packed = ARGUMENT_PACK_ARGS (arg);
2766           int i, num_packed = TREE_VEC_LENGTH (packed);
2767           for (i = 0; i < num_packed; ++i, ++out_arg)
2768             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
2769         }
2770       else
2771         {
2772           TREE_VEC_ELT (result_args, out_arg) = arg;
2773           ++out_arg;
2774         }
2775     }
2776
2777   return result_args;
2778 }
2779
2780 /* Complain if DECL shadows a template parameter.
2781
2782    [temp.local]: A template-parameter shall not be redeclared within its
2783    scope (including nested scopes).  */
2784
2785 void
2786 check_template_shadow (tree decl)
2787 {
2788   tree olddecl;
2789
2790   /* If we're not in a template, we can't possibly shadow a template
2791      parameter.  */
2792   if (!current_template_parms)
2793     return;
2794
2795   /* Figure out what we're shadowing.  */
2796   if (TREE_CODE (decl) == OVERLOAD)
2797     decl = OVL_CURRENT (decl);
2798   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2799
2800   /* If there's no previous binding for this name, we're not shadowing
2801      anything, let alone a template parameter.  */
2802   if (!olddecl)
2803     return;
2804
2805   /* If we're not shadowing a template parameter, we're done.  Note
2806      that OLDDECL might be an OVERLOAD (or perhaps even an
2807      ERROR_MARK), so we can't just blithely assume it to be a _DECL
2808      node.  */
2809   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2810     return;
2811
2812   /* We check for decl != olddecl to avoid bogus errors for using a
2813      name inside a class.  We check TPFI to avoid duplicate errors for
2814      inline member templates.  */
2815   if (decl == olddecl
2816       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2817     return;
2818
2819   error ("declaration of %q+#D", decl);
2820   error (" shadows template parm %q+#D", olddecl);
2821 }
2822
2823 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2824    ORIG_LEVEL, DECL, and TYPE.  */
2825
2826 static tree
2827 build_template_parm_index (int index,
2828                            int level,
2829                            int orig_level,
2830                            tree decl,
2831                            tree type)
2832 {
2833   tree t = make_node (TEMPLATE_PARM_INDEX);
2834   TEMPLATE_PARM_IDX (t) = index;
2835   TEMPLATE_PARM_LEVEL (t) = level;
2836   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2837   TEMPLATE_PARM_DECL (t) = decl;
2838   TREE_TYPE (t) = type;
2839   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2840   TREE_INVARIANT (t) = TREE_INVARIANT (decl);
2841   TREE_READONLY (t) = TREE_READONLY (decl);
2842
2843   return t;
2844 }
2845
2846 /* Find the canonical type parameter for the given template type
2847    parameter.  Returns the canonical type parameter, which may be TYPE
2848    if no such parameter existed.  */
2849 static tree
2850 canonical_type_parameter (tree type)
2851 {
2852   tree list;
2853   int idx = TEMPLATE_TYPE_IDX (type);
2854   if (!canonical_template_parms)
2855     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
2856
2857   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
2858     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
2859
2860   list = VEC_index (tree, canonical_template_parms, idx);
2861   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
2862     list = TREE_CHAIN (list);
2863
2864   if (list)
2865     return TREE_VALUE (list);
2866   else
2867     {
2868       VEC_replace(tree, canonical_template_parms, idx,
2869                   tree_cons (NULL_TREE, type, 
2870                              VEC_index (tree, canonical_template_parms, idx)));
2871       return type;
2872     }
2873 }
2874
2875 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2876    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
2877    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2878    new one is created.  */
2879
2880 static tree
2881 reduce_template_parm_level (tree index, tree type, int levels)
2882 {
2883   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2884       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2885           != TEMPLATE_PARM_LEVEL (index) - levels))
2886     {
2887       tree orig_decl = TEMPLATE_PARM_DECL (index);
2888       tree decl, t;
2889
2890       decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2891       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2892       TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
2893       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2894       DECL_ARTIFICIAL (decl) = 1;
2895       SET_DECL_TEMPLATE_PARM_P (decl);
2896
2897       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2898                                      TEMPLATE_PARM_LEVEL (index) - levels,
2899                                      TEMPLATE_PARM_ORIG_LEVEL (index),
2900                                      decl, type);
2901       TEMPLATE_PARM_DESCENDANTS (index) = t;
2902       TEMPLATE_PARM_PARAMETER_PACK (t) 
2903         = TEMPLATE_PARM_PARAMETER_PACK (index);
2904
2905         /* Template template parameters need this.  */
2906       if (TREE_CODE (decl) != CONST_DECL)
2907         DECL_TEMPLATE_PARMS (decl)
2908           = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
2909     }
2910
2911   return TEMPLATE_PARM_DESCENDANTS (index);
2912 }
2913
2914 /* Process information from new template parameter PARM and append it to the
2915    LIST being built.  This new parameter is a non-type parameter iff
2916    IS_NON_TYPE is true. This new parameter is a parameter
2917    pack iff IS_PARAMETER_PACK is true.  */
2918
2919 tree
2920 process_template_parm (tree list, tree parm, bool is_non_type, 
2921                        bool is_parameter_pack)
2922 {
2923   tree decl = 0;
2924   tree defval;
2925   tree err_parm_list;
2926   int idx = 0;
2927
2928   gcc_assert (TREE_CODE (parm) == TREE_LIST);
2929   defval = TREE_PURPOSE (parm);
2930
2931   if (list)
2932     {
2933       tree p = tree_last (list);
2934
2935       if (p && TREE_VALUE (p) != error_mark_node)
2936         {
2937           p = TREE_VALUE (p);
2938           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2939             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2940           else
2941             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2942         }
2943
2944       ++idx;
2945     }
2946   else
2947     idx = 0;
2948
2949   if (is_non_type)
2950     {
2951       parm = TREE_VALUE (parm);
2952
2953       SET_DECL_TEMPLATE_PARM_P (parm);
2954
2955       if (TREE_TYPE (parm) == error_mark_node)
2956         {
2957           err_parm_list = build_tree_list (defval, parm);
2958           TREE_VALUE (err_parm_list) = error_mark_node;
2959            return chainon (list, err_parm_list);
2960         }
2961       else
2962       {
2963         /* [temp.param]
2964
2965            The top-level cv-qualifiers on the template-parameter are
2966            ignored when determining its type.  */
2967         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
2968         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
2969           {
2970             err_parm_list = build_tree_list (defval, parm);
2971             TREE_VALUE (err_parm_list) = error_mark_node;
2972              return chainon (list, err_parm_list);
2973           }
2974
2975         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
2976           {
2977             /* This template parameter is not a parameter pack, but it
2978                should be. Complain about "bare" parameter packs.  */
2979             check_for_bare_parameter_packs (TREE_TYPE (parm));
2980             
2981             /* Recover by calling this a parameter pack.  */
2982             is_parameter_pack = true;
2983           }
2984       }
2985
2986       /* A template parameter is not modifiable.  */
2987       TREE_CONSTANT (parm) = 1;
2988       TREE_INVARIANT (parm) = 1;
2989       TREE_READONLY (parm) = 1;
2990       decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
2991       TREE_CONSTANT (decl) = 1;
2992       TREE_INVARIANT (decl) = 1;
2993       TREE_READONLY (decl) = 1;
2994       DECL_INITIAL (parm) = DECL_INITIAL (decl)
2995         = build_template_parm_index (idx, processing_template_decl,
2996                                      processing_template_decl,
2997                                      decl, TREE_TYPE (parm));
2998
2999       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3000         = is_parameter_pack;
3001     }
3002   else
3003     {
3004       tree t;
3005       parm = TREE_VALUE (TREE_VALUE (parm));
3006
3007       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3008         {
3009           t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
3010           /* This is for distinguishing between real templates and template
3011              template parameters */
3012           TREE_TYPE (parm) = t;
3013           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3014           decl = parm;
3015         }
3016       else
3017         {
3018           t = make_aggr_type (TEMPLATE_TYPE_PARM);
3019           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3020           decl = build_decl (TYPE_DECL, parm, t);
3021         }
3022
3023       TYPE_NAME (t) = decl;
3024       TYPE_STUB_DECL (t) = decl;
3025       parm = decl;
3026       TEMPLATE_TYPE_PARM_INDEX (t)
3027         = build_template_parm_index (idx, processing_template_decl,
3028                                      processing_template_decl,
3029                                      decl, TREE_TYPE (parm));
3030       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3031       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3032     }
3033   DECL_ARTIFICIAL (decl) = 1;
3034   SET_DECL_TEMPLATE_PARM_P (decl);
3035   pushdecl (decl);
3036   parm = build_tree_list (defval, parm);
3037   return chainon (list, parm);
3038 }
3039
3040 /* The end of a template parameter list has been reached.  Process the
3041    tree list into a parameter vector, converting each parameter into a more
3042    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3043    as PARM_DECLs.  */
3044
3045 tree
3046 end_template_parm_list (tree parms)
3047 {
3048   int nparms;
3049   tree parm, next;
3050   tree saved_parmlist = make_tree_vec (list_length (parms));
3051
3052   current_template_parms
3053     = tree_cons (size_int (processing_template_decl),
3054                  saved_parmlist, current_template_parms);
3055
3056   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3057     {
3058       next = TREE_CHAIN (parm);
3059       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3060       TREE_CHAIN (parm) = NULL_TREE;
3061     }
3062
3063   --processing_template_parmlist;
3064
3065   return saved_parmlist;
3066 }
3067
3068 /* end_template_decl is called after a template declaration is seen.  */
3069
3070 void
3071 end_template_decl (void)
3072 {
3073   reset_specialization ();
3074
3075   if (! processing_template_decl)
3076     return;
3077
3078   /* This matches the pushlevel in begin_template_parm_list.  */
3079   finish_scope ();
3080
3081   --processing_template_decl;
3082   current_template_parms = TREE_CHAIN (current_template_parms);
3083 }
3084
3085 /* Within the declaration of a template, return all levels of template
3086    parameters that apply.  The template parameters are represented as
3087    a TREE_VEC, in the form documented in cp-tree.h for template
3088    arguments.  */
3089
3090 static tree
3091 current_template_args (void)
3092 {
3093   tree header;
3094   tree args = NULL_TREE;
3095   int length = TMPL_PARMS_DEPTH (current_template_parms);
3096   int l = length;
3097
3098   /* If there is only one level of template parameters, we do not
3099      create a TREE_VEC of TREE_VECs.  Instead, we return a single
3100      TREE_VEC containing the arguments.  */
3101   if (length > 1)
3102     args = make_tree_vec (length);
3103
3104   for (header = current_template_parms; header; header = TREE_CHAIN (header))
3105     {
3106       tree a = copy_node (TREE_VALUE (header));
3107       int i;
3108
3109       TREE_TYPE (a) = NULL_TREE;
3110       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3111         {
3112           tree t = TREE_VEC_ELT (a, i);
3113
3114           /* T will be a list if we are called from within a
3115              begin/end_template_parm_list pair, but a vector directly
3116              if within a begin/end_member_template_processing pair.  */
3117           if (TREE_CODE (t) == TREE_LIST)
3118             {
3119               t = TREE_VALUE (t);
3120
3121               if (t != error_mark_node)
3122                 {
3123                   if (TREE_CODE (t) == TYPE_DECL
3124                       || TREE_CODE (t) == TEMPLATE_DECL)
3125                     {
3126                       t = TREE_TYPE (t);
3127                       
3128                       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3129                         {
3130                           /* Turn this argument into a TYPE_ARGUMENT_PACK
3131                              with a single element, which expands T.  */
3132                           tree vec = make_tree_vec (1);
3133                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3134                           
3135                           t = make_node (TYPE_ARGUMENT_PACK);
3136                           SET_ARGUMENT_PACK_ARGS (t, vec);
3137                         }
3138                     }
3139                   else
3140                     {
3141                       t = DECL_INITIAL (t);
3142                       
3143                       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3144                         {
3145                           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3146                              with a single element, which expands T.  */
3147                           tree vec = make_tree_vec (1);
3148                           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3149                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3150                           
3151                           t  = make_node (NONTYPE_ARGUMENT_PACK);
3152                           SET_ARGUMENT_PACK_ARGS (t, vec);
3153                           TREE_TYPE (t) = type;
3154                         }
3155                     }
3156                   TREE_VEC_ELT (a, i) = t;
3157                 }
3158             }
3159         }
3160
3161       if (length > 1)
3162         TREE_VEC_ELT (args, --l) = a;
3163       else
3164         args = a;
3165     }
3166
3167   return args;
3168 }
3169
3170 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3171    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
3172    a member template.  Used by push_template_decl below.  */
3173
3174 static tree
3175 build_template_decl (tree decl, tree parms, bool member_template_p)
3176 {
3177   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3178   DECL_TEMPLATE_PARMS (tmpl) = parms;
3179   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3180   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3181   if (DECL_LANG_SPECIFIC (decl))
3182     {
3183       DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
3184       DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
3185       DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
3186       DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
3187       DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
3188       if (DECL_OVERLOADED_OPERATOR_P (decl))
3189         SET_OVERLOADED_OPERATOR_CODE (tmpl,
3190                                       DECL_OVERLOADED_OPERATOR_P (decl));
3191     }
3192
3193   return tmpl;
3194 }
3195
3196 struct template_parm_data
3197 {
3198   /* The level of the template parameters we are currently
3199      processing.  */
3200   int level;
3201
3202   /* The index of the specialization argument we are currently
3203      processing.  */
3204   int current_arg;
3205
3206   /* An array whose size is the number of template parameters.  The
3207      elements are nonzero if the parameter has been used in any one
3208      of the arguments processed so far.  */
3209   int* parms;
3210
3211   /* An array whose size is the number of template arguments.  The
3212      elements are nonzero if the argument makes use of template
3213      parameters of this level.  */
3214   int* arg_uses_template_parms;
3215 };
3216
3217 /* Subroutine of push_template_decl used to see if each template
3218    parameter in a partial specialization is used in the explicit
3219    argument list.  If T is of the LEVEL given in DATA (which is
3220    treated as a template_parm_data*), then DATA->PARMS is marked
3221    appropriately.  */
3222
3223 static int
3224 mark_template_parm (tree t, void* data)
3225 {
3226   int level;
3227   int idx;
3228   struct template_parm_data* tpd = (struct template_parm_data*) data;
3229
3230   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3231     {
3232       level = TEMPLATE_PARM_LEVEL (t);
3233       idx = TEMPLATE_PARM_IDX (t);
3234     }
3235   else
3236     {
3237       level = TEMPLATE_TYPE_LEVEL (t);
3238       idx = TEMPLATE_TYPE_IDX (t);
3239     }
3240
3241   if (level == tpd->level)
3242     {
3243       tpd->parms[idx] = 1;
3244       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3245     }
3246
3247   /* Return zero so that for_each_template_parm will continue the
3248      traversal of the tree; we want to mark *every* template parm.  */
3249   return 0;
3250 }
3251
3252 /* Process the partial specialization DECL.  */
3253
3254 static tree
3255 process_partial_specialization (tree decl)
3256 {
3257   tree type = TREE_TYPE (decl);
3258   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3259   tree specargs = CLASSTYPE_TI_ARGS (type);
3260   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3261   tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3262   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3263   int nargs = TREE_VEC_LENGTH (inner_args);
3264   int ntparms = TREE_VEC_LENGTH (inner_parms);
3265   int  i;
3266   int did_error_intro = 0;
3267   struct template_parm_data tpd;
3268   struct template_parm_data tpd2;
3269
3270   /* We check that each of the template parameters given in the
3271      partial specialization is used in the argument list to the
3272      specialization.  For example:
3273
3274        template <class T> struct S;
3275        template <class T> struct S<T*>;
3276
3277      The second declaration is OK because `T*' uses the template
3278      parameter T, whereas
3279
3280        template <class T> struct S<int>;
3281
3282      is no good.  Even trickier is:
3283
3284        template <class T>
3285        struct S1
3286        {
3287           template <class U>
3288           struct S2;
3289           template <class U>
3290           struct S2<T>;
3291        };
3292
3293      The S2<T> declaration is actually invalid; it is a
3294      full-specialization.  Of course,
3295
3296           template <class U>
3297           struct S2<T (*)(U)>;
3298
3299      or some such would have been OK.  */
3300   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3301   tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3302   memset (tpd.parms, 0, sizeof (int) * ntparms);
3303
3304   tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3305   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3306   for (i = 0; i < nargs; ++i)
3307     {
3308       tpd.current_arg = i;
3309       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3310                               &mark_template_parm,
3311                               &tpd,
3312                               NULL);
3313     }
3314   for (i = 0; i < ntparms; ++i)
3315     if (tpd.parms[i] == 0)
3316       {
3317         /* One of the template parms was not used in the
3318            specialization.  */
3319         if (!did_error_intro)
3320           {
3321             error ("template parameters not used in partial specialization:");
3322             did_error_intro = 1;
3323           }
3324
3325         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3326       }
3327
3328   /* [temp.class.spec]
3329
3330      The argument list of the specialization shall not be identical to
3331      the implicit argument list of the primary template.  */
3332   if (comp_template_args
3333       (inner_args,
3334        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3335                                                    (maintmpl)))))
3336     error ("partial specialization %qT does not specialize any template arguments", type);
3337
3338   /* [temp.class.spec]
3339
3340      A partially specialized non-type argument expression shall not
3341      involve template parameters of the partial specialization except
3342      when the argument expression is a simple identifier.
3343
3344      The type of a template parameter corresponding to a specialized
3345      non-type argument shall not be dependent on a parameter of the
3346      specialization. 
3347
3348      Also, we verify that pack expansions only occur at the
3349      end of the argument list.  */
3350   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3351   tpd2.parms = 0;
3352   for (i = 0; i < nargs; ++i)
3353     {
3354       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3355       tree arg = TREE_VEC_ELT (inner_args, i);
3356       tree packed_args = NULL_TREE;
3357       int j, len = 1;
3358
3359       if (ARGUMENT_PACK_P (arg))
3360         {
3361           /* Extract the arguments from the argument pack. We'll be
3362              iterating over these in the following loop.  */
3363           packed_args = ARGUMENT_PACK_ARGS (arg);
3364           len = TREE_VEC_LENGTH (packed_args);
3365         }
3366
3367       for (j = 0; j < len; j++)
3368         {
3369           if (packed_args)
3370             /* Get the Jth argument in the parameter pack.  */
3371             arg = TREE_VEC_ELT (packed_args, j);
3372
3373           if (PACK_EXPANSION_P (arg))
3374             {
3375               /* Pack expansions must come at the end of the
3376                  argument list.  */
3377               if ((packed_args && j < len - 1)
3378                   || (!packed_args && i < nargs - 1))
3379                 {
3380                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3381                     error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3382                   else
3383                     error ("parameter pack argument %qT must be at the end of the template argument list", arg);                   
3384                 }
3385             }
3386
3387           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3388             /* We only care about the pattern.  */
3389             arg = PACK_EXPANSION_PATTERN (arg);
3390
3391           if (/* These first two lines are the `non-type' bit.  */
3392               !TYPE_P (arg)
3393               && TREE_CODE (arg) != TEMPLATE_DECL
3394               /* This next line is the `argument expression is not just a
3395                  simple identifier' condition and also the `specialized
3396                  non-type argument' bit.  */
3397               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3398             {
3399               if ((!packed_args && tpd.arg_uses_template_parms[i])
3400                   || (packed_args && uses_template_parms (arg)))
3401                 error ("template argument %qE involves template parameter(s)",
3402                        arg);
3403               else 
3404                 {
3405                   /* Look at the corresponding template parameter,
3406                      marking which template parameters its type depends
3407                      upon.  */
3408                   tree type = TREE_TYPE (parm);
3409
3410                   if (!tpd2.parms)
3411                     {
3412                       /* We haven't yet initialized TPD2.  Do so now.  */
3413                       tpd2.arg_uses_template_parms 
3414                         = (int *) alloca (sizeof (int) * nargs);
3415                       /* The number of parameters here is the number in the
3416                          main template, which, as checked in the assertion
3417                          above, is NARGS.  */
3418                       tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3419                       tpd2.level = 
3420                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3421                     }
3422
3423                   /* Mark the template parameters.  But this time, we're
3424                      looking for the template parameters of the main
3425                      template, not in the specialization.  */
3426                   tpd2.current_arg = i;
3427                   tpd2.arg_uses_template_parms[i] = 0;
3428                   memset (tpd2.parms, 0, sizeof (int) * nargs);
3429                   for_each_template_parm (type,
3430                                           &mark_template_parm,
3431                                           &tpd2,
3432                                           NULL);
3433
3434                   if (tpd2.arg_uses_template_parms [i])
3435                     {
3436                       /* The type depended on some template parameters.
3437                          If they are fully specialized in the
3438                          specialization, that's OK.  */
3439                       int j;
3440                       for (j = 0; j < nargs; ++j)
3441                         if (tpd2.parms[j] != 0
3442                             && tpd.arg_uses_template_parms [j])
3443                           {
3444                             error ("type %qT of template argument %qE depends "
3445                                    "on template parameter(s)", 
3446                                    type,
3447                                    arg);
3448                             break;
3449                           }
3450                     }
3451                 }
3452             }
3453         }
3454     }
3455
3456   if (retrieve_specialization (maintmpl, specargs,
3457                                /*class_specializations_p=*/true))
3458     /* We've already got this specialization.  */
3459     return decl;
3460
3461   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
3462     = tree_cons (specargs, inner_parms,
3463                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
3464   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3465   return decl;
3466 }
3467
3468 /* Check that a template declaration's use of default arguments is not
3469    invalid.  Here, PARMS are the template parameters.  IS_PRIMARY is
3470    nonzero if DECL is the thing declared by a primary template.
3471    IS_PARTIAL is nonzero if DECL is a partial specialization.
3472    
3473
3474    IS_FRIEND_DECL is nonzero if DECL is a friend function template
3475    declaration (but not a definition); 1 indicates a declaration, 2
3476    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3477    emitted for extraneous default arguments.
3478
3479    Returns TRUE if there were no errors found, FALSE otherwise. */
3480
3481 bool
3482 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
3483                          int is_partial, int is_friend_decl)
3484 {
3485   const char *msg;
3486   int last_level_to_check;
3487   tree parm_level;
3488   bool no_errors = true;
3489
3490   /* [temp.param]
3491
3492      A default template-argument shall not be specified in a
3493      function template declaration or a function template definition, nor
3494      in the template-parameter-list of the definition of a member of a
3495      class template.  */
3496
3497   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
3498     /* You can't have a function template declaration in a local
3499        scope, nor you can you define a member of a class template in a
3500        local scope.  */
3501     return true;
3502
3503   if (current_class_type
3504       && !TYPE_BEING_DEFINED (current_class_type)
3505       && DECL_LANG_SPECIFIC (decl)
3506       /* If this is either a friend defined in the scope of the class
3507          or a member function.  */
3508       && (DECL_FUNCTION_MEMBER_P (decl)
3509           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3510           : DECL_FRIEND_CONTEXT (decl)
3511           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3512           : false)
3513       /* And, if it was a member function, it really was defined in
3514          the scope of the class.  */
3515       && (!DECL_FUNCTION_MEMBER_P (decl)
3516           || DECL_INITIALIZED_IN_CLASS_P (decl)))
3517     /* We already checked these parameters when the template was
3518        declared, so there's no need to do it again now.  This function
3519        was defined in class scope, but we're processing it's body now
3520        that the class is complete.  */
3521     return true;
3522
3523   /* Core issue 226 (C++0x only): the following only applies to class
3524      templates.  */
3525   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
3526     {
3527       /* [temp.param]
3528
3529          If a template-parameter has a default template-argument, all
3530          subsequent template-parameters shall have a default
3531          template-argument supplied.  */
3532       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3533         {
3534           tree inner_parms = TREE_VALUE (parm_level);
3535           int ntparms = TREE_VEC_LENGTH (inner_parms);
3536           int seen_def_arg_p = 0;
3537           int i;
3538
3539           for (i = 0; i < ntparms; ++i)
3540             {
3541               tree parm = TREE_VEC_ELT (inner_parms, i);
3542
3543               if (parm == error_mark_node)
3544                 continue;
3545
3546               if (TREE_PURPOSE (parm))
3547                 seen_def_arg_p = 1;
3548               else if (seen_def_arg_p)
3549                 {
3550                   error ("no default argument for %qD", TREE_VALUE (parm));
3551                   /* For better subsequent error-recovery, we indicate that
3552                      there should have been a default argument.  */
3553                   TREE_PURPOSE (parm) = error_mark_node;
3554                   no_errors = false;
3555                 }
3556             }
3557         }
3558     }
3559
3560   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
3561       || is_partial 
3562       || !is_primary
3563       || is_friend_decl)
3564     /* For an ordinary class template, default template arguments are
3565        allowed at the innermost level, e.g.:
3566          template <class T = int>
3567          struct S {};
3568        but, in a partial specialization, they're not allowed even
3569        there, as we have in [temp.class.spec]:
3570
3571          The template parameter list of a specialization shall not
3572          contain default template argument values.
3573
3574        So, for a partial specialization, or for a function template
3575        (in C++98/C++03), we look at all of them.  */
3576     ;
3577   else
3578     /* But, for a primary class template that is not a partial
3579        specialization we look at all template parameters except the
3580        innermost ones.  */
3581     parms = TREE_CHAIN (parms);
3582
3583   /* Figure out what error message to issue.  */
3584   if (is_friend_decl == 2)
3585     msg = "default template arguments may not be used in function template friend re-declaration";
3586   else if (is_friend_decl)
3587     msg = "default template arguments may not be used in function template friend declarations";
3588   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
3589     msg = "default template arguments may not be used in function templates";
3590   else if (is_partial)
3591     msg = "default template arguments may not be used in partial specializations";
3592   else
3593     msg = "default argument for template parameter for class enclosing %qD";
3594
3595   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
3596     /* If we're inside a class definition, there's no need to
3597        examine the parameters to the class itself.  On the one
3598        hand, they will be checked when the class is defined, and,
3599        on the other, default arguments are valid in things like:
3600          template <class T = double>
3601          struct S { template <class U> void f(U); };
3602        Here the default argument for `S' has no bearing on the
3603        declaration of `f'.  */
3604     last_level_to_check = template_class_depth (current_class_type) + 1;
3605   else
3606     /* Check everything.  */
3607     last_level_to_check = 0;
3608
3609   for (parm_level = parms;
3610        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
3611        parm_level = TREE_CHAIN (parm_level))
3612     {
3613       tree inner_parms = TREE_VALUE (parm_level);
3614       int i;
3615       int ntparms;
3616
3617       ntparms = TREE_VEC_LENGTH (inner_parms);
3618       for (i = 0; i < ntparms; ++i)
3619         {
3620           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
3621             continue;
3622
3623           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
3624             {
3625               if (msg)
3626                 {
3627                   no_errors = false;
3628                   if (is_friend_decl == 2)
3629                     return no_errors;
3630
3631                   error (msg, decl);
3632                   msg = 0;
3633                 }
3634
3635               /* Clear out the default argument so that we are not
3636                  confused later.  */
3637               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
3638             }
3639         }
3640
3641       /* At this point, if we're still interested in issuing messages,
3642          they must apply to classes surrounding the object declared.  */
3643       if (msg)
3644         msg = "default argument for template parameter for class enclosing %qD";
3645     }
3646
3647   return no_errors;
3648 }
3649
3650 /* Worker for push_template_decl_real, called via
3651    for_each_template_parm.  DATA is really an int, indicating the
3652    level of the parameters we are interested in.  If T is a template
3653    parameter of that level, return nonzero.  */
3654
3655 static int
3656 template_parm_this_level_p (tree t, void* data)
3657 {
3658   int this_level = *(int *)data;
3659   int level;
3660
3661   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3662     level = TEMPLATE_PARM_LEVEL (t);
3663   else
3664     level = TEMPLATE_TYPE_LEVEL (t);
3665   return level == this_level;
3666 }
3667
3668 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
3669    parameters given by current_template_args, or reuses a
3670    previously existing one, if appropriate.  Returns the DECL, or an
3671    equivalent one, if it is replaced via a call to duplicate_decls.
3672
3673    If IS_FRIEND is true, DECL is a friend declaration.  */
3674
3675 tree
3676 push_template_decl_real (tree decl, bool is_friend)
3677 {
3678   tree tmpl;
3679   tree args;
3680   tree info;
3681   tree ctx;
3682   int primary;
3683   int is_partial;
3684   int new_template_p = 0;
3685   /* True if the template is a member template, in the sense of
3686      [temp.mem].  */
3687   bool member_template_p = false;
3688
3689   if (decl == error_mark_node)
3690     return decl;
3691
3692   /* See if this is a partial specialization.  */
3693   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
3694                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3695                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
3696
3697   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
3698     is_friend = true;
3699
3700   if (is_friend)
3701     /* For a friend, we want the context of the friend function, not
3702        the type of which it is a friend.  */
3703     ctx = DECL_CONTEXT (decl);
3704   else if (CP_DECL_CONTEXT (decl)
3705            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
3706     /* In the case of a virtual function, we want the class in which
3707        it is defined.  */
3708     ctx = CP_DECL_CONTEXT (decl);
3709   else
3710     /* Otherwise, if we're currently defining some class, the DECL
3711        is assumed to be a member of the class.  */
3712     ctx = current_scope ();
3713
3714   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
3715     ctx = NULL_TREE;
3716
3717   if (!DECL_CONTEXT (decl))
3718     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
3719
3720   /* See if this is a primary template.  */
3721   if (is_friend && ctx)
3722     /* A friend template that specifies a class context, i.e.
3723          template <typename T> friend void A<T>::f();
3724        is not primary.  */
3725     primary = 0;
3726   else
3727     primary = template_parm_scope_p ();
3728
3729   if (primary)
3730     {
3731       if (DECL_CLASS_SCOPE_P (decl))
3732         member_template_p = true;
3733       if (TREE_CODE (decl) == TYPE_DECL
3734           && ANON_AGGRNAME_P (DECL_NAME (decl)))
3735         error ("template class without a name");
3736       else if (TREE_CODE (decl) == FUNCTION_DECL)
3737         {
3738           if (DECL_DESTRUCTOR_P (decl))
3739             {
3740               /* [temp.mem]
3741
3742                  A destructor shall not be a member template.  */
3743               error ("destructor %qD declared as member template", decl);
3744               return error_mark_node;
3745             }
3746           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3747               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3748                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3749                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3750                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3751                       == void_list_node)))
3752             {
3753               /* [basic.stc.dynamic.allocation]
3754
3755                  An allocation function can be a function
3756                  template. ... Template allocation functions shall
3757                  have two or more parameters.  */
3758               error ("invalid template declaration of %qD", decl);
3759               return error_mark_node;
3760             }
3761         }
3762       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3763                && CLASS_TYPE_P (TREE_TYPE (decl)))
3764         /* OK */;
3765       else
3766         {
3767           error ("template declaration of %q#D", decl);
3768           return error_mark_node;
3769         }
3770     }
3771
3772   /* Check to see that the rules regarding the use of default
3773      arguments are not being violated.  */
3774   check_default_tmpl_args (decl, current_template_parms,
3775                            primary, is_partial, /*is_friend_decl=*/0);
3776
3777   /* Ensure that there are no parameter packs in the type of this
3778      declaration that have not been expanded.  */
3779   if (TREE_CODE (decl) == FUNCTION_DECL)
3780     {
3781       /* Check each of the arguments individually to see if there are
3782          any bare parameter packs.  */
3783       tree type = TREE_TYPE (decl);
3784       tree arg = DECL_ARGUMENTS (decl);
3785       tree argtype = TYPE_ARG_TYPES (type);
3786
3787       while (arg && argtype)
3788         {
3789           if (!FUNCTION_PARAMETER_PACK_P (arg)
3790               && !check_for_bare_parameter_packs (TREE_TYPE (arg)))
3791             {
3792             /* This is a PARM_DECL that contains unexpanded parameter
3793                packs. We have already complained about this in the
3794                check_for_bare_parameter_packs call, so just replace
3795                these types with ERROR_MARK_NODE.  */
3796               TREE_TYPE (arg) = error_mark_node;
3797               TREE_VALUE (argtype) = error_mark_node;
3798             }
3799
3800           arg = TREE_CHAIN (arg);
3801           argtype = TREE_CHAIN (argtype);
3802         }
3803
3804       /* Check for bare parameter packs in the return type and the
3805          exception specifiers.  */
3806       check_for_bare_parameter_packs (TREE_TYPE (type));
3807       check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type));
3808     }
3809   else
3810     check_for_bare_parameter_packs (TREE_TYPE (decl));
3811
3812   if (is_partial)
3813     return process_partial_specialization (decl);
3814
3815   /* A primary class template can only have one parameter pack, at the
3816      end of the template parameter list.  */
3817   if (primary && TREE_CODE (decl) == TYPE_DECL)
3818     {
3819       tree inner_parms 
3820         = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3821       int i, len = TREE_VEC_LENGTH (inner_parms);
3822       for (i = 0; i < len - 1; i++)
3823         {
3824           tree parm = TREE_VALUE (TREE_VEC_ELT (inner_parms, i));
3825
3826           if (template_parameter_pack_p (parm))
3827             {
3828               if (TREE_CODE (parm) == PARM_DECL)
3829                 error ("parameter pack %qE must be at the end of the"
3830                        " template parameter list", parm);
3831               else
3832                 error ("parameter pack %qT must be at the end of the"
3833                        " template parameter list", TREE_TYPE (parm));
3834             }
3835         }
3836     }
3837
3838   args = current_template_args ();
3839
3840   if (!ctx
3841       || TREE_CODE (ctx) == FUNCTION_DECL
3842       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3843       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3844     {
3845       if (DECL_LANG_SPECIFIC (decl)
3846           && DECL_TEMPLATE_INFO (decl)
3847           && DECL_TI_TEMPLATE (decl))
3848         tmpl = DECL_TI_TEMPLATE (decl);
3849       /* If DECL is a TYPE_DECL for a class-template, then there won't
3850          be DECL_LANG_SPECIFIC.  The information equivalent to
3851          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
3852       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3853                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3854                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3855         {
3856           /* Since a template declaration already existed for this
3857              class-type, we must be redeclaring it here.  Make sure
3858              that the redeclaration is valid.  */
3859           redeclare_class_template (TREE_TYPE (decl),
3860                                     current_template_parms);
3861           /* We don't need to create a new TEMPLATE_DECL; just use the
3862              one we already had.  */
3863           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3864         }
3865       else
3866         {
3867           tmpl = build_template_decl (decl, current_template_parms,
3868                                       member_template_p);
3869           new_template_p = 1;
3870
3871           if (DECL_LANG_SPECIFIC (decl)
3872               && DECL_TEMPLATE_SPECIALIZATION (decl))
3873             {
3874               /* A specialization of a member template of a template
3875                  class.  */
3876               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3877               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3878               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3879             }
3880         }
3881     }
3882   else
3883     {
3884       tree a, t, current, parms;
3885       int i;
3886       tree tinfo = get_template_info (decl);
3887
3888       if (!tinfo)
3889         {
3890           error ("template definition of non-template %q#D", decl);
3891           return decl;
3892         }
3893
3894       tmpl = TI_TEMPLATE (tinfo);
3895
3896       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3897           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3898           && DECL_TEMPLATE_SPECIALIZATION (decl)
3899           && DECL_MEMBER_TEMPLATE_P (tmpl))
3900         {
3901           tree new_tmpl;
3902
3903           /* The declaration is a specialization of a member
3904              template, declared outside the class.  Therefore, the
3905              innermost template arguments will be NULL, so we
3906              replace them with the arguments determined by the
3907              earlier call to check_explicit_specialization.  */
3908           args = DECL_TI_ARGS (decl);
3909
3910           new_tmpl
3911             = build_template_decl (decl, current_template_parms,
3912                                    member_template_p);
3913           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3914           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3915           DECL_TI_TEMPLATE (decl) = new_tmpl;
3916           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3917           DECL_TEMPLATE_INFO (new_tmpl)
3918             = tree_cons (tmpl, args, NULL_TREE);
3919
3920           register_specialization (new_tmpl,
3921                                    most_general_template (tmpl),
3922                                    args,
3923                                    is_friend);
3924           return decl;
3925         }
3926
3927       /* Make sure the template headers we got make sense.  */
3928
3929       parms = DECL_TEMPLATE_PARMS (tmpl);
3930       i = TMPL_PARMS_DEPTH (parms);
3931       if (TMPL_ARGS_DEPTH (args) != i)
3932         {
3933           error ("expected %d levels of template parms for %q#D, got %d",
3934                  i, decl, TMPL_ARGS_DEPTH (args));
3935         }
3936       else
3937         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3938           {
3939             a = TMPL_ARGS_LEVEL (args, i);
3940             t = INNERMOST_TEMPLATE_PARMS (parms);
3941
3942             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3943               {
3944                 if (current == decl)
3945                   error ("got %d template parameters for %q#D",
3946                          TREE_VEC_LENGTH (a), decl);
3947                 else
3948                   error ("got %d template parameters for %q#T",
3949                          TREE_VEC_LENGTH (a), current);
3950                 error ("  but %d required", TREE_VEC_LENGTH (t));
3951                 return error_mark_node;
3952               }
3953
3954             if (current == decl)
3955               current = ctx;
3956             else
3957               current = (TYPE_P (current)
3958                          ? TYPE_CONTEXT (current)
3959                          : DECL_CONTEXT (current));
3960           }
3961
3962       /* Check that the parms are used in the appropriate qualifying scopes
3963          in the declarator.  */
3964       if (!comp_template_args
3965           (TI_ARGS (tinfo),
3966            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
3967         {
3968           error ("\
3969 template arguments to %qD do not match original template %qD",
3970                  decl, DECL_TEMPLATE_RESULT (tmpl));
3971           if (!uses_template_parms (TI_ARGS (tinfo)))
3972             inform ("use template<> for an explicit specialization");
3973           /* Avoid crash in import_export_decl.  */
3974           DECL_INTERFACE_KNOWN (decl) = 1;
3975           return error_mark_node;
3976         }
3977     }
3978
3979   DECL_TEMPLATE_RESULT (tmpl) = decl;
3980   TREE_TYPE (tmpl) = TREE_TYPE (decl);
3981
3982   /* Push template declarations for global functions and types.  Note
3983      that we do not try to push a global template friend declared in a
3984      template class; such a thing may well depend on the template
3985      parameters of the class.  */
3986   if (new_template_p && !ctx
3987       && !(is_friend && template_class_depth (current_class_type) > 0))
3988     {
3989       tmpl = pushdecl_namespace_level (tmpl, is_friend);
3990       if (tmpl == error_mark_node)
3991         return error_mark_node;
3992
3993       /* Hide template friend classes that haven't been declared yet.  */
3994       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
3995         {
3996           DECL_ANTICIPATED (tmpl) = 1;
3997           DECL_FRIEND_P (tmpl) = 1;
3998         }
3999     }
4000
4001   if (primary)
4002     {
4003       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4004       if (DECL_CONV_FN_P (tmpl))
4005         {
4006           int depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
4007
4008           /* It is a conversion operator. See if the type converted to
4009              depends on innermost template operands.  */
4010
4011           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4012                                          depth))
4013             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4014         }
4015     }
4016
4017   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4018      back to its most general template.  If TMPL is a specialization,
4019      ARGS may only have the innermost set of arguments.  Add the missing
4020      argument levels if necessary.  */
4021   if (DECL_TEMPLATE_INFO (tmpl))
4022     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4023
4024   info = tree_cons (tmpl, args, NULL_TREE);
4025
4026   if (DECL_IMPLICIT_TYPEDEF_P (decl))
4027     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4028   else if (DECL_LANG_SPECIFIC (decl))
4029     DECL_TEMPLATE_INFO (decl) = info;
4030
4031   return DECL_TEMPLATE_RESULT (tmpl);
4032 }
4033
4034 tree
4035 push_template_decl (tree decl)
4036 {
4037   return push_template_decl_real (decl, false);
4038 }
4039
4040 /* Called when a class template TYPE is redeclared with the indicated
4041    template PARMS, e.g.:
4042
4043      template <class T> struct S;
4044      template <class T> struct S {};  */
4045
4046 bool
4047 redeclare_class_template (tree type, tree parms)
4048 {
4049   tree tmpl;
4050   tree tmpl_parms;
4051   int i;
4052
4053   if (!TYPE_TEMPLATE_INFO (type))
4054     {
4055       error ("%qT is not a template type", type);
4056       return false;
4057     }
4058
4059   tmpl = TYPE_TI_TEMPLATE (type);
4060   if (!PRIMARY_TEMPLATE_P (tmpl))
4061     /* The type is nested in some template class.  Nothing to worry
4062        about here; there are no new template parameters for the nested
4063        type.  */
4064     return true;
4065
4066   if (!parms)
4067     {
4068       error ("template specifiers not specified in declaration of %qD",
4069              tmpl);
4070       return false;
4071     }
4072
4073   parms = INNERMOST_TEMPLATE_PARMS (parms);
4074   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4075
4076   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4077     {
4078       error ("previous declaration %q+D", tmpl);
4079       error ("used %d template parameter(s) instead of %d",
4080              TREE_VEC_LENGTH (tmpl_parms),
4081              TREE_VEC_LENGTH (parms));
4082       return false;
4083     }
4084
4085   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4086     {
4087       tree tmpl_parm;
4088       tree parm;
4089       tree tmpl_default;
4090       tree parm_default;
4091
4092       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4093           || TREE_VEC_ELT (parms, i) == error_mark_node)
4094         continue;
4095
4096       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4097       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4098       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4099       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4100
4101       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4102          TEMPLATE_DECL.  */
4103       if (tmpl_parm != error_mark_node
4104            && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4105            || (TREE_CODE (tmpl_parm) != TYPE_DECL
4106                && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))))
4107         {
4108           error ("template parameter %q+#D", tmpl_parm);
4109           error ("redeclared here as %q#D", parm);
4110           return false;
4111         }
4112
4113       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4114         {
4115           /* We have in [temp.param]:
4116
4117              A template-parameter may not be given default arguments
4118              by two different declarations in the same scope.  */
4119           error ("redefinition of default argument for %q#D", parm);
4120           error ("%J  original definition appeared here", tmpl_parm);
4121           return false;
4122         }
4123
4124       if (parm_default != NULL_TREE)
4125         /* Update the previous template parameters (which are the ones
4126            that will really count) with the new default value.  */
4127         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4128       else if (tmpl_default != NULL_TREE)
4129         /* Update the new parameters, too; they'll be used as the
4130            parameters for any members.  */
4131         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4132     }
4133
4134     return true;
4135 }
4136
4137 /* Simplify EXPR if it is a non-dependent expression.  Returns the
4138    (possibly simplified) expression.  */
4139
4140 tree
4141 fold_non_dependent_expr (tree expr)
4142 {
4143   if (expr == NULL_TREE)
4144     return NULL_TREE;
4145
4146   /* If we're in a template, but EXPR isn't value dependent, simplify
4147      it.  We're supposed to treat:
4148
4149        template <typename T> void f(T[1 + 1]);
4150        template <typename T> void f(T[2]);
4151
4152      as two declarations of the same function, for example.  */
4153   if (processing_template_decl
4154       && !type_dependent_expression_p (expr)
4155       && !value_dependent_expression_p (expr))
4156     {
4157       HOST_WIDE_INT saved_processing_template_decl;
4158
4159       saved_processing_template_decl = processing_template_decl;
4160       processing_template_decl = 0;
4161       expr = tsubst_copy_and_build (expr,
4162                                     /*args=*/NULL_TREE,
4163                                     tf_error,
4164                                     /*in_decl=*/NULL_TREE,
4165                                     /*function_p=*/false,
4166                                     /*integral_constant_expression_p=*/true);
4167       processing_template_decl = saved_processing_template_decl;
4168     }
4169   return expr;
4170 }
4171
4172 /* EXPR is an expression which is used in a constant-expression context.
4173    For instance, it could be a VAR_DECL with a constant initializer.
4174    Extract the innest constant expression.
4175
4176    This is basically a more powerful version of
4177    integral_constant_value, which can be used also in templates where
4178    initializers can maintain a syntactic rather than semantic form
4179    (even if they are non-dependent, for access-checking purposes).  */
4180
4181 static tree
4182 fold_decl_constant_value (tree expr)
4183 {
4184   tree const_expr = expr;
4185   do
4186     {
4187       expr = fold_non_dependent_expr (const_expr);
4188       const_expr = integral_constant_value (expr);
4189     }
4190   while (expr != const_expr);
4191
4192   return expr;
4193 }
4194
4195 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4196    must be a function or a pointer-to-function type, as specified
4197    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4198    and check that the resulting function has external linkage.  */
4199
4200 static tree
4201 convert_nontype_argument_function (tree type, tree expr)
4202 {
4203   tree fns = expr;
4204   tree fn, fn_no_ptr;
4205
4206   fn = instantiate_type (type, fns, tf_none);
4207   if (fn == error_mark_node)
4208     return error_mark_node;
4209
4210   fn_no_ptr = fn;
4211   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4212     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4213   if (TREE_CODE (fn_no_ptr) == BASELINK)
4214     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4215  
4216   /* [temp.arg.nontype]/1
4217
4218      A template-argument for a non-type, non-template template-parameter
4219      shall be one of:
4220      [...]
4221      -- the address of an object or function with external linkage.  */
4222   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4223     {
4224       error ("%qE is not a valid template argument for type %qT "
4225              "because function %qD has not external linkage",
4226              expr, type, fn_no_ptr);
4227       return NULL_TREE;
4228     }
4229
4230   return fn;
4231 }
4232
4233 /* Attempt to convert the non-type template parameter EXPR to the
4234    indicated TYPE.  If the conversion is successful, return the
4235    converted value.  If the conversion is unsuccessful, return
4236    NULL_TREE if we issued an error message, or error_mark_node if we
4237    did not.  We issue error messages for out-and-out bad template
4238    parameters, but not simply because the conversion failed, since we
4239    might be just trying to do argument deduction.  Both TYPE and EXPR
4240    must be non-dependent.
4241
4242    The conversion follows the special rules described in
4243    [temp.arg.nontype], and it is much more strict than an implicit
4244    conversion.
4245
4246    This function is called twice for each template argument (see
4247    lookup_template_class for a more accurate description of this
4248    problem). This means that we need to handle expressions which
4249    are not valid in a C++ source, but can be created from the
4250    first call (for instance, casts to perform conversions). These
4251    hacks can go away after we fix the double coercion problem.  */
4252
4253 static tree
4254 convert_nontype_argument (tree type, tree expr)
4255 {
4256   tree expr_type;
4257
4258   /* Detect immediately string literals as invalid non-type argument.
4259      This special-case is not needed for correctness (we would easily
4260      catch this later), but only to provide better diagnostic for this
4261      common user mistake. As suggested by DR 100, we do not mention
4262      linkage issues in the diagnostic as this is not the point.  */
4263   if (TREE_CODE (expr) == STRING_CST)
4264     {
4265       error ("%qE is not a valid template argument for type %qT "
4266              "because string literals can never be used in this context",
4267              expr, type);
4268       return NULL_TREE;
4269     }
4270
4271   /* If we are in a template, EXPR may be non-dependent, but still
4272      have a syntactic, rather than semantic, form.  For example, EXPR
4273      might be a SCOPE_REF, rather than the VAR_DECL to which the
4274      SCOPE_REF refers.  Preserving the qualifying scope is necessary
4275      so that access checking can be performed when the template is
4276      instantiated -- but here we need the resolved form so that we can
4277      convert the argument.  */
4278   expr = fold_non_dependent_expr (expr);
4279   if (error_operand_p (expr))
4280     return error_mark_node;
4281   expr_type = TREE_TYPE (expr);
4282
4283   /* HACK: Due to double coercion, we can get a
4284      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4285      which is the tree that we built on the first call (see
4286      below when coercing to reference to object or to reference to
4287      function). We just strip everything and get to the arg.
4288      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4289      for examples.  */
4290   if (TREE_CODE (expr) == NOP_EXPR)
4291     {
4292       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4293         {
4294           /* ??? Maybe we could use convert_from_reference here, but we
4295              would need to relax its constraints because the NOP_EXPR
4296              could actually change the type to something more cv-qualified,
4297              and this is not folded by convert_from_reference.  */
4298           tree addr = TREE_OPERAND (expr, 0);
4299           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4300           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4301           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4302           gcc_assert (same_type_ignoring_top_level_qualifiers_p
4303                       (TREE_TYPE (expr_type),
4304                        TREE_TYPE (TREE_TYPE (addr))));
4305
4306           expr = TREE_OPERAND (addr, 0);
4307           expr_type = TREE_TYPE (expr);
4308         }
4309
4310       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4311          parameter is a pointer to object, through decay and
4312          qualification conversion. Let's strip everything.  */
4313       else if (TYPE_PTROBV_P (type))
4314         {
4315           STRIP_NOPS (expr);
4316           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4317           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4318           /* Skip the ADDR_EXPR only if it is part of the decay for
4319              an array. Otherwise, it is part of the original argument
4320              in the source code.  */
4321           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4322             expr = TREE_OPERAND (expr, 0);
4323           expr_type = TREE_TYPE (expr);
4324         }
4325     }
4326
4327   /* [temp.arg.nontype]/5, bullet 1
4328
4329      For a non-type template-parameter of integral or enumeration type,
4330      integral promotions (_conv.prom_) and integral conversions
4331      (_conv.integral_) are applied.  */
4332   if (INTEGRAL_TYPE_P (type))
4333     {
4334       if (!INTEGRAL_TYPE_P (expr_type))
4335         return error_mark_node;
4336
4337       expr = fold_decl_constant_value (expr);
4338       /* Notice that there are constant expressions like '4 % 0' which
4339          do not fold into integer constants.  */
4340       if (TREE_CODE (expr) != INTEGER_CST)
4341         {
4342           error ("%qE is not a valid template argument for type %qT "
4343                  "because it is a non-constant expression", expr, type);
4344           return NULL_TREE;
4345         }
4346
4347       /* At this point, an implicit conversion does what we want,
4348          because we already know that the expression is of integral
4349          type.  */
4350       expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4351       if (expr == error_mark_node)
4352         return error_mark_node;
4353
4354       /* Conversion was allowed: fold it to a bare integer constant.  */
4355       expr = fold (expr);
4356     }
4357   /* [temp.arg.nontype]/5, bullet 2
4358
4359      For a non-type template-parameter of type pointer to object,
4360      qualification conversions (_conv.qual_) and the array-to-pointer
4361      conversion (_conv.array_) are applied.  */
4362   else if (TYPE_PTROBV_P (type))
4363     {
4364       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
4365
4366          A template-argument for a non-type, non-template template-parameter
4367          shall be one of: [...]
4368
4369          -- the name of a non-type template-parameter;
4370          -- the address of an object or function with external linkage, [...]
4371             expressed as "& id-expression" where the & is optional if the name
4372             refers to a function or array, or if the corresponding
4373             template-parameter is a reference.
4374
4375         Here, we do not care about functions, as they are invalid anyway
4376         for a parameter of type pointer-to-object.  */
4377
4378       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4379         /* Non-type template parameters are OK.  */
4380         ;
4381       else if (TREE_CODE (expr) != ADDR_EXPR
4382                && TREE_CODE (expr_type) != ARRAY_TYPE)
4383         {
4384           if (TREE_CODE (expr) == VAR_DECL)
4385             {
4386               error ("%qD is not a valid template argument "
4387                      "because %qD is a variable, not the address of "
4388                      "a variable",
4389                      expr, expr);
4390               return NULL_TREE;
4391             }
4392           /* Other values, like integer constants, might be valid
4393              non-type arguments of some other type.  */
4394           return error_mark_node;
4395         }
4396       else
4397         {
4398           tree decl;
4399
4400           decl = ((TREE_CODE (expr) == ADDR_EXPR)
4401                   ? TREE_OPERAND (expr, 0) : expr);
4402           if (TREE_CODE (decl) != VAR_DECL)
4403             {
4404               error ("%qE is not a valid template argument of type %qT "
4405                      "because %qE is not a variable",
4406                      expr, type, decl);
4407               return NULL_TREE;
4408             }
4409           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4410             {
4411               error ("%qE is not a valid template argument of type %qT "
4412                      "because %qD does not have external linkage",
4413                      expr, type, decl);
4414               return NULL_TREE;
4415             }
4416         }
4417
4418       expr = decay_conversion (expr);
4419       if (expr == error_mark_node)
4420         return error_mark_node;
4421
4422       expr = perform_qualification_conversions (type, expr);
4423       if (expr == error_mark_node)
4424         return error_mark_node;
4425     }
4426   /* [temp.arg.nontype]/5, bullet 3
4427
4428      For a non-type template-parameter of type reference to object, no
4429      conversions apply. The type referred to by the reference may be more
4430      cv-qualified than the (otherwise identical) type of the
4431      template-argument. The template-parameter is bound directly to the
4432      template-argument, which must be an lvalue.  */
4433   else if (TYPE_REF_OBJ_P (type))
4434     {
4435       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4436                                                       expr_type))
4437         return error_mark_node;
4438
4439       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4440         {
4441           error ("%qE is not a valid template argument for type %qT "
4442                  "because of conflicts in cv-qualification", expr, type);
4443           return NULL_TREE;
4444         }
4445
4446       if (!real_lvalue_p (expr))
4447         {
4448           error ("%qE is not a valid template argument for type %qT "
4449                  "because it is not an lvalue", expr, type);
4450           return NULL_TREE;
4451         }
4452
4453       /* [temp.arg.nontype]/1
4454
4455          A template-argument for a non-type, non-template template-parameter
4456          shall be one of: [...]
4457
4458          -- the address of an object or function with external linkage.  */
4459       if (!DECL_EXTERNAL_LINKAGE_P (expr))
4460         {
4461           error ("%qE is not a valid template argument for type %qT "
4462                  "because object %qD has not external linkage",
4463                  expr, type, expr);
4464           return NULL_TREE;
4465         }
4466
4467       expr = build_nop (type, build_address (expr));
4468     }
4469   /* [temp.arg.nontype]/5, bullet 4
4470
4471      For a non-type template-parameter of type pointer to function, only
4472      the function-to-pointer conversion (_conv.func_) is applied. If the
4473      template-argument represents a set of overloaded functions (or a
4474      pointer to such), the matching function is selected from the set
4475      (_over.over_).  */
4476   else if (TYPE_PTRFN_P (type))
4477     {
4478       /* If the argument is a template-id, we might not have enough
4479          context information to decay the pointer.  */
4480       if (!type_unknown_p (expr_type))
4481         {
4482           expr = decay_conversion (expr);
4483           if (expr == error_mark_node)
4484             return error_mark_node;
4485         }
4486
4487       expr = convert_nontype_argument_function (type, expr);
4488       if (!expr || expr == error_mark_node)
4489         return expr;
4490     }
4491   /* [temp.arg.nontype]/5, bullet 5
4492
4493      For a non-type template-parameter of type reference to function, no
4494      conversions apply. If the template-argument represents a set of
4495      overloaded functions, the matching function is selected from the set
4496      (_over.over_).  */
4497   else if (TYPE_REFFN_P (type))
4498     {
4499       if (TREE_CODE (expr) == ADDR_EXPR)
4500         {
4501           error ("%qE is not a valid template argument for type %qT "
4502                  "because it is a pointer", expr, type);
4503           inform ("try using %qE instead", TREE_OPERAND (expr, 0));
4504           return NULL_TREE;
4505         }
4506
4507       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4508       if (!expr || expr == error_mark_node)
4509         return expr;
4510
4511       expr = build_nop (type, build_address (expr));
4512     }
4513   /* [temp.arg.nontype]/5, bullet 6
4514
4515      For a non-type template-parameter of type pointer to member function,
4516      no conversions apply. If the template-argument represents a set of
4517      overloaded member functions, the matching member function is selected
4518      from the set (_over.over_).  */
4519   else if (TYPE_PTRMEMFUNC_P (type))
4520     {
4521       expr = instantiate_type (type, expr, tf_none);
4522       if (expr == error_mark_node)
4523         return error_mark_node;
4524
4525       /* There is no way to disable standard conversions in
4526          resolve_address_of_overloaded_function (called by
4527          instantiate_type). It is possible that the call succeeded by
4528          converting &B::I to &D::I (where B is a base of D), so we need
4529          to reject this conversion here.
4530
4531          Actually, even if there was a way to disable standard conversions,
4532          it would still be better to reject them here so that we can
4533          provide a superior diagnostic.  */
4534       if (!same_type_p (TREE_TYPE (expr), type))
4535         {
4536           /* Make sure we are just one standard conversion off.  */
4537           gcc_assert (can_convert (type, TREE_TYPE (expr)));
4538           error ("%qE is not a valid template argument for type %qT "
4539                  "because it is of type %qT", expr, type,
4540                  TREE_TYPE (expr));
4541           inform ("standard conversions are not allowed in this context");
4542           return NULL_TREE;
4543         }
4544     }
4545   /* [temp.arg.nontype]/5, bullet 7
4546
4547      For a non-type template-parameter of type pointer to data member,
4548      qualification conversions (_conv.qual_) are applied.  */
4549   else if (TYPE_PTRMEM_P (type))
4550     {
4551       expr = perform_qualification_conversions (type, expr);
4552       if (expr == error_mark_node)
4553         return expr;
4554     }
4555   /* A template non-type parameter must be one of the above.  */
4556   else
4557     gcc_unreachable ();
4558
4559   /* Sanity check: did we actually convert the argument to the
4560      right type?  */
4561   gcc_assert (same_type_p (type, TREE_TYPE (expr)));
4562   return expr;
4563 }
4564
4565
4566 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4567    template template parameters.  Both PARM_PARMS and ARG_PARMS are
4568    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
4569    or PARM_DECL.
4570
4571    Consider the example:
4572      template <class T> class A;
4573      template<template <class U> class TT> class B;
4574
4575    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4576    the parameters to A, and OUTER_ARGS contains A.  */
4577
4578 static int
4579 coerce_template_template_parms (tree parm_parms,
4580                                 tree arg_parms,
4581                                 tsubst_flags_t complain,
4582                                 tree in_decl,
4583                                 tree outer_args)
4584 {
4585   int nparms, nargs, i;
4586   tree parm, arg;
4587
4588   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
4589   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
4590
4591   nparms = TREE_VEC_LENGTH (parm_parms);
4592   nargs = TREE_VEC_LENGTH (arg_parms);
4593
4594   if (nargs != nparms)
4595     return 0;
4596
4597   for (i = 0; i < nparms; ++i)
4598     {
4599       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
4600           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4601         continue;
4602
4603       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4604       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4605
4606       if (arg == NULL_TREE || arg == error_mark_node
4607           || parm == NULL_TREE || parm == error_mark_node)
4608         return 0;
4609
4610       if (TREE_CODE (arg) != TREE_CODE (parm))
4611         return 0;
4612
4613       switch (TREE_CODE (parm))
4614         {
4615         case TEMPLATE_DECL:
4616           /* We encounter instantiations of templates like
4617                template <template <template <class> class> class TT>
4618                class C;  */
4619           {
4620             tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4621             tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4622
4623             if (!coerce_template_template_parms
4624                 (parmparm, argparm, complain, in_decl, outer_args))
4625               return 0;
4626           }
4627           /* Fall through.  */
4628
4629         case TYPE_DECL:
4630           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))
4631               != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg)))
4632             /* One is a parameter pack, the other is not.  */
4633             return 0;
4634           break;
4635
4636         case PARM_DECL:
4637           /* The tsubst call is used to handle cases such as
4638
4639                template <int> class C {};
4640                template <class T, template <T> class TT> class D {};
4641                D<int, C> d;
4642
4643              i.e. the parameter list of TT depends on earlier parameters.  */
4644           if (!dependent_type_p (TREE_TYPE (arg))
4645               && !same_type_p
4646                     (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
4647                              TREE_TYPE (arg)))
4648             return 0;
4649
4650           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
4651               != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg)))
4652             /* One is a parameter pack, the other is not.  */
4653             return 0;
4654           break;
4655
4656         default:
4657           gcc_unreachable ();
4658         }
4659     }
4660   return 1;
4661 }
4662
4663 /* Convert the indicated template ARG as necessary to match the
4664    indicated template PARM.  Returns the converted ARG, or
4665    error_mark_node if the conversion was unsuccessful.  Error and
4666    warning messages are issued under control of COMPLAIN.  This
4667    conversion is for the Ith parameter in the parameter list.  ARGS is
4668    the full set of template arguments deduced so far.  */
4669
4670 static tree
4671 convert_template_argument (tree parm,
4672                            tree arg,
4673                            tree args,
4674                            tsubst_flags_t complain,
4675                            int i,
4676                            tree in_decl)
4677 {
4678   tree orig_arg;
4679   tree val;
4680   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
4681
4682   if (TREE_CODE (arg) == TREE_LIST
4683       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
4684     {
4685       /* The template argument was the name of some
4686          member function.  That's usually
4687          invalid, but static members are OK.  In any
4688          case, grab the underlying fields/functions
4689          and issue an error later if required.  */
4690       orig_arg = TREE_VALUE (arg);
4691       TREE_TYPE (arg) = unknown_type_node;
4692     }
4693
4694   orig_arg = arg;
4695
4696   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
4697   requires_type = (TREE_CODE (parm) == TYPE_DECL
4698                    || requires_tmpl_type);
4699
4700   /* When determining whether an argument pack expansion is a template,
4701      look at the pattern.  */
4702   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
4703     arg = PACK_EXPANSION_PATTERN (arg);
4704
4705   is_tmpl_type = 
4706     ((TREE_CODE (arg) == TEMPLATE_DECL
4707       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
4708      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4709      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
4710
4711   if (is_tmpl_type
4712       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4713           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
4714     arg = TYPE_STUB_DECL (arg);
4715
4716   is_type = TYPE_P (arg) || is_tmpl_type;
4717
4718   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
4719       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
4720     {
4721       pedwarn ("to refer to a type member of a template parameter, "
4722                "use %<typename %E%>", orig_arg);
4723
4724       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
4725                                      TREE_OPERAND (arg, 1),
4726                                      typename_type,
4727                                      complain & tf_error);
4728       arg = orig_arg;
4729       is_type = 1;
4730     }
4731   if (is_type != requires_type)
4732     {
4733       if (in_decl)
4734         {
4735           if (complain & tf_error)
4736             {
4737               error ("type/value mismatch at argument %d in template "
4738                      "parameter list for %qD",
4739                      i + 1, in_decl);
4740               if (is_type)
4741                 error ("  expected a constant of type %qT, got %qT",
4742                        TREE_TYPE (parm),
4743                        (is_tmpl_type ? DECL_NAME (arg) : orig_arg));
4744               else if (requires_tmpl_type)
4745                 error ("  expected a class template, got %qE", orig_arg);
4746               else
4747                 error ("  expected a type, got %qE", orig_arg);
4748             }
4749         }
4750       return error_mark_node;
4751     }
4752   if (is_tmpl_type ^ requires_tmpl_type)
4753     {
4754       if (in_decl && (complain & tf_error))
4755         {
4756           error ("type/value mismatch at argument %d in template "
4757                  "parameter list for %qD",
4758                  i + 1, in_decl);
4759           if (is_tmpl_type)
4760             error ("  expected a type, got %qT", DECL_NAME (arg));
4761           else
4762             error ("  expected a class template, got %qT", orig_arg);
4763         }
4764       return error_mark_node;
4765     }
4766
4767   if (is_type)
4768     {
4769       if (requires_tmpl_type)
4770         {
4771           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
4772             /* The number of argument required is not known yet.
4773                Just accept it for now.  */
4774             val = TREE_TYPE (arg);
4775           else
4776             {
4777               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4778               tree argparm;
4779
4780               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4781
4782               if (coerce_template_template_parms (parmparm, argparm,
4783                                                   complain, in_decl,
4784                                                   args))
4785                 {
4786                   val = orig_arg;
4787
4788                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
4789                      TEMPLATE_DECL.  */
4790                   if (val != error_mark_node)
4791                     {
4792                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
4793                         val = TREE_TYPE (val);
4794                       else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
4795                                && DECL_TEMPLATE_TEMPLATE_PARM_P (arg))
4796                         {
4797                           val = TREE_TYPE (arg);
4798                           val = make_pack_expansion (val);
4799                         }
4800                     }
4801                 }
4802               else
4803                 {
4804                   if (in_decl && (complain & tf_error))
4805                     {
4806                       error ("type/value mismatch at argument %d in "
4807                              "template parameter list for %qD",
4808                              i + 1, in_decl);
4809                       error ("  expected a template of type %qD, got %qD",
4810                              parm, orig_arg);
4811                     }
4812
4813                   val = error_mark_node;
4814                 }
4815             }
4816         }
4817       else
4818         val = orig_arg;
4819       /* We only form one instance of each template specialization.
4820          Therefore, if we use a non-canonical variant (i.e., a
4821          typedef), any future messages referring to the type will use
4822          the typedef, which is confusing if those future uses do not
4823          themselves also use the typedef.  */
4824       if (TYPE_P (val))
4825         val = canonical_type_variant (val);
4826     }
4827   else
4828     {
4829       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
4830
4831       if (invalid_nontype_parm_type_p (t, complain))
4832         return error_mark_node;
4833
4834       if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
4835         /* We used to call digest_init here.  However, digest_init
4836            will report errors, which we don't want when complain
4837            is zero.  More importantly, digest_init will try too
4838            hard to convert things: for example, `0' should not be
4839            converted to pointer type at this point according to
4840            the standard.  Accepting this is not merely an
4841            extension, since deciding whether or not these
4842            conversions can occur is part of determining which
4843            function template to call, or whether a given explicit
4844            argument specification is valid.  */
4845         val = convert_nontype_argument (t, orig_arg);
4846       else
4847         val = orig_arg;
4848
4849       if (val == NULL_TREE)
4850         val = error_mark_node;
4851       else if (val == error_mark_node && (complain & tf_error))
4852         error ("could not convert template argument %qE to %qT",  orig_arg, t);
4853     }
4854
4855   return val;
4856 }
4857
4858 /* Coerces the remaining template arguments in INNER_ARGS (from
4859    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
4860    Returns the coerced argument pack. PARM_IDX is the position of this
4861    parameter in the template parameter list. ARGS is the original
4862    template argument list.  */
4863 static tree
4864 coerce_template_parameter_pack (tree parms,
4865                                 int parm_idx,
4866                                 tree args,
4867                                 tree inner_args,
4868                                 int arg_idx,
4869                                 tree new_args,
4870                                 int* lost,
4871                                 tree in_decl,
4872                                 tsubst_flags_t complain)
4873 {
4874   tree parm = TREE_VEC_ELT (parms, parm_idx);
4875   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
4876   tree packed_args;
4877   tree argument_pack;
4878   tree packed_types = NULL_TREE;
4879
4880   if (arg_idx > nargs)
4881     arg_idx = nargs;
4882
4883   packed_args = make_tree_vec (nargs - arg_idx);
4884
4885   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
4886       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
4887     {
4888       /* When the template parameter is a non-type template
4889          parameter pack whose type uses parameter packs, we need
4890          to look at each of the template arguments
4891          separately. Build a vector of the types for these
4892          non-type template parameters in PACKED_TYPES.  */
4893       tree expansion 
4894         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
4895       packed_types = tsubst_pack_expansion (expansion, args,
4896                                             complain, in_decl);
4897
4898       if (packed_types == error_mark_node)
4899         return error_mark_node;
4900
4901       /* Check that we have the right number of arguments.  */
4902       if (arg_idx < nargs
4903           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
4904           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
4905         {
4906           int needed_parms 
4907             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
4908           error ("wrong number of template arguments (%d, should be %d)",
4909                  nargs, needed_parms);
4910           return error_mark_node;
4911         }
4912
4913       /* If we aren't able to check the actual arguments now
4914          (because they haven't been expanded yet), we can at least
4915          verify that all of the types used for the non-type
4916          template parameter pack are, in fact, valid for non-type
4917          template parameters.  */
4918       if (arg_idx < nargs 
4919           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
4920         {
4921           int j, len = TREE_VEC_LENGTH (packed_types);
4922           for (j = 0; j < len; ++j)
4923             {
4924               tree t = TREE_VEC_ELT (packed_types, j);
4925               if (invalid_nontype_parm_type_p (t, complain))
4926                 return error_mark_node;
4927             }
4928         }
4929     }
4930
4931   /* Convert the remaining arguments, which will be a part of the
4932      parameter pack "parm".  */
4933   for (; arg_idx < nargs; ++arg_idx)
4934     {
4935       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
4936       tree actual_parm = TREE_VALUE (parm);
4937
4938       if (packed_types && !PACK_EXPANSION_P (arg))
4939         {
4940           /* When we have a vector of types (corresponding to the
4941              non-type template parameter pack that uses parameter
4942              packs in its type, as mention above), and the
4943              argument is not an expansion (which expands to a
4944              currently unknown number of arguments), clone the
4945              parm and give it the next type in PACKED_TYPES.  */
4946           actual_parm = copy_node (actual_parm);
4947           TREE_TYPE (actual_parm) = 
4948             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
4949         }
4950
4951       if (arg != error_mark_node)
4952         arg = convert_template_argument (actual_parm, 
4953                                          arg, new_args, complain, parm_idx,
4954                                          in_decl);
4955       if (arg == error_mark_node)
4956         (*lost)++;
4957       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
4958     }
4959
4960   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
4961       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
4962     argument_pack = make_node (TYPE_ARGUMENT_PACK);
4963   else
4964     {
4965       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
4966       TREE_TYPE (argument_pack) 
4967         = tsubst (TREE_TYPE (TREE_VALUE (parm)), args, complain, in_decl);
4968       TREE_CONSTANT (argument_pack) = 1;
4969     }
4970
4971   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
4972   return argument_pack;
4973 }
4974
4975 /* Convert all template arguments to their appropriate types, and
4976    return a vector containing the innermost resulting template
4977    arguments.  If any error occurs, return error_mark_node. Error and
4978    warning messages are issued under control of COMPLAIN.
4979
4980    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
4981    for arguments not specified in ARGS.  Otherwise, if
4982    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
4983    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
4984    USE_DEFAULT_ARGS is false, then all arguments must be specified in
4985    ARGS.  */
4986
4987 static tree
4988 coerce_template_parms (tree parms,
4989                        tree args,
4990                        tree in_decl,
4991                        tsubst_flags_t complain,
4992                        bool require_all_args,
4993                        bool use_default_args)
4994 {
4995   int nparms, nargs, parm_idx, arg_idx, lost = 0;
4996   tree inner_args;
4997   tree new_args;
4998   tree new_inner_args;
4999   bool saved_skip_evaluation;
5000
5001   /* When used as a boolean value, indicates whether this is a
5002      variadic template parameter list. Since it's an int, we can also
5003      subtract it from nparms to get the number of non-variadic
5004      parameters.  */
5005   int variadic_p = 0;
5006
5007   inner_args 
5008     = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
5009
5010   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5011   nparms = TREE_VEC_LENGTH (parms);
5012
5013   /* Determine if there are any parameter packs.  */
5014   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
5015     {
5016       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5017       if (template_parameter_pack_p (tparm))
5018         {
5019           variadic_p = 1;
5020           break;
5021         }
5022     }
5023
5024   if ((nargs > nparms - variadic_p && !variadic_p)
5025       || (nargs < nparms - variadic_p
5026           && require_all_args
5027           && (!use_default_args
5028               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
5029                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
5030     {
5031       if (complain & tf_error)
5032         {
5033           const char *or_more = "";
5034           if (variadic_p)
5035             {
5036               or_more = " or more";
5037               --nparms;
5038             }
5039
5040           error ("wrong number of template arguments (%d, should be %d%s)",
5041                  nargs, nparms, or_more);
5042
5043           if (in_decl)
5044             error ("provided for %q+D", in_decl);
5045         }
5046
5047       return error_mark_node;
5048     }
5049
5050   /* We need to evaluate the template arguments, even though this
5051      template-id may be nested within a "sizeof".  */
5052   saved_skip_evaluation = skip_evaluation;
5053   skip_evaluation = false;
5054   new_inner_args = make_tree_vec (nparms);
5055   new_args = add_outermost_template_args (args, new_inner_args);
5056   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5057     {
5058       tree arg;
5059       tree parm;
5060
5061       /* Get the Ith template parameter.  */
5062       parm = TREE_VEC_ELT (parms, parm_idx);
5063  
5064       if (parm == error_mark_node)
5065       {
5066         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5067         continue;
5068       }
5069
5070       /* Calculate the next argument.  */
5071       if (template_parameter_pack_p (TREE_VALUE (parm)))
5072         {
5073           /* All remaining arguments will be placed in the
5074              template parameter pack PARM.  */
5075           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
5076                                                 inner_args, arg_idx,
5077                                                 new_args, &lost,
5078                                                 in_decl, complain);
5079           
5080           /* Store this argument.  */
5081           if (arg == error_mark_node)
5082             lost++;
5083           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5084
5085           /* We are done with all of the arguments.  */
5086           arg_idx = nargs;
5087
5088           continue;
5089         }
5090       else if (arg_idx < nargs)
5091         {
5092           arg = TREE_VEC_ELT (inner_args, arg_idx);
5093
5094           if (arg && PACK_EXPANSION_P (arg))
5095             {
5096               /* If ARG is a pack expansion, but PARM is not a
5097                  template parameter pack (if it were, we would have
5098                  handled it above), we're trying to expand into a
5099                  fixed-length argument list.  */
5100               if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5101                 error ("cannot expand %<%E%> into a fixed-length "
5102                        "argument list", arg);
5103               else
5104                 error ("cannot expand %<%T%> into a fixed-length "
5105                        "argument list", arg);
5106               return error_mark_node;
5107             }
5108         }
5109       else if (require_all_args)
5110         /* There must be a default arg in this case.  */
5111         arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5112                                    complain, in_decl);
5113       else
5114         break;
5115
5116       if (arg == error_mark_node)
5117         {
5118           if (complain & tf_error)
5119             error ("template argument %d is invalid", arg_idx + 1);
5120         }
5121       else if (!arg)
5122         /* This only occurs if there was an error in the template
5123            parameter list itself (which we would already have
5124            reported) that we are trying to recover from, e.g., a class
5125            template with a parameter list such as
5126            template<typename..., typename>.  */
5127         return error_mark_node;
5128       else
5129         arg = convert_template_argument (TREE_VALUE (parm),
5130                                          arg, new_args, complain, 
5131                                          parm_idx, in_decl);
5132
5133       if (arg == error_mark_node)
5134         lost++;
5135       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5136     }
5137   skip_evaluation = saved_skip_evaluation;
5138
5139   if (lost)
5140     return error_mark_node;
5141
5142   return new_inner_args;
5143 }
5144
5145 /* Returns 1 if template args OT and NT are equivalent.  */
5146
5147 static int
5148 template_args_equal (tree ot, tree nt)
5149 {
5150   if (nt == ot)
5151     return 1;
5152
5153   if (TREE_CODE (nt) == TREE_VEC)
5154     /* For member templates */
5155     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5156   else if (PACK_EXPANSION_P (ot))
5157     return PACK_EXPANSION_P (nt) 
5158       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5159                               PACK_EXPANSION_PATTERN (nt));
5160   else if (TYPE_P (nt))
5161     return TYPE_P (ot) && same_type_p (ot, nt);
5162   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5163     return 0;
5164   else
5165     return cp_tree_equal (ot, nt);
5166 }
5167
5168 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5169    of template arguments.  Returns 0 otherwise.  */
5170
5171 int
5172 comp_template_args (tree oldargs, tree newargs)
5173 {
5174   int i;
5175
5176   oldargs = expand_template_argument_pack (oldargs);
5177   newargs = expand_template_argument_pack (newargs);
5178
5179   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5180     return 0;
5181
5182   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5183     {
5184       tree nt = TREE_VEC_ELT (newargs, i);
5185       tree ot = TREE_VEC_ELT (oldargs, i);
5186
5187       if (! template_args_equal (ot, nt))
5188         return 0;
5189     }
5190   return 1;
5191 }
5192
5193 static void
5194 add_pending_template (tree d)
5195 {
5196   tree ti = (TYPE_P (d)
5197              ? CLASSTYPE_TEMPLATE_INFO (d)
5198              : DECL_TEMPLATE_INFO (d));
5199   struct pending_template *pt;
5200   int level;
5201
5202   if (TI_PENDING_TEMPLATE_FLAG (ti))
5203     return;
5204
5205   /* We are called both from instantiate_decl, where we've already had a
5206      tinst_level pushed, and instantiate_template, where we haven't.
5207      Compensate.  */
5208   level = !current_tinst_level || current_tinst_level->decl != d;
5209
5210   if (level)
5211     push_tinst_level (d);
5212
5213   pt = GGC_NEW (struct pending_template);
5214   pt->next = NULL;
5215   pt->tinst = current_tinst_level;
5216   if (last_pending_template)
5217     last_pending_template->next = pt;
5218   else
5219     pending_templates = pt;
5220
5221   last_pending_template = pt;
5222
5223   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5224
5225   if (level)
5226     pop_tinst_level ();
5227 }
5228
5229
5230 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5231    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
5232    documentation for TEMPLATE_ID_EXPR.  */
5233
5234 tree
5235 lookup_template_function (tree fns, tree arglist)
5236 {
5237   tree type;
5238
5239   if (fns == error_mark_node || arglist == error_mark_node)
5240     return error_mark_node;
5241
5242   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5243   gcc_assert (fns && (is_overloaded_fn (fns)
5244                       || TREE_CODE (fns) == IDENTIFIER_NODE));
5245
5246   if (BASELINK_P (fns))
5247     {
5248       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5249                                          unknown_type_node,
5250                                          BASELINK_FUNCTIONS (fns),
5251                                          arglist);
5252       return fns;
5253     }
5254
5255   type = TREE_TYPE (fns);
5256   if (TREE_CODE (fns) == OVERLOAD || !type)
5257     type = unknown_type_node;
5258
5259   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5260 }
5261
5262 /* Within the scope of a template class S<T>, the name S gets bound
5263    (in build_self_reference) to a TYPE_DECL for the class, not a
5264    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
5265    or one of its enclosing classes, and that type is a template,
5266    return the associated TEMPLATE_DECL.  Otherwise, the original
5267    DECL is returned.  */
5268
5269 tree
5270 maybe_get_template_decl_from_type_decl (tree decl)
5271 {
5272   return (decl != NULL_TREE
5273           && TREE_CODE (decl) == TYPE_DECL
5274           && DECL_ARTIFICIAL (decl)
5275           && CLASS_TYPE_P (TREE_TYPE (decl))
5276           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5277     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5278 }
5279
5280 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5281    parameters, find the desired type.
5282
5283    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5284
5285    IN_DECL, if non-NULL, is the template declaration we are trying to
5286    instantiate.
5287
5288    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5289    the class we are looking up.
5290
5291    Issue error and warning messages under control of COMPLAIN.
5292
5293    If the template class is really a local class in a template
5294    function, then the FUNCTION_CONTEXT is the function in which it is
5295    being instantiated.
5296
5297    ??? Note that this function is currently called *twice* for each
5298    template-id: the first time from the parser, while creating the
5299    incomplete type (finish_template_type), and the second type during the
5300    real instantiation (instantiate_template_class). This is surely something
5301    that we want to avoid. It also causes some problems with argument
5302    coercion (see convert_nontype_argument for more information on this).  */
5303
5304 tree
5305 lookup_template_class (tree d1,
5306                        tree arglist,
5307                        tree in_decl,
5308                        tree context,
5309                        int entering_scope,
5310                        tsubst_flags_t complain)
5311 {
5312   tree template = NULL_TREE, parmlist;
5313   tree t;
5314
5315   timevar_push (TV_NAME_LOOKUP);
5316
5317   if (TREE_CODE (d1) == IDENTIFIER_NODE)
5318     {
5319       tree value = innermost_non_namespace_value (d1);
5320       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5321         template = value;
5322       else
5323         {
5324           if (context)
5325             push_decl_namespace (context);
5326           template = lookup_name (d1);
5327           template = maybe_get_template_decl_from_type_decl (template);
5328           if (context)
5329             pop_decl_namespace ();
5330         }
5331       if (template)
5332         context = DECL_CONTEXT (template);
5333     }
5334   else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
5335     {
5336       tree type = TREE_TYPE (d1);
5337
5338       /* If we are declaring a constructor, say A<T>::A<T>, we will get
5339          an implicit typename for the second A.  Deal with it.  */
5340       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5341         type = TREE_TYPE (type);
5342
5343       if (CLASSTYPE_TEMPLATE_INFO (type))
5344         {
5345           template = CLASSTYPE_TI_TEMPLATE (type);
5346           d1 = DECL_NAME (template);
5347         }
5348     }
5349   else if (TREE_CODE (d1) == ENUMERAL_TYPE
5350            || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
5351     {
5352       template = TYPE_TI_TEMPLATE (d1);
5353       d1 = DECL_NAME (template);
5354     }
5355   else if (TREE_CODE (d1) == TEMPLATE_DECL
5356            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
5357     {
5358       template = d1;
5359       d1 = DECL_NAME (template);
5360       context = DECL_CONTEXT (template);
5361     }
5362
5363   /* Issue an error message if we didn't find a template.  */
5364   if (! template)
5365     {
5366       if (complain & tf_error)
5367         error ("%qT is not a template", d1);
5368       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5369     }
5370
5371   if (TREE_CODE (template) != TEMPLATE_DECL
5372          /* Make sure it's a user visible template, if it was named by
5373             the user.  */
5374       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
5375           && !PRIMARY_TEMPLATE_P (template)))
5376     {
5377       if (complain & tf_error)
5378         {
5379           error ("non-template type %qT used as a template", d1);
5380           if (in_decl)
5381             error ("for template declaration %q+D", in_decl);
5382         }
5383       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5384     }
5385
5386   complain &= ~tf_user;
5387
5388   if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
5389     {
5390       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5391          template arguments */
5392
5393       tree parm;
5394       tree arglist2;
5395
5396       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
5397
5398       /* Consider an example where a template template parameter declared as
5399
5400            template <class T, class U = std::allocator<T> > class TT
5401
5402          The template parameter level of T and U are one level larger than
5403          of TT.  To proper process the default argument of U, say when an
5404          instantiation `TT<int>' is seen, we need to build the full
5405          arguments containing {int} as the innermost level.  Outer levels,
5406          available when not appearing as default template argument, can be
5407          obtained from `current_template_args ()'.
5408
5409          Suppose that TT is later substituted with std::vector.  The above
5410          instantiation is `TT<int, std::allocator<T> >' with TT at
5411          level 1, and T at level 2, while the template arguments at level 1
5412          becomes {std::vector} and the inner level 2 is {int}.  */
5413
5414       if (current_template_parms)
5415         arglist = add_to_template_args (current_template_args (), arglist);
5416
5417       arglist2 = coerce_template_parms (parmlist, arglist, template,
5418                                         complain,
5419                                         /*require_all_args=*/true,
5420                                         /*use_default_args=*/true);
5421       if (arglist2 == error_mark_node
5422           || (!uses_template_parms (arglist2)
5423               && check_instantiated_args (template, arglist2, complain)))
5424         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5425
5426       parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
5427       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
5428     }
5429   else
5430     {
5431       tree template_type = TREE_TYPE (template);
5432       tree gen_tmpl;
5433       tree type_decl;
5434       tree found = NULL_TREE;
5435       int arg_depth;
5436       int parm_depth;
5437       int is_partial_instantiation;
5438
5439       gen_tmpl = most_general_template (template);
5440       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
5441       parm_depth = TMPL_PARMS_DEPTH (parmlist);
5442       arg_depth = TMPL_ARGS_DEPTH (arglist);
5443
5444       if (arg_depth == 1 && parm_depth > 1)
5445         {
5446           /* We've been given an incomplete set of template arguments.
5447              For example, given:
5448
5449                template <class T> struct S1 {
5450                  template <class U> struct S2 {};
5451                  template <class U> struct S2<U*> {};
5452                 };
5453
5454              we will be called with an ARGLIST of `U*', but the
5455              TEMPLATE will be `template <class T> template
5456              <class U> struct S1<T>::S2'.  We must fill in the missing
5457              arguments.  */
5458           arglist
5459             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
5460                                            arglist);
5461           arg_depth = TMPL_ARGS_DEPTH (arglist);
5462         }
5463
5464       /* Now we should have enough arguments.  */
5465       gcc_assert (parm_depth == arg_depth);
5466
5467       /* From here on, we're only interested in the most general
5468          template.  */
5469       template = gen_tmpl;
5470
5471       /* Calculate the BOUND_ARGS.  These will be the args that are
5472          actually tsubst'd into the definition to create the
5473          instantiation.  */
5474       if (parm_depth > 1)
5475         {
5476           /* We have multiple levels of arguments to coerce, at once.  */
5477           int i;
5478           int saved_depth = TMPL_ARGS_DEPTH (arglist);
5479
5480           tree bound_args = make_tree_vec (parm_depth);
5481
5482           for (i = saved_depth,
5483                  t = DECL_TEMPLATE_PARMS (template);
5484                i > 0 && t != NULL_TREE;
5485                --i, t = TREE_CHAIN (t))
5486             {
5487               tree a = coerce_template_parms (TREE_VALUE (t),
5488                                               arglist, template,
5489                                               complain,
5490                                               /*require_all_args=*/true,
5491                                               /*use_default_args=*/true);
5492
5493               /* Don't process further if one of the levels fails.  */
5494               if (a == error_mark_node)
5495                 {
5496                   /* Restore the ARGLIST to its full size.  */
5497                   TREE_VEC_LENGTH (arglist) = saved_depth;
5498                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5499                 }
5500
5501               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5502
5503               /* We temporarily reduce the length of the ARGLIST so
5504                  that coerce_template_parms will see only the arguments
5505                  corresponding to the template parameters it is
5506                  examining.  */
5507               TREE_VEC_LENGTH (arglist)--;
5508             }
5509
5510           /* Restore the ARGLIST to its full size.  */
5511           TREE_VEC_LENGTH (arglist) = saved_depth;
5512
5513           arglist = bound_args;
5514         }
5515       else
5516         arglist
5517           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
5518                                    INNERMOST_TEMPLATE_ARGS (arglist),
5519                                    template,
5520                                    complain,
5521                                    /*require_all_args=*/true,
5522                                    /*use_default_args=*/true);
5523
5524       if (arglist == error_mark_node)
5525         /* We were unable to bind the arguments.  */
5526         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5527
5528       /* In the scope of a template class, explicit references to the
5529          template class refer to the type of the template, not any
5530          instantiation of it.  For example, in:
5531
5532            template <class T> class C { void f(C<T>); }
5533
5534          the `C<T>' is just the same as `C'.  Outside of the
5535          class, however, such a reference is an instantiation.  */
5536       if (comp_template_args (TYPE_TI_ARGS (template_type),
5537                               arglist))
5538         {
5539           found = template_type;
5540
5541           if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5542             {
5543               tree ctx;
5544
5545               for (ctx = current_class_type;
5546                    ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5547                    ctx = (TYPE_P (ctx)
5548                           ? TYPE_CONTEXT (ctx)
5549                           : DECL_CONTEXT (ctx)))
5550                 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5551                   goto found_ctx;
5552
5553               /* We're not in the scope of the class, so the
5554                  TEMPLATE_TYPE is not the type we want after all.  */
5555               found = NULL_TREE;
5556             found_ctx:;
5557             }
5558         }
5559       if (found)
5560         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5561
5562       /* If we already have this specialization, return it.  */
5563       found = retrieve_specialization (template, arglist,
5564                                        /*class_specializations_p=*/false);
5565       if (found)
5566         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5567
5568       /* This type is a "partial instantiation" if any of the template
5569          arguments still involve template parameters.  Note that we set
5570          IS_PARTIAL_INSTANTIATION for partial specializations as
5571          well.  */
5572       is_partial_instantiation = uses_template_parms (arglist);
5573
5574       /* If the deduced arguments are invalid, then the binding
5575          failed.  */
5576       if (!is_partial_instantiation
5577           && check_instantiated_args (template,
5578                                       INNERMOST_TEMPLATE_ARGS (arglist),
5579                                       complain))
5580         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5581
5582       if (!is_partial_instantiation
5583           && !PRIMARY_TEMPLATE_P (template)
5584           && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
5585         {
5586           found = xref_tag_from_type (TREE_TYPE (template),
5587                                       DECL_NAME (template),
5588                                       /*tag_scope=*/ts_global);
5589           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5590         }
5591
5592       context = tsubst (DECL_CONTEXT (template), arglist,
5593                         complain, in_decl);
5594       if (!context)
5595         context = global_namespace;
5596
5597       /* Create the type.  */
5598       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5599         {
5600           if (!is_partial_instantiation)
5601             {
5602               set_current_access_from_decl (TYPE_NAME (template_type));
5603               t = start_enum (TYPE_IDENTIFIER (template_type));
5604             }
5605           else
5606             /* We don't want to call start_enum for this type, since
5607                the values for the enumeration constants may involve
5608                template parameters.  And, no one should be interested
5609                in the enumeration constants for such a type.  */
5610             t = make_node (ENUMERAL_TYPE);
5611         }
5612       else
5613         {
5614           t = make_aggr_type (TREE_CODE (template_type));
5615           CLASSTYPE_DECLARED_CLASS (t)
5616             = CLASSTYPE_DECLARED_CLASS (template_type);
5617           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
5618           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
5619
5620           /* A local class.  Make sure the decl gets registered properly.  */
5621           if (context == current_function_decl)
5622             pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
5623
5624           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5625             /* This instantiation is another name for the primary
5626                template type. Set the TYPE_CANONICAL field
5627                appropriately. */
5628             TYPE_CANONICAL (t) = template_type;
5629           else if (any_template_arguments_need_structural_equality_p (arglist))
5630             /* Some of the template arguments require structural
5631                equality testing, so this template class requires
5632                structural equality testing. */
5633             SET_TYPE_STRUCTURAL_EQUALITY (t);
5634         }
5635
5636       /* If we called start_enum or pushtag above, this information
5637          will already be set up.  */
5638       if (!TYPE_NAME (t))
5639         {
5640           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5641
5642           type_decl = create_implicit_typedef (DECL_NAME (template), t);
5643           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
5644           TYPE_STUB_DECL (t) = type_decl;
5645           DECL_SOURCE_LOCATION (type_decl)
5646             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
5647         }
5648       else
5649         type_decl = TYPE_NAME (t);
5650
5651       TREE_PRIVATE (type_decl)
5652         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5653       TREE_PROTECTED (type_decl)
5654         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
5655       DECL_IN_SYSTEM_HEADER (type_decl)
5656         = DECL_IN_SYSTEM_HEADER (template);
5657       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5658         {
5659           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5660           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5661         }
5662
5663       /* Set up the template information.  We have to figure out which
5664          template is the immediate parent if this is a full
5665          instantiation.  */
5666       if (parm_depth == 1 || is_partial_instantiation
5667           || !PRIMARY_TEMPLATE_P (template))
5668         /* This case is easy; there are no member templates involved.  */
5669         found = template;
5670       else
5671         {
5672           /* This is a full instantiation of a member template.  Look
5673              for a partial instantiation of which this is an instance.  */
5674
5675           for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
5676                found; found = TREE_CHAIN (found))
5677             {
5678               int success;
5679               tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5680
5681               /* We only want partial instantiations, here, not
5682                  specializations or full instantiations.  */
5683               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
5684                   || !uses_template_parms (TREE_VALUE (found)))
5685                 continue;
5686
5687               /* Temporarily reduce by one the number of levels in the
5688                  ARGLIST and in FOUND so as to avoid comparing the
5689                  last set of arguments.  */
5690               TREE_VEC_LENGTH (arglist)--;
5691               TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5692
5693               /* See if the arguments match.  If they do, then TMPL is
5694                  the partial instantiation we want.  */
5695               success = comp_template_args (TREE_PURPOSE (found), arglist);
5696
5697               /* Restore the argument vectors to their full size.  */
5698               TREE_VEC_LENGTH (arglist)++;
5699               TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5700
5701               if (success)
5702                 {
5703                   found = tmpl;
5704                   break;
5705                 }
5706             }
5707
5708           if (!found)
5709             {
5710               /* There was no partial instantiation. This happens
5711                  where C<T> is a member template of A<T> and it's used
5712                  in something like
5713
5714                   template <typename T> struct B { A<T>::C<int> m; };
5715                   B<float>;
5716
5717                  Create the partial instantiation.
5718                */
5719               TREE_VEC_LENGTH (arglist)--;
5720               found = tsubst (template, arglist, complain, NULL_TREE);
5721               TREE_VEC_LENGTH (arglist)++;
5722             }
5723         }
5724
5725       SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
5726       DECL_TEMPLATE_INSTANTIATIONS (template)
5727         = tree_cons (arglist, t,
5728                      DECL_TEMPLATE_INSTANTIATIONS (template));
5729
5730       if (TREE_CODE (t) == ENUMERAL_TYPE
5731           && !is_partial_instantiation)
5732         /* Now that the type has been registered on the instantiations
5733            list, we set up the enumerators.  Because the enumeration
5734            constants may involve the enumeration type itself, we make
5735            sure to register the type first, and then create the
5736            constants.  That way, doing tsubst_expr for the enumeration
5737            constants won't result in recursive calls here; we'll find
5738            the instantiation and exit above.  */
5739         tsubst_enum (template_type, t, arglist);
5740
5741       if (is_partial_instantiation)
5742         /* If the type makes use of template parameters, the
5743            code that generates debugging information will crash.  */
5744         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
5745
5746       /* Possibly limit visibility based on template args.  */
5747       TREE_PUBLIC (type_decl) = 1;
5748       determine_visibility (type_decl);
5749
5750       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
5751     }
5752   timevar_pop (TV_NAME_LOOKUP);
5753 }
5754 \f
5755 struct pair_fn_data
5756 {
5757   tree_fn_t fn;
5758   void *data;
5759   struct pointer_set_t *visited;
5760 };
5761
5762 /* Called from for_each_template_parm via walk_tree.  */
5763
5764 static tree
5765 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
5766 {
5767   tree t = *tp;
5768   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
5769   tree_fn_t fn = pfd->fn;
5770   void *data = pfd->data;
5771
5772   if (TYPE_P (t)
5773       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
5774     return error_mark_node;
5775
5776   switch (TREE_CODE (t))
5777     {
5778     case RECORD_TYPE:
5779       if (TYPE_PTRMEMFUNC_P (t))
5780         break;
5781       /* Fall through.  */
5782
5783     case UNION_TYPE:
5784     case ENUMERAL_TYPE:
5785       if (!TYPE_TEMPLATE_INFO (t))
5786         *walk_subtrees = 0;
5787       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
5788                                        fn, data, pfd->visited))
5789         return error_mark_node;
5790       break;
5791
5792     case INTEGER_TYPE:
5793       if (for_each_template_parm (TYPE_MIN_VALUE (t),
5794                                   fn, data, pfd->visited)
5795           || for_each_template_parm (TYPE_MAX_VALUE (t),
5796                                      fn, data, pfd->visited))
5797         return error_mark_node;
5798       break;
5799
5800     case METHOD_TYPE:
5801       /* Since we're not going to walk subtrees, we have to do this
5802          explicitly here.  */
5803       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
5804                                   pfd->visited))
5805         return error_mark_node;
5806       /* Fall through.  */
5807
5808     case FUNCTION_TYPE:
5809       /* Check the return type.  */
5810       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
5811         return error_mark_node;
5812
5813       /* Check the parameter types.  Since default arguments are not
5814          instantiated until they are needed, the TYPE_ARG_TYPES may
5815          contain expressions that involve template parameters.  But,
5816          no-one should be looking at them yet.  And, once they're
5817          instantiated, they don't contain template parameters, so
5818          there's no point in looking at them then, either.  */
5819       {
5820         tree parm;
5821
5822         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
5823           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
5824                                       pfd->visited))
5825             return error_mark_node;
5826
5827         /* Since we've already handled the TYPE_ARG_TYPES, we don't
5828            want walk_tree walking into them itself.  */
5829         *walk_subtrees = 0;
5830       }
5831       break;
5832
5833     case TYPEOF_TYPE:
5834       if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
5835                                   pfd->visited))
5836         return error_mark_node;
5837       break;
5838
5839     case FUNCTION_DECL:
5840     case VAR_DECL:
5841       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
5842           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
5843                                      pfd->visited))
5844         return error_mark_node;
5845       /* Fall through.  */
5846
5847     case PARM_DECL:
5848     case CONST_DECL:
5849       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
5850           && for_each_template_parm (DECL_INITIAL (t), fn, data,
5851                                      pfd->visited))
5852         return error_mark_node;
5853       if (DECL_CONTEXT (t)
5854           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
5855                                      pfd->visited))
5856         return error_mark_node;
5857       break;
5858
5859     case BOUND_TEMPLATE_TEMPLATE_PARM:
5860       /* Record template parameters such as `T' inside `TT<T>'.  */
5861       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
5862         return error_mark_node;
5863       /* Fall through.  */
5864
5865     case TEMPLATE_TEMPLATE_PARM:
5866     case TEMPLATE_TYPE_PARM:
5867     case TEMPLATE_PARM_INDEX:
5868       if (fn && (*fn)(t, data))
5869         return error_mark_node;
5870       else if (!fn)
5871         return error_mark_node;
5872       break;
5873
5874     case TEMPLATE_DECL:
5875       /* A template template parameter is encountered.  */
5876       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
5877           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
5878         return error_mark_node;
5879
5880       /* Already substituted template template parameter */
5881       *walk_subtrees = 0;
5882       break;
5883
5884     case TYPENAME_TYPE:
5885       if (!fn
5886           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
5887                                      data, pfd->visited))
5888         return error_mark_node;
5889       break;
5890
5891     case CONSTRUCTOR:
5892       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
5893           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
5894                                      (TREE_TYPE (t)), fn, data,
5895                                      pfd->visited))
5896         return error_mark_node;
5897       break;
5898
5899     case INDIRECT_REF:
5900     case COMPONENT_REF:
5901       /* If there's no type, then this thing must be some expression
5902          involving template parameters.  */
5903       if (!fn && !TREE_TYPE (t))
5904         return error_mark_node;
5905       break;
5906
5907     case MODOP_EXPR:
5908     case CAST_EXPR:
5909     case REINTERPRET_CAST_EXPR:
5910     case CONST_CAST_EXPR:
5911     case STATIC_CAST_EXPR:
5912     case DYNAMIC_CAST_EXPR:
5913     case ARROW_EXPR:
5914     case DOTSTAR_EXPR:
5915     case TYPEID_EXPR:
5916     case PSEUDO_DTOR_EXPR:
5917       if (!fn)
5918         return error_mark_node;
5919       break;
5920
5921     default:
5922       break;
5923     }
5924
5925   /* We didn't find any template parameters we liked.  */
5926   return NULL_TREE;
5927 }
5928
5929 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
5930    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
5931    call FN with the parameter and the DATA.
5932    If FN returns nonzero, the iteration is terminated, and
5933    for_each_template_parm returns 1.  Otherwise, the iteration
5934    continues.  If FN never returns a nonzero value, the value
5935    returned by for_each_template_parm is 0.  If FN is NULL, it is
5936    considered to be the function which always returns 1.  */
5937
5938 static int
5939 for_each_template_parm (tree t, tree_fn_t fn, void* data,
5940                         struct pointer_set_t *visited)
5941 {
5942   struct pair_fn_data pfd;
5943   int result;
5944
5945   /* Set up.  */
5946   pfd.fn = fn;
5947   pfd.data = data;
5948
5949   /* Walk the tree.  (Conceptually, we would like to walk without
5950      duplicates, but for_each_template_parm_r recursively calls
5951      for_each_template_parm, so we would need to reorganize a fair
5952      bit to use walk_tree_without_duplicates, so we keep our own
5953      visited list.)  */
5954   if (visited)
5955     pfd.visited = visited;
5956   else
5957     pfd.visited = pointer_set_create ();
5958   result = cp_walk_tree (&t,
5959                          for_each_template_parm_r,
5960                          &pfd,
5961                          pfd.visited) != NULL_TREE;
5962
5963   /* Clean up.  */
5964   if (!visited)
5965     {
5966       pointer_set_destroy (pfd.visited);
5967       pfd.visited = 0;
5968     }
5969
5970   return result;
5971 }
5972
5973 /* Returns true if T depends on any template parameter.  */
5974
5975 int
5976 uses_template_parms (tree t)
5977 {
5978   bool dependent_p;
5979   int saved_processing_template_decl;
5980
5981   saved_processing_template_decl = processing_template_decl;
5982   if (!saved_processing_template_decl)
5983     processing_template_decl = 1;
5984   if (TYPE_P (t))
5985     dependent_p = dependent_type_p (t);
5986   else if (TREE_CODE (t) == TREE_VEC)
5987     dependent_p = any_dependent_template_arguments_p (t);
5988   else if (TREE_CODE (t) == TREE_LIST)
5989     dependent_p = (uses_template_parms (TREE_VALUE (t))
5990                    || uses_template_parms (TREE_CHAIN (t)));
5991   else if (TREE_CODE (t) == TYPE_DECL)
5992     dependent_p = dependent_type_p (TREE_TYPE (t));
5993   else if (DECL_P (t)
5994            || EXPR_P (t)
5995            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
5996            || TREE_CODE (t) == OVERLOAD
5997            || TREE_CODE (t) == BASELINK
5998            || TREE_CODE (t) == IDENTIFIER_NODE
5999            || TREE_CODE (t) == TRAIT_EXPR
6000            || CONSTANT_CLASS_P (t))
6001     dependent_p = (type_dependent_expression_p (t)
6002                    || value_dependent_expression_p (t));
6003   else
6004     {
6005       gcc_assert (t == error_mark_node);
6006       dependent_p = false;
6007     }
6008
6009   processing_template_decl = saved_processing_template_decl;
6010
6011   return dependent_p;
6012 }
6013
6014 /* Returns true if T depends on any template parameter with level LEVEL.  */
6015
6016 int
6017 uses_template_parms_level (tree t, int level)
6018 {
6019   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
6020 }
6021
6022 static int tinst_depth;
6023 extern int max_tinst_depth;
6024 #ifdef GATHER_STATISTICS
6025 int depth_reached;
6026 #endif
6027 static int tinst_level_tick;
6028 static int last_template_error_tick;
6029
6030 /* We're starting to instantiate D; record the template instantiation context
6031    for diagnostics and to restore it later.  */
6032
6033 static int
6034 push_tinst_level (tree d)
6035 {
6036   struct tinst_level *new;
6037
6038   if (tinst_depth >= max_tinst_depth)
6039     {
6040       /* If the instantiation in question still has unbound template parms,
6041          we don't really care if we can't instantiate it, so just return.
6042          This happens with base instantiation for implicit `typename'.  */
6043       if (uses_template_parms (d))
6044         return 0;
6045
6046       last_template_error_tick = tinst_level_tick;
6047       error ("template instantiation depth exceeds maximum of %d (use "
6048              "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
6049              max_tinst_depth, d);
6050
6051       print_instantiation_context ();
6052
6053       return 0;
6054     }
6055
6056   new = GGC_NEW (struct tinst_level);
6057   new->decl = d;
6058   new->locus = input_location;
6059   new->in_system_header_p = in_system_header;
6060   new->next = current_tinst_level;
6061   current_tinst_level = new;
6062
6063   ++tinst_depth;
6064 #ifdef GATHER_STATISTICS
6065   if (tinst_depth > depth_reached)
6066     depth_reached = tinst_depth;
6067 #endif
6068
6069   ++tinst_level_tick;
6070   return 1;
6071 }
6072
6073 /* We're done instantiating this template; return to the instantiation
6074    context.  */
6075
6076 static void
6077 pop_tinst_level (void)
6078 {
6079   /* Restore the filename and line number stashed away when we started
6080      this instantiation.  */
6081   input_location = current_tinst_level->locus;
6082   in_system_header = current_tinst_level->in_system_header_p;
6083   current_tinst_level = current_tinst_level->next;
6084   --tinst_depth;
6085   ++tinst_level_tick;
6086 }
6087
6088 /* We're instantiating a deferred template; restore the template
6089    instantiation context in which the instantiation was requested, which
6090    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
6091
6092 static tree
6093 reopen_tinst_level (struct tinst_level *level)
6094 {
6095   struct tinst_level *t;
6096
6097   tinst_depth = 0;
6098   for (t = level; t; t = t->next)
6099     ++tinst_depth;
6100
6101   current_tinst_level = level;
6102   pop_tinst_level ();
6103   return level->decl;
6104 }
6105
6106 /* Returns the TINST_LEVEL which gives the original instantiation
6107    context.  */
6108
6109 struct tinst_level *
6110 outermost_tinst_level (void)
6111 {
6112   struct tinst_level *level = current_tinst_level;
6113   if (level)
6114     while (level->next)
6115       level = level->next;
6116   return level;
6117 }
6118
6119 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
6120    vector of template arguments, as for tsubst.
6121
6122    Returns an appropriate tsubst'd friend declaration.  */
6123
6124 static tree
6125 tsubst_friend_function (tree decl, tree args)
6126 {
6127   tree new_friend;
6128
6129   if (TREE_CODE (decl) == FUNCTION_DECL
6130       && DECL_TEMPLATE_INSTANTIATION (decl)
6131       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6132     /* This was a friend declared with an explicit template
6133        argument list, e.g.:
6134
6135        friend void f<>(T);
6136
6137        to indicate that f was a template instantiation, not a new
6138        function declaration.  Now, we have to figure out what
6139        instantiation of what template.  */
6140     {
6141       tree template_id, arglist, fns;
6142       tree new_args;
6143       tree tmpl;
6144       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6145
6146       /* Friend functions are looked up in the containing namespace scope.
6147          We must enter that scope, to avoid finding member functions of the
6148          current cless with same name.  */
6149       push_nested_namespace (ns);
6150       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6151                          tf_warning_or_error, NULL_TREE,
6152                          /*integral_constant_expression_p=*/false);
6153       pop_nested_namespace (ns);
6154       arglist = tsubst (DECL_TI_ARGS (decl), args,
6155                         tf_warning_or_error, NULL_TREE);
6156       template_id = lookup_template_function (fns, arglist);
6157
6158       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6159       tmpl = determine_specialization (template_id, new_friend,
6160                                        &new_args,
6161                                        /*need_member_template=*/0,
6162                                        TREE_VEC_LENGTH (args),
6163                                        tsk_none);
6164       return instantiate_template (tmpl, new_args, tf_error);
6165     }
6166
6167   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6168
6169   /* The NEW_FRIEND will look like an instantiation, to the
6170      compiler, but is not an instantiation from the point of view of
6171      the language.  For example, we might have had:
6172
6173      template <class T> struct S {
6174        template <class U> friend void f(T, U);
6175      };
6176
6177      Then, in S<int>, template <class U> void f(int, U) is not an
6178      instantiation of anything.  */
6179   if (new_friend == error_mark_node)
6180     return error_mark_node;
6181
6182   DECL_USE_TEMPLATE (new_friend) = 0;
6183   if (TREE_CODE (decl) == TEMPLATE_DECL)
6184     {
6185       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6186       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6187         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6188     }
6189
6190   /* The mangled name for the NEW_FRIEND is incorrect.  The function
6191      is not a template instantiation and should not be mangled like
6192      one.  Therefore, we forget the mangling here; we'll recompute it
6193      later if we need it.  */
6194   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6195     {
6196       SET_DECL_RTL (new_friend, NULL_RTX);
6197       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6198     }
6199
6200   if (DECL_NAMESPACE_SCOPE_P (new_friend))
6201     {
6202       tree old_decl;
6203       tree new_friend_template_info;
6204       tree new_friend_result_template_info;
6205       tree ns;
6206       int  new_friend_is_defn;
6207
6208       /* We must save some information from NEW_FRIEND before calling
6209          duplicate decls since that function will free NEW_FRIEND if
6210          possible.  */
6211       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6212       new_friend_is_defn =
6213             (DECL_INITIAL (DECL_TEMPLATE_RESULT
6214                            (template_for_substitution (new_friend)))
6215              != NULL_TREE);
6216       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6217         {
6218           /* This declaration is a `primary' template.  */
6219           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6220
6221           new_friend_result_template_info
6222             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6223         }
6224       else
6225         new_friend_result_template_info = NULL_TREE;
6226
6227       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
6228       if (new_friend_is_defn)
6229         DECL_INITIAL (new_friend) = error_mark_node;
6230
6231       /* Inside pushdecl_namespace_level, we will push into the
6232          current namespace. However, the friend function should go
6233          into the namespace of the template.  */
6234       ns = decl_namespace_context (new_friend);
6235       push_nested_namespace (ns);
6236       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6237       pop_nested_namespace (ns);
6238
6239       if (old_decl == error_mark_node)
6240         return error_mark_node;
6241
6242       if (old_decl != new_friend)
6243         {
6244           /* This new friend declaration matched an existing
6245              declaration.  For example, given:
6246
6247                template <class T> void f(T);
6248                template <class U> class C {
6249                  template <class T> friend void f(T) {}
6250                };
6251
6252              the friend declaration actually provides the definition
6253              of `f', once C has been instantiated for some type.  So,
6254              old_decl will be the out-of-class template declaration,
6255              while new_friend is the in-class definition.
6256
6257              But, if `f' was called before this point, the
6258              instantiation of `f' will have DECL_TI_ARGS corresponding
6259              to `T' but not to `U', references to which might appear
6260              in the definition of `f'.  Previously, the most general
6261              template for an instantiation of `f' was the out-of-class
6262              version; now it is the in-class version.  Therefore, we
6263              run through all specialization of `f', adding to their
6264              DECL_TI_ARGS appropriately.  In particular, they need a
6265              new set of outer arguments, corresponding to the
6266              arguments for this class instantiation.
6267
6268              The same situation can arise with something like this:
6269
6270                friend void f(int);
6271                template <class T> class C {
6272                  friend void f(T) {}
6273                };
6274
6275              when `C<int>' is instantiated.  Now, `f(int)' is defined
6276              in the class.  */
6277
6278           if (!new_friend_is_defn)
6279             /* On the other hand, if the in-class declaration does
6280                *not* provide a definition, then we don't want to alter
6281                existing definitions.  We can just leave everything
6282                alone.  */
6283             ;
6284           else
6285             {
6286               /* Overwrite whatever template info was there before, if
6287                  any, with the new template information pertaining to
6288                  the declaration.  */
6289               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6290
6291               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6292                 reregister_specialization (new_friend,
6293                                            most_general_template (old_decl),
6294                                            old_decl);
6295               else
6296                 {
6297                   tree t;
6298                   tree new_friend_args;
6299
6300                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6301                     = new_friend_result_template_info;
6302
6303                   new_friend_args = TI_ARGS (new_friend_template_info);
6304                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6305                        t != NULL_TREE;
6306                        t = TREE_CHAIN (t))
6307                     {
6308                       tree spec = TREE_VALUE (t);
6309
6310                       DECL_TI_ARGS (spec)
6311                         = add_outermost_template_args (new_friend_args,
6312                                                        DECL_TI_ARGS (spec));
6313                     }
6314
6315                   /* Now, since specializations are always supposed to
6316                      hang off of the most general template, we must move
6317                      them.  */
6318                   t = most_general_template (old_decl);
6319                   if (t != old_decl)
6320                     {
6321                       DECL_TEMPLATE_SPECIALIZATIONS (t)
6322                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6323                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6324                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6325                     }
6326                 }
6327             }
6328
6329           /* The information from NEW_FRIEND has been merged into OLD_DECL
6330              by duplicate_decls.  */
6331           new_friend = old_decl;
6332         }
6333     }
6334   else
6335     {
6336       tree context = DECL_CONTEXT (new_friend);
6337       bool dependent_p;
6338
6339       /* In the code
6340            template <class T> class C {
6341              template <class U> friend void C1<U>::f (); // case 1
6342              friend void C2<T>::f ();                    // case 2
6343            };
6344          we only need to make sure CONTEXT is a complete type for
6345          case 2.  To distinguish between the two cases, we note that
6346          CONTEXT of case 1 remains dependent type after tsubst while
6347          this isn't true for case 2.  */
6348       ++processing_template_decl;
6349       dependent_p = dependent_type_p (context);
6350       --processing_template_decl;
6351
6352       if (!dependent_p
6353           && !complete_type_or_else (context, NULL_TREE))
6354         return error_mark_node;
6355
6356       if (COMPLETE_TYPE_P (context))
6357         {
6358           /* Check to see that the declaration is really present, and,
6359              possibly obtain an improved declaration.  */
6360           tree fn = check_classfn (context,
6361                                    new_friend, NULL_TREE);
6362
6363           if (fn)
6364             new_friend = fn;
6365         }
6366     }
6367
6368   return new_friend;
6369 }
6370
6371 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
6372    template arguments, as for tsubst.
6373
6374    Returns an appropriate tsubst'd friend type or error_mark_node on
6375    failure.  */
6376
6377 static tree
6378 tsubst_friend_class (tree friend_tmpl, tree args)
6379 {
6380   tree friend_type;
6381   tree tmpl;
6382   tree context;
6383
6384   context = DECL_CONTEXT (friend_tmpl);
6385
6386   if (context)
6387     {
6388       if (TREE_CODE (context) == NAMESPACE_DECL)
6389         push_nested_namespace (context);
6390       else
6391         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6392     }
6393
6394   /* Look for a class template declaration.  We look for hidden names
6395      because two friend declarations of the same template are the
6396      same.  For example, in:
6397
6398        struct A { 
6399          template <typename> friend class F;
6400        };
6401        template <typename> struct B { 
6402          template <typename> friend class F;
6403        };
6404
6405      both F templates are the same.  */
6406   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6407                            /*block_p=*/true, 0, 
6408                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6409
6410   /* But, if we don't find one, it might be because we're in a
6411      situation like this:
6412
6413        template <class T>
6414        struct S {
6415          template <class U>
6416          friend struct S;
6417        };
6418
6419      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6420      for `S<int>', not the TEMPLATE_DECL.  */
6421   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6422     {
6423       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6424       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6425     }
6426
6427   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6428     {
6429       /* The friend template has already been declared.  Just
6430          check to see that the declarations match, and install any new
6431          default parameters.  We must tsubst the default parameters,
6432          of course.  We only need the innermost template parameters
6433          because that is all that redeclare_class_template will look
6434          at.  */
6435       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6436           > TMPL_ARGS_DEPTH (args))
6437         {
6438           tree parms;
6439           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6440                                          args, tf_warning_or_error);
6441           redeclare_class_template (TREE_TYPE (tmpl), parms);
6442         }
6443
6444       friend_type = TREE_TYPE (tmpl);
6445     }
6446   else
6447     {
6448       /* The friend template has not already been declared.  In this
6449          case, the instantiation of the template class will cause the
6450          injection of this template into the global scope.  */
6451       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6452       if (tmpl == error_mark_node)
6453         return error_mark_node;
6454
6455       /* The new TMPL is not an instantiation of anything, so we
6456          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
6457          the new type because that is supposed to be the corresponding
6458          template decl, i.e., TMPL.  */
6459       DECL_USE_TEMPLATE (tmpl) = 0;
6460       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6461       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6462       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6463         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6464
6465       /* Inject this template into the global scope.  */
6466       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6467     }
6468
6469   if (context)
6470     {
6471       if (TREE_CODE (context) == NAMESPACE_DECL)
6472         pop_nested_namespace (context);
6473       else
6474         pop_nested_class ();
6475     }
6476
6477   return friend_type;
6478 }
6479
6480 /* Returns zero if TYPE cannot be completed later due to circularity.
6481    Otherwise returns one.  */
6482
6483 static int
6484 can_complete_type_without_circularity (tree type)
6485 {
6486   if (type == NULL_TREE || type == error_mark_node)
6487     return 0;
6488   else if (COMPLETE_TYPE_P (type))
6489     return 1;
6490   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6491     return can_complete_type_without_circularity (TREE_TYPE (type));
6492   else if (CLASS_TYPE_P (type)
6493            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6494     return 0;
6495   else
6496     return 1;
6497 }
6498
6499 /* Apply any attributes which had to be deferred until instantiation
6500    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
6501    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
6502
6503 static void
6504 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
6505                                 tree args, tsubst_flags_t complain, tree in_decl)
6506 {
6507   tree last_dep = NULL_TREE;
6508   tree t;
6509   tree *p;
6510
6511   for (t = attributes; t; t = TREE_CHAIN (t))
6512     if (ATTR_IS_DEPENDENT (t))
6513       {
6514         last_dep = t;
6515         attributes = copy_list (attributes);
6516         break;
6517       }
6518
6519   if (DECL_P (*decl_p))
6520     p = &DECL_ATTRIBUTES (*decl_p);
6521   else
6522     p = &TYPE_ATTRIBUTES (*decl_p);
6523
6524   if (last_dep)
6525     {
6526       tree late_attrs = NULL_TREE;
6527       tree *q = &late_attrs;
6528
6529       for (*p = attributes; *p; )
6530         {
6531           t = *p;
6532           if (ATTR_IS_DEPENDENT (t))
6533             {
6534               *p = TREE_CHAIN (t);
6535               TREE_CHAIN (t) = NULL_TREE;
6536               TREE_VALUE (t)
6537                 = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
6538                                /*integral_constant_expression_p=*/false);
6539               *q = t;
6540               q = &TREE_CHAIN (t);
6541             }
6542           else
6543             p = &TREE_CHAIN (t);
6544         }
6545
6546       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
6547     }
6548 }
6549
6550 tree
6551 instantiate_class_template (tree type)
6552 {
6553   tree template, args, pattern, t, member;
6554   tree typedecl;
6555   tree pbinfo;
6556   tree base_list;
6557
6558   if (type == error_mark_node)
6559     return error_mark_node;
6560
6561   if (TYPE_BEING_DEFINED (type)
6562       || COMPLETE_TYPE_P (type)
6563       || dependent_type_p (type))
6564     return type;
6565
6566   /* Figure out which template is being instantiated.  */
6567   template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6568   gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
6569
6570   /* Determine what specialization of the original template to
6571      instantiate.  */
6572   t = most_specialized_class (type, template);
6573   if (t == error_mark_node)
6574     {
6575       TYPE_BEING_DEFINED (type) = 1;
6576       return error_mark_node;
6577     }
6578   else if (t)
6579     {
6580       /* This TYPE is actually an instantiation of a partial
6581          specialization.  We replace the innermost set of ARGS with
6582          the arguments appropriate for substitution.  For example,
6583          given:
6584
6585            template <class T> struct S {};
6586            template <class T> struct S<T*> {};
6587
6588          and supposing that we are instantiating S<int*>, ARGS will
6589          presently be {int*} -- but we need {int}.  */
6590       pattern = TREE_TYPE (t);
6591       args = TREE_PURPOSE (t);
6592     }
6593   else
6594     {
6595       pattern = TREE_TYPE (template);
6596       args = CLASSTYPE_TI_ARGS (type);
6597     }
6598
6599   /* If the template we're instantiating is incomplete, then clearly
6600      there's nothing we can do.  */
6601   if (!COMPLETE_TYPE_P (pattern))
6602     return type;
6603
6604   /* If we've recursively instantiated too many templates, stop.  */
6605   if (! push_tinst_level (type))
6606     return type;
6607
6608   /* Now we're really doing the instantiation.  Mark the type as in
6609      the process of being defined.  */
6610   TYPE_BEING_DEFINED (type) = 1;
6611
6612   /* We may be in the middle of deferred access check.  Disable
6613      it now.  */
6614   push_deferring_access_checks (dk_no_deferred);
6615
6616   push_to_top_level ();
6617
6618   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6619
6620   /* Set the input location to the template definition. This is needed
6621      if tsubsting causes an error.  */
6622   typedecl = TYPE_MAIN_DECL (type);
6623   input_location = DECL_SOURCE_LOCATION (typedecl);
6624   in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
6625
6626   TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
6627   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6628   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6629   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6630   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6631   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6632   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6633   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6634   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6635   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6636   TYPE_PACKED (type) = TYPE_PACKED (pattern);
6637   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6638   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6639   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6640   if (ANON_AGGR_TYPE_P (pattern))
6641     SET_ANON_AGGR_TYPE_P (type);
6642   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6643     {
6644       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6645       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6646     }
6647
6648   pbinfo = TYPE_BINFO (pattern);
6649
6650   /* We should never instantiate a nested class before its enclosing
6651      class; we need to look up the nested class by name before we can
6652      instantiate it, and that lookup should instantiate the enclosing
6653      class.  */
6654   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6655               || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6656               || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6657
6658   base_list = NULL_TREE;
6659   if (BINFO_N_BASE_BINFOS (pbinfo))
6660     {
6661       tree pbase_binfo;
6662       tree context = TYPE_CONTEXT (type);
6663       tree pushed_scope;
6664       int i;
6665
6666       /* We must enter the scope containing the type, as that is where
6667          the accessibility of types named in dependent bases are
6668          looked up from.  */
6669       pushed_scope = push_scope (context ? context : global_namespace);
6670
6671       /* Substitute into each of the bases to determine the actual
6672          basetypes.  */
6673       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6674         {
6675           tree base;
6676           tree access = BINFO_BASE_ACCESS (pbinfo, i);
6677           tree expanded_bases = NULL_TREE;
6678           int idx, len = 1;
6679
6680           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6681             {
6682               expanded_bases = 
6683                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6684                                        args, tf_error, NULL_TREE);
6685               if (expanded_bases == error_mark_node)
6686                 continue;
6687
6688               len = TREE_VEC_LENGTH (expanded_bases);
6689             }
6690
6691           for (idx = 0; idx < len; idx++)
6692             {
6693               if (expanded_bases)
6694                 /* Extract the already-expanded base class.  */
6695                 base = TREE_VEC_ELT (expanded_bases, idx);
6696               else
6697                 /* Substitute to figure out the base class.  */
6698                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
6699                                NULL_TREE);
6700
6701               if (base == error_mark_node)
6702                 continue;
6703
6704               base_list = tree_cons (access, base, base_list);
6705               if (BINFO_VIRTUAL_P (pbase_binfo))
6706                 TREE_TYPE (base_list) = integer_type_node;
6707             }
6708         }
6709
6710       /* The list is now in reverse order; correct that.  */
6711       base_list = nreverse (base_list);
6712
6713       if (pushed_scope)
6714         pop_scope (pushed_scope);
6715     }
6716   /* Now call xref_basetypes to set up all the base-class
6717      information.  */
6718   xref_basetypes (type, base_list);
6719
6720   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
6721                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
6722                                   args, tf_error, NULL_TREE);
6723
6724   /* Now that our base classes are set up, enter the scope of the
6725      class, so that name lookups into base classes, etc. will work
6726      correctly.  This is precisely analogous to what we do in
6727      begin_class_definition when defining an ordinary non-template
6728      class, except we also need to push the enclosing classes.  */
6729   push_nested_class (type);
6730
6731   /* Now members are processed in the order of declaration.  */
6732   for (member = CLASSTYPE_DECL_LIST (pattern);
6733        member; member = TREE_CHAIN (member))
6734     {
6735       tree t = TREE_VALUE (member);
6736
6737       if (TREE_PURPOSE (member))
6738         {
6739           if (TYPE_P (t))
6740             {
6741               /* Build new CLASSTYPE_NESTED_UTDS.  */
6742
6743               tree newtag;
6744               bool class_template_p;
6745
6746               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
6747                                   && TYPE_LANG_SPECIFIC (t)
6748                                   && CLASSTYPE_IS_TEMPLATE (t));
6749               /* If the member is a class template, then -- even after
6750                  substitution -- there may be dependent types in the
6751                  template argument list for the class.  We increment
6752                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
6753                  that function will assume that no types are dependent
6754                  when outside of a template.  */
6755               if (class_template_p)
6756                 ++processing_template_decl;
6757               newtag = tsubst (t, args, tf_error, NULL_TREE);
6758               if (class_template_p)
6759                 --processing_template_decl;
6760               if (newtag == error_mark_node)
6761                 continue;
6762
6763               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
6764                 {
6765                   tree name = TYPE_IDENTIFIER (t);
6766
6767                   if (class_template_p)
6768                     /* Unfortunately, lookup_template_class sets
6769                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
6770                        instantiation (i.e., for the type of a member
6771                        template class nested within a template class.)
6772                        This behavior is required for
6773                        maybe_process_partial_specialization to work
6774                        correctly, but is not accurate in this case;
6775                        the TAG is not an instantiation of anything.
6776                        (The corresponding TEMPLATE_DECL is an
6777                        instantiation, but the TYPE is not.) */
6778                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
6779
6780                   /* Now, we call pushtag to put this NEWTAG into the scope of
6781                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
6782                      pushtag calling push_template_decl.  We don't have to do
6783                      this for enums because it will already have been done in
6784                      tsubst_enum.  */
6785                   if (name)
6786                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
6787                   pushtag (name, newtag, /*tag_scope=*/ts_current);
6788                 }
6789             }
6790           else if (TREE_CODE (t) == FUNCTION_DECL
6791                    || DECL_FUNCTION_TEMPLATE_P (t))
6792             {
6793               /* Build new TYPE_METHODS.  */
6794               tree r;
6795
6796               if (TREE_CODE (t) == TEMPLATE_DECL)
6797                 ++processing_template_decl;
6798               r = tsubst (t, args, tf_error, NULL_TREE);
6799               if (TREE_CODE (t) == TEMPLATE_DECL)
6800                 --processing_template_decl;
6801               set_current_access_from_decl (r);
6802               finish_member_declaration (r);
6803             }
6804           else
6805             {
6806               /* Build new TYPE_FIELDS.  */
6807               if (TREE_CODE (t) == STATIC_ASSERT)
6808                 {
6809                   tree condition = 
6810                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
6811                                  tf_warning_or_error, NULL_TREE,
6812                                  /*integral_constant_expression_p=*/true);
6813                   finish_static_assert (condition,
6814                                         STATIC_ASSERT_MESSAGE (t), 
6815                                         STATIC_ASSERT_SOURCE_LOCATION (t),
6816                                         /*member_p=*/true);
6817                 }
6818               else if (TREE_CODE (t) != CONST_DECL)
6819                 {
6820                   tree r;
6821
6822                   /* The the file and line for this declaration, to
6823                      assist in error message reporting.  Since we
6824                      called push_tinst_level above, we don't need to
6825                      restore these.  */
6826                   input_location = DECL_SOURCE_LOCATION (t);
6827
6828                   if (TREE_CODE (t) == TEMPLATE_DECL)
6829                     ++processing_template_decl;
6830                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
6831                   if (TREE_CODE (t) == TEMPLATE_DECL)
6832                     --processing_template_decl;
6833                   if (TREE_CODE (r) == VAR_DECL)
6834                     {
6835                       /* In [temp.inst]:
6836
6837                            [t]he initialization (and any associated
6838                            side-effects) of a static data member does
6839                            not occur unless the static data member is
6840                            itself used in a way that requires the
6841                            definition of the static data member to
6842                            exist.
6843
6844                          Therefore, we do not substitute into the
6845                          initialized for the static data member here.  */
6846                       finish_static_data_member_decl
6847                         (r,
6848                          /*init=*/NULL_TREE,
6849                          /*init_const_expr_p=*/false,
6850                          /*asmspec_tree=*/NULL_TREE,
6851                          /*flags=*/0);
6852                       if (DECL_INITIALIZED_IN_CLASS_P (r))
6853                         check_static_variable_definition (r, TREE_TYPE (r));
6854                     }
6855                   else if (TREE_CODE (r) == FIELD_DECL)
6856                     {
6857                       /* Determine whether R has a valid type and can be
6858                          completed later.  If R is invalid, then it is
6859                          replaced by error_mark_node so that it will not be
6860                          added to TYPE_FIELDS.  */
6861                       tree rtype = TREE_TYPE (r);
6862                       if (can_complete_type_without_circularity (rtype))
6863                         complete_type (rtype);
6864
6865                       if (!COMPLETE_TYPE_P (rtype))
6866                         {
6867                           cxx_incomplete_type_error (r, rtype);
6868                           r = error_mark_node;
6869                         }
6870                     }
6871
6872                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
6873                      such a thing will already have been added to the field
6874                      list by tsubst_enum in finish_member_declaration in the
6875                      CLASSTYPE_NESTED_UTDS case above.  */
6876                   if (!(TREE_CODE (r) == TYPE_DECL
6877                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
6878                         && DECL_ARTIFICIAL (r)))
6879                     {
6880                       set_current_access_from_decl (r);
6881                       finish_member_declaration (r);
6882                     }
6883                 }
6884             }
6885         }
6886       else
6887         {
6888           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
6889             {
6890               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
6891
6892               tree friend_type = t;
6893               bool adjust_processing_template_decl = false;
6894
6895               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6896                 {
6897                   /* template <class T> friend class C;  */
6898                   friend_type = tsubst_friend_class (friend_type, args);
6899                   adjust_processing_template_decl = true;
6900                 }
6901               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
6902                 {
6903                   /* template <class T> friend class C::D;  */
6904                   friend_type = tsubst (friend_type, args,
6905                                         tf_warning_or_error, NULL_TREE);
6906                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6907                     friend_type = TREE_TYPE (friend_type);
6908                   adjust_processing_template_decl = true;
6909                 }
6910               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
6911                 {
6912                   /* This could be either
6913
6914                        friend class T::C;
6915
6916                      when dependent_type_p is false or
6917
6918                        template <class U> friend class T::C;
6919
6920                      otherwise.  */
6921                   friend_type = tsubst (friend_type, args,
6922                                         tf_warning_or_error, NULL_TREE);
6923                   /* Bump processing_template_decl for correct
6924                      dependent_type_p calculation.  */
6925                   ++processing_template_decl;
6926                   if (dependent_type_p (friend_type))
6927                     adjust_processing_template_decl = true;
6928                   --processing_template_decl;
6929                 }
6930               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
6931                        && hidden_name_p (TYPE_NAME (friend_type)))
6932                 {
6933                   /* friend class C;
6934
6935                      where C hasn't been declared yet.  Let's lookup name
6936                      from namespace scope directly, bypassing any name that
6937                      come from dependent base class.  */
6938                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
6939
6940                   /* The call to xref_tag_from_type does injection for friend
6941                      classes.  */
6942                   push_nested_namespace (ns);
6943                   friend_type =
6944                     xref_tag_from_type (friend_type, NULL_TREE,
6945                                         /*tag_scope=*/ts_current);
6946                   pop_nested_namespace (ns);
6947                 }
6948               else if (uses_template_parms (friend_type))
6949                 /* friend class C<T>;  */
6950                 friend_type = tsubst (friend_type, args,
6951                                       tf_warning_or_error, NULL_TREE);
6952               /* Otherwise it's
6953
6954                    friend class C;
6955
6956                  where C is already declared or
6957
6958                    friend class C<int>;
6959
6960                  We don't have to do anything in these cases.  */
6961
6962               if (adjust_processing_template_decl)
6963                 /* Trick make_friend_class into realizing that the friend
6964                    we're adding is a template, not an ordinary class.  It's
6965                    important that we use make_friend_class since it will
6966                    perform some error-checking and output cross-reference
6967                    information.  */
6968                 ++processing_template_decl;
6969
6970               if (friend_type != error_mark_node)
6971                 make_friend_class (type, friend_type, /*complain=*/false);
6972
6973               if (adjust_processing_template_decl)
6974                 --processing_template_decl;
6975             }
6976           else
6977             {
6978               /* Build new DECL_FRIENDLIST.  */
6979               tree r;
6980
6981               /* The the file and line for this declaration, to
6982                  assist in error message reporting.  Since we
6983                  called push_tinst_level above, we don't need to
6984                  restore these.  */
6985               input_location = DECL_SOURCE_LOCATION (t);
6986
6987               if (TREE_CODE (t) == TEMPLATE_DECL)
6988                 {
6989                   ++processing_template_decl;
6990                   push_deferring_access_checks (dk_no_check);
6991                 }
6992
6993               r = tsubst_friend_function (t, args);
6994               add_friend (type, r, /*complain=*/false);
6995               if (TREE_CODE (t) == TEMPLATE_DECL)
6996                 {
6997                   pop_deferring_access_checks ();
6998                   --processing_template_decl;
6999                 }
7000             }
7001         }
7002     }
7003
7004   /* Set the file and line number information to whatever is given for
7005      the class itself.  This puts error messages involving generated
7006      implicit functions at a predictable point, and the same point
7007      that would be used for non-template classes.  */
7008   input_location = DECL_SOURCE_LOCATION (typedecl);
7009
7010   unreverse_member_declarations (type);
7011   finish_struct_1 (type);
7012   TYPE_BEING_DEFINED (type) = 0;
7013
7014   /* Now that the class is complete, instantiate default arguments for
7015      any member functions.  We don't do this earlier because the
7016      default arguments may reference members of the class.  */
7017   if (!PRIMARY_TEMPLATE_P (template))
7018     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
7019       if (TREE_CODE (t) == FUNCTION_DECL
7020           /* Implicitly generated member functions will not have template
7021              information; they are not instantiations, but instead are
7022              created "fresh" for each instantiation.  */
7023           && DECL_TEMPLATE_INFO (t))
7024         tsubst_default_arguments (t);
7025
7026   pop_nested_class ();
7027   pop_from_top_level ();
7028   pop_deferring_access_checks ();
7029   pop_tinst_level ();
7030
7031   /* The vtable for a template class can be emitted in any translation
7032      unit in which the class is instantiated.  When there is no key
7033      method, however, finish_struct_1 will already have added TYPE to
7034      the keyed_classes list.  */
7035   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
7036     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
7037
7038   return type;
7039 }
7040
7041 static tree
7042 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7043 {
7044   tree r;
7045
7046   if (!t)
7047     r = t;
7048   else if (TYPE_P (t))
7049     r = tsubst (t, args, complain, in_decl);
7050   else
7051     {
7052       r = tsubst_expr (t, args, complain, in_decl,
7053                        /*integral_constant_expression_p=*/true);
7054       r = fold_non_dependent_expr (r);
7055     }
7056   return r;
7057 }
7058
7059 /* Substitute ARGS into T, which is an pack expansion
7060    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
7061    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
7062    (if only a partial substitution could be performed) or
7063    ERROR_MARK_NODE if there was an error.  */
7064 tree
7065 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
7066                        tree in_decl)
7067 {
7068   tree pattern;
7069   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
7070   tree first_arg_pack; int i, len = -1;
7071   tree result;
7072   int incomplete = 0;
7073
7074   gcc_assert (PACK_EXPANSION_P (t));
7075   pattern = PACK_EXPANSION_PATTERN (t);
7076
7077   /* Determine the argument packs that will instantiate the parameter
7078      packs used in the expansion expression. While we're at it,
7079      compute the number of arguments to be expanded and make sure it
7080      is consistent.  */
7081   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
7082        pack = TREE_CHAIN (pack))
7083     {
7084       tree parm_pack = TREE_VALUE (pack);
7085       tree arg_pack = NULL_TREE;
7086       tree orig_arg = NULL_TREE;
7087
7088       if (TREE_CODE (parm_pack) == PARM_DECL)
7089         {
7090           if (local_specializations)
7091             arg_pack = retrieve_local_specialization (parm_pack);
7092         }
7093       else
7094         {
7095           int level, idx, levels;
7096           template_parm_level_and_index (parm_pack, &level, &idx);
7097
7098           levels = TMPL_ARGS_DEPTH (args);
7099           if (level <= levels)
7100             arg_pack = TMPL_ARG (args, level, idx);
7101         }
7102
7103       orig_arg = arg_pack;
7104       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
7105         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
7106       
7107       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
7108         /* This can only happen if we forget to expand an argument
7109            pack somewhere else. Just return an error, silently.  */
7110         {
7111           result = make_tree_vec (1);
7112           TREE_VEC_ELT (result, 0) = error_mark_node;
7113           return result;
7114         }
7115
7116       if (arg_pack
7117           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
7118           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
7119         {
7120           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
7121           tree pattern = PACK_EXPANSION_PATTERN (expansion);
7122           if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack))
7123               || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern)))
7124             /* The argument pack that the parameter maps to is just an
7125                expansion of the parameter itself, such as one would
7126                find in the implicit typedef of a class inside the
7127                class itself.  Consider this parameter "unsubstituted",
7128                so that we will maintain the outer pack expansion.  */
7129             arg_pack = NULL_TREE;
7130         }
7131           
7132       if (arg_pack)
7133         {
7134           int my_len = 
7135             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7136
7137           /* It's all-or-nothing with incomplete argument packs.  */
7138           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7139             return error_mark_node;
7140           
7141           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7142             incomplete = 1;
7143
7144           if (len < 0)
7145             {
7146               len = my_len;
7147               first_arg_pack = arg_pack;
7148             }
7149           else if (len != my_len)
7150             {
7151               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7152                 error ("mismatched argument pack lengths while expanding "
7153                        "%<%T%>",
7154                        pattern);
7155               else
7156                 error ("mismatched argument pack lengths while expanding "
7157                        "%<%E%>",
7158                        pattern);
7159               return error_mark_node;
7160             }
7161
7162           /* Keep track of the parameter packs and their corresponding
7163              argument packs.  */
7164           packs = tree_cons (parm_pack, arg_pack, packs);
7165           TREE_TYPE (packs) = orig_arg;
7166         }
7167       else
7168         /* We can't substitute for this parameter pack.  */
7169         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7170                                          TREE_VALUE (pack),
7171                                          unsubstituted_packs);
7172     }
7173
7174   /* We cannot expand this expansion expression, because we don't have
7175      all of the argument packs we need. Substitute into the pattern
7176      and return a PACK_EXPANSION_*. The caller will need to deal with
7177      that.  */
7178   if (unsubstituted_packs)
7179     return make_pack_expansion (tsubst (pattern, args, complain, 
7180                                         in_decl));
7181
7182   /* We could not find any argument packs that work.  */
7183   if (len < 0)
7184     return error_mark_node;
7185
7186   /* For each argument in each argument pack, substitute into the
7187      pattern.  */
7188   result = make_tree_vec (len + incomplete);
7189   for (i = 0; i < len + incomplete; ++i)
7190     {
7191       /* For parameter pack, change the substitution of the parameter
7192          pack to the ith argument in its argument pack, then expand
7193          the pattern.  */
7194       for (pack = packs; pack; pack = TREE_CHAIN (pack))
7195         {
7196           tree parm = TREE_PURPOSE (pack);
7197
7198           if (TREE_CODE (parm) == PARM_DECL)
7199             {
7200               /* Select the Ith argument from the pack.  */
7201               tree arg = make_node (ARGUMENT_PACK_SELECT);
7202               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7203               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7204               mark_used (parm);
7205               register_local_specialization (arg, parm);
7206             }
7207           else
7208             {
7209               tree value = parm;
7210               int idx, level;
7211               template_parm_level_and_index (parm, &level, &idx);
7212               
7213               if (i < len) 
7214                 {
7215                   /* Select the Ith argument from the pack. */
7216                   value = make_node (ARGUMENT_PACK_SELECT);
7217                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7218                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
7219                 }
7220
7221               /* Update the corresponding argument.  */
7222               TMPL_ARG (args, level, idx) = value;
7223             }
7224         }
7225
7226       /* Substitute into the PATTERN with the altered arguments.  */
7227       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7228         TREE_VEC_ELT (result, i) = 
7229           tsubst_expr (pattern, args, complain, in_decl,
7230                        /*integral_constant_expression_p=*/false);
7231       else
7232         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7233
7234       if (i == len)
7235         /* When we have incomplete argument packs, the last "expanded"
7236            result is itself a pack expansion, which allows us
7237            to deduce more arguments.  */
7238         TREE_VEC_ELT (result, i) = 
7239           make_pack_expansion (TREE_VEC_ELT (result, i));
7240
7241       if (TREE_VEC_ELT (result, i) == error_mark_node)
7242         {
7243           result = error_mark_node;
7244           break;
7245         }
7246     }
7247   
7248   /* Update ARGS to restore the substitution from parameter packs to
7249      their argument packs.  */
7250   for (pack = packs; pack; pack = TREE_CHAIN (pack))
7251     {
7252       tree parm = TREE_PURPOSE (pack);
7253
7254       if (TREE_CODE (parm) == PARM_DECL)
7255         register_local_specialization (TREE_TYPE (pack), parm);
7256       else
7257         {
7258           int idx, level;
7259           template_parm_level_and_index (parm, &level, &idx);
7260           
7261           /* Update the corresponding argument.  */
7262           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7263             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7264               TREE_TYPE (pack);
7265           else
7266             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7267         }
7268     }
7269
7270   return result;
7271 }
7272
7273 /* Substitute ARGS into the vector or list of template arguments T.  */
7274
7275 static tree
7276 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7277 {
7278   tree orig_t = t;
7279   int len = TREE_VEC_LENGTH (t);
7280   int need_new = 0, i, expanded_len_adjust = 0, out;
7281   tree *elts = (tree *) alloca (len * sizeof (tree));
7282
7283   for (i = 0; i < len; i++)
7284     {
7285       tree orig_arg = TREE_VEC_ELT (t, i);
7286       tree new_arg;
7287
7288       if (TREE_CODE (orig_arg) == TREE_VEC)
7289         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7290       else if (PACK_EXPANSION_P (orig_arg))
7291         {
7292           /* Substitute into an expansion expression.  */
7293           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7294
7295           if (TREE_CODE (new_arg) == TREE_VEC)
7296             /* Add to the expanded length adjustment the number of
7297                expanded arguments. We subtract one from this
7298                measurement, because the argument pack expression
7299                itself is already counted as 1 in
7300                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7301                the argument pack is empty.  */
7302             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7303         }
7304       else if (ARGUMENT_PACK_P (orig_arg))
7305         {
7306           /* Substitute into each of the arguments.  */
7307           new_arg = make_node (TREE_CODE (orig_arg));
7308           
7309           SET_ARGUMENT_PACK_ARGS (
7310             new_arg,
7311             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7312                                   args, complain, in_decl));
7313
7314           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7315             new_arg = error_mark_node;
7316
7317           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7318             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7319                                           complain, in_decl);
7320             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7321
7322             if (TREE_TYPE (new_arg) == error_mark_node)
7323               new_arg = error_mark_node;
7324           }
7325         }
7326       else
7327         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7328
7329       if (new_arg == error_mark_node)
7330         return error_mark_node;
7331
7332       elts[i] = new_arg;
7333       if (new_arg != orig_arg)
7334         need_new = 1;
7335     }
7336
7337   if (!need_new)
7338     return t;
7339
7340   /* Make space for the expanded arguments coming from template
7341      argument packs.  */
7342   t = make_tree_vec (len + expanded_len_adjust);
7343   for (i = 0, out = 0; i < len; i++)
7344     {
7345       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7346            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7347           && TREE_CODE (elts[i]) == TREE_VEC)
7348         {
7349           int idx;
7350
7351           /* Now expand the template argument pack "in place".  */
7352           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7353             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7354         }
7355       else
7356         {
7357           TREE_VEC_ELT (t, out) = elts[i];
7358           out++;
7359         }
7360     }
7361
7362   return t;
7363 }
7364
7365 /* Return the result of substituting ARGS into the template parameters
7366    given by PARMS.  If there are m levels of ARGS and m + n levels of
7367    PARMS, then the result will contain n levels of PARMS.  For
7368    example, if PARMS is `template <class T> template <class U>
7369    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7370    result will be `template <int*, double, class V>'.  */
7371
7372 static tree
7373 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7374 {
7375   tree r = NULL_TREE;
7376   tree* new_parms;
7377
7378   /* When substituting into a template, we must set
7379      PROCESSING_TEMPLATE_DECL as the template parameters may be
7380      dependent if they are based on one-another, and the dependency
7381      predicates are short-circuit outside of templates.  */
7382   ++processing_template_decl;
7383
7384   for (new_parms = &r;
7385        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7386        new_parms = &(TREE_CHAIN (*new_parms)),
7387          parms = TREE_CHAIN (parms))
7388     {
7389       tree new_vec =
7390         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7391       int i;
7392
7393       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7394         {
7395           tree tuple;
7396           tree default_value;
7397           tree parm_decl;
7398
7399           if (parms == error_mark_node)
7400             continue;
7401
7402           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7403
7404           if (tuple == error_mark_node)
7405             continue;
7406
7407           default_value = TREE_PURPOSE (tuple);
7408           parm_decl = TREE_VALUE (tuple);
7409
7410           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7411           if (TREE_CODE (parm_decl) == PARM_DECL
7412               && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7413             parm_decl = error_mark_node;
7414           default_value = tsubst_template_arg (default_value, args,
7415                                                complain, NULL_TREE);
7416
7417           tuple = build_tree_list (default_value, parm_decl);
7418           TREE_VEC_ELT (new_vec, i) = tuple;
7419         }
7420
7421       *new_parms =
7422         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7423                              - TMPL_ARGS_DEPTH (args)),
7424                    new_vec, NULL_TREE);
7425     }
7426
7427   --processing_template_decl;
7428
7429   return r;
7430 }
7431
7432 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7433    type T.  If T is not an aggregate or enumeration type, it is
7434    handled as if by tsubst.  IN_DECL is as for tsubst.  If
7435    ENTERING_SCOPE is nonzero, T is the context for a template which
7436    we are presently tsubst'ing.  Return the substituted value.  */
7437
7438 static tree
7439 tsubst_aggr_type (tree t,
7440                   tree args,
7441                   tsubst_flags_t complain,
7442                   tree in_decl,
7443                   int entering_scope)
7444 {
7445   if (t == NULL_TREE)
7446     return NULL_TREE;
7447
7448   switch (TREE_CODE (t))
7449     {
7450     case RECORD_TYPE:
7451       if (TYPE_PTRMEMFUNC_P (t))
7452         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7453
7454       /* Else fall through.  */
7455     case ENUMERAL_TYPE:
7456     case UNION_TYPE:
7457       if (TYPE_TEMPLATE_INFO (t))
7458         {
7459           tree argvec;
7460           tree context;
7461           tree r;
7462           bool saved_skip_evaluation;
7463
7464           /* In "sizeof(X<I>)" we need to evaluate "I".  */
7465           saved_skip_evaluation = skip_evaluation;
7466           skip_evaluation = false;
7467
7468           /* First, determine the context for the type we are looking
7469              up.  */
7470           context = TYPE_CONTEXT (t);
7471           if (context)
7472             context = tsubst_aggr_type (context, args, complain,
7473                                         in_decl, /*entering_scope=*/1);
7474
7475           /* Then, figure out what arguments are appropriate for the
7476              type we are trying to find.  For example, given:
7477
7478                template <class T> struct S;
7479                template <class T, class U> void f(T, U) { S<U> su; }
7480
7481              and supposing that we are instantiating f<int, double>,
7482              then our ARGS will be {int, double}, but, when looking up
7483              S we only want {double}.  */
7484           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7485                                          complain, in_decl);
7486           if (argvec == error_mark_node)
7487             r = error_mark_node;
7488           else
7489             {
7490               r = lookup_template_class (t, argvec, in_decl, context,
7491                                          entering_scope, complain);
7492               r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7493             }
7494
7495           skip_evaluation = saved_skip_evaluation;
7496
7497           return r;
7498         }
7499       else
7500         /* This is not a template type, so there's nothing to do.  */
7501         return t;
7502
7503     default:
7504       return tsubst (t, args, complain, in_decl);
7505     }
7506 }
7507
7508 /* Substitute into the default argument ARG (a default argument for
7509    FN), which has the indicated TYPE.  */
7510
7511 tree
7512 tsubst_default_argument (tree fn, tree type, tree arg)
7513 {
7514   tree saved_class_ptr = NULL_TREE;
7515   tree saved_class_ref = NULL_TREE;
7516
7517   /* This default argument came from a template.  Instantiate the
7518      default argument here, not in tsubst.  In the case of
7519      something like:
7520
7521        template <class T>
7522        struct S {
7523          static T t();
7524          void f(T = t());
7525        };
7526
7527      we must be careful to do name lookup in the scope of S<T>,
7528      rather than in the current class.  */
7529   push_access_scope (fn);
7530   /* The "this" pointer is not valid in a default argument.  */
7531   if (cfun)
7532     {
7533       saved_class_ptr = current_class_ptr;
7534       cp_function_chain->x_current_class_ptr = NULL_TREE;
7535       saved_class_ref = current_class_ref;
7536       cp_function_chain->x_current_class_ref = NULL_TREE;
7537     }
7538
7539   push_deferring_access_checks(dk_no_deferred);
7540   /* The default argument expression may cause implicitly defined
7541      member functions to be synthesized, which will result in garbage
7542      collection.  We must treat this situation as if we were within
7543      the body of function so as to avoid collecting live data on the
7544      stack.  */
7545   ++function_depth;
7546   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7547                      tf_warning_or_error, NULL_TREE,
7548                      /*integral_constant_expression_p=*/false);
7549   --function_depth;
7550   pop_deferring_access_checks();
7551
7552   /* Restore the "this" pointer.  */
7553   if (cfun)
7554     {
7555       cp_function_chain->x_current_class_ptr = saved_class_ptr;
7556       cp_function_chain->x_current_class_ref = saved_class_ref;
7557     }
7558
7559   pop_access_scope (fn);
7560
7561   /* Make sure the default argument is reasonable.  */
7562   arg = check_default_argument (type, arg);
7563
7564   return arg;
7565 }
7566
7567 /* Substitute into all the default arguments for FN.  */
7568
7569 static void
7570 tsubst_default_arguments (tree fn)
7571 {
7572   tree arg;
7573   tree tmpl_args;
7574
7575   tmpl_args = DECL_TI_ARGS (fn);
7576
7577   /* If this function is not yet instantiated, we certainly don't need
7578      its default arguments.  */
7579   if (uses_template_parms (tmpl_args))
7580     return;
7581
7582   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7583        arg;
7584        arg = TREE_CHAIN (arg))
7585     if (TREE_PURPOSE (arg))
7586       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7587                                                     TREE_VALUE (arg),
7588                                                     TREE_PURPOSE (arg));
7589 }
7590
7591 /* Substitute the ARGS into the T, which is a _DECL.  Return the
7592    result of the substitution.  Issue error and warning messages under
7593    control of COMPLAIN.  */
7594
7595 static tree
7596 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7597 {
7598   location_t saved_loc;
7599   tree r = NULL_TREE;
7600   tree in_decl = t;
7601
7602   /* Set the filename and linenumber to improve error-reporting.  */
7603   saved_loc = input_location;
7604   input_location = DECL_SOURCE_LOCATION (t);
7605
7606   switch (TREE_CODE (t))
7607     {
7608     case TEMPLATE_DECL:
7609       {
7610         /* We can get here when processing a member function template,
7611            member class template, and template template parameter of
7612            a template class.  */
7613         tree decl = DECL_TEMPLATE_RESULT (t);
7614         tree spec;
7615         tree tmpl_args;
7616         tree full_args;
7617
7618         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7619           {
7620             /* Template template parameter is treated here.  */
7621             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7622             if (new_type == error_mark_node)
7623               return error_mark_node;
7624
7625             r = copy_decl (t);
7626             TREE_CHAIN (r) = NULL_TREE;
7627             TREE_TYPE (r) = new_type;
7628             DECL_TEMPLATE_RESULT (r)
7629               = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7630             DECL_TEMPLATE_PARMS (r)
7631               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7632                                        complain);
7633             TYPE_NAME (new_type) = r;
7634             break;
7635           }
7636
7637         /* We might already have an instance of this template.
7638            The ARGS are for the surrounding class type, so the
7639            full args contain the tsubst'd args for the context,
7640            plus the innermost args from the template decl.  */
7641         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7642           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7643           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7644         /* Because this is a template, the arguments will still be
7645            dependent, even after substitution.  If
7646            PROCESSING_TEMPLATE_DECL is not set, the dependency
7647            predicates will short-circuit.  */
7648         ++processing_template_decl;
7649         full_args = tsubst_template_args (tmpl_args, args,
7650                                           complain, in_decl);
7651         --processing_template_decl;
7652         if (full_args == error_mark_node)
7653           return error_mark_node;
7654
7655         /* tsubst_template_args doesn't copy the vector if
7656            nothing changed.  But, *something* should have
7657            changed.  */
7658         gcc_assert (full_args != tmpl_args);
7659
7660         spec = retrieve_specialization (t, full_args,
7661                                         /*class_specializations_p=*/true);
7662         if (spec != NULL_TREE)
7663           {
7664             r = spec;
7665             break;
7666           }
7667
7668         /* Make a new template decl.  It will be similar to the
7669            original, but will record the current template arguments.
7670            We also create a new function declaration, which is just
7671            like the old one, but points to this new template, rather
7672            than the old one.  */
7673         r = copy_decl (t);
7674         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7675         TREE_CHAIN (r) = NULL_TREE;
7676
7677         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7678
7679         if (TREE_CODE (decl) == TYPE_DECL)
7680           {
7681             tree new_type;
7682             ++processing_template_decl;
7683             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7684             --processing_template_decl;
7685             if (new_type == error_mark_node)
7686               return error_mark_node;
7687
7688             TREE_TYPE (r) = new_type;
7689             CLASSTYPE_TI_TEMPLATE (new_type) = r;
7690             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7691             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7692             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7693           }
7694         else
7695           {
7696             tree new_decl;
7697             ++processing_template_decl;
7698             new_decl = tsubst (decl, args, complain, in_decl);
7699             --processing_template_decl;
7700             if (new_decl == error_mark_node)
7701               return error_mark_node;
7702
7703             DECL_TEMPLATE_RESULT (r) = new_decl;
7704             DECL_TI_TEMPLATE (new_decl) = r;
7705             TREE_TYPE (r) = TREE_TYPE (new_decl);
7706             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
7707             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
7708           }
7709
7710         SET_DECL_IMPLICIT_INSTANTIATION (r);
7711         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
7712         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
7713
7714         /* The template parameters for this new template are all the
7715            template parameters for the old template, except the
7716            outermost level of parameters.  */
7717         DECL_TEMPLATE_PARMS (r)
7718           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7719                                    complain);
7720
7721         if (PRIMARY_TEMPLATE_P (t))
7722           DECL_PRIMARY_TEMPLATE (r) = r;
7723
7724         if (TREE_CODE (decl) != TYPE_DECL)
7725           /* Record this non-type partial instantiation.  */
7726           register_specialization (r, t,
7727                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
7728                                    false);
7729       }
7730       break;
7731
7732     case FUNCTION_DECL:
7733       {
7734         tree ctx;
7735         tree argvec = NULL_TREE;
7736         tree *friends;
7737         tree gen_tmpl;
7738         tree type;
7739         int member;
7740         int args_depth;
7741         int parms_depth;
7742
7743         /* Nobody should be tsubst'ing into non-template functions.  */
7744         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
7745
7746         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
7747           {
7748             tree spec;
7749             bool dependent_p;
7750
7751             /* If T is not dependent, just return it.  We have to
7752                increment PROCESSING_TEMPLATE_DECL because
7753                value_dependent_expression_p assumes that nothing is
7754                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
7755             ++processing_template_decl;
7756             dependent_p = value_dependent_expression_p (t);
7757             --processing_template_decl;
7758             if (!dependent_p)
7759               return t;
7760
7761             /* Calculate the most general template of which R is a
7762                specialization, and the complete set of arguments used to
7763                specialize R.  */
7764             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
7765             argvec = tsubst_template_args (DECL_TI_ARGS
7766                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
7767                                            args, complain, in_decl);
7768
7769             /* Check to see if we already have this specialization.  */
7770             spec = retrieve_specialization (gen_tmpl, argvec,
7771                                             /*class_specializations_p=*/false);
7772
7773             if (spec)
7774               {
7775                 r = spec;
7776                 break;
7777               }
7778
7779             /* We can see more levels of arguments than parameters if
7780                there was a specialization of a member template, like
7781                this:
7782
7783                  template <class T> struct S { template <class U> void f(); }
7784                  template <> template <class U> void S<int>::f(U);
7785
7786                Here, we'll be substituting into the specialization,
7787                because that's where we can find the code we actually
7788                want to generate, but we'll have enough arguments for
7789                the most general template.
7790
7791                We also deal with the peculiar case:
7792
7793                  template <class T> struct S {
7794                    template <class U> friend void f();
7795                  };
7796                  template <class U> void f() {}
7797                  template S<int>;
7798                  template void f<double>();
7799
7800                Here, the ARGS for the instantiation of will be {int,
7801                double}.  But, we only need as many ARGS as there are
7802                levels of template parameters in CODE_PATTERN.  We are
7803                careful not to get fooled into reducing the ARGS in
7804                situations like:
7805
7806                  template <class T> struct S { template <class U> void f(U); }
7807                  template <class T> template <> void S<T>::f(int) {}
7808
7809                which we can spot because the pattern will be a
7810                specialization in this case.  */
7811             args_depth = TMPL_ARGS_DEPTH (args);
7812             parms_depth =
7813               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
7814             if (args_depth > parms_depth
7815                 && !DECL_TEMPLATE_SPECIALIZATION (t))
7816               args = get_innermost_template_args (args, parms_depth);
7817           }
7818         else
7819           {
7820             /* This special case arises when we have something like this:
7821
7822                  template <class T> struct S {
7823                    friend void f<int>(int, double);
7824                  };
7825
7826                Here, the DECL_TI_TEMPLATE for the friend declaration
7827                will be an IDENTIFIER_NODE.  We are being called from
7828                tsubst_friend_function, and we want only to create a
7829                new decl (R) with appropriate types so that we can call
7830                determine_specialization.  */
7831             gen_tmpl = NULL_TREE;
7832           }
7833
7834         if (DECL_CLASS_SCOPE_P (t))
7835           {
7836             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
7837               member = 2;
7838             else
7839               member = 1;
7840             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
7841                                     complain, t, /*entering_scope=*/1);
7842           }
7843         else
7844           {
7845             member = 0;
7846             ctx = DECL_CONTEXT (t);
7847           }
7848         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7849         if (type == error_mark_node)
7850           return error_mark_node;
7851
7852         /* We do NOT check for matching decls pushed separately at this
7853            point, as they may not represent instantiations of this
7854            template, and in any case are considered separate under the
7855            discrete model.  */
7856         r = copy_decl (t);
7857         DECL_USE_TEMPLATE (r) = 0;
7858         TREE_TYPE (r) = type;
7859         /* Clear out the mangled name and RTL for the instantiation.  */
7860         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
7861         SET_DECL_RTL (r, NULL_RTX);
7862         DECL_INITIAL (r) = NULL_TREE;
7863         DECL_CONTEXT (r) = ctx;
7864
7865         if (member && DECL_CONV_FN_P (r))
7866           /* Type-conversion operator.  Reconstruct the name, in
7867              case it's the name of one of the template's parameters.  */
7868           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
7869
7870         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
7871                                      complain, t);
7872         DECL_RESULT (r) = NULL_TREE;
7873
7874         TREE_STATIC (r) = 0;
7875         TREE_PUBLIC (r) = TREE_PUBLIC (t);
7876         DECL_EXTERNAL (r) = 1;
7877         /* If this is an instantiation of a function with internal
7878            linkage, we already know what object file linkage will be
7879            assigned to the instantiation.  */
7880         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
7881         DECL_DEFER_OUTPUT (r) = 0;
7882         TREE_CHAIN (r) = NULL_TREE;
7883         DECL_PENDING_INLINE_INFO (r) = 0;
7884         DECL_PENDING_INLINE_P (r) = 0;
7885         DECL_SAVED_TREE (r) = NULL_TREE;
7886         TREE_USED (r) = 0;
7887         if (DECL_CLONED_FUNCTION (r))
7888           {
7889             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
7890                                                args, complain, t);
7891             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
7892             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
7893           }
7894
7895         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
7896            this in the special friend case mentioned above where
7897            GEN_TMPL is NULL.  */
7898         if (gen_tmpl)
7899           {
7900             DECL_TEMPLATE_INFO (r)
7901               = tree_cons (gen_tmpl, argvec, NULL_TREE);
7902             SET_DECL_IMPLICIT_INSTANTIATION (r);
7903             register_specialization (r, gen_tmpl, argvec, false);
7904
7905             /* We're not supposed to instantiate default arguments
7906                until they are called, for a template.  But, for a
7907                declaration like:
7908
7909                  template <class T> void f ()
7910                  { extern void g(int i = T()); }
7911
7912                we should do the substitution when the template is
7913                instantiated.  We handle the member function case in
7914                instantiate_class_template since the default arguments
7915                might refer to other members of the class.  */
7916             if (!member
7917                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
7918                 && !uses_template_parms (argvec))
7919               tsubst_default_arguments (r);
7920           }
7921         else
7922           DECL_TEMPLATE_INFO (r) = NULL_TREE;
7923
7924         /* Copy the list of befriending classes.  */
7925         for (friends = &DECL_BEFRIENDING_CLASSES (r);
7926              *friends;
7927              friends = &TREE_CHAIN (*friends))
7928           {
7929             *friends = copy_node (*friends);
7930             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
7931                                             args, complain,
7932                                             in_decl);
7933           }
7934
7935         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
7936           {
7937             maybe_retrofit_in_chrg (r);
7938             if (DECL_CONSTRUCTOR_P (r))
7939               grok_ctor_properties (ctx, r);
7940             /* If this is an instantiation of a member template, clone it.
7941                If it isn't, that'll be handled by
7942                clone_constructors_and_destructors.  */
7943             if (PRIMARY_TEMPLATE_P (gen_tmpl))
7944               clone_function_decl (r, /*update_method_vec_p=*/0);
7945           }
7946         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
7947                  && !grok_op_properties (r, (complain & tf_error) != 0))
7948           return error_mark_node;
7949
7950         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
7951           SET_DECL_FRIEND_CONTEXT (r,
7952                                    tsubst (DECL_FRIEND_CONTEXT (t),
7953                                             args, complain, in_decl));
7954
7955         /* Possibly limit visibility based on template args.  */
7956         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
7957         if (DECL_VISIBILITY_SPECIFIED (t))
7958           {
7959             DECL_VISIBILITY_SPECIFIED (r) = 0;
7960             DECL_ATTRIBUTES (r)
7961               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
7962           }
7963         determine_visibility (r);
7964
7965         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
7966                                         args, complain, in_decl);
7967       }
7968       break;
7969
7970     case PARM_DECL:
7971       {
7972         tree type = NULL_TREE;
7973         int i, len = 1;
7974         tree expanded_types = NULL_TREE;
7975         tree prev_r = NULL_TREE;
7976         tree first_r = NULL_TREE;
7977
7978         if (FUNCTION_PARAMETER_PACK_P (t))
7979           {
7980             /* If there is a local specialization that isn't a
7981                parameter pack, it means that we're doing a "simple"
7982                substitution from inside tsubst_pack_expansion. Just
7983                return the local specialization (which will be a single
7984                parm).  */
7985             tree spec = NULL_TREE;
7986             if (local_specializations)
7987               spec = retrieve_local_specialization (t);
7988             if (spec 
7989                 && TREE_CODE (spec) == PARM_DECL
7990                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
7991               return spec;
7992
7993             /* Expand the TYPE_PACK_EXPANSION that provides the types for
7994                the parameters in this function parameter pack.  */
7995             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
7996                                                     complain, in_decl);
7997             if (TREE_CODE (expanded_types) == TREE_VEC)
7998               {
7999                 len = TREE_VEC_LENGTH (expanded_types);
8000
8001                 /* Zero-length parameter packs are boring. Just substitute
8002                    into the chain.  */
8003                 if (len == 0)
8004                   return tsubst (TREE_CHAIN (t), args, complain, 
8005                                  TREE_CHAIN (t));
8006               }
8007             else
8008               {
8009                 /* All we did was update the type. Make a note of that.  */
8010                 type = expanded_types;
8011                 expanded_types = NULL_TREE;
8012               }
8013           }
8014
8015         /* Loop through all of the parameter's we'll build. When T is
8016            a function parameter pack, LEN is the number of expanded
8017            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
8018         r = NULL_TREE;
8019         for (i = 0; i < len; ++i)
8020           {
8021             prev_r = r;
8022             r = copy_node (t);
8023             if (DECL_TEMPLATE_PARM_P (t))
8024               SET_DECL_TEMPLATE_PARM_P (r);
8025
8026             if (expanded_types)
8027               /* We're on the Ith parameter of the function parameter
8028                  pack.  */
8029               {
8030                 /* Get the Ith type.  */
8031                 type = TREE_VEC_ELT (expanded_types, i);
8032
8033                 if (DECL_NAME (r))
8034                   /* Rename the parameter to include the index.  */
8035                   DECL_NAME (r) =
8036                     make_ith_pack_parameter_name (DECL_NAME (r), i);
8037               }
8038             else if (!type)
8039               /* We're dealing with a normal parameter.  */
8040               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8041
8042             type = type_decays_to (type);
8043             TREE_TYPE (r) = type;
8044             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8045
8046             if (DECL_INITIAL (r))
8047               {
8048                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
8049                   DECL_INITIAL (r) = TREE_TYPE (r);
8050                 else
8051                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
8052                                              complain, in_decl);
8053               }
8054
8055             DECL_CONTEXT (r) = NULL_TREE;
8056
8057             if (!DECL_TEMPLATE_PARM_P (r))
8058               DECL_ARG_TYPE (r) = type_passed_as (type);
8059
8060             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8061                                             args, complain, in_decl);
8062
8063             /* Keep track of the first new parameter we
8064                generate. That's what will be returned to the
8065                caller.  */
8066             if (!first_r)
8067               first_r = r;
8068
8069             /* Build a proper chain of parameters when substituting
8070                into a function parameter pack.  */
8071             if (prev_r)
8072               TREE_CHAIN (prev_r) = r;
8073           }
8074
8075         if (TREE_CHAIN (t))
8076           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
8077                                    complain, TREE_CHAIN (t));
8078
8079         /* FIRST_R contains the start of the chain we've built.  */
8080         r = first_r;
8081       }
8082       break;
8083
8084     case FIELD_DECL:
8085       {
8086         tree type;
8087
8088         r = copy_decl (t);
8089         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8090         if (type == error_mark_node)
8091           return error_mark_node;
8092         TREE_TYPE (r) = type;
8093         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8094
8095         /* DECL_INITIAL gives the number of bits in a bit-field.  */
8096         DECL_INITIAL (r)
8097           = tsubst_expr (DECL_INITIAL (t), args,
8098                          complain, in_decl,
8099                          /*integral_constant_expression_p=*/true);
8100         /* We don't have to set DECL_CONTEXT here; it is set by
8101            finish_member_declaration.  */
8102         TREE_CHAIN (r) = NULL_TREE;
8103         if (VOID_TYPE_P (type))
8104           error ("instantiation of %q+D as type %qT", r, type);
8105
8106         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8107                                         args, complain, in_decl);
8108       }
8109       break;
8110
8111     case USING_DECL:
8112       /* We reach here only for member using decls.  */
8113       if (DECL_DEPENDENT_P (t))
8114         {
8115           r = do_class_using_decl
8116             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
8117              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
8118           if (!r)
8119             r = error_mark_node;
8120         }
8121       else
8122         {
8123           r = copy_node (t);
8124           TREE_CHAIN (r) = NULL_TREE;
8125         }
8126       break;
8127
8128     case TYPE_DECL:
8129     case VAR_DECL:
8130       {
8131         tree argvec = NULL_TREE;
8132         tree gen_tmpl = NULL_TREE;
8133         tree spec;
8134         tree tmpl = NULL_TREE;
8135         tree ctx;
8136         tree type = NULL_TREE;
8137         bool local_p;
8138
8139         if (TREE_CODE (t) == TYPE_DECL
8140             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8141           {
8142             /* If this is the canonical decl, we don't have to
8143                mess with instantiations, and often we can't (for
8144                typename, template type parms and such).  Note that
8145                TYPE_NAME is not correct for the above test if
8146                we've copied the type for a typedef.  */
8147             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8148             if (type == error_mark_node)
8149               return error_mark_node;
8150             r = TYPE_NAME (type);
8151             break;
8152           }
8153
8154         /* Check to see if we already have the specialization we
8155            need.  */
8156         spec = NULL_TREE;
8157         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8158           {
8159             /* T is a static data member or namespace-scope entity.
8160                We have to substitute into namespace-scope variables
8161                (even though such entities are never templates) because
8162                of cases like:
8163                
8164                  template <class T> void f() { extern T t; }
8165
8166                where the entity referenced is not known until
8167                instantiation time.  */
8168             local_p = false;
8169             ctx = DECL_CONTEXT (t);
8170             if (DECL_CLASS_SCOPE_P (t))
8171               {
8172                 ctx = tsubst_aggr_type (ctx, args,
8173                                         complain,
8174                                         in_decl, /*entering_scope=*/1);
8175                 /* If CTX is unchanged, then T is in fact the
8176                    specialization we want.  That situation occurs when
8177                    referencing a static data member within in its own
8178                    class.  We can use pointer equality, rather than
8179                    same_type_p, because DECL_CONTEXT is always
8180                    canonical.  */
8181                 if (ctx == DECL_CONTEXT (t))
8182                   spec = t;
8183               }
8184
8185             if (!spec)
8186               {
8187                 tmpl = DECL_TI_TEMPLATE (t);
8188                 gen_tmpl = most_general_template (tmpl);
8189                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8190                 spec = (retrieve_specialization 
8191                         (gen_tmpl, argvec,
8192                          /*class_specializations_p=*/false));
8193               }
8194           }
8195         else
8196           {
8197             /* A local variable.  */
8198             local_p = true;
8199             /* Subsequent calls to pushdecl will fill this in.  */
8200             ctx = NULL_TREE;
8201             spec = retrieve_local_specialization (t);
8202           }
8203         /* If we already have the specialization we need, there is
8204            nothing more to do.  */ 
8205         if (spec)
8206           {
8207             r = spec;
8208             break;
8209           }
8210
8211         /* Create a new node for the specialization we need.  */
8212         r = copy_decl (t);
8213         if (type == NULL_TREE)
8214           type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8215         if (TREE_CODE (r) == VAR_DECL)
8216           {
8217             /* Even if the original location is out of scope, the
8218                newly substituted one is not.  */
8219             DECL_DEAD_FOR_LOCAL (r) = 0;
8220             DECL_INITIALIZED_P (r) = 0;
8221             DECL_TEMPLATE_INSTANTIATED (r) = 0;
8222             if (type == error_mark_node)
8223               return error_mark_node;
8224             if (TREE_CODE (type) == FUNCTION_TYPE)
8225               {
8226                 /* It may seem that this case cannot occur, since:
8227
8228                      typedef void f();
8229                      void g() { f x; }
8230
8231                    declares a function, not a variable.  However:
8232       
8233                      typedef void f();
8234                      template <typename T> void g() { T t; }
8235                      template void g<f>();
8236
8237                    is an attempt to declare a variable with function
8238                    type.  */
8239                 error ("variable %qD has function type",
8240                        /* R is not yet sufficiently initialized, so we
8241                           just use its name.  */
8242                        DECL_NAME (r));
8243                 return error_mark_node;
8244               }
8245             type = complete_type (type);
8246             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8247               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8248             type = check_var_type (DECL_NAME (r), type);
8249
8250             if (DECL_HAS_VALUE_EXPR_P (t))
8251               {
8252                 tree ve = DECL_VALUE_EXPR (t);
8253                 ve = tsubst_expr (ve, args, complain, in_decl,
8254                                   /*constant_expression_p=*/false);
8255                 SET_DECL_VALUE_EXPR (r, ve);
8256               }
8257           }
8258         else if (DECL_SELF_REFERENCE_P (t))
8259           SET_DECL_SELF_REFERENCE_P (r);
8260         TREE_TYPE (r) = type;
8261         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8262         DECL_CONTEXT (r) = ctx;
8263         /* Clear out the mangled name and RTL for the instantiation.  */
8264         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8265         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8266           SET_DECL_RTL (r, NULL_RTX);
8267         /* The initializer must not be expanded until it is required;
8268            see [temp.inst].  */
8269         DECL_INITIAL (r) = NULL_TREE;
8270         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8271           SET_DECL_RTL (r, NULL_RTX);
8272         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8273         if (TREE_CODE (r) == VAR_DECL)
8274           {
8275             /* Possibly limit visibility based on template args.  */
8276             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8277             if (DECL_VISIBILITY_SPECIFIED (t))
8278               {
8279                 DECL_VISIBILITY_SPECIFIED (r) = 0;
8280                 DECL_ATTRIBUTES (r)
8281                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8282               }
8283             determine_visibility (r);
8284           }
8285         /* Preserve a typedef that names a type.  */
8286         else if (TREE_CODE (r) == TYPE_DECL
8287                  && DECL_ORIGINAL_TYPE (t)
8288                  && type != error_mark_node)
8289           {
8290             DECL_ORIGINAL_TYPE (r) = tsubst (DECL_ORIGINAL_TYPE (t),
8291                                              args, complain, in_decl);
8292             TREE_TYPE (r) = type = build_variant_type_copy (type);
8293             TYPE_NAME (type) = r;
8294           }
8295
8296         if (!local_p)
8297           {
8298             /* A static data member declaration is always marked
8299                external when it is declared in-class, even if an
8300                initializer is present.  We mimic the non-template
8301                processing here.  */
8302             DECL_EXTERNAL (r) = 1;
8303
8304             register_specialization (r, gen_tmpl, argvec, false);
8305             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8306             SET_DECL_IMPLICIT_INSTANTIATION (r);
8307           }
8308         else
8309           register_local_specialization (r, t);
8310
8311         TREE_CHAIN (r) = NULL_TREE;
8312
8313         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
8314                                         (int) ATTR_FLAG_TYPE_IN_PLACE,
8315                                         args, complain, in_decl);
8316         layout_decl (r, 0);
8317       }
8318       break;
8319
8320     default:
8321       gcc_unreachable ();
8322     }
8323
8324   /* Restore the file and line information.  */
8325   input_location = saved_loc;
8326
8327   return r;
8328 }
8329
8330 /* Substitute into the ARG_TYPES of a function type.  */
8331
8332 static tree
8333 tsubst_arg_types (tree arg_types,
8334                   tree args,
8335                   tsubst_flags_t complain,
8336                   tree in_decl)
8337 {
8338   tree remaining_arg_types;
8339   tree type = NULL_TREE;
8340   int i = 1;
8341   tree expanded_args = NULL_TREE;
8342   tree default_arg;
8343
8344   if (!arg_types || arg_types == void_list_node)
8345     return arg_types;
8346
8347   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8348                                           args, complain, in_decl);
8349   if (remaining_arg_types == error_mark_node)
8350     return error_mark_node;
8351
8352   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8353     {
8354       /* For a pack expansion, perform substitution on the
8355          entire expression. Later on, we'll handle the arguments
8356          one-by-one.  */
8357       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8358                                             args, complain, in_decl);
8359
8360       if (TREE_CODE (expanded_args) == TREE_VEC)
8361         /* So that we'll spin through the parameters, one by one.  */
8362         i = TREE_VEC_LENGTH (expanded_args);
8363       else
8364         {
8365           /* We only partially substituted into the parameter
8366              pack. Our type is TYPE_PACK_EXPANSION.  */
8367           type = expanded_args;
8368           expanded_args = NULL_TREE;
8369         }
8370     }
8371
8372   while (i > 0) {
8373     --i;
8374     
8375     if (expanded_args)
8376       type = TREE_VEC_ELT (expanded_args, i);
8377     else if (!type)
8378       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8379
8380     if (type == error_mark_node)
8381       return error_mark_node;
8382     if (VOID_TYPE_P (type))
8383       {
8384         if (complain & tf_error)
8385           {
8386             error ("invalid parameter type %qT", type);
8387             if (in_decl)
8388               error ("in declaration %q+D", in_decl);
8389           }
8390         return error_mark_node;
8391     }
8392     
8393     /* Do array-to-pointer, function-to-pointer conversion, and ignore
8394        top-level qualifiers as required.  */
8395     type = TYPE_MAIN_VARIANT (type_decays_to (type));
8396
8397     /* We do not substitute into default arguments here.  The standard
8398        mandates that they be instantiated only when needed, which is
8399        done in build_over_call.  */
8400     default_arg = TREE_PURPOSE (arg_types);
8401
8402     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8403       {
8404         /* We've instantiated a template before its default arguments
8405            have been parsed.  This can happen for a nested template
8406            class, and is not an error unless we require the default
8407            argument in a call of this function.  */
8408         remaining_arg_types = 
8409           tree_cons (default_arg, type, remaining_arg_types);
8410         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
8411                        remaining_arg_types);
8412       }
8413     else
8414       remaining_arg_types = 
8415         hash_tree_cons (default_arg, type, remaining_arg_types);
8416   }
8417         
8418   return remaining_arg_types;
8419 }
8420
8421 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
8422    *not* handle the exception-specification for FNTYPE, because the
8423    initial substitution of explicitly provided template parameters
8424    during argument deduction forbids substitution into the
8425    exception-specification:
8426
8427      [temp.deduct]
8428
8429      All references in the function type of the function template to  the
8430      corresponding template parameters are replaced by the specified tem-
8431      plate argument values.  If a substitution in a template parameter or
8432      in  the function type of the function template results in an invalid
8433      type, type deduction fails.  [Note: The equivalent  substitution  in
8434      exception specifications is done only when the function is instanti-
8435      ated, at which point a program is  ill-formed  if  the  substitution
8436      results in an invalid type.]  */
8437
8438 static tree
8439 tsubst_function_type (tree t,
8440                       tree args,
8441                       tsubst_flags_t complain,
8442                       tree in_decl)
8443 {
8444   tree return_type;
8445   tree arg_types;
8446   tree fntype;
8447
8448   /* The TYPE_CONTEXT is not used for function/method types.  */
8449   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8450
8451   /* Substitute the return type.  */
8452   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8453   if (return_type == error_mark_node)
8454     return error_mark_node;
8455   /* The standard does not presently indicate that creation of a
8456      function type with an invalid return type is a deduction failure.
8457      However, that is clearly analogous to creating an array of "void"
8458      or a reference to a reference.  This is core issue #486.  */
8459   if (TREE_CODE (return_type) == ARRAY_TYPE
8460       || TREE_CODE (return_type) == FUNCTION_TYPE)
8461     {
8462       if (complain & tf_error)
8463         {
8464           if (TREE_CODE (return_type) == ARRAY_TYPE)
8465             error ("function returning an array");
8466           else
8467             error ("function returning a function");
8468         }
8469       return error_mark_node;
8470     }
8471
8472   /* Substitute the argument types.  */
8473   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8474                                 complain, in_decl);
8475   if (arg_types == error_mark_node)
8476     return error_mark_node;
8477
8478   if (TYPE_QUALS (return_type) != TYPE_UNQUALIFIED
8479       && in_decl != NULL_TREE
8480       && !TREE_NO_WARNING (in_decl)
8481       && (SCALAR_TYPE_P (return_type) || VOID_TYPE_P (return_type)))
8482     warning (OPT_Wreturn_type,
8483             "type qualifiers ignored on function return type");
8484
8485   /* Construct a new type node and return it.  */
8486   if (TREE_CODE (t) == FUNCTION_TYPE)
8487     fntype = build_function_type (return_type, arg_types);
8488   else
8489     {
8490       tree r = TREE_TYPE (TREE_VALUE (arg_types));
8491       if (! IS_AGGR_TYPE (r))
8492         {
8493           /* [temp.deduct]
8494
8495              Type deduction may fail for any of the following
8496              reasons:
8497
8498              -- Attempting to create "pointer to member of T" when T
8499              is not a class type.  */
8500           if (complain & tf_error)
8501             error ("creating pointer to member function of non-class type %qT",
8502                       r);
8503           return error_mark_node;
8504         }
8505
8506       fntype = build_method_type_directly (r, return_type,
8507                                            TREE_CHAIN (arg_types));
8508     }
8509   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8510   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8511
8512   return fntype;
8513 }
8514
8515 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
8516    ARGS into that specification, and return the substituted
8517    specification.  If there is no specification, return NULL_TREE.  */
8518
8519 static tree
8520 tsubst_exception_specification (tree fntype,
8521                                 tree args,
8522                                 tsubst_flags_t complain,
8523                                 tree in_decl)
8524 {
8525   tree specs;
8526   tree new_specs;
8527
8528   specs = TYPE_RAISES_EXCEPTIONS (fntype);
8529   new_specs = NULL_TREE;
8530   if (specs)
8531     {
8532       if (! TREE_VALUE (specs))
8533         new_specs = specs;
8534       else
8535         while (specs)
8536           {
8537             tree spec;
8538             int i, len = 1;
8539             tree expanded_specs = NULL_TREE;
8540
8541             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8542               {
8543                 /* Expand the pack expansion type.  */
8544                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8545                                                        args, complain,
8546                                                        in_decl);
8547                 len = TREE_VEC_LENGTH (expanded_specs);
8548               }
8549
8550             for (i = 0; i < len; ++i)
8551               {
8552                 if (expanded_specs)
8553                   spec = TREE_VEC_ELT (expanded_specs, i);
8554                 else
8555                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8556                 if (spec == error_mark_node)
8557                   return spec;
8558                 new_specs = add_exception_specifier (new_specs, spec, 
8559                                                      complain);
8560               }
8561
8562             specs = TREE_CHAIN (specs);
8563           }
8564     }
8565   return new_specs;
8566 }
8567
8568 /* Take the tree structure T and replace template parameters used
8569    therein with the argument vector ARGS.  IN_DECL is an associated
8570    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
8571    Issue error and warning messages under control of COMPLAIN.  Note
8572    that we must be relatively non-tolerant of extensions here, in
8573    order to preserve conformance; if we allow substitutions that
8574    should not be allowed, we may allow argument deductions that should
8575    not succeed, and therefore report ambiguous overload situations
8576    where there are none.  In theory, we could allow the substitution,
8577    but indicate that it should have failed, and allow our caller to
8578    make sure that the right thing happens, but we don't try to do this
8579    yet.
8580
8581    This function is used for dealing with types, decls and the like;
8582    for expressions, use tsubst_expr or tsubst_copy.  */
8583
8584 static tree
8585 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8586 {
8587   tree type, r;
8588
8589   if (t == NULL_TREE || t == error_mark_node
8590       || t == integer_type_node
8591       || t == void_type_node
8592       || t == char_type_node
8593       || t == unknown_type_node
8594       || TREE_CODE (t) == NAMESPACE_DECL)
8595     return t;
8596
8597   if (DECL_P (t))
8598     return tsubst_decl (t, args, complain);
8599
8600   if (TREE_CODE (t) == IDENTIFIER_NODE)
8601     type = IDENTIFIER_TYPE_VALUE (t);
8602   else
8603     type = TREE_TYPE (t);
8604
8605   gcc_assert (type != unknown_type_node);
8606
8607   /* Reuse typedefs.  We need to do this to handle dependent attributes,
8608      such as attribute aligned.  */
8609   if (TYPE_P (t)
8610       && TYPE_NAME (t)
8611       && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
8612     {
8613       tree decl = TYPE_NAME (t);
8614       
8615       if (DECL_CLASS_SCOPE_P (decl)
8616           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl)))
8617         {
8618           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
8619           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
8620           r = retrieve_specialization (tmpl, gen_args, false);
8621         }
8622       else if (DECL_FUNCTION_SCOPE_P (decl))
8623         r = retrieve_local_specialization (decl);
8624       else
8625         r = NULL_TREE;
8626         
8627       if (r)
8628         {
8629           r = TREE_TYPE (r);
8630           r = cp_build_qualified_type_real
8631             (r, cp_type_quals (t) | cp_type_quals (r),
8632              complain | tf_ignore_bad_quals);
8633           return r;
8634         }
8635       /* Else we must be instantiating the typedef, so fall through.  */
8636     }
8637
8638   if (type
8639       && TREE_CODE (t) != TYPENAME_TYPE
8640       && TREE_CODE (t) != IDENTIFIER_NODE
8641       && TREE_CODE (t) != FUNCTION_TYPE
8642       && TREE_CODE (t) != METHOD_TYPE)
8643     type = tsubst (type, args, complain, in_decl);
8644   if (type == error_mark_node)
8645     return error_mark_node;
8646
8647   switch (TREE_CODE (t))
8648     {
8649     case RECORD_TYPE:
8650     case UNION_TYPE:
8651     case ENUMERAL_TYPE:
8652       return tsubst_aggr_type (t, args, complain, in_decl,
8653                                /*entering_scope=*/0);
8654
8655     case ERROR_MARK:
8656     case IDENTIFIER_NODE:
8657     case VOID_TYPE:
8658     case REAL_TYPE:
8659     case COMPLEX_TYPE:
8660     case VECTOR_TYPE:
8661     case BOOLEAN_TYPE:
8662     case INTEGER_CST:
8663     case REAL_CST:
8664     case STRING_CST:
8665       return t;
8666
8667     case INTEGER_TYPE:
8668       if (t == integer_type_node)
8669         return t;
8670
8671       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8672           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8673         return t;
8674
8675       {
8676         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8677
8678         max = tsubst_expr (omax, args, complain, in_decl,
8679                            /*integral_constant_expression_p=*/false);
8680         max = fold_decl_constant_value (max);
8681
8682         if (TREE_CODE (max) != INTEGER_CST 
8683             && TREE_CODE (max) != TEMPLATE_PARM_INDEX
8684             && !at_function_scope_p ())
8685           {
8686             if (complain & tf_error)
8687               error ("array bound is not an integer constant");
8688             return error_mark_node;
8689           }
8690
8691         /* [temp.deduct]
8692
8693            Type deduction may fail for any of the following
8694            reasons:
8695
8696              Attempting to create an array with a size that is
8697              zero or negative.  */
8698         if (integer_zerop (max) && !(complain & tf_error))
8699           /* We must fail if performing argument deduction (as
8700              indicated by the state of complain), so that
8701              another substitution can be found.  */
8702           return error_mark_node;
8703         else if (TREE_CODE (max) == INTEGER_CST
8704                  && INT_CST_LT (max, integer_zero_node))
8705           {
8706             if (complain & tf_error)
8707               error ("creating array with negative size (%qE)", max);
8708
8709             return error_mark_node;
8710           }
8711
8712         return compute_array_index_type (NULL_TREE, max);
8713       }
8714
8715     case TEMPLATE_TYPE_PARM:
8716     case TEMPLATE_TEMPLATE_PARM:
8717     case BOUND_TEMPLATE_TEMPLATE_PARM:
8718     case TEMPLATE_PARM_INDEX:
8719       {
8720         int idx;
8721         int level;
8722         int levels;
8723         tree arg = NULL_TREE;
8724
8725         r = NULL_TREE;
8726
8727         gcc_assert (TREE_VEC_LENGTH (args) > 0);
8728         template_parm_level_and_index (t, &level, &idx); 
8729
8730         levels = TMPL_ARGS_DEPTH (args);
8731         if (level <= levels)
8732           {
8733             arg = TMPL_ARG (args, level, idx);
8734
8735             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
8736               /* See through ARGUMENT_PACK_SELECT arguments. */
8737               arg = ARGUMENT_PACK_SELECT_ARG (arg);
8738           }
8739
8740         if (arg == error_mark_node)
8741           return error_mark_node;
8742         else if (arg != NULL_TREE)
8743           {
8744             if (ARGUMENT_PACK_P (arg))
8745               /* If ARG is an argument pack, we don't actually want to
8746                  perform a substitution here, because substitutions
8747                  for argument packs are only done
8748                  element-by-element. We can get to this point when
8749                  substituting the type of a non-type template
8750                  parameter pack, when that type actually contains
8751                  template parameter packs from an outer template, e.g.,
8752
8753                  template<typename... Types> struct A {
8754                    template<Types... Values> struct B { };
8755                  };  */
8756               return t;
8757
8758             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
8759               {
8760                 int quals;
8761                 gcc_assert (TYPE_P (arg));
8762
8763                 /* cv-quals from the template are discarded when
8764                    substituting in a function or reference type.  */
8765                 if (TREE_CODE (arg) == FUNCTION_TYPE
8766                     || TREE_CODE (arg) == METHOD_TYPE
8767                     || TREE_CODE (arg) == REFERENCE_TYPE)
8768                   quals = cp_type_quals (arg);
8769                 else
8770                   quals = cp_type_quals (arg) | cp_type_quals (t);
8771                   
8772                 return cp_build_qualified_type_real
8773                   (arg, quals, complain | tf_ignore_bad_quals);
8774               }
8775             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8776               {
8777                 /* We are processing a type constructed from a
8778                    template template parameter.  */
8779                 tree argvec = tsubst (TYPE_TI_ARGS (t),
8780                                       args, complain, in_decl);
8781                 if (argvec == error_mark_node)
8782                   return error_mark_node;
8783
8784                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
8785                    are resolving nested-types in the signature of a
8786                    member function templates.  Otherwise ARG is a
8787                    TEMPLATE_DECL and is the real template to be
8788                    instantiated.  */
8789                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
8790                   arg = TYPE_NAME (arg);
8791
8792                 r = lookup_template_class (arg,
8793                                            argvec, in_decl,
8794                                            DECL_CONTEXT (arg),
8795                                             /*entering_scope=*/0,
8796                                            complain);
8797                 return cp_build_qualified_type_real
8798                   (r, TYPE_QUALS (t), complain);
8799               }
8800             else
8801               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
8802               return arg;
8803           }
8804
8805         if (level == 1)
8806           /* This can happen during the attempted tsubst'ing in
8807              unify.  This means that we don't yet have any information
8808              about the template parameter in question.  */
8809           return t;
8810
8811         /* If we get here, we must have been looking at a parm for a
8812            more deeply nested template.  Make a new version of this
8813            template parameter, but with a lower level.  */
8814         switch (TREE_CODE (t))
8815           {
8816           case TEMPLATE_TYPE_PARM:
8817           case TEMPLATE_TEMPLATE_PARM:
8818           case BOUND_TEMPLATE_TEMPLATE_PARM:
8819             if (cp_type_quals (t))
8820               {
8821                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
8822                 r = cp_build_qualified_type_real
8823                   (r, cp_type_quals (t),
8824                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
8825                                ? tf_ignore_bad_quals : 0));
8826               }
8827             else
8828               {
8829                 r = copy_type (t);
8830                 TEMPLATE_TYPE_PARM_INDEX (r)
8831                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
8832                                                 r, levels);
8833                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
8834                 TYPE_MAIN_VARIANT (r) = r;
8835                 TYPE_POINTER_TO (r) = NULL_TREE;
8836                 TYPE_REFERENCE_TO (r) = NULL_TREE;
8837
8838                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
8839                   /* We have reduced the level of the template
8840                      template parameter, but not the levels of its
8841                      template parameters, so canonical_type_parameter
8842                      will not be able to find the canonical template
8843                      template parameter for this level. Thus, we
8844                      require structural equality checking to compare
8845                      TEMPLATE_TEMPLATE_PARMs. */
8846                   SET_TYPE_STRUCTURAL_EQUALITY (r);
8847                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
8848                   SET_TYPE_STRUCTURAL_EQUALITY (r);
8849                 else
8850                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
8851
8852                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8853                   {
8854                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
8855                                           complain, in_decl);
8856                     if (argvec == error_mark_node)
8857                       return error_mark_node;
8858
8859                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
8860                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
8861                   }
8862               }
8863             break;
8864
8865           case TEMPLATE_PARM_INDEX:
8866             r = reduce_template_parm_level (t, type, levels);
8867             break;
8868
8869           default:
8870             gcc_unreachable ();
8871           }
8872
8873         return r;
8874       }
8875
8876     case TREE_LIST:
8877       {
8878         tree purpose, value, chain;
8879
8880         if (t == void_list_node)
8881           return t;
8882
8883         purpose = TREE_PURPOSE (t);
8884         if (purpose)
8885           {
8886             purpose = tsubst (purpose, args, complain, in_decl);
8887             if (purpose == error_mark_node)
8888               return error_mark_node;
8889           }
8890         value = TREE_VALUE (t);
8891         if (value)
8892           {
8893             value = tsubst (value, args, complain, in_decl);
8894             if (value == error_mark_node)
8895               return error_mark_node;
8896           }
8897         chain = TREE_CHAIN (t);
8898         if (chain && chain != void_type_node)
8899           {
8900             chain = tsubst (chain, args, complain, in_decl);
8901             if (chain == error_mark_node)
8902               return error_mark_node;
8903           }
8904         if (purpose == TREE_PURPOSE (t)
8905             && value == TREE_VALUE (t)
8906             && chain == TREE_CHAIN (t))
8907           return t;
8908         return hash_tree_cons (purpose, value, chain);
8909       }
8910
8911     case TREE_BINFO:
8912       /* We should never be tsubsting a binfo.  */
8913       gcc_unreachable ();
8914
8915     case TREE_VEC:
8916       /* A vector of template arguments.  */
8917       gcc_assert (!type);
8918       return tsubst_template_args (t, args, complain, in_decl);
8919
8920     case POINTER_TYPE:
8921     case REFERENCE_TYPE:
8922       {
8923         enum tree_code code;
8924
8925         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
8926           return t;
8927
8928         code = TREE_CODE (t);
8929
8930
8931         /* [temp.deduct]
8932
8933            Type deduction may fail for any of the following
8934            reasons:
8935
8936            -- Attempting to create a pointer to reference type.
8937            -- Attempting to create a reference to a reference type or
8938               a reference to void.
8939
8940           Core issue 106 says that creating a reference to a reference
8941           during instantiation is no longer a cause for failure. We
8942           only enforce this check in strict C++98 mode.  */
8943         if ((TREE_CODE (type) == REFERENCE_TYPE
8944              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
8945             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
8946           {
8947             static location_t last_loc;
8948
8949             /* We keep track of the last time we issued this error
8950                message to avoid spewing a ton of messages during a
8951                single bad template instantiation.  */
8952             if (complain & tf_error
8953 #ifdef USE_MAPPED_LOCATION
8954                 && last_loc != input_location
8955 #else
8956                 && (last_loc.line != input_line
8957                     || last_loc.file != input_filename)
8958 #endif
8959                   )
8960               {
8961                 if (TREE_CODE (type) == VOID_TYPE)
8962                   error ("forming reference to void");
8963                 else
8964                   error ("forming %s to reference type %qT",
8965                          (code == POINTER_TYPE) ? "pointer" : "reference",
8966                          type);
8967                 last_loc = input_location;
8968               }
8969
8970             return error_mark_node;
8971           }
8972         else if (code == POINTER_TYPE)
8973           {
8974             r = build_pointer_type (type);
8975             if (TREE_CODE (type) == METHOD_TYPE)
8976               r = build_ptrmemfunc_type (r);
8977           }
8978         else if (TREE_CODE (type) == REFERENCE_TYPE)
8979           /* In C++0x, during template argument substitution, when there is an
8980              attempt to create a reference to a reference type, reference
8981              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
8982
8983              "If a template-argument for a template-parameter T names a type
8984              that is a reference to a type A, an attempt to create the type
8985              'lvalue reference to cv T' creates the type 'lvalue reference to
8986              A,' while an attempt to create the type type rvalue reference to
8987              cv T' creates the type T"
8988           */
8989           r = cp_build_reference_type
8990               (TREE_TYPE (type),
8991                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
8992         else
8993           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
8994         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
8995
8996         if (r != error_mark_node)
8997           /* Will this ever be needed for TYPE_..._TO values?  */
8998           layout_type (r);
8999
9000         return r;
9001       }
9002     case OFFSET_TYPE:
9003       {
9004         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
9005         if (r == error_mark_node || !IS_AGGR_TYPE (r))
9006           {
9007             /* [temp.deduct]
9008
9009                Type deduction may fail for any of the following
9010                reasons:
9011
9012                -- Attempting to create "pointer to member of T" when T
9013                   is not a class type.  */
9014             if (complain & tf_error)
9015               error ("creating pointer to member of non-class type %qT", r);
9016             return error_mark_node;
9017           }
9018         if (TREE_CODE (type) == REFERENCE_TYPE)
9019           {
9020             if (complain & tf_error)
9021               error ("creating pointer to member reference type %qT", type);
9022             return error_mark_node;
9023           }
9024         if (TREE_CODE (type) == VOID_TYPE)
9025           {
9026             if (complain & tf_error)
9027               error ("creating pointer to member of type void");
9028             return error_mark_node;
9029           }
9030         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9031         if (TREE_CODE (type) == FUNCTION_TYPE)
9032           {
9033             /* The type of the implicit object parameter gets its
9034                cv-qualifiers from the FUNCTION_TYPE. */
9035             tree method_type;
9036             tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
9037                                                       cp_type_quals (type));
9038             tree memptr;
9039             method_type = build_method_type_directly (this_type,
9040                                                       TREE_TYPE (type),
9041                                                       TYPE_ARG_TYPES (type));
9042             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
9043             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
9044                                                  complain);
9045           }
9046         else
9047           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
9048                                                TYPE_QUALS (t),
9049                                                complain);
9050       }
9051     case FUNCTION_TYPE:
9052     case METHOD_TYPE:
9053       {
9054         tree fntype;
9055         tree specs;
9056         fntype = tsubst_function_type (t, args, complain, in_decl);
9057         if (fntype == error_mark_node)
9058           return error_mark_node;
9059
9060         /* Substitute the exception specification.  */
9061         specs = tsubst_exception_specification (t, args, complain,
9062                                                 in_decl);
9063         if (specs == error_mark_node)
9064           return error_mark_node;
9065         if (specs)
9066           fntype = build_exception_variant (fntype, specs);
9067         return fntype;
9068       }
9069     case ARRAY_TYPE:
9070       {
9071         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
9072         if (domain == error_mark_node)
9073           return error_mark_node;
9074
9075         /* As an optimization, we avoid regenerating the array type if
9076            it will obviously be the same as T.  */
9077         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
9078           return t;
9079
9080         /* These checks should match the ones in grokdeclarator.
9081
9082            [temp.deduct]
9083
9084            The deduction may fail for any of the following reasons:
9085
9086            -- Attempting to create an array with an element type that
9087               is void, a function type, or a reference type, or [DR337]
9088               an abstract class type.  */
9089         if (TREE_CODE (type) == VOID_TYPE
9090             || TREE_CODE (type) == FUNCTION_TYPE
9091             || TREE_CODE (type) == REFERENCE_TYPE)
9092           {
9093             if (complain & tf_error)
9094               error ("creating array of %qT", type);
9095             return error_mark_node;
9096           }
9097         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
9098           {
9099             if (complain & tf_error)
9100               error ("creating array of %qT, which is an abstract class type",
9101                      type);
9102             return error_mark_node;
9103           }
9104
9105         r = build_cplus_array_type (type, domain);
9106
9107         if (TYPE_USER_ALIGN (t))
9108           {
9109             TYPE_ALIGN (r) = TYPE_ALIGN (t);
9110             TYPE_USER_ALIGN (r) = 1;
9111           }
9112
9113         return r;
9114       }
9115
9116     case PLUS_EXPR:
9117     case MINUS_EXPR:
9118       {
9119         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9120         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9121
9122         if (e1 == error_mark_node || e2 == error_mark_node)
9123           return error_mark_node;
9124
9125         return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
9126       }
9127
9128     case NEGATE_EXPR:
9129     case NOP_EXPR:
9130       {
9131         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9132         if (e == error_mark_node)
9133           return error_mark_node;
9134
9135         return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
9136       }
9137
9138     case TYPENAME_TYPE:
9139       {
9140         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9141                                      in_decl, /*entering_scope=*/1);
9142         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
9143                               complain, in_decl);
9144
9145         if (ctx == error_mark_node || f == error_mark_node)
9146           return error_mark_node;
9147
9148         if (!IS_AGGR_TYPE (ctx))
9149           {
9150             if (complain & tf_error)
9151               error ("%qT is not a class, struct, or union type", ctx);
9152             return error_mark_node;
9153           }
9154         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
9155           {
9156             /* Normally, make_typename_type does not require that the CTX
9157                have complete type in order to allow things like:
9158
9159                  template <class T> struct S { typename S<T>::X Y; };
9160
9161                But, such constructs have already been resolved by this
9162                point, so here CTX really should have complete type, unless
9163                it's a partial instantiation.  */
9164             ctx = complete_type (ctx);
9165             if (!COMPLETE_TYPE_P (ctx))
9166               {
9167                 if (complain & tf_error)
9168                   cxx_incomplete_type_error (NULL_TREE, ctx);
9169                 return error_mark_node;
9170               }
9171           }
9172
9173         f = make_typename_type (ctx, f, typename_type,
9174                                 (complain & tf_error) | tf_keep_type_decl);
9175         if (f == error_mark_node)
9176           return f;
9177         if (TREE_CODE (f) == TYPE_DECL)
9178           {
9179             complain |= tf_ignore_bad_quals;
9180             f = TREE_TYPE (f);
9181           }
9182
9183         if (TREE_CODE (f) != TYPENAME_TYPE)
9184           {
9185             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9186               error ("%qT resolves to %qT, which is not an enumeration type",
9187                      t, f);
9188             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9189               error ("%qT resolves to %qT, which is is not a class type",
9190                      t, f);
9191           }
9192
9193         return cp_build_qualified_type_real
9194           (f, cp_type_quals (f) | cp_type_quals (t), complain);
9195       }
9196
9197     case UNBOUND_CLASS_TEMPLATE:
9198       {
9199         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9200                                      in_decl, /*entering_scope=*/1);
9201         tree name = TYPE_IDENTIFIER (t);
9202         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9203
9204         if (ctx == error_mark_node || name == error_mark_node)
9205           return error_mark_node;
9206
9207         if (parm_list)
9208           parm_list = tsubst_template_parms (parm_list, args, complain);
9209         return make_unbound_class_template (ctx, name, parm_list, complain);
9210       }
9211
9212     case INDIRECT_REF:
9213     case ADDR_EXPR:
9214     case CALL_EXPR:
9215       gcc_unreachable ();
9216
9217     case ARRAY_REF:
9218       {
9219         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9220         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9221                                /*integral_constant_expression_p=*/false);
9222         if (e1 == error_mark_node || e2 == error_mark_node)
9223           return error_mark_node;
9224
9225         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9226       }
9227
9228     case SCOPE_REF:
9229       {
9230         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9231         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9232         if (e1 == error_mark_node || e2 == error_mark_node)
9233           return error_mark_node;
9234
9235         return build_qualified_name (/*type=*/NULL_TREE,
9236                                      e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9237       }
9238
9239     case TYPEOF_TYPE:
9240       {
9241         tree type;
9242
9243         type = finish_typeof (tsubst_expr 
9244                               (TYPEOF_TYPE_EXPR (t), args,
9245                                complain, in_decl,
9246                                /*integral_constant_expression_p=*/false));
9247         return cp_build_qualified_type_real (type,
9248                                              cp_type_quals (t)
9249                                              | cp_type_quals (type),
9250                                              complain);
9251       }
9252
9253     case DECLTYPE_TYPE:
9254       {
9255         tree type;
9256
9257         type = 
9258           finish_decltype_type (tsubst_expr 
9259                                 (DECLTYPE_TYPE_EXPR (t), args,
9260                                  complain, in_decl,
9261                                  /*integral_constant_expression_p=*/false),
9262                                 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9263         return cp_build_qualified_type_real (type,
9264                                              cp_type_quals (t)
9265                                              | cp_type_quals (type),
9266                                              complain);
9267       }
9268
9269     case TYPE_ARGUMENT_PACK:
9270     case NONTYPE_ARGUMENT_PACK:
9271       {
9272         tree r = make_node (TREE_CODE (t));
9273         tree packed_out = 
9274           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
9275                                 args,
9276                                 complain,
9277                                 in_decl);
9278         SET_ARGUMENT_PACK_ARGS (r, packed_out);
9279
9280         /* For template nontype argument packs, also substitute into
9281            the type.  */
9282         if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9283           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9284
9285         return r;
9286       }
9287       break;
9288
9289     default:
9290       sorry ("use of %qs in template",
9291              tree_code_name [(int) TREE_CODE (t)]);
9292       return error_mark_node;
9293     }
9294 }
9295
9296 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
9297    type of the expression on the left-hand side of the "." or "->"
9298    operator.  */
9299
9300 static tree
9301 tsubst_baselink (tree baselink, tree object_type,
9302                  tree args, tsubst_flags_t complain, tree in_decl)
9303 {
9304     tree name;
9305     tree qualifying_scope;
9306     tree fns;
9307     tree optype;
9308     tree template_args = 0;
9309     bool template_id_p = false;
9310
9311     /* A baselink indicates a function from a base class.  Both the
9312        BASELINK_ACCESS_BINFO and the base class referenced may
9313        indicate bases of the template class, rather than the
9314        instantiated class.  In addition, lookups that were not
9315        ambiguous before may be ambiguous now.  Therefore, we perform
9316        the lookup again.  */
9317     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9318     qualifying_scope = tsubst (qualifying_scope, args,
9319                                complain, in_decl);
9320     fns = BASELINK_FUNCTIONS (baselink);
9321     optype = BASELINK_OPTYPE (baselink);
9322     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9323       {
9324         template_id_p = true;
9325         template_args = TREE_OPERAND (fns, 1);
9326         fns = TREE_OPERAND (fns, 0);
9327         if (template_args)
9328           template_args = tsubst_template_args (template_args, args,
9329                                                 complain, in_decl);
9330       }
9331     name = DECL_NAME (get_first_fn (fns));
9332     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9333
9334     /* If lookup found a single function, mark it as used at this
9335        point.  (If it lookup found multiple functions the one selected
9336        later by overload resolution will be marked as used at that
9337        point.)  */
9338     if (BASELINK_P (baselink))
9339       fns = BASELINK_FUNCTIONS (baselink);
9340     if (!template_id_p && !really_overloaded_fn (fns))
9341       mark_used (OVL_CURRENT (fns));
9342
9343     /* Add back the template arguments, if present.  */
9344     if (BASELINK_P (baselink) && template_id_p)
9345       BASELINK_FUNCTIONS (baselink)
9346         = build_nt (TEMPLATE_ID_EXPR,
9347                     BASELINK_FUNCTIONS (baselink),
9348                     template_args);
9349     /* Update the conversion operator type.  */
9350     BASELINK_OPTYPE (baselink) 
9351       = tsubst (optype, args, complain, in_decl);
9352
9353     if (!object_type)
9354       object_type = current_class_type;
9355     return adjust_result_of_qualified_name_lookup (baselink,
9356                                                    qualifying_scope,
9357                                                    object_type);
9358 }
9359
9360 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
9361    true if the qualified-id will be a postfix-expression in-and-of
9362    itself; false if more of the postfix-expression follows the
9363    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
9364    of "&".  */
9365
9366 static tree
9367 tsubst_qualified_id (tree qualified_id, tree args,
9368                      tsubst_flags_t complain, tree in_decl,
9369                      bool done, bool address_p)
9370 {
9371   tree expr;
9372   tree scope;
9373   tree name;
9374   bool is_template;
9375   tree template_args;
9376
9377   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9378
9379   /* Figure out what name to look up.  */
9380   name = TREE_OPERAND (qualified_id, 1);
9381   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9382     {
9383       is_template = true;
9384       template_args = TREE_OPERAND (name, 1);
9385       if (template_args)
9386         template_args = tsubst_template_args (template_args, args,
9387                                               complain, in_decl);
9388       name = TREE_OPERAND (name, 0);
9389     }
9390   else
9391     {
9392       is_template = false;
9393       template_args = NULL_TREE;
9394     }
9395
9396   /* Substitute into the qualifying scope.  When there are no ARGS, we
9397      are just trying to simplify a non-dependent expression.  In that
9398      case the qualifying scope may be dependent, and, in any case,
9399      substituting will not help.  */
9400   scope = TREE_OPERAND (qualified_id, 0);
9401   if (args)
9402     {
9403       scope = tsubst (scope, args, complain, in_decl);
9404       expr = tsubst_copy (name, args, complain, in_decl);
9405     }
9406   else
9407     expr = name;
9408
9409   if (dependent_type_p (scope))
9410     return build_qualified_name (/*type=*/NULL_TREE,
9411                                  scope, expr,
9412                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9413
9414   if (!BASELINK_P (name) && !DECL_P (expr))
9415     {
9416       if (TREE_CODE (expr) == BIT_NOT_EXPR)
9417         /* If this were actually a destructor call, it would have been
9418            parsed as such by the parser.  */
9419         expr = error_mark_node;
9420       else
9421         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9422       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9423                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9424         {
9425           if (complain & tf_error)
9426             {
9427               error ("dependent-name %qE is parsed as a non-type, but "
9428                      "instantiation yields a type", qualified_id);
9429               inform ("say %<typename %E%> if a type is meant", qualified_id);
9430             }
9431           return error_mark_node;
9432         }
9433     }
9434
9435   if (DECL_P (expr))
9436     {
9437       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9438                                            scope);
9439       /* Remember that there was a reference to this entity.  */
9440       mark_used (expr);
9441     }
9442
9443   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9444     {
9445       if (complain & tf_error)
9446         qualified_name_lookup_error (scope,
9447                                      TREE_OPERAND (qualified_id, 1),
9448                                      expr);
9449       return error_mark_node;
9450     }
9451
9452   if (is_template)
9453     expr = lookup_template_function (expr, template_args);
9454
9455   if (expr == error_mark_node && complain & tf_error)
9456     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9457                                  expr);
9458   else if (TYPE_P (scope))
9459     {
9460       expr = (adjust_result_of_qualified_name_lookup
9461               (expr, scope, current_class_type));
9462       expr = (finish_qualified_id_expr
9463               (scope, expr, done, address_p,
9464                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9465                /*template_arg_p=*/false));
9466     }
9467
9468   /* Expressions do not generally have reference type.  */
9469   if (TREE_CODE (expr) != SCOPE_REF
9470       /* However, if we're about to form a pointer-to-member, we just
9471          want the referenced member referenced.  */
9472       && TREE_CODE (expr) != OFFSET_REF)
9473     expr = convert_from_reference (expr);
9474
9475   return expr;
9476 }
9477
9478 /* Like tsubst, but deals with expressions.  This function just replaces
9479    template parms; to finish processing the resultant expression, use
9480    tsubst_expr.  */
9481
9482 static tree
9483 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9484 {
9485   enum tree_code code;
9486   tree r;
9487
9488   if (t == NULL_TREE || t == error_mark_node)
9489     return t;
9490
9491   code = TREE_CODE (t);
9492
9493   switch (code)
9494     {
9495     case PARM_DECL:
9496       r = retrieve_local_specialization (t);
9497       gcc_assert (r != NULL);
9498       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9499         r = ARGUMENT_PACK_SELECT_ARG (r);
9500       mark_used (r);
9501       return r;
9502
9503     case CONST_DECL:
9504       {
9505         tree enum_type;
9506         tree v;
9507
9508         if (DECL_TEMPLATE_PARM_P (t))
9509           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9510         /* There is no need to substitute into namespace-scope
9511            enumerators.  */
9512         if (DECL_NAMESPACE_SCOPE_P (t))
9513           return t;
9514         /* If ARGS is NULL, then T is known to be non-dependent.  */
9515         if (args == NULL_TREE)
9516           return integral_constant_value (t);
9517
9518         /* Unfortunately, we cannot just call lookup_name here.
9519            Consider:
9520
9521              template <int I> int f() {
9522              enum E { a = I };
9523              struct S { void g() { E e = a; } };
9524              };
9525
9526            When we instantiate f<7>::S::g(), say, lookup_name is not
9527            clever enough to find f<7>::a.  */
9528         enum_type
9529           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9530                               /*entering_scope=*/0);
9531
9532         for (v = TYPE_VALUES (enum_type);
9533              v != NULL_TREE;
9534              v = TREE_CHAIN (v))
9535           if (TREE_PURPOSE (v) == DECL_NAME (t))
9536             return TREE_VALUE (v);
9537
9538           /* We didn't find the name.  That should never happen; if
9539              name-lookup found it during preliminary parsing, we
9540              should find it again here during instantiation.  */
9541         gcc_unreachable ();
9542       }
9543       return t;
9544
9545     case FIELD_DECL:
9546       if (DECL_CONTEXT (t))
9547         {
9548           tree ctx;
9549
9550           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9551                                   /*entering_scope=*/1);
9552           if (ctx != DECL_CONTEXT (t))
9553             {
9554               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9555               if (!r)
9556                 {
9557                   if (complain & tf_error)
9558                     error ("using invalid field %qD", t);
9559                   return error_mark_node;
9560                 }
9561               return r;
9562             }
9563         }
9564
9565       return t;
9566
9567     case VAR_DECL:
9568     case FUNCTION_DECL:
9569       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9570           || local_variable_p (t))
9571         t = tsubst (t, args, complain, in_decl);
9572       mark_used (t);
9573       return t;
9574
9575     case BASELINK:
9576       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9577
9578     case TEMPLATE_DECL:
9579       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9580         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9581                        args, complain, in_decl);
9582       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9583         return tsubst (t, args, complain, in_decl);
9584       else if (DECL_CLASS_SCOPE_P (t)
9585                && uses_template_parms (DECL_CONTEXT (t)))
9586         {
9587           /* Template template argument like the following example need
9588              special treatment:
9589
9590                template <template <class> class TT> struct C {};
9591                template <class T> struct D {
9592                  template <class U> struct E {};
9593                  C<E> c;                                // #1
9594                };
9595                D<int> d;                                // #2
9596
9597              We are processing the template argument `E' in #1 for
9598              the template instantiation #2.  Originally, `E' is a
9599              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
9600              have to substitute this with one having context `D<int>'.  */
9601
9602           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9603           return lookup_field (context, DECL_NAME(t), 0, false);
9604         }
9605       else
9606         /* Ordinary template template argument.  */
9607         return t;
9608
9609     case CAST_EXPR:
9610     case REINTERPRET_CAST_EXPR:
9611     case CONST_CAST_EXPR:
9612     case STATIC_CAST_EXPR:
9613     case DYNAMIC_CAST_EXPR:
9614     case NOP_EXPR:
9615       return build1
9616         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9617          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9618
9619     case SIZEOF_EXPR:
9620       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9621         {
9622           /* We only want to compute the number of arguments.  */
9623           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9624                                                 complain, in_decl);
9625           if (expanded == error_mark_node)
9626             return error_mark_node;
9627           return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
9628         }
9629       /* Fall through */
9630
9631     case INDIRECT_REF:
9632     case NEGATE_EXPR:
9633     case TRUTH_NOT_EXPR:
9634     case BIT_NOT_EXPR:
9635     case ADDR_EXPR:
9636     case UNARY_PLUS_EXPR:      /* Unary + */
9637     case ALIGNOF_EXPR:
9638     case ARROW_EXPR:
9639     case THROW_EXPR:
9640     case TYPEID_EXPR:
9641     case REALPART_EXPR:
9642     case IMAGPART_EXPR:
9643       return build1
9644         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9645          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9646
9647     case COMPONENT_REF:
9648       {
9649         tree object;
9650         tree name;
9651
9652         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9653         name = TREE_OPERAND (t, 1);
9654         if (TREE_CODE (name) == BIT_NOT_EXPR)
9655           {
9656             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9657                                 complain, in_decl);
9658             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9659           }
9660         else if (TREE_CODE (name) == SCOPE_REF
9661                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9662           {
9663             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9664                                      complain, in_decl);
9665             name = TREE_OPERAND (name, 1);
9666             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9667                                 complain, in_decl);
9668             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9669             name = build_qualified_name (/*type=*/NULL_TREE,
9670                                          base, name,
9671                                          /*template_p=*/false);
9672           }
9673         else if (TREE_CODE (name) == BASELINK)
9674           name = tsubst_baselink (name,
9675                                   non_reference (TREE_TYPE (object)),
9676                                   args, complain,
9677                                   in_decl);
9678         else
9679           name = tsubst_copy (name, args, complain, in_decl);
9680         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
9681       }
9682
9683     case PLUS_EXPR:
9684     case MINUS_EXPR:
9685     case MULT_EXPR:
9686     case TRUNC_DIV_EXPR:
9687     case CEIL_DIV_EXPR:
9688     case FLOOR_DIV_EXPR:
9689     case ROUND_DIV_EXPR:
9690     case EXACT_DIV_EXPR:
9691     case BIT_AND_EXPR:
9692     case BIT_IOR_EXPR:
9693     case BIT_XOR_EXPR:
9694     case TRUNC_MOD_EXPR:
9695     case FLOOR_MOD_EXPR:
9696     case TRUTH_ANDIF_EXPR:
9697     case TRUTH_ORIF_EXPR:
9698     case TRUTH_AND_EXPR:
9699     case TRUTH_OR_EXPR:
9700     case RSHIFT_EXPR:
9701     case LSHIFT_EXPR:
9702     case RROTATE_EXPR:
9703     case LROTATE_EXPR:
9704     case EQ_EXPR:
9705     case NE_EXPR:
9706     case MAX_EXPR:
9707     case MIN_EXPR:
9708     case LE_EXPR:
9709     case GE_EXPR:
9710     case LT_EXPR:
9711     case GT_EXPR:
9712     case COMPOUND_EXPR:
9713     case DOTSTAR_EXPR:
9714     case MEMBER_REF:
9715     case PREDECREMENT_EXPR:
9716     case PREINCREMENT_EXPR:
9717     case POSTDECREMENT_EXPR:
9718     case POSTINCREMENT_EXPR:
9719       return build_nt
9720         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9721          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9722
9723     case SCOPE_REF:
9724       return build_qualified_name (/*type=*/NULL_TREE,
9725                                    tsubst_copy (TREE_OPERAND (t, 0),
9726                                                 args, complain, in_decl),
9727                                    tsubst_copy (TREE_OPERAND (t, 1),
9728                                                 args, complain, in_decl),
9729                                    QUALIFIED_NAME_IS_TEMPLATE (t));
9730
9731     case ARRAY_REF:
9732       return build_nt
9733         (ARRAY_REF,
9734          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9735          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9736          NULL_TREE, NULL_TREE);
9737
9738     case CALL_EXPR:
9739       {
9740         int n = VL_EXP_OPERAND_LENGTH (t);
9741         tree result = build_vl_exp (CALL_EXPR, n);
9742         int i;
9743         for (i = 0; i < n; i++)
9744           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
9745                                              complain, in_decl);
9746         return result;
9747       }
9748
9749     case COND_EXPR:
9750     case MODOP_EXPR:
9751     case PSEUDO_DTOR_EXPR:
9752       {
9753         r = build_nt
9754           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9755            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9756            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9757         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
9758         return r;
9759       }
9760
9761     case NEW_EXPR:
9762       {
9763         r = build_nt
9764         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9765          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9766          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9767         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
9768         return r;
9769       }
9770
9771     case DELETE_EXPR:
9772       {
9773         r = build_nt
9774         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9775          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9776         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
9777         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
9778         return r;
9779       }
9780
9781     case TEMPLATE_ID_EXPR:
9782       {
9783         /* Substituted template arguments */
9784         tree fn = TREE_OPERAND (t, 0);
9785         tree targs = TREE_OPERAND (t, 1);
9786
9787         fn = tsubst_copy (fn, args, complain, in_decl);
9788         if (targs)
9789           targs = tsubst_template_args (targs, args, complain, in_decl);
9790
9791         return lookup_template_function (fn, targs);
9792       }
9793
9794     case TREE_LIST:
9795       {
9796         tree purpose, value, chain;
9797
9798         if (t == void_list_node)
9799           return t;
9800
9801         purpose = TREE_PURPOSE (t);
9802         if (purpose)
9803           purpose = tsubst_copy (purpose, args, complain, in_decl);
9804         value = TREE_VALUE (t);
9805         if (value)
9806           value = tsubst_copy (value, args, complain, in_decl);
9807         chain = TREE_CHAIN (t);
9808         if (chain && chain != void_type_node)
9809           chain = tsubst_copy (chain, args, complain, in_decl);
9810         if (purpose == TREE_PURPOSE (t)
9811             && value == TREE_VALUE (t)
9812             && chain == TREE_CHAIN (t))
9813           return t;
9814         return tree_cons (purpose, value, chain);
9815       }
9816
9817     case RECORD_TYPE:
9818     case UNION_TYPE:
9819     case ENUMERAL_TYPE:
9820     case INTEGER_TYPE:
9821     case TEMPLATE_TYPE_PARM:
9822     case TEMPLATE_TEMPLATE_PARM:
9823     case BOUND_TEMPLATE_TEMPLATE_PARM:
9824     case TEMPLATE_PARM_INDEX:
9825     case POINTER_TYPE:
9826     case REFERENCE_TYPE:
9827     case OFFSET_TYPE:
9828     case FUNCTION_TYPE:
9829     case METHOD_TYPE:
9830     case ARRAY_TYPE:
9831     case TYPENAME_TYPE:
9832     case UNBOUND_CLASS_TEMPLATE:
9833     case TYPEOF_TYPE:
9834     case DECLTYPE_TYPE:
9835     case TYPE_DECL:
9836       return tsubst (t, args, complain, in_decl);
9837
9838     case IDENTIFIER_NODE:
9839       if (IDENTIFIER_TYPENAME_P (t))
9840         {
9841           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9842           return mangle_conv_op_name_for_type (new_type);
9843         }
9844       else
9845         return t;
9846
9847     case CONSTRUCTOR:
9848       /* This is handled by tsubst_copy_and_build.  */
9849       gcc_unreachable ();
9850
9851     case VA_ARG_EXPR:
9852       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
9853                                           in_decl),
9854                              tsubst (TREE_TYPE (t), args, complain, in_decl));
9855
9856     case CLEANUP_POINT_EXPR:
9857       /* We shouldn't have built any of these during initial template
9858          generation.  Instead, they should be built during instantiation
9859          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
9860       gcc_unreachable ();
9861
9862     case OFFSET_REF:
9863       mark_used (TREE_OPERAND (t, 1));
9864       return t;
9865
9866     case EXPR_PACK_EXPANSION:
9867       error ("invalid use of pack expansion expression");
9868       return error_mark_node;
9869
9870     case NONTYPE_ARGUMENT_PACK:
9871       error ("use %<...%> to expand argument pack");
9872       return error_mark_node;
9873
9874     default:
9875       return t;
9876     }
9877 }
9878
9879 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
9880
9881 static tree
9882 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
9883                     tree in_decl)
9884 {
9885   tree new_clauses = NULL, nc, oc;
9886
9887   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
9888     {
9889       nc = copy_node (oc);
9890       OMP_CLAUSE_CHAIN (nc) = new_clauses;
9891       new_clauses = nc;
9892
9893       switch (OMP_CLAUSE_CODE (nc))
9894         {
9895         case OMP_CLAUSE_PRIVATE:
9896         case OMP_CLAUSE_SHARED:
9897         case OMP_CLAUSE_FIRSTPRIVATE:
9898         case OMP_CLAUSE_LASTPRIVATE:
9899         case OMP_CLAUSE_REDUCTION:
9900         case OMP_CLAUSE_COPYIN:
9901         case OMP_CLAUSE_COPYPRIVATE:
9902         case OMP_CLAUSE_IF:
9903         case OMP_CLAUSE_NUM_THREADS:
9904         case OMP_CLAUSE_SCHEDULE:
9905           OMP_CLAUSE_OPERAND (nc, 0)
9906             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
9907                            in_decl, /*integral_constant_expression_p=*/false);
9908           break;
9909         case OMP_CLAUSE_NOWAIT:
9910         case OMP_CLAUSE_ORDERED:
9911         case OMP_CLAUSE_DEFAULT:
9912           break;
9913         default:
9914           gcc_unreachable ();
9915         }
9916     }
9917
9918   return finish_omp_clauses (nreverse (new_clauses));
9919 }
9920
9921 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
9922
9923 static tree
9924 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
9925                           tree in_decl)
9926 {
9927 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
9928
9929   tree purpose, value, chain;
9930
9931   if (t == NULL)
9932     return t;
9933
9934   if (TREE_CODE (t) != TREE_LIST)
9935     return tsubst_copy_and_build (t, args, complain, in_decl,
9936                                   /*function_p=*/false,
9937                                   /*integral_constant_expression_p=*/false);
9938
9939   if (t == void_list_node)
9940     return t;
9941
9942   purpose = TREE_PURPOSE (t);
9943   if (purpose)
9944     purpose = RECUR (purpose);
9945   value = TREE_VALUE (t);
9946   if (value)
9947     value = RECUR (value);
9948   chain = TREE_CHAIN (t);
9949   if (chain && chain != void_type_node)
9950     chain = RECUR (chain);
9951   return tree_cons (purpose, value, chain);
9952 #undef RECUR
9953 }
9954
9955 /* Like tsubst_copy for expressions, etc. but also does semantic
9956    processing.  */
9957
9958 static tree
9959 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
9960              bool integral_constant_expression_p)
9961 {
9962 #define RECUR(NODE)                             \
9963   tsubst_expr ((NODE), args, complain, in_decl, \
9964                integral_constant_expression_p)
9965
9966   tree stmt, tmp;
9967
9968   if (t == NULL_TREE || t == error_mark_node)
9969     return t;
9970
9971   if (EXPR_HAS_LOCATION (t))
9972     input_location = EXPR_LOCATION (t);
9973   if (STATEMENT_CODE_P (TREE_CODE (t)))
9974     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
9975
9976   switch (TREE_CODE (t))
9977     {
9978     case STATEMENT_LIST:
9979       {
9980         tree_stmt_iterator i;
9981         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
9982           RECUR (tsi_stmt (i));
9983         break;
9984       }
9985
9986     case CTOR_INITIALIZER:
9987       finish_mem_initializers (tsubst_initializer_list
9988                                (TREE_OPERAND (t, 0), args));
9989       break;
9990
9991     case RETURN_EXPR:
9992       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
9993       break;
9994
9995     case EXPR_STMT:
9996       tmp = RECUR (EXPR_STMT_EXPR (t));
9997       if (EXPR_STMT_STMT_EXPR_RESULT (t))
9998         finish_stmt_expr_expr (tmp, cur_stmt_expr);
9999       else
10000         finish_expr_stmt (tmp);
10001       break;
10002
10003     case USING_STMT:
10004       do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
10005       break;
10006
10007     case DECL_EXPR:
10008       {
10009         tree decl;
10010         tree init;
10011
10012         decl = DECL_EXPR_DECL (t);
10013         if (TREE_CODE (decl) == LABEL_DECL)
10014           finish_label_decl (DECL_NAME (decl));
10015         else if (TREE_CODE (decl) == USING_DECL)
10016           {
10017             tree scope = USING_DECL_SCOPE (decl);
10018             tree name = DECL_NAME (decl);
10019             tree decl;
10020
10021             scope = RECUR (scope);
10022             decl = lookup_qualified_name (scope, name,
10023                                           /*is_type_p=*/false,
10024                                           /*complain=*/false);
10025             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
10026               qualified_name_lookup_error (scope, name, decl);
10027             else
10028               do_local_using_decl (decl, scope, name);
10029           }
10030         else
10031           {
10032             init = DECL_INITIAL (decl);
10033             decl = tsubst (decl, args, complain, in_decl);
10034             if (decl != error_mark_node)
10035               {
10036                 /* By marking the declaration as instantiated, we avoid
10037                    trying to instantiate it.  Since instantiate_decl can't
10038                    handle local variables, and since we've already done
10039                    all that needs to be done, that's the right thing to
10040                    do.  */
10041                 if (TREE_CODE (decl) == VAR_DECL)
10042                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10043                 if (TREE_CODE (decl) == VAR_DECL
10044                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
10045                   /* Anonymous aggregates are a special case.  */
10046                   finish_anon_union (decl);
10047                 else
10048                   {
10049                     maybe_push_decl (decl);
10050                     if (TREE_CODE (decl) == VAR_DECL
10051                         && DECL_PRETTY_FUNCTION_P (decl))
10052                       {
10053                         /* For __PRETTY_FUNCTION__ we have to adjust the
10054                            initializer.  */
10055                         const char *const name
10056                           = cxx_printable_name (current_function_decl, 2);
10057                         init = cp_fname_init (name, &TREE_TYPE (decl));
10058                       }
10059                     else
10060                       {
10061                         tree t = RECUR (init);
10062
10063                         if (init && !t)
10064                           /* If we had an initializer but it
10065                              instantiated to nothing,
10066                              value-initialize the object.  This will
10067                              only occur when the initializer was a
10068                              pack expansion where the parameter packs
10069                              used in that expansion were of length
10070                              zero.  */
10071                           init = build_default_init (TREE_TYPE (decl),
10072                                                      NULL_TREE);
10073                         else
10074                           init = t;
10075                       }
10076
10077                     finish_decl (decl, init, NULL_TREE);
10078                   }
10079               }
10080           }
10081
10082         /* A DECL_EXPR can also be used as an expression, in the condition
10083            clause of an if/for/while construct.  */
10084         return decl;
10085       }
10086
10087     case FOR_STMT:
10088       stmt = begin_for_stmt ();
10089                           RECUR (FOR_INIT_STMT (t));
10090       finish_for_init_stmt (stmt);
10091       tmp = RECUR (FOR_COND (t));
10092       finish_for_cond (tmp, stmt);
10093       tmp = RECUR (FOR_EXPR (t));
10094       finish_for_expr (tmp, stmt);
10095       RECUR (FOR_BODY (t));
10096       finish_for_stmt (stmt);
10097       break;
10098
10099     case WHILE_STMT:
10100       stmt = begin_while_stmt ();
10101       tmp = RECUR (WHILE_COND (t));
10102       finish_while_stmt_cond (tmp, stmt);
10103       RECUR (WHILE_BODY (t));
10104       finish_while_stmt (stmt);
10105       break;
10106
10107     case DO_STMT:
10108       stmt = begin_do_stmt ();
10109       RECUR (DO_BODY (t));
10110       finish_do_body (stmt);
10111       tmp = RECUR (DO_COND (t));
10112       finish_do_stmt (tmp, stmt);
10113       break;
10114
10115     case IF_STMT:
10116       stmt = begin_if_stmt ();
10117       tmp = RECUR (IF_COND (t));
10118       finish_if_stmt_cond (tmp, stmt);
10119       RECUR (THEN_CLAUSE (t));
10120       finish_then_clause (stmt);
10121
10122       if (ELSE_CLAUSE (t))
10123         {
10124           begin_else_clause (stmt);
10125           RECUR (ELSE_CLAUSE (t));
10126           finish_else_clause (stmt);
10127         }
10128
10129       finish_if_stmt (stmt);
10130       break;
10131
10132     case BIND_EXPR:
10133       if (BIND_EXPR_BODY_BLOCK (t))
10134         stmt = begin_function_body ();
10135       else
10136         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
10137                                     ? BCS_TRY_BLOCK : 0);
10138
10139       RECUR (BIND_EXPR_BODY (t));
10140
10141       if (BIND_EXPR_BODY_BLOCK (t))
10142         finish_function_body (stmt);
10143       else
10144         finish_compound_stmt (stmt);
10145       break;
10146
10147     case BREAK_STMT:
10148       finish_break_stmt ();
10149       break;
10150
10151     case CONTINUE_STMT:
10152       finish_continue_stmt ();
10153       break;
10154
10155     case SWITCH_STMT:
10156       stmt = begin_switch_stmt ();
10157       tmp = RECUR (SWITCH_STMT_COND (t));
10158       finish_switch_cond (tmp, stmt);
10159       RECUR (SWITCH_STMT_BODY (t));
10160       finish_switch_stmt (stmt);
10161       break;
10162
10163     case CASE_LABEL_EXPR:
10164       finish_case_label (RECUR (CASE_LOW (t)),
10165                          RECUR (CASE_HIGH (t)));
10166       break;
10167
10168     case LABEL_EXPR:
10169       finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
10170       break;
10171
10172     case GOTO_EXPR:
10173       tmp = GOTO_DESTINATION (t);
10174       if (TREE_CODE (tmp) != LABEL_DECL)
10175         /* Computed goto's must be tsubst'd into.  On the other hand,
10176            non-computed gotos must not be; the identifier in question
10177            will have no binding.  */
10178         tmp = RECUR (tmp);
10179       else
10180         tmp = DECL_NAME (tmp);
10181       finish_goto_stmt (tmp);
10182       break;
10183
10184     case ASM_EXPR:
10185       tmp = finish_asm_stmt
10186         (ASM_VOLATILE_P (t),
10187          RECUR (ASM_STRING (t)),
10188          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
10189          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
10190          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
10191       {
10192         tree asm_expr = tmp;
10193         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
10194           asm_expr = TREE_OPERAND (asm_expr, 0);
10195         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
10196       }
10197       break;
10198
10199     case TRY_BLOCK:
10200       if (CLEANUP_P (t))
10201         {
10202           stmt = begin_try_block ();
10203           RECUR (TRY_STMTS (t));
10204           finish_cleanup_try_block (stmt);
10205           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10206         }
10207       else
10208         {
10209           tree compound_stmt = NULL_TREE;
10210
10211           if (FN_TRY_BLOCK_P (t))
10212             stmt = begin_function_try_block (&compound_stmt);
10213           else
10214             stmt = begin_try_block ();
10215
10216           RECUR (TRY_STMTS (t));
10217
10218           if (FN_TRY_BLOCK_P (t))
10219             finish_function_try_block (stmt);
10220           else
10221             finish_try_block (stmt);
10222
10223           RECUR (TRY_HANDLERS (t));
10224           if (FN_TRY_BLOCK_P (t))
10225             finish_function_handler_sequence (stmt, compound_stmt);
10226           else
10227             finish_handler_sequence (stmt);
10228         }
10229       break;
10230
10231     case HANDLER:
10232       {
10233         tree decl = HANDLER_PARMS (t);
10234
10235         if (decl)
10236           {
10237             decl = tsubst (decl, args, complain, in_decl);
10238             /* Prevent instantiate_decl from trying to instantiate
10239                this variable.  We've already done all that needs to be
10240                done.  */
10241             if (decl != error_mark_node)
10242               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10243           }
10244         stmt = begin_handler ();
10245         finish_handler_parms (decl, stmt);
10246         RECUR (HANDLER_BODY (t));
10247         finish_handler (stmt);
10248       }
10249       break;
10250
10251     case TAG_DEFN:
10252       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10253       break;
10254
10255     case STATIC_ASSERT:
10256       {
10257         tree condition = 
10258           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
10259                        args,
10260                        complain, in_decl,
10261                        /*integral_constant_expression_p=*/true);
10262         finish_static_assert (condition,
10263                               STATIC_ASSERT_MESSAGE (t),
10264                               STATIC_ASSERT_SOURCE_LOCATION (t),
10265                               /*member_p=*/false);
10266       }
10267       break;
10268
10269     case OMP_PARALLEL:
10270       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10271                                 args, complain, in_decl);
10272       stmt = begin_omp_parallel ();
10273       RECUR (OMP_PARALLEL_BODY (t));
10274       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10275         = OMP_PARALLEL_COMBINED (t);
10276       break;
10277
10278     case OMP_FOR:
10279       {
10280         tree clauses, decl, init, cond, incr, body, pre_body;
10281
10282         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10283                                       args, complain, in_decl);
10284         init = OMP_FOR_INIT (t);
10285         gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10286         decl = RECUR (TREE_OPERAND (init, 0));
10287         init = RECUR (TREE_OPERAND (init, 1));
10288         cond = RECUR (OMP_FOR_COND (t));
10289         incr = RECUR (OMP_FOR_INCR (t));
10290
10291         stmt = begin_omp_structured_block ();
10292
10293         pre_body = push_stmt_list ();
10294         RECUR (OMP_FOR_PRE_BODY (t));
10295         pre_body = pop_stmt_list (pre_body);
10296
10297         body = push_stmt_list ();
10298         RECUR (OMP_FOR_BODY (t));
10299         body = pop_stmt_list (body);
10300
10301         t = finish_omp_for (EXPR_LOCATION (t), decl, init, cond, incr, body,
10302                             pre_body);
10303         if (t)
10304           OMP_FOR_CLAUSES (t) = clauses;
10305
10306         add_stmt (finish_omp_structured_block (stmt));
10307       }
10308       break;
10309
10310     case OMP_SECTIONS:
10311     case OMP_SINGLE:
10312       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10313       stmt = push_stmt_list ();
10314       RECUR (OMP_BODY (t));
10315       stmt = pop_stmt_list (stmt);
10316
10317       t = copy_node (t);
10318       OMP_BODY (t) = stmt;
10319       OMP_CLAUSES (t) = tmp;
10320       add_stmt (t);
10321       break;
10322
10323     case OMP_SECTION:
10324     case OMP_CRITICAL:
10325     case OMP_MASTER:
10326     case OMP_ORDERED:
10327       stmt = push_stmt_list ();
10328       RECUR (OMP_BODY (t));
10329       stmt = pop_stmt_list (stmt);
10330
10331       t = copy_node (t);
10332       OMP_BODY (t) = stmt;
10333       add_stmt (t);
10334       break;
10335
10336     case OMP_ATOMIC:
10337       if (OMP_ATOMIC_DEPENDENT_P (t))
10338         {
10339           tree op1 = TREE_OPERAND (t, 1);
10340           tree lhs = RECUR (TREE_OPERAND (op1, 0));
10341           tree rhs = RECUR (TREE_OPERAND (op1, 1));
10342           finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10343         }
10344       break;
10345
10346     case EXPR_PACK_EXPANSION:
10347       error ("invalid use of pack expansion expression");
10348       return error_mark_node;
10349
10350     case NONTYPE_ARGUMENT_PACK:
10351       error ("use %<...%> to expand argument pack");
10352       return error_mark_node;
10353
10354     default:
10355       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10356
10357       return tsubst_copy_and_build (t, args, complain, in_decl,
10358                                     /*function_p=*/false,
10359                                     integral_constant_expression_p);
10360     }
10361
10362   return NULL_TREE;
10363 #undef RECUR
10364 }
10365
10366 /* T is a postfix-expression that is not being used in a function
10367    call.  Return the substituted version of T.  */
10368
10369 static tree
10370 tsubst_non_call_postfix_expression (tree t, tree args,
10371                                     tsubst_flags_t complain,
10372                                     tree in_decl)
10373 {
10374   if (TREE_CODE (t) == SCOPE_REF)
10375     t = tsubst_qualified_id (t, args, complain, in_decl,
10376                              /*done=*/false, /*address_p=*/false);
10377   else
10378     t = tsubst_copy_and_build (t, args, complain, in_decl,
10379                                /*function_p=*/false,
10380                                /*integral_constant_expression_p=*/false);
10381
10382   return t;
10383 }
10384
10385 /* Like tsubst but deals with expressions and performs semantic
10386    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
10387
10388 tree
10389 tsubst_copy_and_build (tree t,
10390                        tree args,
10391                        tsubst_flags_t complain,
10392                        tree in_decl,
10393                        bool function_p,
10394                        bool integral_constant_expression_p)
10395 {
10396 #define RECUR(NODE)                                             \
10397   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
10398                          /*function_p=*/false,                  \
10399                          integral_constant_expression_p)
10400
10401   tree op1;
10402
10403   if (t == NULL_TREE || t == error_mark_node)
10404     return t;
10405
10406   switch (TREE_CODE (t))
10407     {
10408     case USING_DECL:
10409       t = DECL_NAME (t);
10410       /* Fall through.  */
10411     case IDENTIFIER_NODE:
10412       {
10413         tree decl;
10414         cp_id_kind idk;
10415         bool non_integral_constant_expression_p;
10416         const char *error_msg;
10417
10418         if (IDENTIFIER_TYPENAME_P (t))
10419           {
10420             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10421             t = mangle_conv_op_name_for_type (new_type);
10422           }
10423
10424         /* Look up the name.  */
10425         decl = lookup_name (t);
10426
10427         /* By convention, expressions use ERROR_MARK_NODE to indicate
10428            failure, not NULL_TREE.  */
10429         if (decl == NULL_TREE)
10430           decl = error_mark_node;
10431
10432         decl = finish_id_expression (t, decl, NULL_TREE,
10433                                      &idk,
10434                                      integral_constant_expression_p,
10435                                      /*allow_non_integral_constant_expression_p=*/false,
10436                                      &non_integral_constant_expression_p,
10437                                      /*template_p=*/false,
10438                                      /*done=*/true,
10439                                      /*address_p=*/false,
10440                                      /*template_arg_p=*/false,
10441                                      &error_msg);
10442         if (error_msg)
10443           error (error_msg);
10444         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10445           decl = unqualified_name_lookup_error (decl);
10446         return decl;
10447       }
10448
10449     case TEMPLATE_ID_EXPR:
10450       {
10451         tree object;
10452         tree template = RECUR (TREE_OPERAND (t, 0));
10453         tree targs = TREE_OPERAND (t, 1);
10454
10455         if (targs)
10456           targs = tsubst_template_args (targs, args, complain, in_decl);
10457
10458         if (TREE_CODE (template) == COMPONENT_REF)
10459           {
10460             object = TREE_OPERAND (template, 0);
10461             template = TREE_OPERAND (template, 1);
10462           }
10463         else
10464           object = NULL_TREE;
10465         template = lookup_template_function (template, targs);
10466
10467         if (object)
10468           return build3 (COMPONENT_REF, TREE_TYPE (template),
10469                          object, template, NULL_TREE);
10470         else
10471           return baselink_for_fns (template);
10472       }
10473
10474     case INDIRECT_REF:
10475       {
10476         tree r = RECUR (TREE_OPERAND (t, 0));
10477
10478         if (REFERENCE_REF_P (t))
10479           {
10480             /* A type conversion to reference type will be enclosed in
10481                such an indirect ref, but the substitution of the cast
10482                will have also added such an indirect ref.  */
10483             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10484               r = convert_from_reference (r);
10485           }
10486         else
10487           r = build_x_indirect_ref (r, "unary *");
10488         return r;
10489       }
10490
10491     case NOP_EXPR:
10492       return build_nop
10493         (tsubst (TREE_TYPE (t), args, complain, in_decl),
10494          RECUR (TREE_OPERAND (t, 0)));
10495
10496     case CAST_EXPR:
10497     case REINTERPRET_CAST_EXPR:
10498     case CONST_CAST_EXPR:
10499     case DYNAMIC_CAST_EXPR:
10500     case STATIC_CAST_EXPR:
10501       {
10502         tree type;
10503         tree op;
10504
10505         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10506         if (integral_constant_expression_p
10507             && !cast_valid_in_integral_constant_expression_p (type))
10508           {
10509             error ("a cast to a type other than an integral or "
10510                    "enumeration type cannot appear in a constant-expression");
10511             return error_mark_node; 
10512           }
10513
10514         op = RECUR (TREE_OPERAND (t, 0));
10515
10516         switch (TREE_CODE (t))
10517           {
10518           case CAST_EXPR:
10519             return build_functional_cast (type, op);
10520           case REINTERPRET_CAST_EXPR:
10521             return build_reinterpret_cast (type, op);
10522           case CONST_CAST_EXPR:
10523             return build_const_cast (type, op);
10524           case DYNAMIC_CAST_EXPR:
10525             return build_dynamic_cast (type, op);
10526           case STATIC_CAST_EXPR:
10527             return build_static_cast (type, op);
10528           default:
10529             gcc_unreachable ();
10530           }
10531       }
10532
10533     case POSTDECREMENT_EXPR:
10534     case POSTINCREMENT_EXPR:
10535       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10536                                                 args, complain, in_decl);
10537       return build_x_unary_op (TREE_CODE (t), op1);
10538
10539     case PREDECREMENT_EXPR:
10540     case PREINCREMENT_EXPR:
10541     case NEGATE_EXPR:
10542     case BIT_NOT_EXPR:
10543     case ABS_EXPR:
10544     case TRUTH_NOT_EXPR:
10545     case UNARY_PLUS_EXPR:  /* Unary + */
10546     case REALPART_EXPR:
10547     case IMAGPART_EXPR:
10548       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
10549
10550     case ADDR_EXPR:
10551       op1 = TREE_OPERAND (t, 0);
10552       if (TREE_CODE (op1) == SCOPE_REF)
10553         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
10554                                    /*done=*/true, /*address_p=*/true);
10555       else
10556         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
10557                                                   in_decl);
10558       if (TREE_CODE (op1) == LABEL_DECL)
10559         return finish_label_address_expr (DECL_NAME (op1));
10560       return build_x_unary_op (ADDR_EXPR, op1);
10561
10562     case PLUS_EXPR:
10563     case MINUS_EXPR:
10564     case MULT_EXPR:
10565     case TRUNC_DIV_EXPR:
10566     case CEIL_DIV_EXPR:
10567     case FLOOR_DIV_EXPR:
10568     case ROUND_DIV_EXPR:
10569     case EXACT_DIV_EXPR:
10570     case BIT_AND_EXPR:
10571     case BIT_IOR_EXPR:
10572     case BIT_XOR_EXPR:
10573     case TRUNC_MOD_EXPR:
10574     case FLOOR_MOD_EXPR:
10575     case TRUTH_ANDIF_EXPR:
10576     case TRUTH_ORIF_EXPR:
10577     case TRUTH_AND_EXPR:
10578     case TRUTH_OR_EXPR:
10579     case RSHIFT_EXPR:
10580     case LSHIFT_EXPR:
10581     case RROTATE_EXPR:
10582     case LROTATE_EXPR:
10583     case EQ_EXPR:
10584     case NE_EXPR:
10585     case MAX_EXPR:
10586     case MIN_EXPR:
10587     case LE_EXPR:
10588     case GE_EXPR:
10589     case LT_EXPR:
10590     case GT_EXPR:
10591     case MEMBER_REF:
10592     case DOTSTAR_EXPR:
10593       return build_x_binary_op
10594         (TREE_CODE (t),
10595          RECUR (TREE_OPERAND (t, 0)),
10596          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10597           ? ERROR_MARK
10598           : TREE_CODE (TREE_OPERAND (t, 0))),
10599          RECUR (TREE_OPERAND (t, 1)),
10600          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10601           ? ERROR_MARK
10602           : TREE_CODE (TREE_OPERAND (t, 1))),
10603          /*overloaded_p=*/NULL);
10604
10605     case SCOPE_REF:
10606       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
10607                                   /*address_p=*/false);
10608     case ARRAY_REF:
10609       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10610                                                 args, complain, in_decl);
10611       return build_x_binary_op (ARRAY_REF, op1,
10612                                 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10613                                  ? ERROR_MARK
10614                                  : TREE_CODE (TREE_OPERAND (t, 0))),
10615                                 RECUR (TREE_OPERAND (t, 1)),
10616                                 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10617                                  ? ERROR_MARK
10618                                  : TREE_CODE (TREE_OPERAND (t, 1))),
10619                                 /*overloaded_p=*/NULL);
10620
10621     case SIZEOF_EXPR:
10622       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
10623         {
10624           /* We only want to compute the number of arguments.  */
10625           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
10626                                                 complain, in_decl);
10627           if (expanded == error_mark_node)
10628             return error_mark_node;
10629           return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
10630         }
10631       /* Fall through */
10632       
10633     case ALIGNOF_EXPR:
10634       op1 = TREE_OPERAND (t, 0);
10635       if (!args)
10636         {
10637           /* When there are no ARGS, we are trying to evaluate a
10638              non-dependent expression from the parser.  Trying to do
10639              the substitutions may not work.  */
10640           if (!TYPE_P (op1))
10641             op1 = TREE_TYPE (op1);
10642         }
10643       else
10644         {
10645           ++skip_evaluation;
10646           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
10647                                        /*function_p=*/false,
10648                                        /*integral_constant_expression_p=*/false);
10649           --skip_evaluation;
10650         }
10651       if (TYPE_P (op1))
10652         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
10653       else
10654         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
10655
10656     case MODOP_EXPR:
10657       {
10658         tree r = build_x_modify_expr
10659           (RECUR (TREE_OPERAND (t, 0)),
10660            TREE_CODE (TREE_OPERAND (t, 1)),
10661            RECUR (TREE_OPERAND (t, 2)));
10662         /* TREE_NO_WARNING must be set if either the expression was
10663            parenthesized or it uses an operator such as >>= rather
10664            than plain assignment.  In the former case, it was already
10665            set and must be copied.  In the latter case,
10666            build_x_modify_expr sets it and it must not be reset
10667            here.  */
10668         if (TREE_NO_WARNING (t))
10669           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10670         return r;
10671       }
10672
10673     case ARROW_EXPR:
10674       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10675                                                 args, complain, in_decl);
10676       /* Remember that there was a reference to this entity.  */
10677       if (DECL_P (op1))
10678         mark_used (op1);
10679       return build_x_arrow (op1);
10680
10681     case NEW_EXPR:
10682       {
10683         tree init = RECUR (TREE_OPERAND (t, 3));
10684
10685         if (TREE_OPERAND (t, 3) && !init)
10686           /* If there was an initializer in the the original tree, but
10687              it instantiated to an empty list, then we should pass on
10688              VOID_ZERO_NODE to tell build_new that it was an empty
10689              initializer () rather than no initializer.  This can only
10690              happen when the initializer is a pack expansion whose
10691              parameter packs are of length zero.  */
10692           init = void_zero_node;
10693
10694         return build_new
10695           (RECUR (TREE_OPERAND (t, 0)),
10696            RECUR (TREE_OPERAND (t, 1)),
10697            RECUR (TREE_OPERAND (t, 2)),
10698            init,
10699            NEW_EXPR_USE_GLOBAL (t));
10700       }
10701
10702     case DELETE_EXPR:
10703      return delete_sanity
10704        (RECUR (TREE_OPERAND (t, 0)),
10705         RECUR (TREE_OPERAND (t, 1)),
10706         DELETE_EXPR_USE_VEC (t),
10707         DELETE_EXPR_USE_GLOBAL (t));
10708
10709     case COMPOUND_EXPR:
10710       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
10711                                     RECUR (TREE_OPERAND (t, 1)));
10712
10713     case CALL_EXPR:
10714       {
10715         tree function;
10716         tree call_args;
10717         bool qualified_p;
10718         bool koenig_p;
10719
10720         function = CALL_EXPR_FN (t);
10721         /* When we parsed the expression,  we determined whether or
10722            not Koenig lookup should be performed.  */
10723         koenig_p = KOENIG_LOOKUP_P (t);
10724         if (TREE_CODE (function) == SCOPE_REF)
10725           {
10726             qualified_p = true;
10727             function = tsubst_qualified_id (function, args, complain, in_decl,
10728                                             /*done=*/false,
10729                                             /*address_p=*/false);
10730           }
10731         else
10732           {
10733             if (TREE_CODE (function) == COMPONENT_REF)
10734               {
10735                 tree op = TREE_OPERAND (function, 1);
10736
10737                 qualified_p = (TREE_CODE (op) == SCOPE_REF
10738                                || (BASELINK_P (op)
10739                                    && BASELINK_QUALIFIED_P (op)));
10740               }
10741             else
10742               qualified_p = false;
10743
10744             function = tsubst_copy_and_build (function, args, complain,
10745                                               in_decl,
10746                                               !qualified_p,
10747                                               integral_constant_expression_p);
10748
10749             if (BASELINK_P (function))
10750               qualified_p = true;
10751           }
10752
10753         /* FIXME:  Rewrite this so as not to construct an arglist.  */
10754         call_args = RECUR (CALL_EXPR_ARGS (t));
10755
10756         /* We do not perform argument-dependent lookup if normal
10757            lookup finds a non-function, in accordance with the
10758            expected resolution of DR 218.  */
10759         if (koenig_p
10760             && ((is_overloaded_fn (function)
10761                  /* If lookup found a member function, the Koenig lookup is
10762                     not appropriate, even if an unqualified-name was used
10763                     to denote the function.  */
10764                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
10765                 || TREE_CODE (function) == IDENTIFIER_NODE))
10766           function = perform_koenig_lookup (function, call_args);
10767
10768         if (TREE_CODE (function) == IDENTIFIER_NODE)
10769           {
10770             unqualified_name_lookup_error (function);
10771             return error_mark_node;
10772           }
10773
10774         /* Remember that there was a reference to this entity.  */
10775         if (DECL_P (function))
10776           mark_used (function);
10777
10778         if (TREE_CODE (function) == OFFSET_REF)
10779           return build_offset_ref_call_from_tree (function, call_args);
10780         if (TREE_CODE (function) == COMPONENT_REF)
10781           {
10782             if (!BASELINK_P (TREE_OPERAND (function, 1)))
10783               return finish_call_expr (function, call_args,
10784                                        /*disallow_virtual=*/false,
10785                                        /*koenig_p=*/false);
10786             else
10787               return (build_new_method_call
10788                       (TREE_OPERAND (function, 0),
10789                        TREE_OPERAND (function, 1),
10790                        call_args, NULL_TREE,
10791                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
10792                        /*fn_p=*/NULL));
10793           }
10794         return finish_call_expr (function, call_args,
10795                                  /*disallow_virtual=*/qualified_p,
10796                                  koenig_p);
10797       }
10798
10799     case COND_EXPR:
10800       return build_x_conditional_expr
10801         (RECUR (TREE_OPERAND (t, 0)),
10802          RECUR (TREE_OPERAND (t, 1)),
10803          RECUR (TREE_OPERAND (t, 2)));
10804
10805     case PSEUDO_DTOR_EXPR:
10806       return finish_pseudo_destructor_expr
10807         (RECUR (TREE_OPERAND (t, 0)),
10808          RECUR (TREE_OPERAND (t, 1)),
10809          RECUR (TREE_OPERAND (t, 2)));
10810
10811     case TREE_LIST:
10812       {
10813         tree purpose, value, chain;
10814
10815         if (t == void_list_node)
10816           return t;
10817
10818         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
10819             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
10820           {
10821             /* We have pack expansions, so expand those and
10822                create a new list out of it.  */
10823             tree purposevec = NULL_TREE;
10824             tree valuevec = NULL_TREE;
10825             tree chain;
10826             int i, len = -1;
10827
10828             /* Expand the argument expressions.  */
10829             if (TREE_PURPOSE (t))
10830               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
10831                                                  complain, in_decl);
10832             if (TREE_VALUE (t))
10833               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
10834                                                complain, in_decl);
10835
10836             /* Build the rest of the list.  */
10837             chain = TREE_CHAIN (t);
10838             if (chain && chain != void_type_node)
10839               chain = RECUR (chain);
10840
10841             /* Determine the number of arguments.  */
10842             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
10843               {
10844                 len = TREE_VEC_LENGTH (purposevec);
10845                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
10846               }
10847             else if (TREE_CODE (valuevec) == TREE_VEC)
10848               len = TREE_VEC_LENGTH (valuevec);
10849             else
10850               {
10851                 /* Since we only performed a partial substitution into
10852                    the argument pack, we only return a single list
10853                    node.  */
10854                 if (purposevec == TREE_PURPOSE (t)
10855                     && valuevec == TREE_VALUE (t)
10856                     && chain == TREE_CHAIN (t))
10857                   return t;
10858
10859                 return tree_cons (purposevec, valuevec, chain);
10860               }
10861             
10862             /* Convert the argument vectors into a TREE_LIST */
10863             i = len;
10864             while (i > 0)
10865               {
10866                 /* Grab the Ith values.  */
10867                 i--;
10868                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
10869                                      : NULL_TREE;
10870                 value 
10871                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
10872                              : NULL_TREE;
10873
10874                 /* Build the list (backwards).  */
10875                 chain = tree_cons (purpose, value, chain);
10876               }
10877
10878             return chain;
10879           }
10880
10881         purpose = TREE_PURPOSE (t);
10882         if (purpose)
10883           purpose = RECUR (purpose);
10884         value = TREE_VALUE (t);
10885         if (value)
10886           value = RECUR (value);
10887         chain = TREE_CHAIN (t);
10888         if (chain && chain != void_type_node)
10889           chain = RECUR (chain);
10890         if (purpose == TREE_PURPOSE (t)
10891             && value == TREE_VALUE (t)
10892             && chain == TREE_CHAIN (t))
10893           return t;
10894         return tree_cons (purpose, value, chain);
10895       }
10896
10897     case COMPONENT_REF:
10898       {
10899         tree object;
10900         tree object_type;
10901         tree member;
10902
10903         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10904                                                      args, complain, in_decl);
10905         /* Remember that there was a reference to this entity.  */
10906         if (DECL_P (object))
10907           mark_used (object);
10908         object_type = TREE_TYPE (object);
10909
10910         member = TREE_OPERAND (t, 1);
10911         if (BASELINK_P (member))
10912           member = tsubst_baselink (member,
10913                                     non_reference (TREE_TYPE (object)),
10914                                     args, complain, in_decl);
10915         else
10916           member = tsubst_copy (member, args, complain, in_decl);
10917         if (member == error_mark_node)
10918           return error_mark_node;
10919
10920         if (object_type && !CLASS_TYPE_P (object_type))
10921           {
10922             if (TREE_CODE (member) == BIT_NOT_EXPR)
10923               return finish_pseudo_destructor_expr (object,
10924                                                     NULL_TREE,
10925                                                     object_type);
10926             else if (TREE_CODE (member) == SCOPE_REF
10927                      && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
10928               return finish_pseudo_destructor_expr (object,
10929                                                     object,
10930                                                     object_type);
10931           }
10932         else if (TREE_CODE (member) == SCOPE_REF
10933                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
10934           {
10935             tree tmpl;
10936             tree args;
10937
10938             /* Lookup the template functions now that we know what the
10939                scope is.  */
10940             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
10941             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
10942             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
10943                                             /*is_type_p=*/false,
10944                                             /*complain=*/false);
10945             if (BASELINK_P (member))
10946               {
10947                 BASELINK_FUNCTIONS (member)
10948                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
10949                               args);
10950                 member = (adjust_result_of_qualified_name_lookup
10951                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
10952                            object_type));
10953               }
10954             else
10955               {
10956                 qualified_name_lookup_error (object_type, tmpl, member);
10957                 return error_mark_node;
10958               }
10959           }
10960         else if (TREE_CODE (member) == SCOPE_REF
10961                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
10962                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
10963           {
10964             if (complain & tf_error)
10965               {
10966                 if (TYPE_P (TREE_OPERAND (member, 0)))
10967                   error ("%qT is not a class or namespace",
10968                          TREE_OPERAND (member, 0));
10969                 else
10970                   error ("%qD is not a class or namespace",
10971                          TREE_OPERAND (member, 0));
10972               }
10973             return error_mark_node;
10974           }
10975         else if (TREE_CODE (member) == FIELD_DECL)
10976           return finish_non_static_data_member (member, object, NULL_TREE);
10977
10978         return finish_class_member_access_expr (object, member,
10979                                                 /*template_p=*/false);
10980       }
10981
10982     case THROW_EXPR:
10983       return build_throw
10984         (RECUR (TREE_OPERAND (t, 0)));
10985
10986     case CONSTRUCTOR:
10987       {
10988         VEC(constructor_elt,gc) *n;
10989         constructor_elt *ce;
10990         unsigned HOST_WIDE_INT idx;
10991         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10992         bool process_index_p;
10993         int newlen;
10994         bool need_copy_p = false;
10995
10996         if (type == error_mark_node)
10997           return error_mark_node;
10998
10999         /* digest_init will do the wrong thing if we let it.  */
11000         if (type && TYPE_PTRMEMFUNC_P (type))
11001           return t;
11002
11003         /* We do not want to process the index of aggregate
11004            initializers as they are identifier nodes which will be
11005            looked up by digest_init.  */
11006         process_index_p = !(type && IS_AGGR_TYPE (type));
11007
11008         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
11009         newlen = VEC_length (constructor_elt, n);
11010         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
11011           {
11012             if (ce->index && process_index_p)
11013               ce->index = RECUR (ce->index);
11014
11015             if (PACK_EXPANSION_P (ce->value))
11016               {
11017                 /* Substitute into the pack expansion.  */
11018                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
11019                                                   in_decl);
11020
11021                 if (ce->value == error_mark_node)
11022                   ;
11023                 else if (TREE_VEC_LENGTH (ce->value) == 1)
11024                   /* Just move the argument into place.  */
11025                   ce->value = TREE_VEC_ELT (ce->value, 0);
11026                 else
11027                   {
11028                     /* Update the length of the final CONSTRUCTOR
11029                        arguments vector, and note that we will need to
11030                        copy.*/
11031                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
11032                     need_copy_p = true;
11033                   }
11034               }
11035             else
11036               ce->value = RECUR (ce->value);
11037           }
11038
11039         if (need_copy_p)
11040           {
11041             VEC(constructor_elt,gc) *old_n = n;
11042
11043             n = VEC_alloc (constructor_elt, gc, newlen);
11044             for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce); 
11045                  idx++)
11046               {
11047                 if (TREE_CODE (ce->value) == TREE_VEC)
11048                   {
11049                     int i, len = TREE_VEC_LENGTH (ce->value);
11050                     for (i = 0; i < len; ++i)
11051                       CONSTRUCTOR_APPEND_ELT (n, 0,
11052                                               TREE_VEC_ELT (ce->value, i));
11053                   }
11054                 else
11055                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
11056               }
11057           }
11058
11059         if (TREE_HAS_CONSTRUCTOR (t))
11060           return finish_compound_literal (type, n);
11061
11062         return build_constructor (NULL_TREE, n);
11063       }
11064
11065     case TYPEID_EXPR:
11066       {
11067         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
11068         if (TYPE_P (operand_0))
11069           return get_typeid (operand_0);
11070         return build_typeid (operand_0);
11071       }
11072
11073     case VAR_DECL:
11074       if (!args)
11075         return t;
11076       /* Fall through */
11077
11078     case PARM_DECL:
11079       {
11080         tree r = tsubst_copy (t, args, complain, in_decl);
11081
11082         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
11083           /* If the original type was a reference, we'll be wrapped in
11084              the appropriate INDIRECT_REF.  */
11085           r = convert_from_reference (r);
11086         return r;
11087       }
11088
11089     case VA_ARG_EXPR:
11090       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
11091                              tsubst_copy (TREE_TYPE (t), args, complain,
11092                                           in_decl));
11093
11094     case OFFSETOF_EXPR:
11095       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
11096
11097     case TRAIT_EXPR:
11098       {
11099         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
11100                                   complain, in_decl);
11101
11102         tree type2 = TRAIT_EXPR_TYPE2 (t);
11103         if (type2)
11104           type2 = tsubst_copy (type2, args, complain, in_decl);
11105         
11106         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
11107       }
11108
11109     case STMT_EXPR:
11110       {
11111         tree old_stmt_expr = cur_stmt_expr;
11112         tree stmt_expr = begin_stmt_expr ();
11113
11114         cur_stmt_expr = stmt_expr;
11115         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
11116                      integral_constant_expression_p);
11117         stmt_expr = finish_stmt_expr (stmt_expr, false);
11118         cur_stmt_expr = old_stmt_expr;
11119
11120         return stmt_expr;
11121       }
11122
11123     case CONST_DECL:
11124       t = tsubst_copy (t, args, complain, in_decl);
11125       /* As in finish_id_expression, we resolve enumeration constants
11126          to their underlying values.  */
11127       if (TREE_CODE (t) == CONST_DECL)
11128         {
11129           used_types_insert (TREE_TYPE (t));
11130           return DECL_INITIAL (t);
11131         }
11132       return t;
11133
11134     default:
11135       /* Handle Objective-C++ constructs, if appropriate.  */
11136       {
11137         tree subst
11138           = objcp_tsubst_copy_and_build (t, args, complain,
11139                                          in_decl, /*function_p=*/false);
11140         if (subst)
11141           return subst;
11142       }
11143       return tsubst_copy (t, args, complain, in_decl);
11144     }
11145
11146 #undef RECUR
11147 }
11148
11149 /* Verify that the instantiated ARGS are valid. For type arguments,
11150    make sure that the type's linkage is ok. For non-type arguments,
11151    make sure they are constants if they are integral or enumerations.
11152    Emit an error under control of COMPLAIN, and return TRUE on error.  */
11153
11154 static bool
11155 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
11156 {
11157   int ix, len = DECL_NTPARMS (tmpl);
11158   bool result = false;
11159
11160   for (ix = 0; ix != len; ix++)
11161     {
11162       tree t = TREE_VEC_ELT (args, ix);
11163
11164       if (TYPE_P (t))
11165         {
11166           /* [basic.link]: A name with no linkage (notably, the name
11167              of a class or enumeration declared in a local scope)
11168              shall not be used to declare an entity with linkage.
11169              This implies that names with no linkage cannot be used as
11170              template arguments.  */
11171           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
11172
11173           if (nt)
11174             {
11175               /* DR 488 makes use of a type with no linkage cause
11176                  type deduction to fail.  */
11177               if (complain & tf_error)
11178                 {
11179                   if (TYPE_ANONYMOUS_P (nt))
11180                     error ("%qT is/uses anonymous type", t);
11181                   else
11182                     error ("template argument for %qD uses local type %qT",
11183                            tmpl, t);
11184                 }
11185               result = true;
11186             }
11187           /* In order to avoid all sorts of complications, we do not
11188              allow variably-modified types as template arguments.  */
11189           else if (variably_modified_type_p (t, NULL_TREE))
11190             {
11191               if (complain & tf_error)
11192                 error ("%qT is a variably modified type", t);
11193               result = true;
11194             }
11195         }
11196       /* A non-type argument of integral or enumerated type must be a
11197          constant.  */
11198       else if (TREE_TYPE (t)
11199                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
11200                && !TREE_CONSTANT (t))
11201         {
11202           if (complain & tf_error)
11203             error ("integral expression %qE is not constant", t);
11204           result = true;
11205         }
11206     }
11207   if (result && (complain & tf_error))
11208     error ("  trying to instantiate %qD", tmpl);
11209   return result;
11210 }
11211
11212 /* Instantiate the indicated variable or function template TMPL with
11213    the template arguments in TARG_PTR.  */
11214
11215 tree
11216 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
11217 {
11218   tree fndecl;
11219   tree gen_tmpl;
11220   tree spec;
11221   HOST_WIDE_INT saved_processing_template_decl;
11222
11223   if (tmpl == error_mark_node)
11224     return error_mark_node;
11225
11226   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11227
11228   /* If this function is a clone, handle it specially.  */
11229   if (DECL_CLONED_FUNCTION_P (tmpl))
11230     {
11231       tree spec;
11232       tree clone;
11233
11234       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11235                                    complain);
11236       if (spec == error_mark_node)
11237         return error_mark_node;
11238
11239       /* Look for the clone.  */
11240       FOR_EACH_CLONE (clone, spec)
11241         if (DECL_NAME (clone) == DECL_NAME (tmpl))
11242           return clone;
11243       /* We should always have found the clone by now.  */
11244       gcc_unreachable ();
11245       return NULL_TREE;
11246     }
11247
11248   /* Check to see if we already have this specialization.  */
11249   spec = retrieve_specialization (tmpl, targ_ptr,
11250                                   /*class_specializations_p=*/false);
11251   if (spec != NULL_TREE)
11252     return spec;
11253
11254   gen_tmpl = most_general_template (tmpl);
11255   if (tmpl != gen_tmpl)
11256     {
11257       /* The TMPL is a partial instantiation.  To get a full set of
11258          arguments we must add the arguments used to perform the
11259          partial instantiation.  */
11260       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11261                                               targ_ptr);
11262
11263       /* Check to see if we already have this specialization.  */
11264       spec = retrieve_specialization (gen_tmpl, targ_ptr,
11265                                       /*class_specializations_p=*/false);
11266       if (spec != NULL_TREE)
11267         return spec;
11268     }
11269
11270   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11271                                complain))
11272     return error_mark_node;
11273
11274   /* We are building a FUNCTION_DECL, during which the access of its
11275      parameters and return types have to be checked.  However this
11276      FUNCTION_DECL which is the desired context for access checking
11277      is not built yet.  We solve this chicken-and-egg problem by
11278      deferring all checks until we have the FUNCTION_DECL.  */
11279   push_deferring_access_checks (dk_deferred);
11280
11281   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11282      (because, for example, we have encountered a non-dependent
11283      function call in the body of a template function and must now
11284      determine which of several overloaded functions will be called),
11285      within the instantiation itself we are not processing a
11286      template.  */  
11287   saved_processing_template_decl = processing_template_decl;
11288   processing_template_decl = 0;
11289   /* Substitute template parameters to obtain the specialization.  */
11290   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11291                    targ_ptr, complain, gen_tmpl);
11292   processing_template_decl = saved_processing_template_decl;
11293   if (fndecl == error_mark_node)
11294     return error_mark_node;
11295
11296   /* Now we know the specialization, compute access previously
11297      deferred.  */
11298   push_access_scope (fndecl);
11299   perform_deferred_access_checks ();
11300   pop_access_scope (fndecl);
11301   pop_deferring_access_checks ();
11302
11303   /* The DECL_TI_TEMPLATE should always be the immediate parent
11304      template, not the most general template.  */
11305   DECL_TI_TEMPLATE (fndecl) = tmpl;
11306
11307   /* If we've just instantiated the main entry point for a function,
11308      instantiate all the alternate entry points as well.  We do this
11309      by cloning the instantiation of the main entry point, not by
11310      instantiating the template clones.  */
11311   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11312     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11313
11314   return fndecl;
11315 }
11316
11317 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
11318    arguments that are being used when calling it.  TARGS is a vector
11319    into which the deduced template arguments are placed.
11320
11321    Return zero for success, 2 for an incomplete match that doesn't resolve
11322    all the types, and 1 for complete failure.  An error message will be
11323    printed only for an incomplete match.
11324
11325    If FN is a conversion operator, or we are trying to produce a specific
11326    specialization, RETURN_TYPE is the return type desired.
11327
11328    The EXPLICIT_TARGS are explicit template arguments provided via a
11329    template-id.
11330
11331    The parameter STRICT is one of:
11332
11333    DEDUCE_CALL:
11334      We are deducing arguments for a function call, as in
11335      [temp.deduct.call].
11336
11337    DEDUCE_CONV:
11338      We are deducing arguments for a conversion function, as in
11339      [temp.deduct.conv].
11340
11341    DEDUCE_EXACT:
11342      We are deducing arguments when doing an explicit instantiation
11343      as in [temp.explicit], when determining an explicit specialization
11344      as in [temp.expl.spec], or when taking the address of a function
11345      template, as in [temp.deduct.funcaddr].  */
11346
11347 int
11348 fn_type_unification (tree fn,
11349                      tree explicit_targs,
11350                      tree targs,
11351                      tree args,
11352                      tree return_type,
11353                      unification_kind_t strict,
11354                      int flags)
11355 {
11356   tree parms;
11357   tree fntype;
11358   int result;
11359   bool incomplete_argument_packs_p = false;
11360
11361   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11362
11363   fntype = TREE_TYPE (fn);
11364   if (explicit_targs)
11365     {
11366       /* [temp.deduct]
11367
11368          The specified template arguments must match the template
11369          parameters in kind (i.e., type, nontype, template), and there
11370          must not be more arguments than there are parameters;
11371          otherwise type deduction fails.
11372
11373          Nontype arguments must match the types of the corresponding
11374          nontype template parameters, or must be convertible to the
11375          types of the corresponding nontype parameters as specified in
11376          _temp.arg.nontype_, otherwise type deduction fails.
11377
11378          All references in the function type of the function template
11379          to the corresponding template parameters are replaced by the
11380          specified template argument values.  If a substitution in a
11381          template parameter or in the function type of the function
11382          template results in an invalid type, type deduction fails.  */
11383       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11384       int i, len = TREE_VEC_LENGTH (tparms);
11385       tree converted_args;
11386       bool incomplete = false;
11387
11388       if (explicit_targs == error_mark_node)
11389         return 1;
11390
11391       converted_args
11392         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11393                                   /*require_all_args=*/false,
11394                                   /*use_default_args=*/false));
11395       if (converted_args == error_mark_node)
11396         return 1;
11397
11398       /* Substitute the explicit args into the function type.  This is
11399          necessary so that, for instance, explicitly declared function
11400          arguments can match null pointed constants.  If we were given
11401          an incomplete set of explicit args, we must not do semantic
11402          processing during substitution as we could create partial
11403          instantiations.  */
11404       for (i = 0; i < len; i++)
11405         {
11406           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11407           bool parameter_pack = false;
11408
11409           /* Dig out the actual parm.  */
11410           if (TREE_CODE (parm) == TYPE_DECL
11411               || TREE_CODE (parm) == TEMPLATE_DECL)
11412             {
11413               parm = TREE_TYPE (parm);
11414               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11415             }
11416           else if (TREE_CODE (parm) == PARM_DECL)
11417             {
11418               parm = DECL_INITIAL (parm);
11419               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11420             }
11421
11422           if (parameter_pack)
11423             {
11424               int level, idx;
11425               tree targ;
11426               template_parm_level_and_index (parm, &level, &idx);
11427
11428               /* Mark the argument pack as "incomplete". We could
11429                  still deduce more arguments during unification.  */
11430               targ = TMPL_ARG (converted_args, level, idx);
11431               if (targ)
11432                 {
11433                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11434                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
11435                     = ARGUMENT_PACK_ARGS (targ);
11436                 }
11437
11438               /* We have some incomplete argument packs.  */
11439               incomplete_argument_packs_p = true;
11440             }
11441         }
11442
11443       if (incomplete_argument_packs_p)
11444         /* Any substitution is guaranteed to be incomplete if there
11445            are incomplete argument packs, because we can still deduce
11446            more arguments.  */
11447         incomplete = 1;
11448       else
11449         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11450
11451       processing_template_decl += incomplete;
11452       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11453       processing_template_decl -= incomplete;
11454
11455       if (fntype == error_mark_node)
11456         return 1;
11457
11458       /* Place the explicitly specified arguments in TARGS.  */
11459       for (i = NUM_TMPL_ARGS (converted_args); i--;)
11460         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11461     }
11462
11463   /* Never do unification on the 'this' parameter.  */
11464   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11465
11466   if (return_type)
11467     {
11468       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11469       args = tree_cons (NULL_TREE, return_type, args);
11470     }
11471
11472   /* We allow incomplete unification without an error message here
11473      because the standard doesn't seem to explicitly prohibit it.  Our
11474      callers must be ready to deal with unification failures in any
11475      event.  */
11476   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11477                                   targs, parms, args, /*subr=*/0,
11478                                   strict, flags);
11479
11480   if (result == 0 && incomplete_argument_packs_p)
11481     {
11482       int i, len = NUM_TMPL_ARGS (targs);
11483
11484       /* Clear the "incomplete" flags on all argument packs.  */
11485       for (i = 0; i < len; i++)
11486         {
11487           tree arg = TREE_VEC_ELT (targs, i);
11488           if (ARGUMENT_PACK_P (arg))
11489             {
11490               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
11491               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
11492             }
11493         }
11494     }
11495
11496   if (result == 0)
11497     /* All is well so far.  Now, check:
11498
11499        [temp.deduct]
11500
11501        When all template arguments have been deduced, all uses of
11502        template parameters in nondeduced contexts are replaced with
11503        the corresponding deduced argument values.  If the
11504        substitution results in an invalid type, as described above,
11505        type deduction fails.  */
11506     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
11507         == error_mark_node)
11508       return 1;
11509
11510   return result;
11511 }
11512
11513 /* Adjust types before performing type deduction, as described in
11514    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
11515    sections are symmetric.  PARM is the type of a function parameter
11516    or the return type of the conversion function.  ARG is the type of
11517    the argument passed to the call, or the type of the value
11518    initialized with the result of the conversion function.
11519    ARG_EXPR is the original argument expression, which may be null.  */
11520
11521 static int
11522 maybe_adjust_types_for_deduction (unification_kind_t strict,
11523                                   tree* parm,
11524                                   tree* arg,
11525                                   tree arg_expr)
11526 {
11527   int result = 0;
11528
11529   switch (strict)
11530     {
11531     case DEDUCE_CALL:
11532       break;
11533
11534     case DEDUCE_CONV:
11535       {
11536         /* Swap PARM and ARG throughout the remainder of this
11537            function; the handling is precisely symmetric since PARM
11538            will initialize ARG rather than vice versa.  */
11539         tree* temp = parm;
11540         parm = arg;
11541         arg = temp;
11542         break;
11543       }
11544
11545     case DEDUCE_EXACT:
11546       /* There is nothing to do in this case.  */
11547       return 0;
11548
11549     default:
11550       gcc_unreachable ();
11551     }
11552
11553   if (TREE_CODE (*parm) != REFERENCE_TYPE)
11554     {
11555       /* [temp.deduct.call]
11556
11557          If P is not a reference type:
11558
11559          --If A is an array type, the pointer type produced by the
11560          array-to-pointer standard conversion (_conv.array_) is
11561          used in place of A for type deduction; otherwise,
11562
11563          --If A is a function type, the pointer type produced by
11564          the function-to-pointer standard conversion
11565          (_conv.func_) is used in place of A for type deduction;
11566          otherwise,
11567
11568          --If A is a cv-qualified type, the top level
11569          cv-qualifiers of A's type are ignored for type
11570          deduction.  */
11571       if (TREE_CODE (*arg) == ARRAY_TYPE)
11572         *arg = build_pointer_type (TREE_TYPE (*arg));
11573       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
11574         *arg = build_pointer_type (*arg);
11575       else
11576         *arg = TYPE_MAIN_VARIANT (*arg);
11577     }
11578
11579   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
11580      of the form T&&, where T is a template parameter, and the argument
11581      is an lvalue, T is deduced as A& */
11582   if (TREE_CODE (*parm) == REFERENCE_TYPE
11583       && TYPE_REF_IS_RVALUE (*parm)
11584       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
11585       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
11586       && arg_expr && real_lvalue_p (arg_expr))
11587     *arg = build_reference_type (*arg);
11588
11589   /* [temp.deduct.call]
11590
11591      If P is a cv-qualified type, the top level cv-qualifiers
11592      of P's type are ignored for type deduction.  If P is a
11593      reference type, the type referred to by P is used for
11594      type deduction.  */
11595   *parm = TYPE_MAIN_VARIANT (*parm);
11596   if (TREE_CODE (*parm) == REFERENCE_TYPE)
11597     {
11598       *parm = TREE_TYPE (*parm);
11599       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
11600     }
11601
11602   /* DR 322. For conversion deduction, remove a reference type on parm
11603      too (which has been swapped into ARG).  */
11604   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
11605     *arg = TREE_TYPE (*arg);
11606
11607   return result;
11608 }
11609
11610 /* Most parms like fn_type_unification.
11611
11612    If SUBR is 1, we're being called recursively (to unify the
11613    arguments of a function or method parameter of a function
11614    template). */
11615
11616 static int
11617 type_unification_real (tree tparms,
11618                        tree targs,
11619                        tree xparms,
11620                        tree xargs,
11621                        int subr,
11622                        unification_kind_t strict,
11623                        int flags)
11624 {
11625   tree parm, arg, arg_expr;
11626   int i;
11627   int ntparms = TREE_VEC_LENGTH (tparms);
11628   int sub_strict;
11629   int saw_undeduced = 0;
11630   tree parms, args;
11631
11632   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
11633   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
11634   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
11635   gcc_assert (ntparms > 0);
11636
11637   switch (strict)
11638     {
11639     case DEDUCE_CALL:
11640       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
11641                     | UNIFY_ALLOW_DERIVED);
11642       break;
11643
11644     case DEDUCE_CONV:
11645       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
11646       break;
11647
11648     case DEDUCE_EXACT:
11649       sub_strict = UNIFY_ALLOW_NONE;
11650       break;
11651
11652     default:
11653       gcc_unreachable ();
11654     }
11655
11656  again:
11657   parms = xparms;
11658   args = xargs;
11659
11660   while (parms && parms != void_list_node
11661          && args && args != void_list_node)
11662     {
11663       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11664         break;
11665
11666       parm = TREE_VALUE (parms);
11667       parms = TREE_CHAIN (parms);
11668       arg = TREE_VALUE (args);
11669       args = TREE_CHAIN (args);
11670       arg_expr = NULL;
11671
11672       if (arg == error_mark_node)
11673         return 1;
11674       if (arg == unknown_type_node)
11675         /* We can't deduce anything from this, but we might get all the
11676            template args from other function args.  */
11677         continue;
11678
11679       /* Conversions will be performed on a function argument that
11680          corresponds with a function parameter that contains only
11681          non-deducible template parameters and explicitly specified
11682          template parameters.  */
11683       if (!uses_template_parms (parm))
11684         {
11685           tree type;
11686
11687           if (!TYPE_P (arg))
11688             type = TREE_TYPE (arg);
11689           else
11690             type = arg;
11691
11692           if (same_type_p (parm, type))
11693             continue;
11694           if (strict != DEDUCE_EXACT
11695               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
11696                                   flags))
11697             continue;
11698
11699           return 1;
11700         }
11701
11702       if (!TYPE_P (arg))
11703         {
11704           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
11705           if (type_unknown_p (arg))
11706             {
11707               /* [temp.deduct.type] 
11708
11709                  A template-argument can be deduced from a pointer to
11710                  function or pointer to member function argument if
11711                  the set of overloaded functions does not contain
11712                  function templates and at most one of a set of
11713                  overloaded functions provides a unique match.  */
11714               if (resolve_overloaded_unification
11715                   (tparms, targs, parm, arg, strict, sub_strict))
11716                 continue;
11717
11718               return 1;
11719             }
11720           arg_expr = arg;
11721           arg = unlowered_expr_type (arg);
11722           if (arg == error_mark_node)
11723             return 1;
11724         }
11725
11726       {
11727         int arg_strict = sub_strict;
11728
11729         if (!subr)
11730           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
11731                                                           arg_expr);
11732
11733         if (unify (tparms, targs, parm, arg, arg_strict))
11734           return 1;
11735       }
11736     }
11737
11738
11739   if (parms 
11740       && parms != void_list_node
11741       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11742     {
11743       /* Unify the remaining arguments with the pack expansion type.  */
11744       tree argvec;
11745       tree parmvec = make_tree_vec (1);
11746       int len = 0;
11747       tree t;
11748
11749       /* Count the number of arguments that remain.  */
11750       for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
11751         len++;
11752         
11753       /* Allocate a TREE_VEC and copy in all of the arguments */ 
11754       argvec = make_tree_vec (len);
11755       for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
11756         {
11757           TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
11758           ++i;
11759         }
11760
11761       /* Copy the parameter into parmvec.  */
11762       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
11763       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
11764                                 /*call_args_p=*/true, /*subr=*/subr))
11765         return 1;
11766
11767       /* Advance to the end of the list of parameters.  */
11768       parms = TREE_CHAIN (parms);
11769     }
11770
11771   /* Fail if we've reached the end of the parm list, and more args
11772      are present, and the parm list isn't variadic.  */
11773   if (args && args != void_list_node && parms == void_list_node)
11774     return 1;
11775   /* Fail if parms are left and they don't have default values.  */
11776   if (parms && parms != void_list_node
11777       && TREE_PURPOSE (parms) == NULL_TREE)
11778     return 1;
11779
11780   if (!subr)
11781     for (i = 0; i < ntparms; i++)
11782       if (!TREE_VEC_ELT (targs, i))
11783         {
11784           tree tparm;
11785
11786           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
11787             continue;
11788
11789           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11790
11791           /* If this is an undeduced nontype parameter that depends on
11792              a type parameter, try another pass; its type may have been
11793              deduced from a later argument than the one from which
11794              this parameter can be deduced.  */
11795           if (TREE_CODE (tparm) == PARM_DECL
11796               && uses_template_parms (TREE_TYPE (tparm))
11797               && !saw_undeduced++)
11798             goto again;
11799
11800           /* Core issue #226 (C++0x) [temp.deduct]:
11801
11802                If a template argument has not been deduced, its
11803                default template argument, if any, is used. 
11804
11805              When we are in C++98 mode, TREE_PURPOSE will either
11806              be NULL_TREE or ERROR_MARK_NODE, so we do not need
11807              to explicitly check cxx_dialect here.  */
11808           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
11809             {
11810               tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)), 
11811                                  targs, tf_none, NULL_TREE);
11812               if (arg == error_mark_node)
11813                 return 1;
11814               else
11815                 {
11816                   TREE_VEC_ELT (targs, i) = arg;
11817                   continue;
11818                 }
11819             }
11820
11821           /* If the type parameter is a parameter pack, then it will
11822              be deduced to an empty parameter pack.  */
11823           if (template_parameter_pack_p (tparm))
11824             {
11825               tree arg;
11826
11827               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
11828                 {
11829                   arg = make_node (NONTYPE_ARGUMENT_PACK);
11830                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
11831                   TREE_CONSTANT (arg) = 1;
11832                 }
11833               else
11834                 arg = make_node (TYPE_ARGUMENT_PACK);
11835
11836               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
11837
11838               TREE_VEC_ELT (targs, i) = arg;
11839               continue;
11840             }
11841
11842           return 2;
11843         }
11844
11845   return 0;
11846 }
11847
11848 /* Subroutine of type_unification_real.  Args are like the variables
11849    at the call site.  ARG is an overloaded function (or template-id);
11850    we try deducing template args from each of the overloads, and if
11851    only one succeeds, we go with that.  Modifies TARGS and returns
11852    true on success.  */
11853
11854 static bool
11855 resolve_overloaded_unification (tree tparms,
11856                                 tree targs,
11857                                 tree parm,
11858                                 tree arg,
11859                                 unification_kind_t strict,
11860                                 int sub_strict)
11861 {
11862   tree tempargs = copy_node (targs);
11863   int good = 0;
11864   bool addr_p;
11865
11866   if (TREE_CODE (arg) == ADDR_EXPR)
11867     {
11868       arg = TREE_OPERAND (arg, 0);
11869       addr_p = true;
11870     }
11871   else
11872     addr_p = false;
11873
11874   if (TREE_CODE (arg) == COMPONENT_REF)
11875     /* Handle `&x' where `x' is some static or non-static member
11876        function name.  */
11877     arg = TREE_OPERAND (arg, 1);
11878
11879   if (TREE_CODE (arg) == OFFSET_REF)
11880     arg = TREE_OPERAND (arg, 1);
11881
11882   /* Strip baselink information.  */
11883   if (BASELINK_P (arg))
11884     arg = BASELINK_FUNCTIONS (arg);
11885
11886   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
11887     {
11888       /* If we got some explicit template args, we need to plug them into
11889          the affected templates before we try to unify, in case the
11890          explicit args will completely resolve the templates in question.  */
11891
11892       tree expl_subargs = TREE_OPERAND (arg, 1);
11893       arg = TREE_OPERAND (arg, 0);
11894
11895       for (; arg; arg = OVL_NEXT (arg))
11896         {
11897           tree fn = OVL_CURRENT (arg);
11898           tree subargs, elem;
11899
11900           if (TREE_CODE (fn) != TEMPLATE_DECL)
11901             continue;
11902
11903           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
11904                                   expl_subargs, /*check_ret=*/false);
11905           if (subargs)
11906             {
11907               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
11908               good += try_one_overload (tparms, targs, tempargs, parm,
11909                                         elem, strict, sub_strict, addr_p);
11910             }
11911         }
11912     }
11913   else if (TREE_CODE (arg) != OVERLOAD
11914            && TREE_CODE (arg) != FUNCTION_DECL)
11915     /* If ARG is, for example, "(0, &f)" then its type will be unknown
11916        -- but the deduction does not succeed because the expression is
11917        not just the function on its own.  */
11918     return false;
11919   else
11920     for (; arg; arg = OVL_NEXT (arg))
11921       good += try_one_overload (tparms, targs, tempargs, parm,
11922                                 TREE_TYPE (OVL_CURRENT (arg)),
11923                                 strict, sub_strict, addr_p);
11924
11925   /* [temp.deduct.type] A template-argument can be deduced from a pointer
11926      to function or pointer to member function argument if the set of
11927      overloaded functions does not contain function templates and at most
11928      one of a set of overloaded functions provides a unique match.
11929
11930      So if we found multiple possibilities, we return success but don't
11931      deduce anything.  */
11932
11933   if (good == 1)
11934     {
11935       int i = TREE_VEC_LENGTH (targs);
11936       for (; i--; )
11937         if (TREE_VEC_ELT (tempargs, i))
11938           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
11939     }
11940   if (good)
11941     return true;
11942
11943   return false;
11944 }
11945
11946 /* Subroutine of resolve_overloaded_unification; does deduction for a single
11947    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
11948    different overloads deduce different arguments for a given parm.
11949    ADDR_P is true if the expression for which deduction is being
11950    performed was of the form "& fn" rather than simply "fn".
11951
11952    Returns 1 on success.  */
11953
11954 static int
11955 try_one_overload (tree tparms,
11956                   tree orig_targs,
11957                   tree targs,
11958                   tree parm,
11959                   tree arg,
11960                   unification_kind_t strict,
11961                   int sub_strict,
11962                   bool addr_p)
11963 {
11964   int nargs;
11965   tree tempargs;
11966   int i;
11967
11968   /* [temp.deduct.type] A template-argument can be deduced from a pointer
11969      to function or pointer to member function argument if the set of
11970      overloaded functions does not contain function templates and at most
11971      one of a set of overloaded functions provides a unique match.
11972
11973      So if this is a template, just return success.  */
11974
11975   if (uses_template_parms (arg))
11976     return 1;
11977
11978   if (TREE_CODE (arg) == METHOD_TYPE)
11979     arg = build_ptrmemfunc_type (build_pointer_type (arg));
11980   else if (addr_p)
11981     arg = build_pointer_type (arg);
11982
11983   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
11984
11985   /* We don't copy orig_targs for this because if we have already deduced
11986      some template args from previous args, unify would complain when we
11987      try to deduce a template parameter for the same argument, even though
11988      there isn't really a conflict.  */
11989   nargs = TREE_VEC_LENGTH (targs);
11990   tempargs = make_tree_vec (nargs);
11991
11992   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
11993     return 0;
11994
11995   /* First make sure we didn't deduce anything that conflicts with
11996      explicitly specified args.  */
11997   for (i = nargs; i--; )
11998     {
11999       tree elt = TREE_VEC_ELT (tempargs, i);
12000       tree oldelt = TREE_VEC_ELT (orig_targs, i);
12001
12002       if (!elt)
12003         /*NOP*/;
12004       else if (uses_template_parms (elt))
12005         /* Since we're unifying against ourselves, we will fill in
12006            template args used in the function parm list with our own
12007            template parms.  Discard them.  */
12008         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
12009       else if (oldelt && !template_args_equal (oldelt, elt))
12010         return 0;
12011     }
12012
12013   for (i = nargs; i--; )
12014     {
12015       tree elt = TREE_VEC_ELT (tempargs, i);
12016
12017       if (elt)
12018         TREE_VEC_ELT (targs, i) = elt;
12019     }
12020
12021   return 1;
12022 }
12023
12024 /* PARM is a template class (perhaps with unbound template
12025    parameters).  ARG is a fully instantiated type.  If ARG can be
12026    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
12027    TARGS are as for unify.  */
12028
12029 static tree
12030 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
12031 {
12032   tree copy_of_targs;
12033
12034   if (!CLASSTYPE_TEMPLATE_INFO (arg)
12035       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
12036           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
12037     return NULL_TREE;
12038
12039   /* We need to make a new template argument vector for the call to
12040      unify.  If we used TARGS, we'd clutter it up with the result of
12041      the attempted unification, even if this class didn't work out.
12042      We also don't want to commit ourselves to all the unifications
12043      we've already done, since unification is supposed to be done on
12044      an argument-by-argument basis.  In other words, consider the
12045      following pathological case:
12046
12047        template <int I, int J, int K>
12048        struct S {};
12049
12050        template <int I, int J>
12051        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
12052
12053        template <int I, int J, int K>
12054        void f(S<I, J, K>, S<I, I, I>);
12055
12056        void g() {
12057          S<0, 0, 0> s0;
12058          S<0, 1, 2> s2;
12059
12060          f(s0, s2);
12061        }
12062
12063      Now, by the time we consider the unification involving `s2', we
12064      already know that we must have `f<0, 0, 0>'.  But, even though
12065      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
12066      because there are two ways to unify base classes of S<0, 1, 2>
12067      with S<I, I, I>.  If we kept the already deduced knowledge, we
12068      would reject the possibility I=1.  */
12069   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
12070
12071   /* If unification failed, we're done.  */
12072   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
12073              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
12074     return NULL_TREE;
12075
12076   return arg;
12077 }
12078
12079 /* Given a template type PARM and a class type ARG, find the unique
12080    base type in ARG that is an instance of PARM.  We do not examine
12081    ARG itself; only its base-classes.  If there is not exactly one
12082    appropriate base class, return NULL_TREE.  PARM may be the type of
12083    a partial specialization, as well as a plain template type.  Used
12084    by unify.  */
12085
12086 static tree
12087 get_template_base (tree tparms, tree targs, tree parm, tree arg)
12088 {
12089   tree rval = NULL_TREE;
12090   tree binfo;
12091
12092   gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
12093
12094   binfo = TYPE_BINFO (complete_type (arg));
12095   if (!binfo)
12096     /* The type could not be completed.  */
12097     return NULL_TREE;
12098
12099   /* Walk in inheritance graph order.  The search order is not
12100      important, and this avoids multiple walks of virtual bases.  */
12101   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
12102     {
12103       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
12104
12105       if (r)
12106         {
12107           /* If there is more than one satisfactory baseclass, then:
12108
12109                [temp.deduct.call]
12110
12111               If they yield more than one possible deduced A, the type
12112               deduction fails.
12113
12114              applies.  */
12115           if (rval && !same_type_p (r, rval))
12116             return NULL_TREE;
12117
12118           rval = r;
12119         }
12120     }
12121
12122   return rval;
12123 }
12124
12125 /* Returns the level of DECL, which declares a template parameter.  */
12126
12127 static int
12128 template_decl_level (tree decl)
12129 {
12130   switch (TREE_CODE (decl))
12131     {
12132     case TYPE_DECL:
12133     case TEMPLATE_DECL:
12134       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
12135
12136     case PARM_DECL:
12137       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
12138
12139     default:
12140       gcc_unreachable ();
12141     }
12142   return 0;
12143 }
12144
12145 /* Decide whether ARG can be unified with PARM, considering only the
12146    cv-qualifiers of each type, given STRICT as documented for unify.
12147    Returns nonzero iff the unification is OK on that basis.  */
12148
12149 static int
12150 check_cv_quals_for_unify (int strict, tree arg, tree parm)
12151 {
12152   int arg_quals = cp_type_quals (arg);
12153   int parm_quals = cp_type_quals (parm);
12154
12155   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12156       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12157     {
12158       /*  Although a CVR qualifier is ignored when being applied to a
12159           substituted template parameter ([8.3.2]/1 for example), that
12160           does not apply during deduction [14.8.2.4]/1, (even though
12161           that is not explicitly mentioned, [14.8.2.4]/9 indicates
12162           this).  Except when we're allowing additional CV qualifiers
12163           at the outer level [14.8.2.1]/3,1st bullet.  */
12164       if ((TREE_CODE (arg) == REFERENCE_TYPE
12165            || TREE_CODE (arg) == FUNCTION_TYPE
12166            || TREE_CODE (arg) == METHOD_TYPE)
12167           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
12168         return 0;
12169
12170       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
12171           && (parm_quals & TYPE_QUAL_RESTRICT))
12172         return 0;
12173     }
12174
12175   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12176       && (arg_quals & parm_quals) != parm_quals)
12177     return 0;
12178
12179   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
12180       && (parm_quals & arg_quals) != arg_quals)
12181     return 0;
12182
12183   return 1;
12184 }
12185
12186 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
12187 void 
12188 template_parm_level_and_index (tree parm, int* level, int* index)
12189 {
12190   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12191       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12192       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12193     {
12194       *index = TEMPLATE_TYPE_IDX (parm);
12195       *level = TEMPLATE_TYPE_LEVEL (parm);
12196     }
12197   else
12198     {
12199       *index = TEMPLATE_PARM_IDX (parm);
12200       *level = TEMPLATE_PARM_LEVEL (parm);
12201     }
12202 }
12203
12204 /* Unifies the remaining arguments in PACKED_ARGS with the pack
12205    expansion at the end of PACKED_PARMS. Returns 0 if the type
12206    deduction succeeds, 1 otherwise. STRICT is the same as in
12207    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
12208    call argument list. We'll need to adjust the arguments to make them
12209    types. SUBR tells us if this is from a recursive call to
12210    type_unification_real.  */
12211 int
12212 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
12213                       tree packed_args, int strict, bool call_args_p,
12214                       bool subr)
12215 {
12216   tree parm 
12217     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
12218   tree pattern = PACK_EXPANSION_PATTERN (parm);
12219   tree pack, packs = NULL_TREE;
12220   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
12221   int len = TREE_VEC_LENGTH (packed_args);
12222
12223   /* Determine the parameter packs we will be deducing from the
12224      pattern, and record their current deductions.  */
12225   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
12226        pack; pack = TREE_CHAIN (pack))
12227     {
12228       tree parm_pack = TREE_VALUE (pack);
12229       int idx, level;
12230
12231       /* Determine the index and level of this parameter pack.  */
12232       template_parm_level_and_index (parm_pack, &level, &idx);
12233
12234       /* Keep track of the parameter packs and their corresponding
12235          argument packs.  */
12236       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12237       TREE_TYPE (packs) = make_tree_vec (len - start);
12238     }
12239   
12240   /* Loop through all of the arguments that have not yet been
12241      unified and unify each with the pattern.  */
12242   for (i = start; i < len; i++)
12243     {
12244       tree parm = pattern;
12245
12246       /* For each parameter pack, clear out the deduced value so that
12247          we can deduce it again.  */
12248       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12249         {
12250           int idx, level;
12251           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12252
12253           TMPL_ARG (targs, level, idx) = NULL_TREE;
12254         }
12255
12256       /* Unify the pattern with the current argument.  */
12257       {
12258         tree arg = TREE_VEC_ELT (packed_args, i);
12259         int arg_strict = strict;
12260         bool skip_arg_p = false;
12261
12262         if (call_args_p)
12263           {
12264             int sub_strict;
12265
12266             /* This mirrors what we do in type_unification_real.  */
12267             switch (strict)
12268               {
12269               case DEDUCE_CALL:
12270                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
12271                               | UNIFY_ALLOW_MORE_CV_QUAL
12272                               | UNIFY_ALLOW_DERIVED);
12273                 break;
12274                 
12275               case DEDUCE_CONV:
12276                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12277                 break;
12278                 
12279               case DEDUCE_EXACT:
12280                 sub_strict = UNIFY_ALLOW_NONE;
12281                 break;
12282                 
12283               default:
12284                 gcc_unreachable ();
12285               }
12286
12287             if (!TYPE_P (arg))
12288               {
12289                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12290                 if (type_unknown_p (arg))
12291                   {
12292                     /* [temp.deduct.type] A template-argument can be
12293                        deduced from a pointer to function or pointer
12294                        to member function argument if the set of
12295                        overloaded functions does not contain function
12296                        templates and at most one of a set of
12297                        overloaded functions provides a unique
12298                        match.  */
12299
12300                     if (resolve_overloaded_unification
12301                         (tparms, targs, parm, arg, strict, sub_strict)
12302                         != 0)
12303                       return 1;
12304                     skip_arg_p = true;
12305                   }
12306
12307                 if (!skip_arg_p)
12308                   {
12309                     arg = TREE_TYPE (arg);
12310                     if (arg == error_mark_node)
12311                       return 1;
12312                   }
12313               }
12314       
12315             arg_strict = sub_strict;
12316
12317             if (!subr)
12318               arg_strict |= 
12319                 maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12320           }
12321
12322         if (!skip_arg_p)
12323           {
12324             if (unify (tparms, targs, parm, arg, arg_strict))
12325               return 1;
12326           }
12327       }
12328
12329       /* For each parameter pack, collect the deduced value.  */
12330       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12331         {
12332           int idx, level;
12333           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12334
12335           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
12336             TMPL_ARG (targs, level, idx);
12337         }
12338     }
12339
12340   /* Verify that the results of unification with the parameter packs
12341      produce results consistent with what we've seen before, and make
12342      the deduced argument packs available.  */
12343   for (pack = packs; pack; pack = TREE_CHAIN (pack))
12344     {
12345       tree old_pack = TREE_VALUE (pack);
12346       tree new_args = TREE_TYPE (pack);
12347
12348       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12349         {
12350           /* Prepend the explicit arguments onto NEW_ARGS.  */
12351           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12352           tree old_args = new_args;
12353           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12354           int len = explicit_len + TREE_VEC_LENGTH (old_args);
12355
12356           /* Copy the explicit arguments.  */
12357           new_args = make_tree_vec (len);
12358           for (i = 0; i < explicit_len; i++)
12359             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12360
12361           /* Copy the deduced arguments.  */
12362           for (; i < len; i++)
12363             TREE_VEC_ELT (new_args, i) =
12364               TREE_VEC_ELT (old_args, i - explicit_len);
12365         }
12366
12367       if (!old_pack)
12368         {
12369           tree result;
12370           int idx, level;
12371           
12372           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12373
12374           /* Build the deduced *_ARGUMENT_PACK.  */
12375           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12376             {
12377               result = make_node (NONTYPE_ARGUMENT_PACK);
12378               TREE_TYPE (result) = 
12379                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12380               TREE_CONSTANT (result) = 1;
12381             }
12382           else
12383             result = make_node (TYPE_ARGUMENT_PACK);
12384
12385           SET_ARGUMENT_PACK_ARGS (result, new_args);
12386
12387           /* Note the deduced argument packs for this parameter
12388              pack.  */
12389           TMPL_ARG (targs, level, idx) = result;
12390         }
12391       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12392                && (ARGUMENT_PACK_ARGS (old_pack) 
12393                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12394         {
12395           /* We only had the explicitly-provided arguments before, but
12396              now we have a complete set of arguments.  */
12397           int idx, level;
12398           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12399           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12400
12401           /* Keep the original deduced argument pack.  */
12402           TMPL_ARG (targs, level, idx) = old_pack;
12403
12404           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12405           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12406           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12407         }
12408       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12409                                     new_args))
12410         /* Inconsistent unification of this parameter pack.  */
12411         return 1;
12412       else
12413         {
12414           int idx, level;
12415           
12416           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12417
12418           /* Keep the original deduced argument pack.  */
12419           TMPL_ARG (targs, level, idx) = old_pack;
12420         }
12421     }
12422
12423   return 0;
12424 }
12425
12426 /* Deduce the value of template parameters.  TPARMS is the (innermost)
12427    set of template parameters to a template.  TARGS is the bindings
12428    for those template parameters, as determined thus far; TARGS may
12429    include template arguments for outer levels of template parameters
12430    as well.  PARM is a parameter to a template function, or a
12431    subcomponent of that parameter; ARG is the corresponding argument.
12432    This function attempts to match PARM with ARG in a manner
12433    consistent with the existing assignments in TARGS.  If more values
12434    are deduced, then TARGS is updated.
12435
12436    Returns 0 if the type deduction succeeds, 1 otherwise.  The
12437    parameter STRICT is a bitwise or of the following flags:
12438
12439      UNIFY_ALLOW_NONE:
12440        Require an exact match between PARM and ARG.
12441      UNIFY_ALLOW_MORE_CV_QUAL:
12442        Allow the deduced ARG to be more cv-qualified (by qualification
12443        conversion) than ARG.
12444      UNIFY_ALLOW_LESS_CV_QUAL:
12445        Allow the deduced ARG to be less cv-qualified than ARG.
12446      UNIFY_ALLOW_DERIVED:
12447        Allow the deduced ARG to be a template base class of ARG,
12448        or a pointer to a template base class of the type pointed to by
12449        ARG.
12450      UNIFY_ALLOW_INTEGER:
12451        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
12452        case for more information.
12453      UNIFY_ALLOW_OUTER_LEVEL:
12454        This is the outermost level of a deduction. Used to determine validity
12455        of qualification conversions. A valid qualification conversion must
12456        have const qualified pointers leading up to the inner type which
12457        requires additional CV quals, except at the outer level, where const
12458        is not required [conv.qual]. It would be normal to set this flag in
12459        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
12460      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
12461        This is the outermost level of a deduction, and PARM can be more CV
12462        qualified at this point.
12463      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
12464        This is the outermost level of a deduction, and PARM can be less CV
12465        qualified at this point.  */
12466
12467 static int
12468 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
12469 {
12470   int idx;
12471   tree targ;
12472   tree tparm;
12473   int strict_in = strict;
12474
12475   /* I don't think this will do the right thing with respect to types.
12476      But the only case I've seen it in so far has been array bounds, where
12477      signedness is the only information lost, and I think that will be
12478      okay.  */
12479   while (TREE_CODE (parm) == NOP_EXPR)
12480     parm = TREE_OPERAND (parm, 0);
12481
12482   if (arg == error_mark_node)
12483     return 1;
12484   if (arg == unknown_type_node)
12485     /* We can't deduce anything from this, but we might get all the
12486        template args from other function args.  */
12487     return 0;
12488
12489   /* If PARM uses template parameters, then we can't bail out here,
12490      even if ARG == PARM, since we won't record unifications for the
12491      template parameters.  We might need them if we're trying to
12492      figure out which of two things is more specialized.  */
12493   if (arg == parm && !uses_template_parms (parm))
12494     return 0;
12495
12496   /* Immediately reject some pairs that won't unify because of
12497      cv-qualification mismatches.  */
12498   if (TREE_CODE (arg) == TREE_CODE (parm)
12499       && TYPE_P (arg)
12500       /* It is the elements of the array which hold the cv quals of an array
12501          type, and the elements might be template type parms. We'll check
12502          when we recurse.  */
12503       && TREE_CODE (arg) != ARRAY_TYPE
12504       /* We check the cv-qualifiers when unifying with template type
12505          parameters below.  We want to allow ARG `const T' to unify with
12506          PARM `T' for example, when computing which of two templates
12507          is more specialized, for example.  */
12508       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
12509       && !check_cv_quals_for_unify (strict_in, arg, parm))
12510     return 1;
12511
12512   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
12513       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
12514     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
12515   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
12516   strict &= ~UNIFY_ALLOW_DERIVED;
12517   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12518   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
12519
12520   switch (TREE_CODE (parm))
12521     {
12522     case TYPENAME_TYPE:
12523     case SCOPE_REF:
12524     case UNBOUND_CLASS_TEMPLATE:
12525       /* In a type which contains a nested-name-specifier, template
12526          argument values cannot be deduced for template parameters used
12527          within the nested-name-specifier.  */
12528       return 0;
12529
12530     case TEMPLATE_TYPE_PARM:
12531     case TEMPLATE_TEMPLATE_PARM:
12532     case BOUND_TEMPLATE_TEMPLATE_PARM:
12533       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12534       if (tparm == error_mark_node)
12535         return 1;
12536
12537       if (TEMPLATE_TYPE_LEVEL (parm)
12538           != template_decl_level (tparm))
12539         /* The PARM is not one we're trying to unify.  Just check
12540            to see if it matches ARG.  */
12541         return (TREE_CODE (arg) == TREE_CODE (parm)
12542                 && same_type_p (parm, arg)) ? 0 : 1;
12543       idx = TEMPLATE_TYPE_IDX (parm);
12544       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12545       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
12546
12547       /* Check for mixed types and values.  */
12548       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12549            && TREE_CODE (tparm) != TYPE_DECL)
12550           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12551               && TREE_CODE (tparm) != TEMPLATE_DECL))
12552         return 1;
12553
12554       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12555         {
12556           /* ARG must be constructed from a template class or a template
12557              template parameter.  */
12558           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
12559               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
12560             return 1;
12561
12562           {
12563             tree parmvec = TYPE_TI_ARGS (parm);
12564             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
12565             tree argtmplvec
12566               = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
12567             int i;
12568
12569             /* The resolution to DR150 makes clear that default
12570                arguments for an N-argument may not be used to bind T
12571                to a template template parameter with fewer than N
12572                parameters.  It is not safe to permit the binding of
12573                default arguments as an extension, as that may change
12574                the meaning of a conforming program.  Consider:
12575
12576                   struct Dense { static const unsigned int dim = 1; };
12577
12578                   template <template <typename> class View,
12579                             typename Block>
12580                   void operator+(float, View<Block> const&);
12581
12582                   template <typename Block,
12583                             unsigned int Dim = Block::dim>
12584                   struct Lvalue_proxy { operator float() const; };
12585
12586                   void
12587                   test_1d (void) {
12588                     Lvalue_proxy<Dense> p;
12589                     float b;
12590                     b + p;
12591                   }
12592
12593               Here, if Lvalue_proxy is permitted to bind to View, then
12594               the global operator+ will be used; if they are not, the
12595               Lvalue_proxy will be converted to float.  */
12596             if (coerce_template_parms (argtmplvec, parmvec,
12597                                        TYPE_TI_TEMPLATE (parm),
12598                                        tf_none,
12599                                        /*require_all_args=*/true,
12600                                        /*use_default_args=*/false)
12601                 == error_mark_node)
12602               return 1;
12603
12604             /* Deduce arguments T, i from TT<T> or TT<i>.
12605                We check each element of PARMVEC and ARGVEC individually
12606                rather than the whole TREE_VEC since they can have
12607                different number of elements.  */
12608
12609             for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
12610               {
12611                 if (unify (tparms, targs,
12612                            TREE_VEC_ELT (parmvec, i),
12613                            TREE_VEC_ELT (argvec, i),
12614                            UNIFY_ALLOW_NONE))
12615                   return 1;
12616               }
12617           }
12618           arg = TYPE_TI_TEMPLATE (arg);
12619
12620           /* Fall through to deduce template name.  */
12621         }
12622
12623       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12624           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12625         {
12626           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
12627
12628           /* Simple cases: Value already set, does match or doesn't.  */
12629           if (targ != NULL_TREE && template_args_equal (targ, arg))
12630             return 0;
12631           else if (targ)
12632             return 1;
12633         }
12634       else
12635         {
12636           /* If PARM is `const T' and ARG is only `int', we don't have
12637              a match unless we are allowing additional qualification.
12638              If ARG is `const int' and PARM is just `T' that's OK;
12639              that binds `const int' to `T'.  */
12640           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
12641                                          arg, parm))
12642             return 1;
12643
12644           /* Consider the case where ARG is `const volatile int' and
12645              PARM is `const T'.  Then, T should be `volatile int'.  */
12646           arg = cp_build_qualified_type_real
12647             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
12648           if (arg == error_mark_node)
12649             return 1;
12650
12651           /* Simple cases: Value already set, does match or doesn't.  */
12652           if (targ != NULL_TREE && same_type_p (targ, arg))
12653             return 0;
12654           else if (targ)
12655             return 1;
12656
12657           /* Make sure that ARG is not a variable-sized array.  (Note
12658              that were talking about variable-sized arrays (like
12659              `int[n]'), rather than arrays of unknown size (like
12660              `int[]').)  We'll get very confused by such a type since
12661              the bound of the array will not be computable in an
12662              instantiation.  Besides, such types are not allowed in
12663              ISO C++, so we can do as we please here.  */
12664           if (variably_modified_type_p (arg, NULL_TREE))
12665             return 1;
12666         }
12667
12668       /* If ARG is a parameter pack or an expansion, we cannot unify
12669          against it unless PARM is also a parameter pack.  */
12670       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12671           && !template_parameter_pack_p (parm))
12672         return 1;
12673
12674       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12675       return 0;
12676
12677     case TEMPLATE_PARM_INDEX:
12678       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12679       if (tparm == error_mark_node)
12680         return 1;
12681
12682       if (TEMPLATE_PARM_LEVEL (parm)
12683           != template_decl_level (tparm))
12684         /* The PARM is not one we're trying to unify.  Just check
12685            to see if it matches ARG.  */
12686         return !(TREE_CODE (arg) == TREE_CODE (parm)
12687                  && cp_tree_equal (parm, arg));
12688
12689       idx = TEMPLATE_PARM_IDX (parm);
12690       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12691
12692       if (targ)
12693         return !cp_tree_equal (targ, arg);
12694
12695       /* [temp.deduct.type] If, in the declaration of a function template
12696          with a non-type template-parameter, the non-type
12697          template-parameter is used in an expression in the function
12698          parameter-list and, if the corresponding template-argument is
12699          deduced, the template-argument type shall match the type of the
12700          template-parameter exactly, except that a template-argument
12701          deduced from an array bound may be of any integral type.
12702          The non-type parameter might use already deduced type parameters.  */
12703       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
12704       if (!TREE_TYPE (arg))
12705         /* Template-parameter dependent expression.  Just accept it for now.
12706            It will later be processed in convert_template_argument.  */
12707         ;
12708       else if (same_type_p (TREE_TYPE (arg), tparm))
12709         /* OK */;
12710       else if ((strict & UNIFY_ALLOW_INTEGER)
12711                && (TREE_CODE (tparm) == INTEGER_TYPE
12712                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
12713         /* Convert the ARG to the type of PARM; the deduced non-type
12714            template argument must exactly match the types of the
12715            corresponding parameter.  */
12716         arg = fold (build_nop (TREE_TYPE (parm), arg));
12717       else if (uses_template_parms (tparm))
12718         /* We haven't deduced the type of this parameter yet.  Try again
12719            later.  */
12720         return 0;
12721       else
12722         return 1;
12723
12724       /* If ARG is a parameter pack or an expansion, we cannot unify
12725          against it unless PARM is also a parameter pack.  */
12726       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12727           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
12728         return 1;
12729
12730       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12731       return 0;
12732
12733     case PTRMEM_CST:
12734      {
12735         /* A pointer-to-member constant can be unified only with
12736          another constant.  */
12737       if (TREE_CODE (arg) != PTRMEM_CST)
12738         return 1;
12739
12740       /* Just unify the class member. It would be useless (and possibly
12741          wrong, depending on the strict flags) to unify also
12742          PTRMEM_CST_CLASS, because we want to be sure that both parm and
12743          arg refer to the same variable, even if through different
12744          classes. For instance:
12745
12746          struct A { int x; };
12747          struct B : A { };
12748
12749          Unification of &A::x and &B::x must succeed.  */
12750       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
12751                     PTRMEM_CST_MEMBER (arg), strict);
12752      }
12753
12754     case POINTER_TYPE:
12755       {
12756         if (TREE_CODE (arg) != POINTER_TYPE)
12757           return 1;
12758
12759         /* [temp.deduct.call]
12760
12761            A can be another pointer or pointer to member type that can
12762            be converted to the deduced A via a qualification
12763            conversion (_conv.qual_).
12764
12765            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
12766            This will allow for additional cv-qualification of the
12767            pointed-to types if appropriate.  */
12768
12769         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
12770           /* The derived-to-base conversion only persists through one
12771              level of pointers.  */
12772           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
12773
12774         return unify (tparms, targs, TREE_TYPE (parm),
12775                       TREE_TYPE (arg), strict);
12776       }
12777
12778     case REFERENCE_TYPE:
12779       if (TREE_CODE (arg) != REFERENCE_TYPE)
12780         return 1;
12781       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12782                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
12783
12784     case ARRAY_TYPE:
12785       if (TREE_CODE (arg) != ARRAY_TYPE)
12786         return 1;
12787       if ((TYPE_DOMAIN (parm) == NULL_TREE)
12788           != (TYPE_DOMAIN (arg) == NULL_TREE))
12789         return 1;
12790       if (TYPE_DOMAIN (parm) != NULL_TREE)
12791         {
12792           tree parm_max;
12793           tree arg_max;
12794           bool parm_cst;
12795           bool arg_cst;
12796
12797           /* Our representation of array types uses "N - 1" as the
12798              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
12799              not an integer constant.  We cannot unify arbitrarily
12800              complex expressions, so we eliminate the MINUS_EXPRs
12801              here.  */
12802           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
12803           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
12804           if (!parm_cst)
12805             {
12806               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
12807               parm_max = TREE_OPERAND (parm_max, 0);
12808             }
12809           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
12810           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
12811           if (!arg_cst)
12812             {
12813               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
12814                  trying to unify the type of a variable with the type
12815                  of a template parameter.  For example:
12816
12817                    template <unsigned int N>
12818                    void f (char (&) [N]);
12819                    int g(); 
12820                    void h(int i) {
12821                      char a[g(i)];
12822                      f(a); 
12823                    }
12824
12825                 Here, the type of the ARG will be "int [g(i)]", and
12826                 may be a SAVE_EXPR, etc.  */
12827               if (TREE_CODE (arg_max) != MINUS_EXPR)
12828                 return 1;
12829               arg_max = TREE_OPERAND (arg_max, 0);
12830             }
12831
12832           /* If only one of the bounds used a MINUS_EXPR, compensate
12833              by adding one to the other bound.  */
12834           if (parm_cst && !arg_cst)
12835             parm_max = fold_build2 (PLUS_EXPR,
12836                                     integer_type_node,
12837                                     parm_max,
12838                                     integer_one_node);
12839           else if (arg_cst && !parm_cst)
12840             arg_max = fold_build2 (PLUS_EXPR,
12841                                    integer_type_node,
12842                                    arg_max,
12843                                    integer_one_node);
12844
12845           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
12846             return 1;
12847         }
12848       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12849                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
12850
12851     case REAL_TYPE:
12852     case COMPLEX_TYPE:
12853     case VECTOR_TYPE:
12854     case INTEGER_TYPE:
12855     case BOOLEAN_TYPE:
12856     case ENUMERAL_TYPE:
12857     case VOID_TYPE:
12858       if (TREE_CODE (arg) != TREE_CODE (parm))
12859         return 1;
12860
12861       /* We have already checked cv-qualification at the top of the
12862          function.  */
12863       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
12864         return 1;
12865
12866       /* As far as unification is concerned, this wins.  Later checks
12867          will invalidate it if necessary.  */
12868       return 0;
12869
12870       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
12871       /* Type INTEGER_CST can come from ordinary constant template args.  */
12872     case INTEGER_CST:
12873       while (TREE_CODE (arg) == NOP_EXPR)
12874         arg = TREE_OPERAND (arg, 0);
12875
12876       if (TREE_CODE (arg) != INTEGER_CST)
12877         return 1;
12878       return !tree_int_cst_equal (parm, arg);
12879
12880     case TREE_VEC:
12881       {
12882         int i;
12883         if (TREE_CODE (arg) != TREE_VEC)
12884           return 1;
12885         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
12886           return 1;
12887         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
12888           if (unify (tparms, targs,
12889                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
12890                      UNIFY_ALLOW_NONE))
12891             return 1;
12892         return 0;
12893       }
12894
12895     case RECORD_TYPE:
12896     case UNION_TYPE:
12897       if (TREE_CODE (arg) != TREE_CODE (parm))
12898         return 1;
12899
12900       if (TYPE_PTRMEMFUNC_P (parm))
12901         {
12902           if (!TYPE_PTRMEMFUNC_P (arg))
12903             return 1;
12904
12905           return unify (tparms, targs,
12906                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
12907                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
12908                         strict);
12909         }
12910
12911       if (CLASSTYPE_TEMPLATE_INFO (parm))
12912         {
12913           tree t = NULL_TREE;
12914
12915           if (strict_in & UNIFY_ALLOW_DERIVED)
12916             {
12917               /* First, we try to unify the PARM and ARG directly.  */
12918               t = try_class_unification (tparms, targs,
12919                                          parm, arg);
12920
12921               if (!t)
12922                 {
12923                   /* Fallback to the special case allowed in
12924                      [temp.deduct.call]:
12925
12926                        If P is a class, and P has the form
12927                        template-id, then A can be a derived class of
12928                        the deduced A.  Likewise, if P is a pointer to
12929                        a class of the form template-id, A can be a
12930                        pointer to a derived class pointed to by the
12931                        deduced A.  */
12932                   t = get_template_base (tparms, targs, parm, arg);
12933
12934                   if (!t)
12935                     return 1;
12936                 }
12937             }
12938           else if (CLASSTYPE_TEMPLATE_INFO (arg)
12939                    && (CLASSTYPE_TI_TEMPLATE (parm)
12940                        == CLASSTYPE_TI_TEMPLATE (arg)))
12941             /* Perhaps PARM is something like S<U> and ARG is S<int>.
12942                Then, we should unify `int' and `U'.  */
12943             t = arg;
12944           else
12945             /* There's no chance of unification succeeding.  */
12946             return 1;
12947
12948           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
12949                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
12950         }
12951       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
12952         return 1;
12953       return 0;
12954
12955     case METHOD_TYPE:
12956     case FUNCTION_TYPE:
12957       if (TREE_CODE (arg) != TREE_CODE (parm))
12958         return 1;
12959
12960       /* CV qualifications for methods can never be deduced, they must
12961          match exactly.  We need to check them explicitly here,
12962          because type_unification_real treats them as any other
12963          cvqualified parameter.  */
12964       if (TREE_CODE (parm) == METHOD_TYPE
12965           && (!check_cv_quals_for_unify
12966               (UNIFY_ALLOW_NONE,
12967                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
12968                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
12969         return 1;
12970
12971       if (unify (tparms, targs, TREE_TYPE (parm),
12972                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
12973         return 1;
12974       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
12975                                     TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
12976                                     LOOKUP_NORMAL);
12977
12978     case OFFSET_TYPE:
12979       /* Unify a pointer to member with a pointer to member function, which
12980          deduces the type of the member as a function type. */
12981       if (TYPE_PTRMEMFUNC_P (arg))
12982         {
12983           tree method_type;
12984           tree fntype;
12985           cp_cv_quals cv_quals;
12986
12987           /* Check top-level cv qualifiers */
12988           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
12989             return 1;
12990
12991           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
12992                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
12993             return 1;
12994
12995           /* Determine the type of the function we are unifying against. */
12996           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
12997           fntype =
12998             build_function_type (TREE_TYPE (method_type),
12999                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
13000
13001           /* Extract the cv-qualifiers of the member function from the
13002              implicit object parameter and place them on the function
13003              type to be restored later. */
13004           cv_quals =
13005             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
13006           fntype = build_qualified_type (fntype, cv_quals);
13007           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
13008         }
13009
13010       if (TREE_CODE (arg) != OFFSET_TYPE)
13011         return 1;
13012       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13013                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
13014         return 1;
13015       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13016                     strict);
13017
13018     case CONST_DECL:
13019       if (DECL_TEMPLATE_PARM_P (parm))
13020         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
13021       if (arg != integral_constant_value (parm))
13022         return 1;
13023       return 0;
13024
13025     case FIELD_DECL:
13026     case TEMPLATE_DECL:
13027       /* Matched cases are handled by the ARG == PARM test above.  */
13028       return 1;
13029
13030     case TYPE_ARGUMENT_PACK:
13031     case NONTYPE_ARGUMENT_PACK:
13032       {
13033         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
13034         tree packed_args = ARGUMENT_PACK_ARGS (arg);
13035         int i, len = TREE_VEC_LENGTH (packed_parms);
13036         int argslen = TREE_VEC_LENGTH (packed_args);
13037         int parm_variadic_p = 0;
13038
13039         /* Check if the parameters end in a pack, making them variadic.  */
13040         if (len > 0 
13041             && PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, len - 1)))
13042           parm_variadic_p = 1;
13043
13044         /* If we don't have enough arguments to satisfy the parameters
13045            (not counting the pack expression at the end), or we have
13046            too many arguments for a parameter list that doesn't end in
13047            a pack expression, we can't unify.  */
13048         if (argslen < (len - parm_variadic_p)
13049             || (argslen > len && !parm_variadic_p))
13050           return 1;
13051
13052         /* Unify all of the parameters that precede the (optional)
13053            pack expression.  */
13054         for (i = 0; i < len - parm_variadic_p; ++i)
13055           {
13056             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
13057                        TREE_VEC_ELT (packed_args, i), strict))
13058               return 1;
13059           }
13060
13061         if (parm_variadic_p)
13062           return unify_pack_expansion (tparms, targs, 
13063                                        packed_parms, packed_args,
13064                                        strict, /*call_args_p=*/false,
13065                                        /*subr=*/false);
13066         return 0;
13067       }
13068
13069       break;
13070
13071     case TYPEOF_TYPE:
13072     case DECLTYPE_TYPE:
13073       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
13074          nodes.  */
13075       return 0;
13076
13077     default:
13078       gcc_assert (EXPR_P (parm));
13079
13080       /* We must be looking at an expression.  This can happen with
13081          something like:
13082
13083            template <int I>
13084            void foo(S<I>, S<I + 2>);
13085
13086          This is a "nondeduced context":
13087
13088            [deduct.type]
13089
13090            The nondeduced contexts are:
13091
13092            --A type that is a template-id in which one or more of
13093              the template-arguments is an expression that references
13094              a template-parameter.
13095
13096          In these cases, we assume deduction succeeded, but don't
13097          actually infer any unifications.  */
13098
13099       if (!uses_template_parms (parm)
13100           && !template_args_equal (parm, arg))
13101         return 1;
13102       else
13103         return 0;
13104     }
13105 }
13106 \f
13107 /* Note that DECL can be defined in this translation unit, if
13108    required.  */
13109
13110 static void
13111 mark_definable (tree decl)
13112 {
13113   tree clone;
13114   DECL_NOT_REALLY_EXTERN (decl) = 1;
13115   FOR_EACH_CLONE (clone, decl)
13116     DECL_NOT_REALLY_EXTERN (clone) = 1;
13117 }
13118
13119 /* Called if RESULT is explicitly instantiated, or is a member of an
13120    explicitly instantiated class.  */
13121
13122 void
13123 mark_decl_instantiated (tree result, int extern_p)
13124 {
13125   SET_DECL_EXPLICIT_INSTANTIATION (result);
13126
13127   /* If this entity has already been written out, it's too late to
13128      make any modifications.  */
13129   if (TREE_ASM_WRITTEN (result))
13130     return;
13131
13132   if (TREE_CODE (result) != FUNCTION_DECL)
13133     /* The TREE_PUBLIC flag for function declarations will have been
13134        set correctly by tsubst.  */
13135     TREE_PUBLIC (result) = 1;
13136
13137   /* This might have been set by an earlier implicit instantiation.  */
13138   DECL_COMDAT (result) = 0;
13139
13140   if (extern_p)
13141     DECL_NOT_REALLY_EXTERN (result) = 0;
13142   else
13143     {
13144       mark_definable (result);
13145       /* Always make artificials weak.  */
13146       if (DECL_ARTIFICIAL (result) && flag_weak)
13147         comdat_linkage (result);
13148       /* For WIN32 we also want to put explicit instantiations in
13149          linkonce sections.  */
13150       else if (TREE_PUBLIC (result))
13151         maybe_make_one_only (result);
13152     }
13153
13154   /* If EXTERN_P, then this function will not be emitted -- unless
13155      followed by an explicit instantiation, at which point its linkage
13156      will be adjusted.  If !EXTERN_P, then this function will be
13157      emitted here.  In neither circumstance do we want
13158      import_export_decl to adjust the linkage.  */
13159   DECL_INTERFACE_KNOWN (result) = 1;
13160 }
13161
13162 /* Given two function templates PAT1 and PAT2, return:
13163
13164    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
13165    -1 if PAT2 is more specialized than PAT1.
13166    0 if neither is more specialized.
13167
13168    LEN indicates the number of parameters we should consider
13169    (defaulted parameters should not be considered).
13170
13171    The 1998 std underspecified function template partial ordering, and
13172    DR214 addresses the issue.  We take pairs of arguments, one from
13173    each of the templates, and deduce them against each other.  One of
13174    the templates will be more specialized if all the *other*
13175    template's arguments deduce against its arguments and at least one
13176    of its arguments *does* *not* deduce against the other template's
13177    corresponding argument.  Deduction is done as for class templates.
13178    The arguments used in deduction have reference and top level cv
13179    qualifiers removed.  Iff both arguments were originally reference
13180    types *and* deduction succeeds in both directions, the template
13181    with the more cv-qualified argument wins for that pairing (if
13182    neither is more cv-qualified, they both are equal).  Unlike regular
13183    deduction, after all the arguments have been deduced in this way,
13184    we do *not* verify the deduced template argument values can be
13185    substituted into non-deduced contexts, nor do we have to verify
13186    that all template arguments have been deduced.  */
13187
13188 int
13189 more_specialized_fn (tree pat1, tree pat2, int len)
13190 {
13191   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
13192   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
13193   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
13194   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
13195   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
13196   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
13197   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
13198   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
13199   int better1 = 0;
13200   int better2 = 0;
13201
13202   /* Remove the this parameter from non-static member functions.  If
13203      one is a non-static member function and the other is not a static
13204      member function, remove the first parameter from that function
13205      also.  This situation occurs for operator functions where we
13206      locate both a member function (with this pointer) and non-member
13207      operator (with explicit first operand).  */
13208   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
13209     {
13210       len--; /* LEN is the number of significant arguments for DECL1 */
13211       args1 = TREE_CHAIN (args1);
13212       if (!DECL_STATIC_FUNCTION_P (decl2))
13213         args2 = TREE_CHAIN (args2);
13214     }
13215   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
13216     {
13217       args2 = TREE_CHAIN (args2);
13218       if (!DECL_STATIC_FUNCTION_P (decl1))
13219         {
13220           len--;
13221           args1 = TREE_CHAIN (args1);
13222         }
13223     }
13224
13225   /* If only one is a conversion operator, they are unordered.  */
13226   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13227     return 0;
13228
13229   /* Consider the return type for a conversion function */
13230   if (DECL_CONV_FN_P (decl1))
13231     {
13232       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13233       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13234       len++;
13235     }
13236
13237   processing_template_decl++;
13238
13239   while (len--)
13240     {
13241       tree arg1 = TREE_VALUE (args1);
13242       tree arg2 = TREE_VALUE (args2);
13243       int deduce1, deduce2;
13244       int quals1 = -1;
13245       int quals2 = -1;
13246
13247       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13248           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13249         {
13250           /* When both arguments are pack expansions, we need only
13251              unify the patterns themselves.  */
13252           arg1 = PACK_EXPANSION_PATTERN (arg1);
13253           arg2 = PACK_EXPANSION_PATTERN (arg2);
13254
13255           /* This is the last comparison we need to do.  */
13256           len = 0;
13257         }
13258
13259       if (TREE_CODE (arg1) == REFERENCE_TYPE)
13260         {
13261           arg1 = TREE_TYPE (arg1);
13262           quals1 = cp_type_quals (arg1);
13263         }
13264
13265       if (TREE_CODE (arg2) == REFERENCE_TYPE)
13266         {
13267           arg2 = TREE_TYPE (arg2);
13268           quals2 = cp_type_quals (arg2);
13269         }
13270
13271       if ((quals1 < 0) != (quals2 < 0))
13272         {
13273           /* Only of the args is a reference, see if we should apply
13274              array/function pointer decay to it.  This is not part of
13275              DR214, but is, IMHO, consistent with the deduction rules
13276              for the function call itself, and with our earlier
13277              implementation of the underspecified partial ordering
13278              rules.  (nathan).  */
13279           if (quals1 >= 0)
13280             {
13281               switch (TREE_CODE (arg1))
13282                 {
13283                 case ARRAY_TYPE:
13284                   arg1 = TREE_TYPE (arg1);
13285                   /* FALLTHROUGH. */
13286                 case FUNCTION_TYPE:
13287                   arg1 = build_pointer_type (arg1);
13288                   break;
13289
13290                 default:
13291                   break;
13292                 }
13293             }
13294           else
13295             {
13296               switch (TREE_CODE (arg2))
13297                 {
13298                 case ARRAY_TYPE:
13299                   arg2 = TREE_TYPE (arg2);
13300                   /* FALLTHROUGH. */
13301                 case FUNCTION_TYPE:
13302                   arg2 = build_pointer_type (arg2);
13303                   break;
13304
13305                 default:
13306                   break;
13307                 }
13308             }
13309         }
13310
13311       arg1 = TYPE_MAIN_VARIANT (arg1);
13312       arg2 = TYPE_MAIN_VARIANT (arg2);
13313
13314       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13315         {
13316           int i, len2 = list_length (args2);
13317           tree parmvec = make_tree_vec (1);
13318           tree argvec = make_tree_vec (len2);
13319           tree ta = args2;
13320
13321           /* Setup the parameter vector, which contains only ARG1.  */
13322           TREE_VEC_ELT (parmvec, 0) = arg1;
13323
13324           /* Setup the argument vector, which contains the remaining
13325              arguments.  */
13326           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13327             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13328
13329           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
13330                                            argvec, UNIFY_ALLOW_NONE, 
13331                                            /*call_args_p=*/false, 
13332                                            /*subr=*/0);
13333
13334           /* We cannot deduce in the other direction, because ARG1 is
13335              a pack expansion but ARG2 is not.  */
13336           deduce2 = 0;
13337         }
13338       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13339         {
13340           int i, len1 = list_length (args1);
13341           tree parmvec = make_tree_vec (1);
13342           tree argvec = make_tree_vec (len1);
13343           tree ta = args1;
13344
13345           /* Setup the parameter vector, which contains only ARG1.  */
13346           TREE_VEC_ELT (parmvec, 0) = arg2;
13347
13348           /* Setup the argument vector, which contains the remaining
13349              arguments.  */
13350           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13351             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13352
13353           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
13354                                            argvec, UNIFY_ALLOW_NONE, 
13355                                            /*call_args_p=*/false, 
13356                                            /*subr=*/0);
13357
13358           /* We cannot deduce in the other direction, because ARG2 is
13359              a pack expansion but ARG1 is not.*/
13360           deduce1 = 0;
13361         }
13362
13363       else
13364         {
13365           /* The normal case, where neither argument is a pack
13366              expansion.  */
13367           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13368           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13369         }
13370
13371       if (!deduce1)
13372         better2 = -1;
13373       if (!deduce2)
13374         better1 = -1;
13375       if (better1 < 0 && better2 < 0)
13376         /* We've failed to deduce something in either direction.
13377            These must be unordered.  */
13378         break;
13379
13380       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
13381         {
13382           /* Deduces in both directions, see if quals can
13383              disambiguate.  Pretend the worse one failed to deduce. */
13384           if ((quals1 & quals2) == quals2)
13385             deduce1 = 0;
13386           if ((quals1 & quals2) == quals1)
13387             deduce2 = 0;
13388         }
13389       if (deduce1 && !deduce2 && !better2)
13390         better2 = 1;
13391       if (deduce2 && !deduce1 && !better1)
13392         better1 = 1;
13393
13394       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13395           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13396         /* We have already processed all of the arguments in our
13397            handing of the pack expansion type.  */
13398         len = 0;
13399
13400       args1 = TREE_CHAIN (args1);
13401       args2 = TREE_CHAIN (args2);
13402     }
13403
13404   processing_template_decl--;
13405
13406   /* All things being equal, if the next argument is a pack expansion
13407      for one function but not for the other, prefer the
13408      non-variadic function.  */
13409   if ((better1 > 0) - (better2 > 0) == 0
13410       && args1 && TREE_VALUE (args1)
13411       && args2 && TREE_VALUE (args2))
13412     {
13413       if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
13414         return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
13415       else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
13416         return 1;
13417     }
13418
13419   return (better1 > 0) - (better2 > 0);
13420 }
13421
13422 /* Determine which of two partial specializations is more specialized.
13423
13424    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
13425    to the first partial specialization.  The TREE_VALUE is the
13426    innermost set of template parameters for the partial
13427    specialization.  PAT2 is similar, but for the second template.
13428
13429    Return 1 if the first partial specialization is more specialized;
13430    -1 if the second is more specialized; 0 if neither is more
13431    specialized.
13432
13433    See [temp.class.order] for information about determining which of
13434    two templates is more specialized.  */
13435
13436 static int
13437 more_specialized_class (tree pat1, tree pat2)
13438 {
13439   tree targs;
13440   tree tmpl1, tmpl2;
13441   int winner = 0;
13442   bool any_deductions = false;
13443
13444   tmpl1 = TREE_TYPE (pat1);
13445   tmpl2 = TREE_TYPE (pat2);
13446
13447   /* Just like what happens for functions, if we are ordering between
13448      different class template specializations, we may encounter dependent
13449      types in the arguments, and we need our dependency check functions
13450      to behave correctly.  */
13451   ++processing_template_decl;
13452   targs = get_class_bindings (TREE_VALUE (pat1),
13453                               CLASSTYPE_TI_ARGS (tmpl1),
13454                               CLASSTYPE_TI_ARGS (tmpl2));
13455   if (targs)
13456     {
13457       --winner;
13458       any_deductions = true;
13459     }
13460
13461   targs = get_class_bindings (TREE_VALUE (pat2),
13462                               CLASSTYPE_TI_ARGS (tmpl2),
13463                               CLASSTYPE_TI_ARGS (tmpl1));
13464   if (targs)
13465     {
13466       ++winner;
13467       any_deductions = true;
13468     }
13469   --processing_template_decl;
13470
13471   /* In the case of a tie where at least one of the class templates
13472      has a parameter pack at the end, the template with the most
13473      non-packed parameters wins.  */
13474   if (winner == 0
13475       && any_deductions
13476       && (template_args_variadic_p (TREE_PURPOSE (pat1))
13477           || template_args_variadic_p (TREE_PURPOSE (pat2))))
13478     {
13479       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
13480       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
13481       int len1 = TREE_VEC_LENGTH (args1);
13482       int len2 = TREE_VEC_LENGTH (args2);
13483
13484       /* We don't count the pack expansion at the end.  */
13485       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
13486         --len1;
13487       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
13488         --len2;
13489
13490       if (len1 > len2)
13491         return 1;
13492       else if (len1 < len2)
13493         return -1;
13494     }
13495
13496   return winner;
13497 }
13498
13499 /* Return the template arguments that will produce the function signature
13500    DECL from the function template FN, with the explicit template
13501    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
13502    also match.  Return NULL_TREE if no satisfactory arguments could be
13503    found.  */
13504
13505 static tree
13506 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
13507 {
13508   int ntparms = DECL_NTPARMS (fn);
13509   tree targs = make_tree_vec (ntparms);
13510   tree decl_type;
13511   tree decl_arg_types;
13512
13513   /* Substitute the explicit template arguments into the type of DECL.
13514      The call to fn_type_unification will handle substitution into the
13515      FN.  */
13516   decl_type = TREE_TYPE (decl);
13517   if (explicit_args && uses_template_parms (decl_type))
13518     {
13519       tree tmpl;
13520       tree converted_args;
13521
13522       if (DECL_TEMPLATE_INFO (decl))
13523         tmpl = DECL_TI_TEMPLATE (decl);
13524       else
13525         /* We can get here for some invalid specializations.  */
13526         return NULL_TREE;
13527
13528       converted_args
13529         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
13530                                  explicit_args, NULL_TREE,
13531                                  tf_none,
13532                                  /*require_all_args=*/false,
13533                                  /*use_default_args=*/false);
13534       if (converted_args == error_mark_node)
13535         return NULL_TREE;
13536
13537       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
13538       if (decl_type == error_mark_node)
13539         return NULL_TREE;
13540     }
13541
13542   /* Never do unification on the 'this' parameter.  */
13543   decl_arg_types = skip_artificial_parms_for (decl, 
13544                                               TYPE_ARG_TYPES (decl_type));
13545
13546   if (fn_type_unification (fn, explicit_args, targs,
13547                            decl_arg_types,
13548                            (check_rettype || DECL_CONV_FN_P (fn)
13549                             ? TREE_TYPE (decl_type) : NULL_TREE),
13550                            DEDUCE_EXACT, LOOKUP_NORMAL))
13551     return NULL_TREE;
13552
13553   return targs;
13554 }
13555
13556 /* Return the innermost template arguments that, when applied to a
13557    template specialization whose innermost template parameters are
13558    TPARMS, and whose specialization arguments are PARMS, yield the
13559    ARGS.
13560
13561    For example, suppose we have:
13562
13563      template <class T, class U> struct S {};
13564      template <class T> struct S<T*, int> {};
13565
13566    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
13567    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
13568    int}.  The resulting vector will be {double}, indicating that `T'
13569    is bound to `double'.  */
13570
13571 static tree
13572 get_class_bindings (tree tparms, tree spec_args, tree args)
13573 {
13574   int i, ntparms = TREE_VEC_LENGTH (tparms);
13575   tree deduced_args;
13576   tree innermost_deduced_args;
13577
13578   innermost_deduced_args = make_tree_vec (ntparms);
13579   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13580     {
13581       deduced_args = copy_node (args);
13582       SET_TMPL_ARGS_LEVEL (deduced_args,
13583                            TMPL_ARGS_DEPTH (deduced_args),
13584                            innermost_deduced_args);
13585     }
13586   else
13587     deduced_args = innermost_deduced_args;
13588
13589   if (unify (tparms, deduced_args,
13590              INNERMOST_TEMPLATE_ARGS (spec_args),
13591              INNERMOST_TEMPLATE_ARGS (args),
13592              UNIFY_ALLOW_NONE))
13593     return NULL_TREE;
13594
13595   for (i =  0; i < ntparms; ++i)
13596     if (! TREE_VEC_ELT (innermost_deduced_args, i))
13597       return NULL_TREE;
13598
13599   /* Verify that nondeduced template arguments agree with the type
13600      obtained from argument deduction.
13601
13602      For example:
13603
13604        struct A { typedef int X; };
13605        template <class T, class U> struct C {};
13606        template <class T> struct C<T, typename T::X> {};
13607
13608      Then with the instantiation `C<A, int>', we can deduce that
13609      `T' is `A' but unify () does not check whether `typename T::X'
13610      is `int'.  */
13611   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
13612   if (spec_args == error_mark_node
13613       /* We only need to check the innermost arguments; the other
13614          arguments will always agree.  */
13615       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
13616                               INNERMOST_TEMPLATE_ARGS (args)))
13617     return NULL_TREE;
13618
13619   return deduced_args;
13620 }
13621
13622 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
13623    Return the TREE_LIST node with the most specialized template, if
13624    any.  If there is no most specialized template, the error_mark_node
13625    is returned.
13626
13627    Note that this function does not look at, or modify, the
13628    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
13629    returned is one of the elements of INSTANTIATIONS, callers may
13630    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
13631    and retrieve it from the value returned.  */
13632
13633 tree
13634 most_specialized_instantiation (tree templates)
13635 {
13636   tree fn, champ;
13637
13638   ++processing_template_decl;
13639
13640   champ = templates;
13641   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
13642     {
13643       int fate = 0;
13644
13645       if (get_bindings (TREE_VALUE (champ),
13646                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13647                         NULL_TREE, /*check_ret=*/false))
13648         fate--;
13649
13650       if (get_bindings (TREE_VALUE (fn),
13651                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13652                         NULL_TREE, /*check_ret=*/false))
13653         fate++;
13654
13655       if (fate == -1)
13656         champ = fn;
13657       else if (!fate)
13658         {
13659           /* Equally specialized, move to next function.  If there
13660              is no next function, nothing's most specialized.  */
13661           fn = TREE_CHAIN (fn);
13662           champ = fn;
13663           if (!fn)
13664             break;
13665         }
13666     }
13667
13668   if (champ)
13669     /* Now verify that champ is better than everything earlier in the
13670        instantiation list.  */
13671     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
13672       if (get_bindings (TREE_VALUE (champ),
13673                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13674                         NULL_TREE, /*check_ret=*/false)
13675           || !get_bindings (TREE_VALUE (fn),
13676                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13677                             NULL_TREE, /*check_ret=*/false))
13678         {
13679           champ = NULL_TREE;
13680           break;
13681         }
13682
13683   processing_template_decl--;
13684
13685   if (!champ)
13686     return error_mark_node;
13687
13688   return champ;
13689 }
13690
13691 /* If DECL is a specialization of some template, return the most
13692    general such template.  Otherwise, returns NULL_TREE.
13693
13694    For example, given:
13695
13696      template <class T> struct S { template <class U> void f(U); };
13697
13698    if TMPL is `template <class U> void S<int>::f(U)' this will return
13699    the full template.  This function will not trace past partial
13700    specializations, however.  For example, given in addition:
13701
13702      template <class T> struct S<T*> { template <class U> void f(U); };
13703
13704    if TMPL is `template <class U> void S<int*>::f(U)' this will return
13705    `template <class T> template <class U> S<T*>::f(U)'.  */
13706
13707 tree
13708 most_general_template (tree decl)
13709 {
13710   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
13711      an immediate specialization.  */
13712   if (TREE_CODE (decl) == FUNCTION_DECL)
13713     {
13714       if (DECL_TEMPLATE_INFO (decl)) {
13715         decl = DECL_TI_TEMPLATE (decl);
13716
13717         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
13718            template friend.  */
13719         if (TREE_CODE (decl) != TEMPLATE_DECL)
13720           return NULL_TREE;
13721       } else
13722         return NULL_TREE;
13723     }
13724
13725   /* Look for more and more general templates.  */
13726   while (DECL_TEMPLATE_INFO (decl))
13727     {
13728       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
13729          (See cp-tree.h for details.)  */
13730       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
13731         break;
13732
13733       if (CLASS_TYPE_P (TREE_TYPE (decl))
13734           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
13735         break;
13736
13737       /* Stop if we run into an explicitly specialized class template.  */
13738       if (!DECL_NAMESPACE_SCOPE_P (decl)
13739           && DECL_CONTEXT (decl)
13740           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
13741         break;
13742
13743       decl = DECL_TI_TEMPLATE (decl);
13744     }
13745
13746   return decl;
13747 }
13748
13749 /* Return the most specialized of the class template partial
13750    specializations of TMPL which can produce TYPE, a specialization of
13751    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
13752    a _TYPE node corresponding to the partial specialization, while the
13753    TREE_PURPOSE is the set of template arguments that must be
13754    substituted into the TREE_TYPE in order to generate TYPE.
13755
13756    If the choice of partial specialization is ambiguous, a diagnostic
13757    is issued, and the error_mark_node is returned.  If there are no
13758    partial specializations of TMPL matching TYPE, then NULL_TREE is
13759    returned.  */
13760
13761 static tree
13762 most_specialized_class (tree type, tree tmpl)
13763 {
13764   tree list = NULL_TREE;
13765   tree t;
13766   tree champ;
13767   int fate;
13768   bool ambiguous_p;
13769   tree args;
13770   tree outer_args = NULL_TREE;
13771
13772   tmpl = most_general_template (tmpl);
13773   args = CLASSTYPE_TI_ARGS (type);
13774
13775   /* For determining which partial specialization to use, only the
13776      innermost args are interesting.  */
13777   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13778     {
13779       outer_args = strip_innermost_template_args (args, 1);
13780       args = INNERMOST_TEMPLATE_ARGS (args);
13781     }
13782
13783   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
13784     {
13785       tree partial_spec_args;
13786       tree spec_args;
13787       tree parms = TREE_VALUE (t);
13788
13789       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
13790       if (outer_args)
13791         {
13792           int i;
13793
13794           ++processing_template_decl;
13795
13796           /* Discard the outer levels of args, and then substitute in the
13797              template args from the enclosing class.  */
13798           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
13799           partial_spec_args = tsubst_template_args
13800             (partial_spec_args, outer_args, tf_none, NULL_TREE);
13801
13802           /* PARMS already refers to just the innermost parms, but the
13803              template parms in partial_spec_args had their levels lowered
13804              by tsubst, so we need to do the same for the parm list.  We
13805              can't just tsubst the TREE_VEC itself, as tsubst wants to
13806              treat a TREE_VEC as an argument vector.  */
13807           parms = copy_node (parms);
13808           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
13809             TREE_VEC_ELT (parms, i) =
13810               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
13811
13812           --processing_template_decl;
13813         }
13814       spec_args = get_class_bindings (parms,
13815                                       partial_spec_args,
13816                                       args);
13817       if (spec_args)
13818         {
13819           if (outer_args)
13820             spec_args = add_to_template_args (outer_args, spec_args);
13821           list = tree_cons (spec_args, TREE_VALUE (t), list);
13822           TREE_TYPE (list) = TREE_TYPE (t);
13823         }
13824     }
13825
13826   if (! list)
13827     return NULL_TREE;
13828
13829   ambiguous_p = false;
13830   t = list;
13831   champ = t;
13832   t = TREE_CHAIN (t);
13833   for (; t; t = TREE_CHAIN (t))
13834     {
13835       fate = more_specialized_class (champ, t);
13836       if (fate == 1)
13837         ;
13838       else
13839         {
13840           if (fate == 0)
13841             {
13842               t = TREE_CHAIN (t);
13843               if (! t)
13844                 {
13845                   ambiguous_p = true;
13846                   break;
13847                 }
13848             }
13849           champ = t;
13850         }
13851     }
13852
13853   if (!ambiguous_p)
13854     for (t = list; t && t != champ; t = TREE_CHAIN (t))
13855       {
13856         fate = more_specialized_class (champ, t);
13857         if (fate != 1)
13858           {
13859             ambiguous_p = true;
13860             break;
13861           }
13862       }
13863
13864   if (ambiguous_p)
13865     {
13866       const char *str = "candidates are:";
13867       error ("ambiguous class template instantiation for %q#T", type);
13868       for (t = list; t; t = TREE_CHAIN (t))
13869         {
13870           error ("%s %+#T", str, TREE_TYPE (t));
13871           str = "               ";
13872         }
13873       return error_mark_node;
13874     }
13875
13876   return champ;
13877 }
13878
13879 /* Explicitly instantiate DECL.  */
13880
13881 void
13882 do_decl_instantiation (tree decl, tree storage)
13883 {
13884   tree result = NULL_TREE;
13885   int extern_p = 0;
13886
13887   if (!decl || decl == error_mark_node)
13888     /* An error occurred, for which grokdeclarator has already issued
13889        an appropriate message.  */
13890     return;
13891   else if (! DECL_LANG_SPECIFIC (decl))
13892     {
13893       error ("explicit instantiation of non-template %q#D", decl);
13894       return;
13895     }
13896   else if (TREE_CODE (decl) == VAR_DECL)
13897     {
13898       /* There is an asymmetry here in the way VAR_DECLs and
13899          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
13900          the latter, the DECL we get back will be marked as a
13901          template instantiation, and the appropriate
13902          DECL_TEMPLATE_INFO will be set up.  This does not happen for
13903          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
13904          should handle VAR_DECLs as it currently handles
13905          FUNCTION_DECLs.  */
13906       if (!DECL_CLASS_SCOPE_P (decl))
13907         {
13908           error ("%qD is not a static data member of a class template", decl);
13909           return;
13910         }
13911       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
13912       if (!result || TREE_CODE (result) != VAR_DECL)
13913         {
13914           error ("no matching template for %qD found", decl);
13915           return;
13916         }
13917       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
13918         {
13919           error ("type %qT for explicit instantiation %qD does not match "
13920                  "declared type %qT", TREE_TYPE (result), decl,
13921                  TREE_TYPE (decl));
13922           return;
13923         }
13924     }
13925   else if (TREE_CODE (decl) != FUNCTION_DECL)
13926     {
13927       error ("explicit instantiation of %q#D", decl);
13928       return;
13929     }
13930   else
13931     result = decl;
13932
13933   /* Check for various error cases.  Note that if the explicit
13934      instantiation is valid the RESULT will currently be marked as an
13935      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
13936      until we get here.  */
13937
13938   if (DECL_TEMPLATE_SPECIALIZATION (result))
13939     {
13940       /* DR 259 [temp.spec].
13941
13942          Both an explicit instantiation and a declaration of an explicit
13943          specialization shall not appear in a program unless the explicit
13944          instantiation follows a declaration of the explicit specialization.
13945
13946          For a given set of template parameters, if an explicit
13947          instantiation of a template appears after a declaration of an
13948          explicit specialization for that template, the explicit
13949          instantiation has no effect.  */
13950       return;
13951     }
13952   else if (DECL_EXPLICIT_INSTANTIATION (result))
13953     {
13954       /* [temp.spec]
13955
13956          No program shall explicitly instantiate any template more
13957          than once.
13958
13959          We check DECL_NOT_REALLY_EXTERN so as not to complain when
13960          the first instantiation was `extern' and the second is not,
13961          and EXTERN_P for the opposite case.  */
13962       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
13963         pedwarn ("duplicate explicit instantiation of %q#D", result);
13964       /* If an "extern" explicit instantiation follows an ordinary
13965          explicit instantiation, the template is instantiated.  */
13966       if (extern_p)
13967         return;
13968     }
13969   else if (!DECL_IMPLICIT_INSTANTIATION (result))
13970     {
13971       error ("no matching template for %qD found", result);
13972       return;
13973     }
13974   else if (!DECL_TEMPLATE_INFO (result))
13975     {
13976       pedwarn ("explicit instantiation of non-template %q#D", result);
13977       return;
13978     }
13979
13980   if (storage == NULL_TREE)
13981     ;
13982   else if (storage == ridpointers[(int) RID_EXTERN])
13983     {
13984       if (pedantic && !in_system_header)
13985         pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
13986                  "instantiations");
13987       extern_p = 1;
13988     }
13989   else
13990     error ("storage class %qD applied to template instantiation", storage);
13991
13992   check_explicit_instantiation_namespace (result);
13993   mark_decl_instantiated (result, extern_p);
13994   if (! extern_p)
13995     instantiate_decl (result, /*defer_ok=*/1,
13996                       /*expl_inst_class_mem_p=*/false);
13997 }
13998
13999 static void
14000 mark_class_instantiated (tree t, int extern_p)
14001 {
14002   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
14003   SET_CLASSTYPE_INTERFACE_KNOWN (t);
14004   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
14005   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
14006   if (! extern_p)
14007     {
14008       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
14009       rest_of_type_compilation (t, 1);
14010     }
14011 }
14012
14013 /* Called from do_type_instantiation through binding_table_foreach to
14014    do recursive instantiation for the type bound in ENTRY.  */
14015 static void
14016 bt_instantiate_type_proc (binding_entry entry, void *data)
14017 {
14018   tree storage = *(tree *) data;
14019
14020   if (IS_AGGR_TYPE (entry->type)
14021       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
14022     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
14023 }
14024
14025 /* Called from do_type_instantiation to instantiate a member
14026    (a member function or a static member variable) of an
14027    explicitly instantiated class template.  */
14028 static void
14029 instantiate_class_member (tree decl, int extern_p)
14030 {
14031   mark_decl_instantiated (decl, extern_p);
14032   if (! extern_p)
14033     instantiate_decl (decl, /*defer_ok=*/1,
14034                       /*expl_inst_class_mem_p=*/true);
14035 }
14036
14037 /* Perform an explicit instantiation of template class T.  STORAGE, if
14038    non-null, is the RID for extern, inline or static.  COMPLAIN is
14039    nonzero if this is called from the parser, zero if called recursively,
14040    since the standard is unclear (as detailed below).  */
14041
14042 void
14043 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
14044 {
14045   int extern_p = 0;
14046   int nomem_p = 0;
14047   int static_p = 0;
14048   int previous_instantiation_extern_p = 0;
14049
14050   if (TREE_CODE (t) == TYPE_DECL)
14051     t = TREE_TYPE (t);
14052
14053   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
14054     {
14055       error ("explicit instantiation of non-template type %qT", t);
14056       return;
14057     }
14058
14059   complete_type (t);
14060
14061   if (!COMPLETE_TYPE_P (t))
14062     {
14063       if (complain & tf_error)
14064         error ("explicit instantiation of %q#T before definition of template",
14065                t);
14066       return;
14067     }
14068
14069   if (storage != NULL_TREE)
14070     {
14071       if (pedantic && !in_system_header)
14072         pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
14073                 storage);
14074
14075       if (storage == ridpointers[(int) RID_INLINE])
14076         nomem_p = 1;
14077       else if (storage == ridpointers[(int) RID_EXTERN])
14078         extern_p = 1;
14079       else if (storage == ridpointers[(int) RID_STATIC])
14080         static_p = 1;
14081       else
14082         {
14083           error ("storage class %qD applied to template instantiation",
14084                  storage);
14085           extern_p = 0;
14086         }
14087     }
14088
14089   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
14090     {
14091       /* DR 259 [temp.spec].
14092
14093          Both an explicit instantiation and a declaration of an explicit
14094          specialization shall not appear in a program unless the explicit
14095          instantiation follows a declaration of the explicit specialization.
14096
14097          For a given set of template parameters, if an explicit
14098          instantiation of a template appears after a declaration of an
14099          explicit specialization for that template, the explicit
14100          instantiation has no effect.  */
14101       return;
14102     }
14103   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
14104     {
14105       /* [temp.spec]
14106
14107          No program shall explicitly instantiate any template more
14108          than once.
14109
14110          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
14111          instantiation was `extern'.  If EXTERN_P then the second is.
14112          These cases are OK.  */
14113       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
14114
14115       if (!previous_instantiation_extern_p && !extern_p
14116           && (complain & tf_error))
14117         pedwarn ("duplicate explicit instantiation of %q#T", t);
14118
14119       /* If we've already instantiated the template, just return now.  */
14120       if (!CLASSTYPE_INTERFACE_ONLY (t))
14121         return;
14122     }
14123
14124   check_explicit_instantiation_namespace (TYPE_NAME (t));
14125   mark_class_instantiated (t, extern_p);
14126
14127   if (nomem_p)
14128     return;
14129
14130   {
14131     tree tmp;
14132
14133     /* In contrast to implicit instantiation, where only the
14134        declarations, and not the definitions, of members are
14135        instantiated, we have here:
14136
14137          [temp.explicit]
14138
14139          The explicit instantiation of a class template specialization
14140          implies the instantiation of all of its members not
14141          previously explicitly specialized in the translation unit
14142          containing the explicit instantiation.
14143
14144        Of course, we can't instantiate member template classes, since
14145        we don't have any arguments for them.  Note that the standard
14146        is unclear on whether the instantiation of the members are
14147        *explicit* instantiations or not.  However, the most natural
14148        interpretation is that it should be an explicit instantiation.  */
14149
14150     if (! static_p)
14151       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
14152         if (TREE_CODE (tmp) == FUNCTION_DECL
14153             && DECL_TEMPLATE_INSTANTIATION (tmp))
14154           instantiate_class_member (tmp, extern_p);
14155
14156     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
14157       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
14158         instantiate_class_member (tmp, extern_p);
14159
14160     if (CLASSTYPE_NESTED_UTDS (t))
14161       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
14162                              bt_instantiate_type_proc, &storage);
14163   }
14164 }
14165
14166 /* Given a function DECL, which is a specialization of TMPL, modify
14167    DECL to be a re-instantiation of TMPL with the same template
14168    arguments.  TMPL should be the template into which tsubst'ing
14169    should occur for DECL, not the most general template.
14170
14171    One reason for doing this is a scenario like this:
14172
14173      template <class T>
14174      void f(const T&, int i);
14175
14176      void g() { f(3, 7); }
14177
14178      template <class T>
14179      void f(const T& t, const int i) { }
14180
14181    Note that when the template is first instantiated, with
14182    instantiate_template, the resulting DECL will have no name for the
14183    first parameter, and the wrong type for the second.  So, when we go
14184    to instantiate the DECL, we regenerate it.  */
14185
14186 static void
14187 regenerate_decl_from_template (tree decl, tree tmpl)
14188 {
14189   /* The arguments used to instantiate DECL, from the most general
14190      template.  */
14191   tree args;
14192   tree code_pattern;
14193
14194   args = DECL_TI_ARGS (decl);
14195   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
14196
14197   /* Make sure that we can see identifiers, and compute access
14198      correctly.  */
14199   push_access_scope (decl);
14200
14201   if (TREE_CODE (decl) == FUNCTION_DECL)
14202     {
14203       tree decl_parm;
14204       tree pattern_parm;
14205       tree specs;
14206       int args_depth;
14207       int parms_depth;
14208
14209       args_depth = TMPL_ARGS_DEPTH (args);
14210       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
14211       if (args_depth > parms_depth)
14212         args = get_innermost_template_args (args, parms_depth);
14213
14214       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
14215                                               args, tf_error, NULL_TREE);
14216       if (specs)
14217         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
14218                                                     specs);
14219
14220       /* Merge parameter declarations.  */
14221       decl_parm = skip_artificial_parms_for (decl,
14222                                              DECL_ARGUMENTS (decl));
14223       pattern_parm
14224         = skip_artificial_parms_for (code_pattern,
14225                                      DECL_ARGUMENTS (code_pattern));
14226       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
14227         {
14228           tree parm_type;
14229           tree attributes;
14230           
14231           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14232             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
14233           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
14234                               NULL_TREE);
14235           parm_type = type_decays_to (parm_type);
14236           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14237             TREE_TYPE (decl_parm) = parm_type;
14238           attributes = DECL_ATTRIBUTES (pattern_parm);
14239           if (DECL_ATTRIBUTES (decl_parm) != attributes)
14240             {
14241               DECL_ATTRIBUTES (decl_parm) = attributes;
14242               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14243             }
14244           decl_parm = TREE_CHAIN (decl_parm);
14245           pattern_parm = TREE_CHAIN (pattern_parm);
14246         }
14247       /* Merge any parameters that match with the function parameter
14248          pack.  */
14249       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
14250         {
14251           int i, len;
14252           tree expanded_types;
14253           /* Expand the TYPE_PACK_EXPANSION that provides the types for
14254              the parameters in this function parameter pack.  */
14255           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
14256                                                  args, tf_error, NULL_TREE);
14257           len = TREE_VEC_LENGTH (expanded_types);
14258           for (i = 0; i < len; i++)
14259             {
14260               tree parm_type;
14261               tree attributes;
14262           
14263               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14264                 /* Rename the parameter to include the index.  */
14265                 DECL_NAME (decl_parm) = 
14266                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
14267               parm_type = TREE_VEC_ELT (expanded_types, i);
14268               parm_type = type_decays_to (parm_type);
14269               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14270                 TREE_TYPE (decl_parm) = parm_type;
14271               attributes = DECL_ATTRIBUTES (pattern_parm);
14272               if (DECL_ATTRIBUTES (decl_parm) != attributes)
14273                 {
14274                   DECL_ATTRIBUTES (decl_parm) = attributes;
14275                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14276                 }
14277               decl_parm = TREE_CHAIN (decl_parm);
14278             }
14279         }
14280       /* Merge additional specifiers from the CODE_PATTERN.  */
14281       if (DECL_DECLARED_INLINE_P (code_pattern)
14282           && !DECL_DECLARED_INLINE_P (decl))
14283         DECL_DECLARED_INLINE_P (decl) = 1;
14284       if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
14285         DECL_INLINE (decl) = 1;
14286     }
14287   else if (TREE_CODE (decl) == VAR_DECL)
14288     DECL_INITIAL (decl) =
14289       tsubst_expr (DECL_INITIAL (code_pattern), args,
14290                    tf_error, DECL_TI_TEMPLATE (decl),
14291                    /*integral_constant_expression_p=*/false);
14292   else
14293     gcc_unreachable ();
14294
14295   pop_access_scope (decl);
14296 }
14297
14298 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14299    substituted to get DECL.  */
14300
14301 tree
14302 template_for_substitution (tree decl)
14303 {
14304   tree tmpl = DECL_TI_TEMPLATE (decl);
14305
14306   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14307      for the instantiation.  This is not always the most general
14308      template.  Consider, for example:
14309
14310         template <class T>
14311         struct S { template <class U> void f();
14312                    template <> void f<int>(); };
14313
14314      and an instantiation of S<double>::f<int>.  We want TD to be the
14315      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
14316   while (/* An instantiation cannot have a definition, so we need a
14317             more general template.  */
14318          DECL_TEMPLATE_INSTANTIATION (tmpl)
14319            /* We must also deal with friend templates.  Given:
14320
14321                 template <class T> struct S {
14322                   template <class U> friend void f() {};
14323                 };
14324
14325               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14326               so far as the language is concerned, but that's still
14327               where we get the pattern for the instantiation from.  On
14328               other hand, if the definition comes outside the class, say:
14329
14330                 template <class T> struct S {
14331                   template <class U> friend void f();
14332                 };
14333                 template <class U> friend void f() {}
14334
14335               we don't need to look any further.  That's what the check for
14336               DECL_INITIAL is for.  */
14337           || (TREE_CODE (decl) == FUNCTION_DECL
14338               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14339               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14340     {
14341       /* The present template, TD, should not be a definition.  If it
14342          were a definition, we should be using it!  Note that we
14343          cannot restructure the loop to just keep going until we find
14344          a template with a definition, since that might go too far if
14345          a specialization was declared, but not defined.  */
14346       gcc_assert (TREE_CODE (decl) != VAR_DECL
14347                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14348
14349       /* Fetch the more general template.  */
14350       tmpl = DECL_TI_TEMPLATE (tmpl);
14351     }
14352
14353   return tmpl;
14354 }
14355
14356 /* Produce the definition of D, a _DECL generated from a template.  If
14357    DEFER_OK is nonzero, then we don't have to actually do the
14358    instantiation now; we just have to do it sometime.  Normally it is
14359    an error if this is an explicit instantiation but D is undefined.
14360    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14361    explicitly instantiated class template.  */
14362
14363 tree
14364 instantiate_decl (tree d, int defer_ok,
14365                   bool expl_inst_class_mem_p)
14366 {
14367   tree tmpl = DECL_TI_TEMPLATE (d);
14368   tree gen_args;
14369   tree args;
14370   tree td;
14371   tree code_pattern;
14372   tree spec;
14373   tree gen_tmpl;
14374   bool pattern_defined;
14375   int need_push;
14376   location_t saved_loc = input_location;
14377   int saved_in_system_header = in_system_header;
14378   bool external_p;
14379
14380   /* This function should only be used to instantiate templates for
14381      functions and static member variables.  */
14382   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
14383               || TREE_CODE (d) == VAR_DECL);
14384
14385   /* Variables are never deferred; if instantiation is required, they
14386      are instantiated right away.  That allows for better code in the
14387      case that an expression refers to the value of the variable --
14388      if the variable has a constant value the referring expression can
14389      take advantage of that fact.  */
14390   if (TREE_CODE (d) == VAR_DECL)
14391     defer_ok = 0;
14392
14393   /* Don't instantiate cloned functions.  Instead, instantiate the
14394      functions they cloned.  */
14395   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
14396     d = DECL_CLONED_FUNCTION (d);
14397
14398   if (DECL_TEMPLATE_INSTANTIATED (d))
14399     /* D has already been instantiated.  It might seem reasonable to
14400        check whether or not D is an explicit instantiation, and, if so,
14401        stop here.  But when an explicit instantiation is deferred
14402        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
14403        is set, even though we still need to do the instantiation.  */
14404     return d;
14405
14406   /* If we already have a specialization of this declaration, then
14407      there's no reason to instantiate it.  Note that
14408      retrieve_specialization gives us both instantiations and
14409      specializations, so we must explicitly check
14410      DECL_TEMPLATE_SPECIALIZATION.  */
14411   gen_tmpl = most_general_template (tmpl);
14412   gen_args = DECL_TI_ARGS (d);
14413   spec = retrieve_specialization (gen_tmpl, gen_args,
14414                                   /*class_specializations_p=*/false);
14415   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
14416     return spec;
14417
14418   /* This needs to happen before any tsubsting.  */
14419   if (! push_tinst_level (d))
14420     return d;
14421
14422   timevar_push (TV_PARSE);
14423
14424   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
14425      for the instantiation.  */
14426   td = template_for_substitution (d);
14427   code_pattern = DECL_TEMPLATE_RESULT (td);
14428
14429   /* We should never be trying to instantiate a member of a class
14430      template or partial specialization.  */
14431   gcc_assert (d != code_pattern);
14432
14433   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
14434       || DECL_TEMPLATE_SPECIALIZATION (td))
14435     /* In the case of a friend template whose definition is provided
14436        outside the class, we may have too many arguments.  Drop the
14437        ones we don't need.  The same is true for specializations.  */
14438     args = get_innermost_template_args
14439       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
14440   else
14441     args = gen_args;
14442
14443   if (TREE_CODE (d) == FUNCTION_DECL)
14444     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
14445   else
14446     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
14447
14448   /* We may be in the middle of deferred access check.  Disable it now.  */
14449   push_deferring_access_checks (dk_no_deferred);
14450
14451   /* Unless an explicit instantiation directive has already determined
14452      the linkage of D, remember that a definition is available for
14453      this entity.  */
14454   if (pattern_defined
14455       && !DECL_INTERFACE_KNOWN (d)
14456       && !DECL_NOT_REALLY_EXTERN (d))
14457     mark_definable (d);
14458
14459   input_location = DECL_SOURCE_LOCATION (d);
14460   in_system_header = DECL_IN_SYSTEM_HEADER (d);
14461
14462   /* If D is a member of an explicitly instantiated class template,
14463      and no definition is available, treat it like an implicit
14464      instantiation.  */
14465   if (!pattern_defined && expl_inst_class_mem_p
14466       && DECL_EXPLICIT_INSTANTIATION (d))
14467     {
14468       DECL_NOT_REALLY_EXTERN (d) = 0;
14469       DECL_INTERFACE_KNOWN (d) = 0;
14470       SET_DECL_IMPLICIT_INSTANTIATION (d);
14471     }
14472
14473   if (!defer_ok)
14474     {
14475       /* Recheck the substitutions to obtain any warning messages
14476          about ignoring cv qualifiers.  */
14477       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
14478       tree type = TREE_TYPE (gen);
14479
14480       /* Make sure that we can see identifiers, and compute access
14481          correctly.  D is already the target FUNCTION_DECL with the
14482          right context.  */
14483       push_access_scope (d);
14484
14485       if (TREE_CODE (gen) == FUNCTION_DECL)
14486         {
14487           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
14488           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
14489                                           d);
14490           /* Don't simply tsubst the function type, as that will give
14491              duplicate warnings about poor parameter qualifications.
14492              The function arguments are the same as the decl_arguments
14493              without the top level cv qualifiers.  */
14494           type = TREE_TYPE (type);
14495         }
14496       tsubst (type, gen_args, tf_warning_or_error, d);
14497
14498       pop_access_scope (d);
14499     }
14500
14501   /* Check to see whether we know that this template will be
14502      instantiated in some other file, as with "extern template"
14503      extension.  */
14504   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
14505   /* In general, we do not instantiate such templates...  */
14506   if (external_p
14507       /* ... but we instantiate inline functions so that we can inline
14508          them and ... */
14509       && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
14510       /* ... we instantiate static data members whose values are
14511          needed in integral constant expressions.  */
14512       && ! (TREE_CODE (d) == VAR_DECL
14513             && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
14514     goto out;
14515   /* Defer all other templates, unless we have been explicitly
14516      forbidden from doing so.  */
14517   if (/* If there is no definition, we cannot instantiate the
14518          template.  */
14519       ! pattern_defined
14520       /* If it's OK to postpone instantiation, do so.  */
14521       || defer_ok
14522       /* If this is a static data member that will be defined
14523          elsewhere, we don't want to instantiate the entire data
14524          member, but we do want to instantiate the initializer so that
14525          we can substitute that elsewhere.  */
14526       || (external_p && TREE_CODE (d) == VAR_DECL))
14527     {
14528       /* The definition of the static data member is now required so
14529          we must substitute the initializer.  */
14530       if (TREE_CODE (d) == VAR_DECL
14531           && !DECL_INITIAL (d)
14532           && DECL_INITIAL (code_pattern))
14533         {
14534           tree ns;
14535           tree init;
14536
14537           ns = decl_namespace_context (d);
14538           push_nested_namespace (ns);
14539           push_nested_class (DECL_CONTEXT (d));
14540           init = tsubst_expr (DECL_INITIAL (code_pattern),
14541                               args,
14542                               tf_warning_or_error, NULL_TREE,
14543                               /*integral_constant_expression_p=*/false);
14544           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
14545                           /*asmspec_tree=*/NULL_TREE,
14546                           LOOKUP_ONLYCONVERTING);
14547           pop_nested_class ();
14548           pop_nested_namespace (ns);
14549         }
14550
14551       /* We restore the source position here because it's used by
14552          add_pending_template.  */
14553       input_location = saved_loc;
14554
14555       if (at_eof && !pattern_defined
14556           && DECL_EXPLICIT_INSTANTIATION (d))
14557         /* [temp.explicit]
14558
14559            The definition of a non-exported function template, a
14560            non-exported member function template, or a non-exported
14561            member function or static data member of a class template
14562            shall be present in every translation unit in which it is
14563            explicitly instantiated.  */
14564         pedwarn
14565           ("explicit instantiation of %qD but no definition available", d);
14566
14567       /* ??? Historically, we have instantiated inline functions, even
14568          when marked as "extern template".  */
14569       if (!(external_p && TREE_CODE (d) == VAR_DECL))
14570         add_pending_template (d);
14571       goto out;
14572     }
14573   /* Tell the repository that D is available in this translation unit
14574      -- and see if it is supposed to be instantiated here.  */
14575   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
14576     {
14577       /* In a PCH file, despite the fact that the repository hasn't
14578          requested instantiation in the PCH it is still possible that
14579          an instantiation will be required in a file that includes the
14580          PCH.  */
14581       if (pch_file)
14582         add_pending_template (d);
14583       /* Instantiate inline functions so that the inliner can do its
14584          job, even though we'll not be emitting a copy of this
14585          function.  */
14586       if (!(TREE_CODE (d) == FUNCTION_DECL
14587             && flag_inline_trees
14588             && DECL_DECLARED_INLINE_P (d)))
14589         goto out;
14590     }
14591
14592   need_push = !cfun || !global_bindings_p ();
14593   if (need_push)
14594     push_to_top_level ();
14595
14596   /* Mark D as instantiated so that recursive calls to
14597      instantiate_decl do not try to instantiate it again.  */
14598   DECL_TEMPLATE_INSTANTIATED (d) = 1;
14599
14600   /* Regenerate the declaration in case the template has been modified
14601      by a subsequent redeclaration.  */
14602   regenerate_decl_from_template (d, td);
14603
14604   /* We already set the file and line above.  Reset them now in case
14605      they changed as a result of calling regenerate_decl_from_template.  */
14606   input_location = DECL_SOURCE_LOCATION (d);
14607
14608   if (TREE_CODE (d) == VAR_DECL)
14609     {
14610       tree init;
14611
14612       /* Clear out DECL_RTL; whatever was there before may not be right
14613          since we've reset the type of the declaration.  */
14614       SET_DECL_RTL (d, NULL_RTX);
14615       DECL_IN_AGGR_P (d) = 0;
14616
14617       /* The initializer is placed in DECL_INITIAL by
14618          regenerate_decl_from_template.  Pull it out so that
14619          finish_decl can process it.  */
14620       init = DECL_INITIAL (d);
14621       DECL_INITIAL (d) = NULL_TREE;
14622       DECL_INITIALIZED_P (d) = 0;
14623
14624       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
14625          initializer.  That function will defer actual emission until
14626          we have a chance to determine linkage.  */
14627       DECL_EXTERNAL (d) = 0;
14628
14629       /* Enter the scope of D so that access-checking works correctly.  */
14630       push_nested_class (DECL_CONTEXT (d));
14631       finish_decl (d, init, NULL_TREE);
14632       pop_nested_class ();
14633     }
14634   else if (TREE_CODE (d) == FUNCTION_DECL)
14635     {
14636       htab_t saved_local_specializations;
14637       tree subst_decl;
14638       tree tmpl_parm;
14639       tree spec_parm;
14640
14641       /* Save away the current list, in case we are instantiating one
14642          template from within the body of another.  */
14643       saved_local_specializations = local_specializations;
14644
14645       /* Set up the list of local specializations.  */
14646       local_specializations = htab_create (37,
14647                                            hash_local_specialization,
14648                                            eq_local_specializations,
14649                                            NULL);
14650
14651       /* Set up context.  */
14652       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
14653
14654       /* Create substitution entries for the parameters.  */
14655       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
14656       tmpl_parm = DECL_ARGUMENTS (subst_decl);
14657       spec_parm = DECL_ARGUMENTS (d);
14658       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
14659         {
14660           register_local_specialization (spec_parm, tmpl_parm);
14661           spec_parm = skip_artificial_parms_for (d, spec_parm);
14662           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
14663         }
14664       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14665         {
14666           register_local_specialization (spec_parm, tmpl_parm);
14667           tmpl_parm = TREE_CHAIN (tmpl_parm);
14668           spec_parm = TREE_CHAIN (spec_parm);
14669         }
14670       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14671         {
14672           /* Collect all of the extra "packed" parameters into an
14673              argument pack.  */
14674           tree parmvec;
14675           tree parmtypevec;
14676           tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
14677           tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
14678           int i, len = 0;
14679           tree t;
14680           
14681           /* Count how many parameters remain.  */
14682           for (t = spec_parm; t; t = TREE_CHAIN (t))
14683             len++;
14684
14685           /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
14686           parmvec = make_tree_vec (len);
14687           parmtypevec = make_tree_vec (len);
14688           for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
14689             {
14690               TREE_VEC_ELT (parmvec, i) = spec_parm;
14691               TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
14692             }
14693
14694           /* Build the argument packs.  */
14695           SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
14696           SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
14697           TREE_TYPE (argpack) = argtypepack;
14698           
14699           /* Register the (value) argument pack as a specialization of
14700              TMPL_PARM, then move on.  */
14701           register_local_specialization (argpack, tmpl_parm);
14702           tmpl_parm = TREE_CHAIN (tmpl_parm);
14703         }
14704       gcc_assert (!spec_parm);
14705
14706       /* Substitute into the body of the function.  */
14707       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
14708                    tf_warning_or_error, tmpl,
14709                    /*integral_constant_expression_p=*/false);
14710
14711       /* Set the current input_location to the end of the function
14712          so that finish_function knows where we are.  */
14713       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
14714
14715       /* We don't need the local specializations any more.  */
14716       htab_delete (local_specializations);
14717       local_specializations = saved_local_specializations;
14718
14719       /* Finish the function.  */
14720       d = finish_function (0);
14721       expand_or_defer_fn (d);
14722     }
14723
14724   /* We're not deferring instantiation any more.  */
14725   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
14726
14727   if (need_push)
14728     pop_from_top_level ();
14729
14730 out:
14731   input_location = saved_loc;
14732   in_system_header = saved_in_system_header;
14733   pop_deferring_access_checks ();
14734   pop_tinst_level ();
14735
14736   timevar_pop (TV_PARSE);
14737
14738   return d;
14739 }
14740
14741 /* Run through the list of templates that we wish we could
14742    instantiate, and instantiate any we can.  RETRIES is the
14743    number of times we retry pending template instantiation.  */
14744
14745 void
14746 instantiate_pending_templates (int retries)
14747 {
14748   int reconsider;
14749   location_t saved_loc = input_location;
14750   int saved_in_system_header = in_system_header;
14751
14752   /* Instantiating templates may trigger vtable generation.  This in turn
14753      may require further template instantiations.  We place a limit here
14754      to avoid infinite loop.  */
14755   if (pending_templates && retries >= max_tinst_depth)
14756     {
14757       tree decl = pending_templates->tinst->decl;
14758
14759       error ("template instantiation depth exceeds maximum of %d"
14760              " instantiating %q+D, possibly from virtual table generation"
14761              " (use -ftemplate-depth-NN to increase the maximum)",
14762              max_tinst_depth, decl);
14763       if (TREE_CODE (decl) == FUNCTION_DECL)
14764         /* Pretend that we defined it.  */
14765         DECL_INITIAL (decl) = error_mark_node;
14766       return;
14767     }
14768
14769   do
14770     {
14771       struct pending_template **t = &pending_templates;
14772       struct pending_template *last = NULL;
14773       reconsider = 0;
14774       while (*t)
14775         {
14776           tree instantiation = reopen_tinst_level ((*t)->tinst);
14777           bool complete = false;
14778
14779           if (TYPE_P (instantiation))
14780             {
14781               tree fn;
14782
14783               if (!COMPLETE_TYPE_P (instantiation))
14784                 {
14785                   instantiate_class_template (instantiation);
14786                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
14787                     for (fn = TYPE_METHODS (instantiation);
14788                          fn;
14789                          fn = TREE_CHAIN (fn))
14790                       if (! DECL_ARTIFICIAL (fn))
14791                         instantiate_decl (fn,
14792                                           /*defer_ok=*/0,
14793                                           /*expl_inst_class_mem_p=*/false);
14794                   if (COMPLETE_TYPE_P (instantiation))
14795                     reconsider = 1;
14796                 }
14797
14798               complete = COMPLETE_TYPE_P (instantiation);
14799             }
14800           else
14801             {
14802               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
14803                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
14804                 {
14805                   instantiation
14806                     = instantiate_decl (instantiation,
14807                                         /*defer_ok=*/0,
14808                                         /*expl_inst_class_mem_p=*/false);
14809                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
14810                     reconsider = 1;
14811                 }
14812
14813               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
14814                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
14815             }
14816
14817           if (complete)
14818             /* If INSTANTIATION has been instantiated, then we don't
14819                need to consider it again in the future.  */
14820             *t = (*t)->next;
14821           else
14822             {
14823               last = *t;
14824               t = &(*t)->next;
14825             }
14826           tinst_depth = 0;
14827           current_tinst_level = NULL;
14828         }
14829       last_pending_template = last;
14830     }
14831   while (reconsider);
14832
14833   input_location = saved_loc;
14834   in_system_header = saved_in_system_header;
14835 }
14836
14837 /* Substitute ARGVEC into T, which is a list of initializers for
14838    either base class or a non-static data member.  The TREE_PURPOSEs
14839    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
14840    instantiate_decl.  */
14841
14842 static tree
14843 tsubst_initializer_list (tree t, tree argvec)
14844 {
14845   tree inits = NULL_TREE;
14846
14847   for (; t; t = TREE_CHAIN (t))
14848     {
14849       tree decl;
14850       tree init;
14851       tree expanded_bases = NULL_TREE;
14852       tree expanded_arguments = NULL_TREE;
14853       int i, len = 1;
14854
14855       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
14856         {
14857           tree expr;
14858           tree arg;
14859
14860           /* Expand the base class expansion type into separate base
14861              classes.  */
14862           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
14863                                                  tf_warning_or_error,
14864                                                  NULL_TREE);
14865           if (expanded_bases == error_mark_node)
14866             continue;
14867           
14868           /* We'll be building separate TREE_LISTs of arguments for
14869              each base.  */
14870           len = TREE_VEC_LENGTH (expanded_bases);
14871           expanded_arguments = make_tree_vec (len);
14872           for (i = 0; i < len; i++)
14873             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
14874
14875           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
14876              expand each argument in the TREE_VALUE of t.  */
14877           expr = make_node (EXPR_PACK_EXPANSION);
14878           PACK_EXPANSION_PARAMETER_PACKS (expr) =
14879             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
14880
14881           /* Substitute parameter packs into each argument in the
14882              TREE_LIST.  */
14883           in_base_initializer = 1;
14884           for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
14885             {
14886               tree expanded_exprs;
14887
14888               /* Expand the argument.  */
14889               SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
14890               expanded_exprs = tsubst_pack_expansion (expr, argvec,
14891                                                       tf_warning_or_error,
14892                                                       NULL_TREE);
14893
14894               /* Prepend each of the expanded expressions to the
14895                  corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
14896               for (i = 0; i < len; i++)
14897                 {
14898                   TREE_VEC_ELT (expanded_arguments, i) = 
14899                     tree_cons (NULL_TREE, TREE_VEC_ELT (expanded_exprs, i),
14900                                TREE_VEC_ELT (expanded_arguments, i));
14901                 }
14902             }
14903           in_base_initializer = 0;
14904
14905           /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
14906              since we built them backwards.  */
14907           for (i = 0; i < len; i++)
14908             {
14909               TREE_VEC_ELT (expanded_arguments, i) = 
14910                 nreverse (TREE_VEC_ELT (expanded_arguments, i));
14911             }
14912         }
14913
14914       for (i = 0; i < len; ++i)
14915         {
14916           if (expanded_bases)
14917             {
14918               decl = TREE_VEC_ELT (expanded_bases, i);
14919               decl = expand_member_init (decl);
14920               init = TREE_VEC_ELT (expanded_arguments, i);
14921             }
14922           else
14923             {
14924               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
14925                                   tf_warning_or_error, NULL_TREE);
14926
14927               decl = expand_member_init (decl);
14928               if (decl && !DECL_P (decl))
14929                 in_base_initializer = 1;
14930
14931               init = tsubst_expr (TREE_VALUE (t), argvec, 
14932                                   tf_warning_or_error, NULL_TREE,
14933                                   /*integral_constant_expression_p=*/false);
14934               in_base_initializer = 0;
14935             }
14936
14937           if (decl)
14938             {
14939               init = build_tree_list (decl, init);
14940               TREE_CHAIN (init) = inits;
14941               inits = init;
14942             }
14943         }
14944     }
14945   return inits;
14946 }
14947
14948 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
14949
14950 static void
14951 set_current_access_from_decl (tree decl)
14952 {
14953   if (TREE_PRIVATE (decl))
14954     current_access_specifier = access_private_node;
14955   else if (TREE_PROTECTED (decl))
14956     current_access_specifier = access_protected_node;
14957   else
14958     current_access_specifier = access_public_node;
14959 }
14960
14961 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
14962    is the instantiation (which should have been created with
14963    start_enum) and ARGS are the template arguments to use.  */
14964
14965 static void
14966 tsubst_enum (tree tag, tree newtag, tree args)
14967 {
14968   tree e;
14969
14970   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
14971     {
14972       tree value;
14973       tree decl;
14974
14975       decl = TREE_VALUE (e);
14976       /* Note that in a template enum, the TREE_VALUE is the
14977          CONST_DECL, not the corresponding INTEGER_CST.  */
14978       value = tsubst_expr (DECL_INITIAL (decl),
14979                            args, tf_warning_or_error, NULL_TREE,
14980                            /*integral_constant_expression_p=*/true);
14981
14982       /* Give this enumeration constant the correct access.  */
14983       set_current_access_from_decl (decl);
14984
14985       /* Actually build the enumerator itself.  */
14986       build_enumerator (DECL_NAME (decl), value, newtag);
14987     }
14988
14989   finish_enum (newtag);
14990   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
14991     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
14992 }
14993
14994 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
14995    its type -- but without substituting the innermost set of template
14996    arguments.  So, innermost set of template parameters will appear in
14997    the type.  */
14998
14999 tree
15000 get_mostly_instantiated_function_type (tree decl)
15001 {
15002   tree fn_type;
15003   tree tmpl;
15004   tree targs;
15005   tree tparms;
15006   int parm_depth;
15007
15008   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
15009   targs = DECL_TI_ARGS (decl);
15010   tparms = DECL_TEMPLATE_PARMS (tmpl);
15011   parm_depth = TMPL_PARMS_DEPTH (tparms);
15012
15013   /* There should be as many levels of arguments as there are levels
15014      of parameters.  */
15015   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
15016
15017   fn_type = TREE_TYPE (tmpl);
15018
15019   if (parm_depth == 1)
15020     /* No substitution is necessary.  */
15021     ;
15022   else
15023     {
15024       int i, save_access_control;
15025       tree partial_args;
15026
15027       /* Replace the innermost level of the TARGS with NULL_TREEs to
15028          let tsubst know not to substitute for those parameters.  */
15029       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
15030       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
15031         SET_TMPL_ARGS_LEVEL (partial_args, i,
15032                              TMPL_ARGS_LEVEL (targs, i));
15033       SET_TMPL_ARGS_LEVEL (partial_args,
15034                            TMPL_ARGS_DEPTH (targs),
15035                            make_tree_vec (DECL_NTPARMS (tmpl)));
15036
15037       /* Disable access control as this function is used only during
15038          name-mangling.  */
15039       save_access_control = flag_access_control;
15040       flag_access_control = 0;
15041
15042       ++processing_template_decl;
15043       /* Now, do the (partial) substitution to figure out the
15044          appropriate function type.  */
15045       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
15046       --processing_template_decl;
15047
15048       /* Substitute into the template parameters to obtain the real
15049          innermost set of parameters.  This step is important if the
15050          innermost set of template parameters contains value
15051          parameters whose types depend on outer template parameters.  */
15052       TREE_VEC_LENGTH (partial_args)--;
15053       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
15054
15055       flag_access_control = save_access_control;
15056     }
15057
15058   return fn_type;
15059 }
15060
15061 /* Return truthvalue if we're processing a template different from
15062    the last one involved in diagnostics.  */
15063 int
15064 problematic_instantiation_changed (void)
15065 {
15066   return last_template_error_tick != tinst_level_tick;
15067 }
15068
15069 /* Remember current template involved in diagnostics.  */
15070 void
15071 record_last_problematic_instantiation (void)
15072 {
15073   last_template_error_tick = tinst_level_tick;
15074 }
15075
15076 struct tinst_level *
15077 current_instantiation (void)
15078 {
15079   return current_tinst_level;
15080 }
15081
15082 /* [temp.param] Check that template non-type parm TYPE is of an allowable
15083    type. Return zero for ok, nonzero for disallowed. Issue error and
15084    warning messages under control of COMPLAIN.  */
15085
15086 static int
15087 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
15088 {
15089   if (INTEGRAL_TYPE_P (type))
15090     return 0;
15091   else if (POINTER_TYPE_P (type))
15092     return 0;
15093   else if (TYPE_PTR_TO_MEMBER_P (type))
15094     return 0;
15095   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
15096     return 0;
15097   else if (TREE_CODE (type) == TYPENAME_TYPE)
15098     return 0;
15099
15100   if (complain & tf_error)
15101     error ("%q#T is not a valid type for a template constant parameter", type);
15102   return 1;
15103 }
15104
15105 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
15106    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
15107
15108 static bool
15109 dependent_type_p_r (tree type)
15110 {
15111   tree scope;
15112
15113   /* [temp.dep.type]
15114
15115      A type is dependent if it is:
15116
15117      -- a template parameter. Template template parameters are types
15118         for us (since TYPE_P holds true for them) so we handle
15119         them here.  */
15120   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
15121       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
15122     return true;
15123   /* -- a qualified-id with a nested-name-specifier which contains a
15124         class-name that names a dependent type or whose unqualified-id
15125         names a dependent type.  */
15126   if (TREE_CODE (type) == TYPENAME_TYPE)
15127     return true;
15128   /* -- a cv-qualified type where the cv-unqualified type is
15129         dependent.  */
15130   type = TYPE_MAIN_VARIANT (type);
15131   /* -- a compound type constructed from any dependent type.  */
15132   if (TYPE_PTR_TO_MEMBER_P (type))
15133     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
15134             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
15135                                            (type)));
15136   else if (TREE_CODE (type) == POINTER_TYPE
15137            || TREE_CODE (type) == REFERENCE_TYPE)
15138     return dependent_type_p (TREE_TYPE (type));
15139   else if (TREE_CODE (type) == FUNCTION_TYPE
15140            || TREE_CODE (type) == METHOD_TYPE)
15141     {
15142       tree arg_type;
15143
15144       if (dependent_type_p (TREE_TYPE (type)))
15145         return true;
15146       for (arg_type = TYPE_ARG_TYPES (type);
15147            arg_type;
15148            arg_type = TREE_CHAIN (arg_type))
15149         if (dependent_type_p (TREE_VALUE (arg_type)))
15150           return true;
15151       return false;
15152     }
15153   /* -- an array type constructed from any dependent type or whose
15154         size is specified by a constant expression that is
15155         value-dependent.  */
15156   if (TREE_CODE (type) == ARRAY_TYPE)
15157     {
15158       if (TYPE_DOMAIN (type)
15159           && ((value_dependent_expression_p
15160                (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
15161               || (type_dependent_expression_p
15162                   (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
15163         return true;
15164       return dependent_type_p (TREE_TYPE (type));
15165     }
15166
15167   /* -- a template-id in which either the template name is a template
15168      parameter ...  */
15169   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
15170     return true;
15171   /* ... or any of the template arguments is a dependent type or
15172         an expression that is type-dependent or value-dependent.  */
15173   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
15174            && (any_dependent_template_arguments_p
15175                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
15176     return true;
15177
15178   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
15179      argument of the `typeof' expression is not type-dependent, then
15180      it should already been have resolved.  */
15181   if (TREE_CODE (type) == TYPEOF_TYPE
15182       || TREE_CODE (type) == DECLTYPE_TYPE)
15183     return true;
15184
15185   /* A template argument pack is dependent if any of its packed
15186      arguments are.  */
15187   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
15188     {
15189       tree args = ARGUMENT_PACK_ARGS (type);
15190       int i, len = TREE_VEC_LENGTH (args);
15191       for (i = 0; i < len; ++i)
15192         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15193           return true;
15194     }
15195
15196   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
15197      be template parameters.  */
15198   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
15199     return true;
15200
15201   /* The standard does not specifically mention types that are local
15202      to template functions or local classes, but they should be
15203      considered dependent too.  For example:
15204
15205        template <int I> void f() {
15206          enum E { a = I };
15207          S<sizeof (E)> s;
15208        }
15209
15210      The size of `E' cannot be known until the value of `I' has been
15211      determined.  Therefore, `E' must be considered dependent.  */
15212   scope = TYPE_CONTEXT (type);
15213   if (scope && TYPE_P (scope))
15214     return dependent_type_p (scope);
15215   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15216     return type_dependent_expression_p (scope);
15217
15218   /* Other types are non-dependent.  */
15219   return false;
15220 }
15221
15222 /* Returns TRUE if TYPE is dependent, in the sense of
15223    [temp.dep.type].  */
15224
15225 bool
15226 dependent_type_p (tree type)
15227 {
15228   /* If there are no template parameters in scope, then there can't be
15229      any dependent types.  */
15230   if (!processing_template_decl)
15231     {
15232       /* If we are not processing a template, then nobody should be
15233          providing us with a dependent type.  */
15234       gcc_assert (type);
15235       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
15236       return false;
15237     }
15238
15239   /* If the type is NULL, we have not computed a type for the entity
15240      in question; in that case, the type is dependent.  */
15241   if (!type)
15242     return true;
15243
15244   /* Erroneous types can be considered non-dependent.  */
15245   if (type == error_mark_node)
15246     return false;
15247
15248   /* If we have not already computed the appropriate value for TYPE,
15249      do so now.  */
15250   if (!TYPE_DEPENDENT_P_VALID (type))
15251     {
15252       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
15253       TYPE_DEPENDENT_P_VALID (type) = 1;
15254     }
15255
15256   return TYPE_DEPENDENT_P (type);
15257 }
15258
15259 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
15260
15261 static bool
15262 dependent_scope_ref_p (tree expression, bool criterion (tree))
15263 {
15264   tree scope;
15265   tree name;
15266
15267   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15268
15269   if (!TYPE_P (TREE_OPERAND (expression, 0)))
15270     return true;
15271
15272   scope = TREE_OPERAND (expression, 0);
15273   name = TREE_OPERAND (expression, 1);
15274
15275   /* [temp.dep.expr]
15276
15277      An id-expression is type-dependent if it contains a
15278      nested-name-specifier that contains a class-name that names a
15279      dependent type.  */
15280   /* The suggested resolution to Core Issue 2 implies that if the
15281      qualifying type is the current class, then we must peek
15282      inside it.  */
15283   if (DECL_P (name)
15284       && currently_open_class (scope)
15285       && !criterion (name))
15286     return false;
15287   if (dependent_type_p (scope))
15288     return true;
15289
15290   return false;
15291 }
15292
15293 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15294    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
15295    expression.  */
15296
15297 bool
15298 value_dependent_expression_p (tree expression)
15299 {
15300   if (!processing_template_decl)
15301     return false;
15302
15303   /* A name declared with a dependent type.  */
15304   if (DECL_P (expression) && type_dependent_expression_p (expression))
15305     return true;
15306
15307   switch (TREE_CODE (expression))
15308     {
15309     case IDENTIFIER_NODE:
15310       /* A name that has not been looked up -- must be dependent.  */
15311       return true;
15312
15313     case TEMPLATE_PARM_INDEX:
15314       /* A non-type template parm.  */
15315       return true;
15316
15317     case CONST_DECL:
15318       /* A non-type template parm.  */
15319       if (DECL_TEMPLATE_PARM_P (expression))
15320         return true;
15321       return false;
15322
15323     case VAR_DECL:
15324        /* A constant with integral or enumeration type and is initialized
15325           with an expression that is value-dependent.  */
15326       if (DECL_INITIAL (expression)
15327           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15328           && value_dependent_expression_p (DECL_INITIAL (expression)))
15329         return true;
15330       return false;
15331
15332     case DYNAMIC_CAST_EXPR:
15333     case STATIC_CAST_EXPR:
15334     case CONST_CAST_EXPR:
15335     case REINTERPRET_CAST_EXPR:
15336     case CAST_EXPR:
15337       /* These expressions are value-dependent if the type to which
15338          the cast occurs is dependent or the expression being casted
15339          is value-dependent.  */
15340       {
15341         tree type = TREE_TYPE (expression);
15342
15343         if (dependent_type_p (type))
15344           return true;
15345
15346         /* A functional cast has a list of operands.  */
15347         expression = TREE_OPERAND (expression, 0);
15348         if (!expression)
15349           {
15350             /* If there are no operands, it must be an expression such
15351                as "int()". This should not happen for aggregate types
15352                because it would form non-constant expressions.  */
15353             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
15354
15355             return false;
15356           }
15357
15358         if (TREE_CODE (expression) == TREE_LIST)
15359           return any_value_dependent_elements_p (expression);
15360
15361         return value_dependent_expression_p (expression);
15362       }
15363
15364     case SIZEOF_EXPR:
15365     case ALIGNOF_EXPR:
15366       /* A `sizeof' expression is value-dependent if the operand is
15367          type-dependent or is a pack expansion.  */
15368       expression = TREE_OPERAND (expression, 0);
15369       if (PACK_EXPANSION_P (expression))
15370         return true;
15371       else if (TYPE_P (expression))
15372         return dependent_type_p (expression);
15373       return type_dependent_expression_p (expression);
15374
15375     case SCOPE_REF:
15376       return dependent_scope_ref_p (expression, value_dependent_expression_p);
15377
15378     case COMPONENT_REF:
15379       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
15380               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
15381
15382     case CALL_EXPR:
15383       /* A CALL_EXPR may appear in a constant expression if it is a
15384          call to a builtin function, e.g., __builtin_constant_p.  All
15385          such calls are value-dependent.  */
15386       return true;
15387
15388     case NONTYPE_ARGUMENT_PACK:
15389       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
15390          is value-dependent.  */
15391       {
15392         tree values = ARGUMENT_PACK_ARGS (expression);
15393         int i, len = TREE_VEC_LENGTH (values);
15394         
15395         for (i = 0; i < len; ++i)
15396           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
15397             return true;
15398         
15399         return false;
15400       }
15401
15402     case TRAIT_EXPR:
15403       {
15404         tree type2 = TRAIT_EXPR_TYPE2 (expression);
15405         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
15406                 || (type2 ? dependent_type_p (type2) : false));
15407       }
15408
15409     case MODOP_EXPR:
15410       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
15411               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
15412
15413     default:
15414       /* A constant expression is value-dependent if any subexpression is
15415          value-dependent.  */
15416       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
15417         {
15418         case tcc_reference:
15419         case tcc_unary:
15420           return (value_dependent_expression_p
15421                   (TREE_OPERAND (expression, 0)));
15422
15423         case tcc_comparison:
15424         case tcc_binary:
15425           return ((value_dependent_expression_p
15426                    (TREE_OPERAND (expression, 0)))
15427                   || (value_dependent_expression_p
15428                       (TREE_OPERAND (expression, 1))));
15429
15430         case tcc_expression:
15431         case tcc_vl_exp:
15432           {
15433             int i;
15434             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
15435               /* In some cases, some of the operands may be missing.
15436                  (For example, in the case of PREDECREMENT_EXPR, the
15437                  amount to increment by may be missing.)  That doesn't
15438                  make the expression dependent.  */
15439               if (TREE_OPERAND (expression, i)
15440                   && (value_dependent_expression_p
15441                       (TREE_OPERAND (expression, i))))
15442                 return true;
15443             return false;
15444           }
15445
15446         default:
15447           break;
15448         }
15449     }
15450
15451   /* The expression is not value-dependent.  */
15452   return false;
15453 }
15454
15455 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
15456    [temp.dep.expr].  */
15457
15458 bool
15459 type_dependent_expression_p (tree expression)
15460 {
15461   if (!processing_template_decl)
15462     return false;
15463
15464   if (expression == error_mark_node)
15465     return false;
15466
15467   /* An unresolved name is always dependent.  */
15468   if (TREE_CODE (expression) == IDENTIFIER_NODE
15469       || TREE_CODE (expression) == USING_DECL)
15470     return true;
15471
15472   /* Some expression forms are never type-dependent.  */
15473   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
15474       || TREE_CODE (expression) == SIZEOF_EXPR
15475       || TREE_CODE (expression) == ALIGNOF_EXPR
15476       || TREE_CODE (expression) == TRAIT_EXPR
15477       || TREE_CODE (expression) == TYPEID_EXPR
15478       || TREE_CODE (expression) == DELETE_EXPR
15479       || TREE_CODE (expression) == VEC_DELETE_EXPR
15480       || TREE_CODE (expression) == THROW_EXPR)
15481     return false;
15482
15483   /* The types of these expressions depends only on the type to which
15484      the cast occurs.  */
15485   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
15486       || TREE_CODE (expression) == STATIC_CAST_EXPR
15487       || TREE_CODE (expression) == CONST_CAST_EXPR
15488       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
15489       || TREE_CODE (expression) == CAST_EXPR)
15490     return dependent_type_p (TREE_TYPE (expression));
15491
15492   /* The types of these expressions depends only on the type created
15493      by the expression.  */
15494   if (TREE_CODE (expression) == NEW_EXPR
15495       || TREE_CODE (expression) == VEC_NEW_EXPR)
15496     {
15497       /* For NEW_EXPR tree nodes created inside a template, either
15498          the object type itself or a TREE_LIST may appear as the
15499          operand 1.  */
15500       tree type = TREE_OPERAND (expression, 1);
15501       if (TREE_CODE (type) == TREE_LIST)
15502         /* This is an array type.  We need to check array dimensions
15503            as well.  */
15504         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
15505                || value_dependent_expression_p
15506                     (TREE_OPERAND (TREE_VALUE (type), 1));
15507       else
15508         return dependent_type_p (type);
15509     }
15510
15511   if (TREE_CODE (expression) == SCOPE_REF
15512       && dependent_scope_ref_p (expression,
15513                                 type_dependent_expression_p))
15514     return true;
15515
15516   if (TREE_CODE (expression) == FUNCTION_DECL
15517       && DECL_LANG_SPECIFIC (expression)
15518       && DECL_TEMPLATE_INFO (expression)
15519       && (any_dependent_template_arguments_p
15520           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
15521     return true;
15522
15523   if (TREE_CODE (expression) == TEMPLATE_DECL
15524       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
15525     return false;
15526
15527   if (TREE_CODE (expression) == STMT_EXPR)
15528     expression = stmt_expr_value_expr (expression);
15529
15530   if (TREE_TYPE (expression) == unknown_type_node)
15531     {
15532       if (TREE_CODE (expression) == ADDR_EXPR)
15533         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
15534       if (TREE_CODE (expression) == COMPONENT_REF
15535           || TREE_CODE (expression) == OFFSET_REF)
15536         {
15537           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
15538             return true;
15539           expression = TREE_OPERAND (expression, 1);
15540           if (TREE_CODE (expression) == IDENTIFIER_NODE)
15541             return false;
15542         }
15543       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
15544       if (TREE_CODE (expression) == SCOPE_REF)
15545         return false;
15546
15547       if (TREE_CODE (expression) == BASELINK)
15548         expression = BASELINK_FUNCTIONS (expression);
15549
15550       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
15551         {
15552           if (any_dependent_template_arguments_p
15553               (TREE_OPERAND (expression, 1)))
15554             return true;
15555           expression = TREE_OPERAND (expression, 0);
15556         }
15557       gcc_assert (TREE_CODE (expression) == OVERLOAD
15558                   || TREE_CODE (expression) == FUNCTION_DECL);
15559
15560       while (expression)
15561         {
15562           if (type_dependent_expression_p (OVL_CURRENT (expression)))
15563             return true;
15564           expression = OVL_NEXT (expression);
15565         }
15566       return false;
15567     }
15568
15569   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
15570
15571   return (dependent_type_p (TREE_TYPE (expression)));
15572 }
15573
15574 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
15575    contains a type-dependent expression.  */
15576
15577 bool
15578 any_type_dependent_arguments_p (const_tree args)
15579 {
15580   while (args)
15581     {
15582       tree arg = TREE_VALUE (args);
15583
15584       if (type_dependent_expression_p (arg))
15585         return true;
15586       args = TREE_CHAIN (args);
15587     }
15588   return false;
15589 }
15590
15591 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
15592    expressions) contains any value-dependent expressions.  */
15593
15594 bool
15595 any_value_dependent_elements_p (const_tree list)
15596 {
15597   for (; list; list = TREE_CHAIN (list))
15598     if (value_dependent_expression_p (TREE_VALUE (list)))
15599       return true;
15600
15601   return false;
15602 }
15603
15604 /* Returns TRUE if the ARG (a template argument) is dependent.  */
15605
15606 bool
15607 dependent_template_arg_p (tree arg)
15608 {
15609   if (!processing_template_decl)
15610     return false;
15611
15612   if (TREE_CODE (arg) == TEMPLATE_DECL
15613       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15614     return dependent_template_p (arg);
15615   else if (ARGUMENT_PACK_P (arg))
15616     {
15617       tree args = ARGUMENT_PACK_ARGS (arg);
15618       int i, len = TREE_VEC_LENGTH (args);
15619       for (i = 0; i < len; ++i)
15620         {
15621           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15622             return true;
15623         }
15624
15625       return false;
15626     }
15627   else if (TYPE_P (arg))
15628     return dependent_type_p (arg);
15629   else
15630     return (type_dependent_expression_p (arg)
15631             || value_dependent_expression_p (arg));
15632 }
15633
15634 /* Returns true if ARGS (a collection of template arguments) contains
15635    any types that require structural equality testing.  */
15636
15637 bool
15638 any_template_arguments_need_structural_equality_p (tree args)
15639 {
15640   int i;
15641   int j;
15642
15643   if (!args)
15644     return false;
15645   if (args == error_mark_node)
15646     return true;
15647
15648   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15649     {
15650       tree level = TMPL_ARGS_LEVEL (args, i + 1);
15651       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15652         {
15653           tree arg = TREE_VEC_ELT (level, j);
15654           tree packed_args = NULL_TREE;
15655           int k, len = 1;
15656
15657           if (ARGUMENT_PACK_P (arg))
15658             {
15659               /* Look inside the argument pack.  */
15660               packed_args = ARGUMENT_PACK_ARGS (arg);
15661               len = TREE_VEC_LENGTH (packed_args);
15662             }
15663
15664           for (k = 0; k < len; ++k)
15665             {
15666               if (packed_args)
15667                 arg = TREE_VEC_ELT (packed_args, k);
15668
15669               if (error_operand_p (arg))
15670                 return true;
15671               else if (TREE_CODE (arg) == TEMPLATE_DECL
15672                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15673                 continue;
15674               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
15675                 return true;
15676               else if (!TYPE_P (arg) && TREE_TYPE (arg)
15677                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
15678                 return true;
15679             }
15680         }
15681     }
15682
15683   return false;
15684 }
15685
15686 /* Returns true if ARGS (a collection of template arguments) contains
15687    any dependent arguments.  */
15688
15689 bool
15690 any_dependent_template_arguments_p (const_tree args)
15691 {
15692   int i;
15693   int j;
15694
15695   if (!args)
15696     return false;
15697   if (args == error_mark_node)
15698     return true;
15699
15700   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15701     {
15702       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
15703       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15704         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
15705           return true;
15706     }
15707
15708   return false;
15709 }
15710
15711 /* Returns TRUE if the template TMPL is dependent.  */
15712
15713 bool
15714 dependent_template_p (tree tmpl)
15715 {
15716   if (TREE_CODE (tmpl) == OVERLOAD)
15717     {
15718       while (tmpl)
15719         {
15720           if (dependent_template_p (OVL_FUNCTION (tmpl)))
15721             return true;
15722           tmpl = OVL_CHAIN (tmpl);
15723         }
15724       return false;
15725     }
15726
15727   /* Template template parameters are dependent.  */
15728   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
15729       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
15730     return true;
15731   /* So are names that have not been looked up.  */
15732   if (TREE_CODE (tmpl) == SCOPE_REF
15733       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
15734     return true;
15735   /* So are member templates of dependent classes.  */
15736   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
15737     return dependent_type_p (DECL_CONTEXT (tmpl));
15738   return false;
15739 }
15740
15741 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
15742
15743 bool
15744 dependent_template_id_p (tree tmpl, tree args)
15745 {
15746   return (dependent_template_p (tmpl)
15747           || any_dependent_template_arguments_p (args));
15748 }
15749
15750 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
15751    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
15752    no such TYPE can be found.  Note that this function peers inside
15753    uninstantiated templates and therefore should be used only in
15754    extremely limited situations.  ONLY_CURRENT_P restricts this
15755    peering to the currently open classes hierarchy (which is required
15756    when comparing types).  */
15757
15758 tree
15759 resolve_typename_type (tree type, bool only_current_p)
15760 {
15761   tree scope;
15762   tree name;
15763   tree decl;
15764   int quals;
15765   tree pushed_scope;
15766   tree result;
15767
15768   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
15769
15770   scope = TYPE_CONTEXT (type);
15771   name = TYPE_IDENTIFIER (type);
15772
15773   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
15774      it first before we can figure out what NAME refers to.  */
15775   if (TREE_CODE (scope) == TYPENAME_TYPE)
15776     scope = resolve_typename_type (scope, only_current_p);
15777   /* If we don't know what SCOPE refers to, then we cannot resolve the
15778      TYPENAME_TYPE.  */
15779   if (TREE_CODE (scope) == TYPENAME_TYPE)
15780     return type;
15781   /* If the SCOPE is a template type parameter, we have no way of
15782      resolving the name.  */
15783   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
15784     return type;
15785   /* If the SCOPE is not the current instantiation, there's no reason
15786      to look inside it.  */
15787   if (only_current_p && !currently_open_class (scope))
15788     return type;
15789   /* If SCOPE isn't the template itself, it will not have a valid
15790      TYPE_FIELDS list.  */
15791   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
15792     /* scope is either the template itself or a compatible instantiation
15793        like X<T>, so look up the name in the original template.  */
15794     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
15795   else
15796     /* scope is a partial instantiation, so we can't do the lookup or we
15797        will lose the template arguments.  */
15798     return type;
15799   /* Enter the SCOPE so that name lookup will be resolved as if we
15800      were in the class definition.  In particular, SCOPE will no
15801      longer be considered a dependent type.  */
15802   pushed_scope = push_scope (scope);
15803   /* Look up the declaration.  */
15804   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
15805
15806   result = NULL_TREE;
15807   
15808   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
15809      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
15810   if (!decl)
15811     /*nop*/;
15812   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
15813            && TREE_CODE (decl) == TYPE_DECL)
15814     {
15815       result = TREE_TYPE (decl);
15816       if (result == error_mark_node)
15817         result = NULL_TREE;
15818     }
15819   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
15820            && DECL_CLASS_TEMPLATE_P (decl))
15821     {
15822       tree tmpl;
15823       tree args;
15824       /* Obtain the template and the arguments.  */
15825       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
15826       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
15827       /* Instantiate the template.  */
15828       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
15829                                       /*entering_scope=*/0,
15830                                       tf_error | tf_user);
15831       if (result == error_mark_node)
15832         result = NULL_TREE;
15833     }
15834   
15835   /* Leave the SCOPE.  */
15836   if (pushed_scope)
15837     pop_scope (pushed_scope);
15838
15839   /* If we failed to resolve it, return the original typename.  */
15840   if (!result)
15841     return type;
15842   
15843   /* If lookup found a typename type, resolve that too.  */
15844   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
15845     {
15846       /* Ill-formed programs can cause infinite recursion here, so we
15847          must catch that.  */
15848       TYPENAME_IS_RESOLVING_P (type) = 1;
15849       result = resolve_typename_type (result, only_current_p);
15850       TYPENAME_IS_RESOLVING_P (type) = 0;
15851     }
15852   
15853   /* Qualify the resulting type.  */
15854   quals = cp_type_quals (type);
15855   if (quals)
15856     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
15857
15858   return result;
15859 }
15860
15861 /* EXPR is an expression which is not type-dependent.  Return a proxy
15862    for EXPR that can be used to compute the types of larger
15863    expressions containing EXPR.  */
15864
15865 tree
15866 build_non_dependent_expr (tree expr)
15867 {
15868   tree inner_expr;
15869
15870   /* Preserve null pointer constants so that the type of things like
15871      "p == 0" where "p" is a pointer can be determined.  */
15872   if (null_ptr_cst_p (expr))
15873     return expr;
15874   /* Preserve OVERLOADs; the functions must be available to resolve
15875      types.  */
15876   inner_expr = expr;
15877   if (TREE_CODE (inner_expr) == STMT_EXPR)
15878     inner_expr = stmt_expr_value_expr (inner_expr);
15879   if (TREE_CODE (inner_expr) == ADDR_EXPR)
15880     inner_expr = TREE_OPERAND (inner_expr, 0);
15881   if (TREE_CODE (inner_expr) == COMPONENT_REF)
15882     inner_expr = TREE_OPERAND (inner_expr, 1);
15883   if (is_overloaded_fn (inner_expr)
15884       || TREE_CODE (inner_expr) == OFFSET_REF)
15885     return expr;
15886   /* There is no need to return a proxy for a variable.  */
15887   if (TREE_CODE (expr) == VAR_DECL)
15888     return expr;
15889   /* Preserve string constants; conversions from string constants to
15890      "char *" are allowed, even though normally a "const char *"
15891      cannot be used to initialize a "char *".  */
15892   if (TREE_CODE (expr) == STRING_CST)
15893     return expr;
15894   /* Preserve arithmetic constants, as an optimization -- there is no
15895      reason to create a new node.  */
15896   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
15897     return expr;
15898   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
15899      There is at least one place where we want to know that a
15900      particular expression is a throw-expression: when checking a ?:
15901      expression, there are special rules if the second or third
15902      argument is a throw-expression.  */
15903   if (TREE_CODE (expr) == THROW_EXPR)
15904     return expr;
15905
15906   if (TREE_CODE (expr) == COND_EXPR)
15907     return build3 (COND_EXPR,
15908                    TREE_TYPE (expr),
15909                    TREE_OPERAND (expr, 0),
15910                    (TREE_OPERAND (expr, 1)
15911                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
15912                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
15913                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
15914   if (TREE_CODE (expr) == COMPOUND_EXPR
15915       && !COMPOUND_EXPR_OVERLOADED (expr))
15916     return build2 (COMPOUND_EXPR,
15917                    TREE_TYPE (expr),
15918                    TREE_OPERAND (expr, 0),
15919                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
15920
15921   /* If the type is unknown, it can't really be non-dependent */
15922   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
15923
15924   /* Otherwise, build a NON_DEPENDENT_EXPR.
15925
15926      REFERENCE_TYPEs are not stripped for expressions in templates
15927      because doing so would play havoc with mangling.  Consider, for
15928      example:
15929
15930        template <typename T> void f<T& g>() { g(); }
15931
15932      In the body of "f", the expression for "g" will have
15933      REFERENCE_TYPE, even though the standard says that it should
15934      not.  The reason is that we must preserve the syntactic form of
15935      the expression so that mangling (say) "f<g>" inside the body of
15936      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
15937      stripped here.  */
15938   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
15939 }
15940
15941 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
15942    Return a new TREE_LIST with the various arguments replaced with
15943    equivalent non-dependent expressions.  */
15944
15945 tree
15946 build_non_dependent_args (tree args)
15947 {
15948   tree a;
15949   tree new_args;
15950
15951   new_args = NULL_TREE;
15952   for (a = args; a; a = TREE_CHAIN (a))
15953     new_args = tree_cons (NULL_TREE,
15954                           build_non_dependent_expr (TREE_VALUE (a)),
15955                           new_args);
15956   return nreverse (new_args);
15957 }
15958
15959 #include "gt-cp-pt.h"