OSDN Git Service

PR c++/9381
[pf3gnuchains/gcc-fork.git] / gcc / cp / pt.c
1 /* Handle parameterized types (templates) for GNU C++.
2    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
4    Free Software Foundation, Inc.
5    Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
6    Rewritten by Jason Merrill (jason@cygnus.com).
7
8 This file is part of GCC.
9
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
13 any later version.
14
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3.  If not see
22 <http://www.gnu.org/licenses/>.  */
23
24 /* Known bugs or deficiencies include:
25
26      all methods must be provided in header files; can't use a source
27      file that contains only the method templates and "just win".  */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "obstack.h"
34 #include "tree.h"
35 #include "pointer-set.h"
36 #include "flags.h"
37 #include "c-common.h"
38 #include "cp-tree.h"
39 #include "cp-objcp-common.h"
40 #include "tree-inline.h"
41 #include "decl.h"
42 #include "output.h"
43 #include "except.h"
44 #include "toplev.h"
45 #include "rtl.h"
46 #include "timevar.h"
47 #include "tree-iterator.h"
48 #include "vecprim.h"
49
50 /* The type of functions taking a tree, and some additional data, and
51    returning an int.  */
52 typedef int (*tree_fn_t) (tree, void*);
53
54 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
55    instantiations have been deferred, either because their definitions
56    were not yet available, or because we were putting off doing the work.  */
57 struct GTY (()) pending_template {
58   struct pending_template *next;
59   struct tinst_level *tinst;
60 };
61
62 static GTY(()) struct pending_template *pending_templates;
63 static GTY(()) struct pending_template *last_pending_template;
64
65 int processing_template_parmlist;
66 static int template_header_count;
67
68 static GTY(()) tree saved_trees;
69 static VEC(int,heap) *inline_parm_levels;
70
71 static GTY(()) struct tinst_level *current_tinst_level;
72
73 static GTY(()) tree saved_access_scope;
74
75 /* Live only within one (recursive) call to tsubst_expr.  We use
76    this to pass the statement expression node from the STMT_EXPR
77    to the EXPR_STMT that is its result.  */
78 static tree cur_stmt_expr;
79
80 /* A map from local variable declarations in the body of the template
81    presently being instantiated to the corresponding instantiated
82    local variables.  */
83 static htab_t local_specializations;
84
85 typedef struct GTY(()) spec_entry
86 {
87   tree tmpl;
88   tree args;
89   tree spec;
90 } spec_entry;
91
92 static GTY ((param_is (spec_entry)))
93   htab_t decl_specializations;
94
95 static GTY ((param_is (spec_entry)))
96   htab_t type_specializations;
97
98 /* Contains canonical template parameter types. The vector is indexed by
99    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
100    TREE_LIST, whose TREE_VALUEs contain the canonical template
101    parameters of various types and levels.  */
102 static GTY(()) VEC(tree,gc) *canonical_template_parms;
103
104 #define UNIFY_ALLOW_NONE 0
105 #define UNIFY_ALLOW_MORE_CV_QUAL 1
106 #define UNIFY_ALLOW_LESS_CV_QUAL 2
107 #define UNIFY_ALLOW_DERIVED 4
108 #define UNIFY_ALLOW_INTEGER 8
109 #define UNIFY_ALLOW_OUTER_LEVEL 16
110 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
111 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
112
113 static void push_access_scope (tree);
114 static void pop_access_scope (tree);
115 static bool resolve_overloaded_unification (tree, tree, tree, tree,
116                                             unification_kind_t, int);
117 static int try_one_overload (tree, tree, tree, tree, tree,
118                              unification_kind_t, int, bool);
119 static int unify (tree, tree, tree, tree, int);
120 static void add_pending_template (tree);
121 static int push_tinst_level (tree);
122 static void pop_tinst_level (void);
123 static tree reopen_tinst_level (struct tinst_level *);
124 static tree tsubst_initializer_list (tree, tree);
125 static tree get_class_bindings (tree, tree, tree);
126 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
127                                    bool, bool);
128 static void tsubst_enum (tree, tree, tree);
129 static tree add_to_template_args (tree, tree);
130 static tree add_outermost_template_args (tree, tree);
131 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
132 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
133                                              tree);
134 static int type_unification_real (tree, tree, tree, const tree *,
135                                   unsigned int, int, unification_kind_t, int);
136 static void note_template_header (int);
137 static tree convert_nontype_argument_function (tree, tree);
138 static tree convert_nontype_argument (tree, tree);
139 static tree convert_template_argument (tree, tree, tree,
140                                        tsubst_flags_t, int, tree);
141 static int for_each_template_parm (tree, tree_fn_t, void*,
142                                    struct pointer_set_t*, bool);
143 static tree expand_template_argument_pack (tree);
144 static tree build_template_parm_index (int, int, int, tree, tree);
145 static bool inline_needs_template_parms (tree);
146 static void push_inline_template_parms_recursive (tree, int);
147 static tree retrieve_local_specialization (tree);
148 static void register_local_specialization (tree, tree);
149 static hashval_t hash_specialization (const void *p);
150 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
151 static int mark_template_parm (tree, void *);
152 static int template_parm_this_level_p (tree, void *);
153 static tree tsubst_friend_function (tree, tree);
154 static tree tsubst_friend_class (tree, tree);
155 static int can_complete_type_without_circularity (tree);
156 static tree get_bindings (tree, tree, tree, bool);
157 static int template_decl_level (tree);
158 static int check_cv_quals_for_unify (int, tree, tree);
159 static void template_parm_level_and_index (tree, int*, int*);
160 static int unify_pack_expansion (tree, tree, tree, tree, int, bool, bool);
161 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
162 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
163 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
164 static void regenerate_decl_from_template (tree, tree);
165 static tree most_specialized_class (tree, tree);
166 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
167 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
168 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
169 static bool check_specialization_scope (void);
170 static tree process_partial_specialization (tree);
171 static void set_current_access_from_decl (tree);
172 static tree get_template_base (tree, tree, tree, tree);
173 static tree try_class_unification (tree, tree, tree, tree);
174 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
175                                            tree, tree);
176 static bool template_template_parm_bindings_ok_p (tree, tree);
177 static int template_args_equal (tree, tree);
178 static void tsubst_default_arguments (tree);
179 static tree for_each_template_parm_r (tree *, int *, void *);
180 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
181 static void copy_default_args_to_explicit_spec (tree);
182 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
183 static int eq_local_specializations (const void *, const void *);
184 static bool dependent_template_arg_p (tree);
185 static bool any_template_arguments_need_structural_equality_p (tree);
186 static bool dependent_type_p_r (tree);
187 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
188 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
189 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
190 static tree tsubst_decl (tree, tree, tsubst_flags_t);
191 static void perform_typedefs_access_check (tree tmpl, tree targs);
192 static void append_type_to_template_for_access_check_1 (tree, tree, tree);
193 static hashval_t iterative_hash_template_arg (tree arg, hashval_t val);
194 static bool primary_template_instantiation_p (const_tree);
195 static tree listify (tree);
196 static tree listify_autos (tree, tree);
197
198 /* Make the current scope suitable for access checking when we are
199    processing T.  T can be FUNCTION_DECL for instantiated function
200    template, or VAR_DECL for static member variable (need by
201    instantiate_decl).  */
202
203 static void
204 push_access_scope (tree t)
205 {
206   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
207               || TREE_CODE (t) == VAR_DECL);
208
209   if (DECL_FRIEND_CONTEXT (t))
210     push_nested_class (DECL_FRIEND_CONTEXT (t));
211   else if (DECL_CLASS_SCOPE_P (t))
212     push_nested_class (DECL_CONTEXT (t));
213   else
214     push_to_top_level ();
215
216   if (TREE_CODE (t) == FUNCTION_DECL)
217     {
218       saved_access_scope = tree_cons
219         (NULL_TREE, current_function_decl, saved_access_scope);
220       current_function_decl = t;
221     }
222 }
223
224 /* Restore the scope set up by push_access_scope.  T is the node we
225    are processing.  */
226
227 static void
228 pop_access_scope (tree t)
229 {
230   if (TREE_CODE (t) == FUNCTION_DECL)
231     {
232       current_function_decl = TREE_VALUE (saved_access_scope);
233       saved_access_scope = TREE_CHAIN (saved_access_scope);
234     }
235
236   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
237     pop_nested_class ();
238   else
239     pop_from_top_level ();
240 }
241
242 /* Do any processing required when DECL (a member template
243    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
244    to DECL, unless it is a specialization, in which case the DECL
245    itself is returned.  */
246
247 tree
248 finish_member_template_decl (tree decl)
249 {
250   if (decl == error_mark_node)
251     return error_mark_node;
252
253   gcc_assert (DECL_P (decl));
254
255   if (TREE_CODE (decl) == TYPE_DECL)
256     {
257       tree type;
258
259       type = TREE_TYPE (decl);
260       if (type == error_mark_node)
261         return error_mark_node;
262       if (MAYBE_CLASS_TYPE_P (type)
263           && CLASSTYPE_TEMPLATE_INFO (type)
264           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
265         {
266           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
267           check_member_template (tmpl);
268           return tmpl;
269         }
270       return NULL_TREE;
271     }
272   else if (TREE_CODE (decl) == FIELD_DECL)
273     error ("data member %qD cannot be a member template", decl);
274   else if (DECL_TEMPLATE_INFO (decl))
275     {
276       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
277         {
278           check_member_template (DECL_TI_TEMPLATE (decl));
279           return DECL_TI_TEMPLATE (decl);
280         }
281       else
282         return decl;
283     }
284   else
285     error ("invalid member template declaration %qD", decl);
286
287   return error_mark_node;
288 }
289
290 /* Return the template info node corresponding to T, whatever T is.  */
291
292 tree
293 get_template_info (const_tree t)
294 {
295   tree tinfo = NULL_TREE;
296
297   if (!t || t == error_mark_node)
298     return NULL;
299
300   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
301     tinfo = DECL_TEMPLATE_INFO (t);
302
303   if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
304     t = TREE_TYPE (t);
305
306   if (TAGGED_TYPE_P (t))
307     tinfo = TYPE_TEMPLATE_INFO (t);
308
309   return tinfo;
310 }
311
312 /* Returns the template nesting level of the indicated class TYPE.
313
314    For example, in:
315      template <class T>
316      struct A
317      {
318        template <class U>
319        struct B {};
320      };
321
322    A<T>::B<U> has depth two, while A<T> has depth one.
323    Both A<T>::B<int> and A<int>::B<U> have depth one, if
324    they are instantiations, not specializations.
325
326    This function is guaranteed to return 0 if passed NULL_TREE so
327    that, for example, `template_class_depth (current_class_type)' is
328    always safe.  */
329
330 int
331 template_class_depth (tree type)
332 {
333   int depth;
334
335   for (depth = 0;
336        type && TREE_CODE (type) != NAMESPACE_DECL;
337        type = (TREE_CODE (type) == FUNCTION_DECL)
338          ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
339     {
340       tree tinfo = get_template_info (type);
341
342       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
343           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
344         ++depth;
345     }
346
347   return depth;
348 }
349
350 /* Subroutine of maybe_begin_member_template_processing.
351    Returns true if processing DECL needs us to push template parms.  */
352
353 static bool
354 inline_needs_template_parms (tree decl)
355 {
356   if (! DECL_TEMPLATE_INFO (decl))
357     return false;
358
359   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
360           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
361 }
362
363 /* Subroutine of maybe_begin_member_template_processing.
364    Push the template parms in PARMS, starting from LEVELS steps into the
365    chain, and ending at the beginning, since template parms are listed
366    innermost first.  */
367
368 static void
369 push_inline_template_parms_recursive (tree parmlist, int levels)
370 {
371   tree parms = TREE_VALUE (parmlist);
372   int i;
373
374   if (levels > 1)
375     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
376
377   ++processing_template_decl;
378   current_template_parms
379     = tree_cons (size_int (processing_template_decl),
380                  parms, current_template_parms);
381   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
382
383   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
384                NULL);
385   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
386     {
387       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
388
389       if (parm == error_mark_node)
390         continue;
391
392       gcc_assert (DECL_P (parm));
393
394       switch (TREE_CODE (parm))
395         {
396         case TYPE_DECL:
397         case TEMPLATE_DECL:
398           pushdecl (parm);
399           break;
400
401         case PARM_DECL:
402           {
403             /* Make a CONST_DECL as is done in process_template_parm.
404                It is ugly that we recreate this here; the original
405                version built in process_template_parm is no longer
406                available.  */
407             tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
408                                     CONST_DECL, DECL_NAME (parm),
409                                     TREE_TYPE (parm));
410             DECL_ARTIFICIAL (decl) = 1;
411             TREE_CONSTANT (decl) = 1;
412             TREE_READONLY (decl) = 1;
413             DECL_INITIAL (decl) = DECL_INITIAL (parm);
414             SET_DECL_TEMPLATE_PARM_P (decl);
415             pushdecl (decl);
416           }
417           break;
418
419         default:
420           gcc_unreachable ();
421         }
422     }
423 }
424
425 /* Restore the template parameter context for a member template or
426    a friend template defined in a class definition.  */
427
428 void
429 maybe_begin_member_template_processing (tree decl)
430 {
431   tree parms;
432   int levels = 0;
433
434   if (inline_needs_template_parms (decl))
435     {
436       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
437       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
438
439       if (DECL_TEMPLATE_SPECIALIZATION (decl))
440         {
441           --levels;
442           parms = TREE_CHAIN (parms);
443         }
444
445       push_inline_template_parms_recursive (parms, levels);
446     }
447
448   /* Remember how many levels of template parameters we pushed so that
449      we can pop them later.  */
450   VEC_safe_push (int, heap, inline_parm_levels, levels);
451 }
452
453 /* Undo the effects of maybe_begin_member_template_processing.  */
454
455 void
456 maybe_end_member_template_processing (void)
457 {
458   int i;
459   int last;
460
461   if (VEC_length (int, inline_parm_levels) == 0)
462     return;
463
464   last = VEC_pop (int, inline_parm_levels);
465   for (i = 0; i < last; ++i)
466     {
467       --processing_template_decl;
468       current_template_parms = TREE_CHAIN (current_template_parms);
469       poplevel (0, 0, 0);
470     }
471 }
472
473 /* Return a new template argument vector which contains all of ARGS,
474    but has as its innermost set of arguments the EXTRA_ARGS.  */
475
476 static tree
477 add_to_template_args (tree args, tree extra_args)
478 {
479   tree new_args;
480   int extra_depth;
481   int i;
482   int j;
483
484   extra_depth = TMPL_ARGS_DEPTH (extra_args);
485   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
486
487   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
488     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
489
490   for (j = 1; j <= extra_depth; ++j, ++i)
491     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
492
493   return new_args;
494 }
495
496 /* Like add_to_template_args, but only the outermost ARGS are added to
497    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
498    (EXTRA_ARGS) levels are added.  This function is used to combine
499    the template arguments from a partial instantiation with the
500    template arguments used to attain the full instantiation from the
501    partial instantiation.  */
502
503 static tree
504 add_outermost_template_args (tree args, tree extra_args)
505 {
506   tree new_args;
507
508   /* If there are more levels of EXTRA_ARGS than there are ARGS,
509      something very fishy is going on.  */
510   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
511
512   /* If *all* the new arguments will be the EXTRA_ARGS, just return
513      them.  */
514   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
515     return extra_args;
516
517   /* For the moment, we make ARGS look like it contains fewer levels.  */
518   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
519
520   new_args = add_to_template_args (args, extra_args);
521
522   /* Now, we restore ARGS to its full dimensions.  */
523   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
524
525   return new_args;
526 }
527
528 /* Return the N levels of innermost template arguments from the ARGS.  */
529
530 tree
531 get_innermost_template_args (tree args, int n)
532 {
533   tree new_args;
534   int extra_levels;
535   int i;
536
537   gcc_assert (n >= 0);
538
539   /* If N is 1, just return the innermost set of template arguments.  */
540   if (n == 1)
541     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
542
543   /* If we're not removing anything, just return the arguments we were
544      given.  */
545   extra_levels = TMPL_ARGS_DEPTH (args) - n;
546   gcc_assert (extra_levels >= 0);
547   if (extra_levels == 0)
548     return args;
549
550   /* Make a new set of arguments, not containing the outer arguments.  */
551   new_args = make_tree_vec (n);
552   for (i = 1; i <= n; ++i)
553     SET_TMPL_ARGS_LEVEL (new_args, i,
554                          TMPL_ARGS_LEVEL (args, i + extra_levels));
555
556   return new_args;
557 }
558
559 /* The inverse of get_innermost_template_args: Return all but the innermost
560    EXTRA_LEVELS levels of template arguments from the ARGS.  */
561
562 static tree
563 strip_innermost_template_args (tree args, int extra_levels)
564 {
565   tree new_args;
566   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
567   int i;
568
569   gcc_assert (n >= 0);
570
571   /* If N is 1, just return the outermost set of template arguments.  */
572   if (n == 1)
573     return TMPL_ARGS_LEVEL (args, 1);
574
575   /* If we're not removing anything, just return the arguments we were
576      given.  */
577   gcc_assert (extra_levels >= 0);
578   if (extra_levels == 0)
579     return args;
580
581   /* Make a new set of arguments, not containing the inner arguments.  */
582   new_args = make_tree_vec (n);
583   for (i = 1; i <= n; ++i)
584     SET_TMPL_ARGS_LEVEL (new_args, i,
585                          TMPL_ARGS_LEVEL (args, i));
586
587   return new_args;
588 }
589
590 /* We've got a template header coming up; push to a new level for storing
591    the parms.  */
592
593 void
594 begin_template_parm_list (void)
595 {
596   /* We use a non-tag-transparent scope here, which causes pushtag to
597      put tags in this scope, rather than in the enclosing class or
598      namespace scope.  This is the right thing, since we want
599      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
600      global template class, push_template_decl handles putting the
601      TEMPLATE_DECL into top-level scope.  For a nested template class,
602      e.g.:
603
604        template <class T> struct S1 {
605          template <class T> struct S2 {};
606        };
607
608      pushtag contains special code to call pushdecl_with_scope on the
609      TEMPLATE_DECL for S2.  */
610   begin_scope (sk_template_parms, NULL);
611   ++processing_template_decl;
612   ++processing_template_parmlist;
613   note_template_header (0);
614 }
615
616 /* This routine is called when a specialization is declared.  If it is
617    invalid to declare a specialization here, an error is reported and
618    false is returned, otherwise this routine will return true.  */
619
620 static bool
621 check_specialization_scope (void)
622 {
623   tree scope = current_scope ();
624
625   /* [temp.expl.spec]
626
627      An explicit specialization shall be declared in the namespace of
628      which the template is a member, or, for member templates, in the
629      namespace of which the enclosing class or enclosing class
630      template is a member.  An explicit specialization of a member
631      function, member class or static data member of a class template
632      shall be declared in the namespace of which the class template
633      is a member.  */
634   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
635     {
636       error ("explicit specialization in non-namespace scope %qD", scope);
637       return false;
638     }
639
640   /* [temp.expl.spec]
641
642      In an explicit specialization declaration for a member of a class
643      template or a member template that appears in namespace scope,
644      the member template and some of its enclosing class templates may
645      remain unspecialized, except that the declaration shall not
646      explicitly specialize a class member template if its enclosing
647      class templates are not explicitly specialized as well.  */
648   if (current_template_parms)
649     {
650       error ("enclosing class templates are not explicitly specialized");
651       return false;
652     }
653
654   return true;
655 }
656
657 /* We've just seen template <>.  */
658
659 bool
660 begin_specialization (void)
661 {
662   begin_scope (sk_template_spec, NULL);
663   note_template_header (1);
664   return check_specialization_scope ();
665 }
666
667 /* Called at then end of processing a declaration preceded by
668    template<>.  */
669
670 void
671 end_specialization (void)
672 {
673   finish_scope ();
674   reset_specialization ();
675 }
676
677 /* Any template <>'s that we have seen thus far are not referring to a
678    function specialization.  */
679
680 void
681 reset_specialization (void)
682 {
683   processing_specialization = 0;
684   template_header_count = 0;
685 }
686
687 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
688    it was of the form template <>.  */
689
690 static void
691 note_template_header (int specialization)
692 {
693   processing_specialization = specialization;
694   template_header_count++;
695 }
696
697 /* We're beginning an explicit instantiation.  */
698
699 void
700 begin_explicit_instantiation (void)
701 {
702   gcc_assert (!processing_explicit_instantiation);
703   processing_explicit_instantiation = true;
704 }
705
706
707 void
708 end_explicit_instantiation (void)
709 {
710   gcc_assert (processing_explicit_instantiation);
711   processing_explicit_instantiation = false;
712 }
713
714 /* An explicit specialization or partial specialization TMPL is being
715    declared.  Check that the namespace in which the specialization is
716    occurring is permissible.  Returns false iff it is invalid to
717    specialize TMPL in the current namespace.  */
718
719 static bool
720 check_specialization_namespace (tree tmpl)
721 {
722   tree tpl_ns = decl_namespace_context (tmpl);
723
724   /* [tmpl.expl.spec]
725
726      An explicit specialization shall be declared in the namespace of
727      which the template is a member, or, for member templates, in the
728      namespace of which the enclosing class or enclosing class
729      template is a member.  An explicit specialization of a member
730      function, member class or static data member of a class template
731      shall be declared in the namespace of which the class template is
732      a member.  */
733   if (is_associated_namespace (current_namespace, tpl_ns))
734     /* Same or super-using namespace.  */
735     return true;
736   else
737     {
738       permerror (input_location, "specialization of %qD in different namespace", tmpl);
739       permerror (input_location, "  from definition of %q+#D", tmpl);
740       return false;
741     }
742 }
743
744 /* SPEC is an explicit instantiation.  Check that it is valid to
745    perform this explicit instantiation in the current namespace.  */
746
747 static void
748 check_explicit_instantiation_namespace (tree spec)
749 {
750   tree ns;
751
752   /* DR 275: An explicit instantiation shall appear in an enclosing
753      namespace of its template.  */
754   ns = decl_namespace_context (spec);
755   if (!is_ancestor (current_namespace, ns))
756     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
757                "(which does not enclose namespace %qD)",
758                spec, current_namespace, ns);
759 }
760
761 /* The TYPE is being declared.  If it is a template type, that means it
762    is a partial specialization.  Do appropriate error-checking.  */
763
764 tree
765 maybe_process_partial_specialization (tree type)
766 {
767   tree context;
768
769   if (type == error_mark_node)
770     return error_mark_node;
771
772   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
773     {
774       error ("name of class shadows template template parameter %qD",
775              TYPE_NAME (type));
776       return error_mark_node;
777     }
778
779   context = TYPE_CONTEXT (type);
780
781   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
782     {
783       /* This is for ordinary explicit specialization and partial
784          specialization of a template class such as:
785
786            template <> class C<int>;
787
788          or:
789
790            template <class T> class C<T*>;
791
792          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
793
794       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
795           && !COMPLETE_TYPE_P (type))
796         {
797           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
798           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
799           if (processing_template_decl)
800             {
801               if (push_template_decl (TYPE_MAIN_DECL (type))
802                   == error_mark_node)
803                 return error_mark_node;
804             }
805         }
806       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
807         error ("specialization of %qT after instantiation", type);
808     }
809   else if (CLASS_TYPE_P (type)
810            && !CLASSTYPE_USE_TEMPLATE (type)
811            && CLASSTYPE_TEMPLATE_INFO (type)
812            && context && CLASS_TYPE_P (context)
813            && CLASSTYPE_TEMPLATE_INFO (context))
814     {
815       /* This is for an explicit specialization of member class
816          template according to [temp.expl.spec/18]:
817
818            template <> template <class U> class C<int>::D;
819
820          The context `C<int>' must be an implicit instantiation.
821          Otherwise this is just a member class template declared
822          earlier like:
823
824            template <> class C<int> { template <class U> class D; };
825            template <> template <class U> class C<int>::D;
826
827          In the first case, `C<int>::D' is a specialization of `C<T>::D'
828          while in the second case, `C<int>::D' is a primary template
829          and `C<T>::D' may not exist.  */
830
831       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
832           && !COMPLETE_TYPE_P (type))
833         {
834           tree t;
835           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
836
837           if (current_namespace
838               != decl_namespace_context (tmpl))
839             {
840               permerror (input_location, "specializing %q#T in different namespace", type);
841               permerror (input_location, "  from definition of %q+#D", tmpl);
842             }
843
844           /* Check for invalid specialization after instantiation:
845
846                template <> template <> class C<int>::D<int>;
847                template <> template <class U> class C<int>::D;  */
848
849           for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
850                t; t = TREE_CHAIN (t))
851             {
852               tree inst = TREE_VALUE (t);
853               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst))
854                 {
855                   /* We already have a full specialization of this partial
856                      instantiation.  Reassign it to the new member
857                      specialization template.  */
858                   spec_entry elt;
859                   spec_entry **slot;
860
861                   elt.tmpl = most_general_template (tmpl);
862                   elt.args = CLASSTYPE_TI_ARGS (inst);
863                   elt.spec = inst;
864
865                   htab_remove_elt (type_specializations, &elt);
866
867                   elt.tmpl = tmpl;
868                   elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
869
870                   slot = (spec_entry **)
871                     htab_find_slot (type_specializations, &elt, INSERT);
872                   *slot = GGC_NEW (spec_entry);
873                   **slot = elt;
874                 }
875               else if (COMPLETE_TYPE_P (inst) || TYPE_BEING_DEFINED (inst))
876                 /* But if we've had an implicit instantiation, that's a
877                    problem ([temp.expl.spec]/6).  */
878                 error ("specialization %qT after instantiation %qT",
879                        type, inst);
880             }
881
882           /* Mark TYPE as a specialization.  And as a result, we only
883              have one level of template argument for the innermost
884              class template.  */
885           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
886           CLASSTYPE_TI_ARGS (type)
887             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
888         }
889     }
890   else if (processing_specialization)
891     {
892       error ("explicit specialization of non-template %qT", type);
893       return error_mark_node;
894     }
895
896   return type;
897 }
898
899 /* Returns nonzero if we can optimize the retrieval of specializations
900    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
901    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
902
903 static inline bool
904 optimize_specialization_lookup_p (tree tmpl)
905 {
906   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
907           && DECL_CLASS_SCOPE_P (tmpl)
908           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
909              parameter.  */
910           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
911           /* The optimized lookup depends on the fact that the
912              template arguments for the member function template apply
913              purely to the containing class, which is not true if the
914              containing class is an explicit or partial
915              specialization.  */
916           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
917           && !DECL_MEMBER_TEMPLATE_P (tmpl)
918           && !DECL_CONV_FN_P (tmpl)
919           /* It is possible to have a template that is not a member
920              template and is not a member of a template class:
921
922              template <typename T>
923              struct S { friend A::f(); };
924
925              Here, the friend function is a template, but the context does
926              not have template information.  The optimized lookup relies
927              on having ARGS be the template arguments for both the class
928              and the function template.  */
929           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
930 }
931
932 /* Retrieve the specialization (in the sense of [temp.spec] - a
933    specialization is either an instantiation or an explicit
934    specialization) of TMPL for the given template ARGS.  If there is
935    no such specialization, return NULL_TREE.  The ARGS are a vector of
936    arguments, or a vector of vectors of arguments, in the case of
937    templates with more than one level of parameters.
938
939    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
940    then we search for a partial specialization matching ARGS.  This
941    parameter is ignored if TMPL is not a class template.  */
942
943 static tree
944 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
945 {
946   if (args == error_mark_node)
947     return NULL_TREE;
948
949   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
950
951   /* There should be as many levels of arguments as there are
952      levels of parameters.  */
953   gcc_assert (TMPL_ARGS_DEPTH (args)
954               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
955
956   if (optimize_specialization_lookup_p (tmpl))
957     {
958       tree class_template;
959       tree class_specialization;
960       VEC(tree,gc) *methods;
961       tree fns;
962       int idx;
963
964       /* The template arguments actually apply to the containing
965          class.  Find the class specialization with those
966          arguments.  */
967       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
968       class_specialization
969         = retrieve_specialization (class_template, args, 0);
970       if (!class_specialization)
971         return NULL_TREE;
972       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
973          for the specialization.  */
974       idx = class_method_index_for_fn (class_specialization, tmpl);
975       if (idx == -1)
976         return NULL_TREE;
977       /* Iterate through the methods with the indicated name, looking
978          for the one that has an instance of TMPL.  */
979       methods = CLASSTYPE_METHOD_VEC (class_specialization);
980       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
981         {
982           tree fn = OVL_CURRENT (fns);
983           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
984               /* using-declarations can add base methods to the method vec,
985                  and we don't want those here.  */
986               && DECL_CONTEXT (fn) == class_specialization)
987             return fn;
988         }
989       return NULL_TREE;
990     }
991   else
992     {
993       spec_entry *found;
994       spec_entry elt;
995       htab_t specializations;
996
997       elt.tmpl = tmpl;
998       elt.args = args;
999       elt.spec = NULL_TREE;
1000
1001       if (DECL_CLASS_TEMPLATE_P (tmpl))
1002         specializations = type_specializations;
1003       else
1004         specializations = decl_specializations;
1005
1006       if (hash == 0)
1007         hash = hash_specialization (&elt);
1008       found = (spec_entry *) htab_find_with_hash (specializations, &elt, hash);
1009       if (found)
1010         return found->spec;
1011     }
1012
1013   return NULL_TREE;
1014 }
1015
1016 /* Like retrieve_specialization, but for local declarations.  */
1017
1018 static tree
1019 retrieve_local_specialization (tree tmpl)
1020 {
1021   tree spec;
1022
1023   if (local_specializations == NULL)
1024     return NULL_TREE;
1025
1026   spec = (tree) htab_find_with_hash (local_specializations, tmpl,
1027                                      htab_hash_pointer (tmpl));
1028   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
1029 }
1030
1031 /* Returns nonzero iff DECL is a specialization of TMPL.  */
1032
1033 int
1034 is_specialization_of (tree decl, tree tmpl)
1035 {
1036   tree t;
1037
1038   if (TREE_CODE (decl) == FUNCTION_DECL)
1039     {
1040       for (t = decl;
1041            t != NULL_TREE;
1042            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1043         if (t == tmpl)
1044           return 1;
1045     }
1046   else
1047     {
1048       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1049
1050       for (t = TREE_TYPE (decl);
1051            t != NULL_TREE;
1052            t = CLASSTYPE_USE_TEMPLATE (t)
1053              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1054         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1055           return 1;
1056     }
1057
1058   return 0;
1059 }
1060
1061 /* Returns nonzero iff DECL is a specialization of friend declaration
1062    FRIEND_DECL according to [temp.friend].  */
1063
1064 bool
1065 is_specialization_of_friend (tree decl, tree friend_decl)
1066 {
1067   bool need_template = true;
1068   int template_depth;
1069
1070   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1071               || TREE_CODE (decl) == TYPE_DECL);
1072
1073   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1074      of a template class, we want to check if DECL is a specialization
1075      if this.  */
1076   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1077       && DECL_TEMPLATE_INFO (friend_decl)
1078       && !DECL_USE_TEMPLATE (friend_decl))
1079     {
1080       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1081       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1082       need_template = false;
1083     }
1084   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1085            && !PRIMARY_TEMPLATE_P (friend_decl))
1086     need_template = false;
1087
1088   /* There is nothing to do if this is not a template friend.  */
1089   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1090     return false;
1091
1092   if (is_specialization_of (decl, friend_decl))
1093     return true;
1094
1095   /* [temp.friend/6]
1096      A member of a class template may be declared to be a friend of a
1097      non-template class.  In this case, the corresponding member of
1098      every specialization of the class template is a friend of the
1099      class granting friendship.
1100
1101      For example, given a template friend declaration
1102
1103        template <class T> friend void A<T>::f();
1104
1105      the member function below is considered a friend
1106
1107        template <> struct A<int> {
1108          void f();
1109        };
1110
1111      For this type of template friend, TEMPLATE_DEPTH below will be
1112      nonzero.  To determine if DECL is a friend of FRIEND, we first
1113      check if the enclosing class is a specialization of another.  */
1114
1115   template_depth = template_class_depth (DECL_CONTEXT (friend_decl));
1116   if (template_depth
1117       && DECL_CLASS_SCOPE_P (decl)
1118       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1119                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1120     {
1121       /* Next, we check the members themselves.  In order to handle
1122          a few tricky cases, such as when FRIEND_DECL's are
1123
1124            template <class T> friend void A<T>::g(T t);
1125            template <class T> template <T t> friend void A<T>::h();
1126
1127          and DECL's are
1128
1129            void A<int>::g(int);
1130            template <int> void A<int>::h();
1131
1132          we need to figure out ARGS, the template arguments from
1133          the context of DECL.  This is required for template substitution
1134          of `T' in the function parameter of `g' and template parameter
1135          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1136
1137       tree context = DECL_CONTEXT (decl);
1138       tree args = NULL_TREE;
1139       int current_depth = 0;
1140
1141       while (current_depth < template_depth)
1142         {
1143           if (CLASSTYPE_TEMPLATE_INFO (context))
1144             {
1145               if (current_depth == 0)
1146                 args = TYPE_TI_ARGS (context);
1147               else
1148                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1149               current_depth++;
1150             }
1151           context = TYPE_CONTEXT (context);
1152         }
1153
1154       if (TREE_CODE (decl) == FUNCTION_DECL)
1155         {
1156           bool is_template;
1157           tree friend_type;
1158           tree decl_type;
1159           tree friend_args_type;
1160           tree decl_args_type;
1161
1162           /* Make sure that both DECL and FRIEND_DECL are templates or
1163              non-templates.  */
1164           is_template = DECL_TEMPLATE_INFO (decl)
1165                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1166           if (need_template ^ is_template)
1167             return false;
1168           else if (is_template)
1169             {
1170               /* If both are templates, check template parameter list.  */
1171               tree friend_parms
1172                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1173                                          args, tf_none);
1174               if (!comp_template_parms
1175                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1176                       friend_parms))
1177                 return false;
1178
1179               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1180             }
1181           else
1182             decl_type = TREE_TYPE (decl);
1183
1184           friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1185                                               tf_none, NULL_TREE);
1186           if (friend_type == error_mark_node)
1187             return false;
1188
1189           /* Check if return types match.  */
1190           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1191             return false;
1192
1193           /* Check if function parameter types match, ignoring the
1194              `this' parameter.  */
1195           friend_args_type = TYPE_ARG_TYPES (friend_type);
1196           decl_args_type = TYPE_ARG_TYPES (decl_type);
1197           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1198             friend_args_type = TREE_CHAIN (friend_args_type);
1199           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1200             decl_args_type = TREE_CHAIN (decl_args_type);
1201
1202           return compparms (decl_args_type, friend_args_type);
1203         }
1204       else
1205         {
1206           /* DECL is a TYPE_DECL */
1207           bool is_template;
1208           tree decl_type = TREE_TYPE (decl);
1209
1210           /* Make sure that both DECL and FRIEND_DECL are templates or
1211              non-templates.  */
1212           is_template
1213             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1214               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1215
1216           if (need_template ^ is_template)
1217             return false;
1218           else if (is_template)
1219             {
1220               tree friend_parms;
1221               /* If both are templates, check the name of the two
1222                  TEMPLATE_DECL's first because is_friend didn't.  */
1223               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1224                   != DECL_NAME (friend_decl))
1225                 return false;
1226
1227               /* Now check template parameter list.  */
1228               friend_parms
1229                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1230                                          args, tf_none);
1231               return comp_template_parms
1232                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1233                  friend_parms);
1234             }
1235           else
1236             return (DECL_NAME (decl)
1237                     == DECL_NAME (friend_decl));
1238         }
1239     }
1240   return false;
1241 }
1242
1243 /* Register the specialization SPEC as a specialization of TMPL with
1244    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1245    is actually just a friend declaration.  Returns SPEC, or an
1246    equivalent prior declaration, if available.  */
1247
1248 static tree
1249 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1250                          hashval_t hash)
1251 {
1252   tree fn;
1253   spec_entry **slot = NULL;
1254   spec_entry elt;
1255
1256   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec));
1257
1258   if (TREE_CODE (spec) == FUNCTION_DECL
1259       && uses_template_parms (DECL_TI_ARGS (spec)))
1260     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1261        register it; we want the corresponding TEMPLATE_DECL instead.
1262        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1263        the more obvious `uses_template_parms (spec)' to avoid problems
1264        with default function arguments.  In particular, given
1265        something like this:
1266
1267           template <class T> void f(T t1, T t = T())
1268
1269        the default argument expression is not substituted for in an
1270        instantiation unless and until it is actually needed.  */
1271     return spec;
1272
1273   if (optimize_specialization_lookup_p (tmpl))
1274     /* We don't put these specializations in the hash table, but we might
1275        want to give an error about a mismatch.  */
1276     fn = retrieve_specialization (tmpl, args, 0);
1277   else
1278     {
1279       elt.tmpl = tmpl;
1280       elt.args = args;
1281       elt.spec = spec;
1282
1283       if (hash == 0)
1284         hash = hash_specialization (&elt);
1285
1286       slot = (spec_entry **)
1287         htab_find_slot_with_hash (decl_specializations, &elt, hash, INSERT);
1288       if (*slot)
1289         fn = (*slot)->spec;
1290       else
1291         fn = NULL_TREE;
1292     }
1293
1294   /* We can sometimes try to re-register a specialization that we've
1295      already got.  In particular, regenerate_decl_from_template calls
1296      duplicate_decls which will update the specialization list.  But,
1297      we'll still get called again here anyhow.  It's more convenient
1298      to simply allow this than to try to prevent it.  */
1299   if (fn == spec)
1300     return spec;
1301   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1302     {
1303       if (DECL_TEMPLATE_INSTANTIATION (fn))
1304         {
1305           if (DECL_ODR_USED (fn)
1306               || DECL_EXPLICIT_INSTANTIATION (fn))
1307             {
1308               error ("specialization of %qD after instantiation",
1309                      fn);
1310               return error_mark_node;
1311             }
1312           else
1313             {
1314               tree clone;
1315               /* This situation should occur only if the first
1316                  specialization is an implicit instantiation, the
1317                  second is an explicit specialization, and the
1318                  implicit instantiation has not yet been used.  That
1319                  situation can occur if we have implicitly
1320                  instantiated a member function and then specialized
1321                  it later.
1322
1323                  We can also wind up here if a friend declaration that
1324                  looked like an instantiation turns out to be a
1325                  specialization:
1326
1327                    template <class T> void foo(T);
1328                    class S { friend void foo<>(int) };
1329                    template <> void foo(int);
1330
1331                  We transform the existing DECL in place so that any
1332                  pointers to it become pointers to the updated
1333                  declaration.
1334
1335                  If there was a definition for the template, but not
1336                  for the specialization, we want this to look as if
1337                  there were no definition, and vice versa.  */
1338               DECL_INITIAL (fn) = NULL_TREE;
1339               duplicate_decls (spec, fn, is_friend);
1340               /* The call to duplicate_decls will have applied
1341                  [temp.expl.spec]:
1342
1343                    An explicit specialization of a function template
1344                    is inline only if it is explicitly declared to be,
1345                    and independently of whether its function template
1346                    is.
1347
1348                 to the primary function; now copy the inline bits to
1349                 the various clones.  */
1350               FOR_EACH_CLONE (clone, fn)
1351                 {
1352                   DECL_DECLARED_INLINE_P (clone)
1353                     = DECL_DECLARED_INLINE_P (fn);
1354                   DECL_SOURCE_LOCATION (clone)
1355                     = DECL_SOURCE_LOCATION (fn);
1356                 }
1357               check_specialization_namespace (fn);
1358
1359               return fn;
1360             }
1361         }
1362       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1363         {
1364           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1365             /* Dup decl failed, but this is a new definition. Set the
1366                line number so any errors match this new
1367                definition.  */
1368             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1369
1370           return fn;
1371         }
1372     }
1373   else if (fn)
1374     return duplicate_decls (spec, fn, is_friend);
1375
1376   /* A specialization must be declared in the same namespace as the
1377      template it is specializing.  */
1378   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1379       && !check_specialization_namespace (tmpl))
1380     DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1381
1382   if (!optimize_specialization_lookup_p (tmpl))
1383     {
1384       gcc_assert (tmpl && args && spec);
1385       *slot = GGC_NEW (spec_entry);
1386       **slot = elt;
1387       if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1388           && PRIMARY_TEMPLATE_P (tmpl)
1389           && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1390         /* TMPL is a forward declaration of a template function; keep a list
1391            of all specializations in case we need to reassign them to a friend
1392            template later in tsubst_friend_function.  */
1393         DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1394           = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1395     }
1396
1397   return spec;
1398 }
1399
1400 /* Returns true iff two spec_entry nodes are equivalent.  Only compares the
1401    TMPL and ARGS members, ignores SPEC.  */
1402
1403 static int
1404 eq_specializations (const void *p1, const void *p2)
1405 {
1406   const spec_entry *e1 = (const spec_entry *)p1;
1407   const spec_entry *e2 = (const spec_entry *)p2;
1408
1409   return (e1->tmpl == e2->tmpl
1410           && comp_template_args (e1->args, e2->args));
1411 }
1412
1413 /* Returns a hash for a template TMPL and template arguments ARGS.  */
1414
1415 static hashval_t
1416 hash_tmpl_and_args (tree tmpl, tree args)
1417 {
1418   hashval_t val = DECL_UID (tmpl);
1419   return iterative_hash_template_arg (args, val);
1420 }
1421
1422 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1423    ignoring SPEC.  */
1424
1425 static hashval_t
1426 hash_specialization (const void *p)
1427 {
1428   const spec_entry *e = (const spec_entry *)p;
1429   return hash_tmpl_and_args (e->tmpl, e->args);
1430 }
1431
1432 /* Recursively calculate a hash value for a template argument ARG, for use
1433    in the hash tables of template specializations.  */
1434
1435 static hashval_t
1436 iterative_hash_template_arg (tree arg, hashval_t val)
1437 {
1438   unsigned HOST_WIDE_INT i;
1439   enum tree_code code;
1440   char tclass;
1441
1442   if (arg == NULL_TREE)
1443     return iterative_hash_object (arg, val);
1444
1445   if (!TYPE_P (arg))
1446     STRIP_NOPS (arg);
1447
1448   code = TREE_CODE (arg);
1449   tclass = TREE_CODE_CLASS (code);
1450
1451   val = iterative_hash_object (code, val);
1452
1453   switch (code)
1454     {
1455     case ERROR_MARK:
1456       return val;
1457
1458     case IDENTIFIER_NODE:
1459       return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1460
1461     case TREE_VEC:
1462       {
1463         int i, len = TREE_VEC_LENGTH (arg);
1464         for (i = 0; i < len; ++i)
1465           val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1466         return val;
1467       }
1468
1469     case TYPE_PACK_EXPANSION:
1470     case EXPR_PACK_EXPANSION:
1471       return iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1472
1473     case ARGUMENT_PACK_SELECT:
1474       /* We can get one of these when re-hashing a previous entry in the middle
1475          of substituting into a pack expansion.  Just look through it...  */
1476       arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1477       /* ...and fall through.  */
1478     case TYPE_ARGUMENT_PACK:
1479     case NONTYPE_ARGUMENT_PACK:
1480       return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1481
1482     case TREE_LIST:
1483       for (; arg; arg = TREE_CHAIN (arg))
1484         val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1485       return val;
1486
1487     case OVERLOAD:
1488       for (; arg; arg = OVL_CHAIN (arg))
1489         val = iterative_hash_template_arg (OVL_FUNCTION (arg), val);
1490       return val;
1491
1492     case CONSTRUCTOR:
1493       {
1494         tree field, value;
1495         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1496           {
1497             val = iterative_hash_template_arg (field, val);
1498             val = iterative_hash_template_arg (value, val);
1499           }
1500         return val;
1501       }
1502
1503     case PARM_DECL:
1504       if (!DECL_ARTIFICIAL (arg))
1505         val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1506       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1507
1508     case TARGET_EXPR:
1509       return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1510
1511     case PTRMEM_CST:
1512       val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1513       return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1514
1515     case TEMPLATE_PARM_INDEX:
1516       val = iterative_hash_template_arg
1517         (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1518       val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1519       return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1520
1521     case TRAIT_EXPR:
1522       val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1523       val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1524       return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1525
1526     case BASELINK:
1527       val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1528                                          val);
1529       return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1530                                           val);
1531
1532     case MODOP_EXPR:
1533       val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1534       code = TREE_CODE (TREE_OPERAND (arg, 1));
1535       val = iterative_hash_object (code, val);
1536       return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1537
1538     default:
1539       switch (tclass)
1540         {
1541         case tcc_type:
1542           if (TYPE_CANONICAL (arg))
1543             return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1544                                           val);
1545           else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1546             return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1547           /* Otherwise just compare the types during lookup.  */
1548           return val;
1549
1550         case tcc_declaration:
1551         case tcc_constant:
1552           return iterative_hash_expr (arg, val);
1553
1554         default:
1555           gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1556           {
1557             unsigned n = TREE_OPERAND_LENGTH (arg);
1558             for (i = 0; i < n; ++i)
1559               val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1560             return val;
1561           }
1562         }
1563     }
1564   gcc_unreachable ();
1565   return 0;
1566 }
1567
1568 /* Unregister the specialization SPEC as a specialization of TMPL.
1569    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1570    if the SPEC was listed as a specialization of TMPL.
1571
1572    Note that SPEC has been ggc_freed, so we can't look inside it.  */
1573
1574 bool
1575 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1576 {
1577   spec_entry **slot;
1578   spec_entry elt;
1579
1580   elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1581   elt.args = TI_ARGS (tinfo);
1582   elt.spec = NULL_TREE;
1583
1584   slot = (spec_entry **) htab_find_slot (decl_specializations, &elt, INSERT);
1585   if (*slot)
1586     {
1587       gcc_assert ((*slot)->spec == spec || (*slot)->spec == new_spec);
1588       gcc_assert (new_spec != NULL_TREE);
1589       (*slot)->spec = new_spec;
1590       return 1;
1591     }
1592
1593   return 0;
1594 }
1595
1596 /* Compare an entry in the local specializations hash table P1 (which
1597    is really a pointer to a TREE_LIST) with P2 (which is really a
1598    DECL).  */
1599
1600 static int
1601 eq_local_specializations (const void *p1, const void *p2)
1602 {
1603   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1604 }
1605
1606 /* Hash P1, an entry in the local specializations table.  */
1607
1608 static hashval_t
1609 hash_local_specialization (const void* p1)
1610 {
1611   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1612 }
1613
1614 /* Like register_specialization, but for local declarations.  We are
1615    registering SPEC, an instantiation of TMPL.  */
1616
1617 static void
1618 register_local_specialization (tree spec, tree tmpl)
1619 {
1620   void **slot;
1621
1622   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1623                                    htab_hash_pointer (tmpl), INSERT);
1624   *slot = build_tree_list (spec, tmpl);
1625 }
1626
1627 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1628    specialized class.  */
1629
1630 bool
1631 explicit_class_specialization_p (tree type)
1632 {
1633   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1634     return false;
1635   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1636 }
1637
1638 /* Print the list of candidate FNS in an error message.  */
1639
1640 void
1641 print_candidates (tree fns)
1642 {
1643   tree fn;
1644   tree f;
1645
1646   const char *str = "candidates are:";
1647
1648   if (is_overloaded_fn (fns))
1649     {
1650       for (f = fns; f; f = OVL_NEXT (f))
1651         {
1652           error ("%s %+#D", str, OVL_CURRENT (f));
1653           str = "               ";
1654         }
1655     }
1656   else for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1657     {
1658       for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1659         error ("%s %+#D", str, OVL_CURRENT (f));
1660       str = "               ";
1661     }
1662 }
1663
1664 /* Returns the template (one of the functions given by TEMPLATE_ID)
1665    which can be specialized to match the indicated DECL with the
1666    explicit template args given in TEMPLATE_ID.  The DECL may be
1667    NULL_TREE if none is available.  In that case, the functions in
1668    TEMPLATE_ID are non-members.
1669
1670    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1671    specialization of a member template.
1672
1673    The TEMPLATE_COUNT is the number of references to qualifying
1674    template classes that appeared in the name of the function. See
1675    check_explicit_specialization for a more accurate description.
1676
1677    TSK indicates what kind of template declaration (if any) is being
1678    declared.  TSK_TEMPLATE indicates that the declaration given by
1679    DECL, though a FUNCTION_DECL, has template parameters, and is
1680    therefore a template function.
1681
1682    The template args (those explicitly specified and those deduced)
1683    are output in a newly created vector *TARGS_OUT.
1684
1685    If it is impossible to determine the result, an error message is
1686    issued.  The error_mark_node is returned to indicate failure.  */
1687
1688 static tree
1689 determine_specialization (tree template_id,
1690                           tree decl,
1691                           tree* targs_out,
1692                           int need_member_template,
1693                           int template_count,
1694                           tmpl_spec_kind tsk)
1695 {
1696   tree fns;
1697   tree targs;
1698   tree explicit_targs;
1699   tree candidates = NULL_TREE;
1700   /* A TREE_LIST of templates of which DECL may be a specialization.
1701      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1702      corresponding TREE_PURPOSE is the set of template arguments that,
1703      when used to instantiate the template, would produce a function
1704      with the signature of DECL.  */
1705   tree templates = NULL_TREE;
1706   int header_count;
1707   struct cp_binding_level *b;
1708
1709   *targs_out = NULL_TREE;
1710
1711   if (template_id == error_mark_node || decl == error_mark_node)
1712     return error_mark_node;
1713
1714   fns = TREE_OPERAND (template_id, 0);
1715   explicit_targs = TREE_OPERAND (template_id, 1);
1716
1717   if (fns == error_mark_node)
1718     return error_mark_node;
1719
1720   /* Check for baselinks.  */
1721   if (BASELINK_P (fns))
1722     fns = BASELINK_FUNCTIONS (fns);
1723
1724   if (!is_overloaded_fn (fns))
1725     {
1726       error ("%qD is not a function template", fns);
1727       return error_mark_node;
1728     }
1729
1730   /* Count the number of template headers specified for this
1731      specialization.  */
1732   header_count = 0;
1733   for (b = current_binding_level;
1734        b->kind == sk_template_parms;
1735        b = b->level_chain)
1736     ++header_count;
1737
1738   for (; fns; fns = OVL_NEXT (fns))
1739     {
1740       tree fn = OVL_CURRENT (fns);
1741
1742       if (TREE_CODE (fn) == TEMPLATE_DECL)
1743         {
1744           tree decl_arg_types;
1745           tree fn_arg_types;
1746
1747           /* In case of explicit specialization, we need to check if
1748              the number of template headers appearing in the specialization
1749              is correct. This is usually done in check_explicit_specialization,
1750              but the check done there cannot be exhaustive when specializing
1751              member functions. Consider the following code:
1752
1753              template <> void A<int>::f(int);
1754              template <> template <> void A<int>::f(int);
1755
1756              Assuming that A<int> is not itself an explicit specialization
1757              already, the first line specializes "f" which is a non-template
1758              member function, whilst the second line specializes "f" which
1759              is a template member function. So both lines are syntactically
1760              correct, and check_explicit_specialization does not reject
1761              them.
1762
1763              Here, we can do better, as we are matching the specialization
1764              against the declarations. We count the number of template
1765              headers, and we check if they match TEMPLATE_COUNT + 1
1766              (TEMPLATE_COUNT is the number of qualifying template classes,
1767              plus there must be another header for the member template
1768              itself).
1769
1770              Notice that if header_count is zero, this is not a
1771              specialization but rather a template instantiation, so there
1772              is no check we can perform here.  */
1773           if (header_count && header_count != template_count + 1)
1774             continue;
1775
1776           /* Check that the number of template arguments at the
1777              innermost level for DECL is the same as for FN.  */
1778           if (current_binding_level->kind == sk_template_parms
1779               && !current_binding_level->explicit_spec_p
1780               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1781                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1782                                       (current_template_parms))))
1783             continue;
1784
1785           /* DECL might be a specialization of FN.  */
1786           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1787           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1788
1789           /* For a non-static member function, we need to make sure
1790              that the const qualification is the same.  Since
1791              get_bindings does not try to merge the "this" parameter,
1792              we must do the comparison explicitly.  */
1793           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1794               && !same_type_p (TREE_VALUE (fn_arg_types),
1795                                TREE_VALUE (decl_arg_types)))
1796             continue;
1797
1798           /* Skip the "this" parameter and, for constructors of
1799              classes with virtual bases, the VTT parameter.  A
1800              full specialization of a constructor will have a VTT
1801              parameter, but a template never will.  */ 
1802           decl_arg_types 
1803             = skip_artificial_parms_for (decl, decl_arg_types);
1804           fn_arg_types 
1805             = skip_artificial_parms_for (fn, fn_arg_types);
1806
1807           /* Check that the number of function parameters matches.
1808              For example,
1809                template <class T> void f(int i = 0);
1810                template <> void f<int>();
1811              The specialization f<int> is invalid but is not caught
1812              by get_bindings below.  */
1813           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1814             continue;
1815
1816           /* Function templates cannot be specializations; there are
1817              no partial specializations of functions.  Therefore, if
1818              the type of DECL does not match FN, there is no
1819              match.  */
1820           if (tsk == tsk_template)
1821             {
1822               if (compparms (fn_arg_types, decl_arg_types))
1823                 candidates = tree_cons (NULL_TREE, fn, candidates);
1824               continue;
1825             }
1826
1827           /* See whether this function might be a specialization of this
1828              template.  */
1829           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1830
1831           if (!targs)
1832             /* We cannot deduce template arguments that when used to
1833                specialize TMPL will produce DECL.  */
1834             continue;
1835
1836           /* Save this template, and the arguments deduced.  */
1837           templates = tree_cons (targs, fn, templates);
1838         }
1839       else if (need_member_template)
1840         /* FN is an ordinary member function, and we need a
1841            specialization of a member template.  */
1842         ;
1843       else if (TREE_CODE (fn) != FUNCTION_DECL)
1844         /* We can get IDENTIFIER_NODEs here in certain erroneous
1845            cases.  */
1846         ;
1847       else if (!DECL_FUNCTION_MEMBER_P (fn))
1848         /* This is just an ordinary non-member function.  Nothing can
1849            be a specialization of that.  */
1850         ;
1851       else if (DECL_ARTIFICIAL (fn))
1852         /* Cannot specialize functions that are created implicitly.  */
1853         ;
1854       else
1855         {
1856           tree decl_arg_types;
1857
1858           /* This is an ordinary member function.  However, since
1859              we're here, we can assume it's enclosing class is a
1860              template class.  For example,
1861
1862                template <typename T> struct S { void f(); };
1863                template <> void S<int>::f() {}
1864
1865              Here, S<int>::f is a non-template, but S<int> is a
1866              template class.  If FN has the same type as DECL, we
1867              might be in business.  */
1868
1869           if (!DECL_TEMPLATE_INFO (fn))
1870             /* Its enclosing class is an explicit specialization
1871                of a template class.  This is not a candidate.  */
1872             continue;
1873
1874           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1875                             TREE_TYPE (TREE_TYPE (fn))))
1876             /* The return types differ.  */
1877             continue;
1878
1879           /* Adjust the type of DECL in case FN is a static member.  */
1880           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1881           if (DECL_STATIC_FUNCTION_P (fn)
1882               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1883             decl_arg_types = TREE_CHAIN (decl_arg_types);
1884
1885           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1886                          decl_arg_types))
1887             /* They match!  */
1888             candidates = tree_cons (NULL_TREE, fn, candidates);
1889         }
1890     }
1891
1892   if (templates && TREE_CHAIN (templates))
1893     {
1894       /* We have:
1895
1896            [temp.expl.spec]
1897
1898            It is possible for a specialization with a given function
1899            signature to be instantiated from more than one function
1900            template.  In such cases, explicit specification of the
1901            template arguments must be used to uniquely identify the
1902            function template specialization being specialized.
1903
1904          Note that here, there's no suggestion that we're supposed to
1905          determine which of the candidate templates is most
1906          specialized.  However, we, also have:
1907
1908            [temp.func.order]
1909
1910            Partial ordering of overloaded function template
1911            declarations is used in the following contexts to select
1912            the function template to which a function template
1913            specialization refers:
1914
1915            -- when an explicit specialization refers to a function
1916               template.
1917
1918          So, we do use the partial ordering rules, at least for now.
1919          This extension can only serve to make invalid programs valid,
1920          so it's safe.  And, there is strong anecdotal evidence that
1921          the committee intended the partial ordering rules to apply;
1922          the EDG front end has that behavior, and John Spicer claims
1923          that the committee simply forgot to delete the wording in
1924          [temp.expl.spec].  */
1925       tree tmpl = most_specialized_instantiation (templates);
1926       if (tmpl != error_mark_node)
1927         {
1928           templates = tmpl;
1929           TREE_CHAIN (templates) = NULL_TREE;
1930         }
1931     }
1932
1933   if (templates == NULL_TREE && candidates == NULL_TREE)
1934     {
1935       error ("template-id %qD for %q+D does not match any template "
1936              "declaration", template_id, decl);
1937       return error_mark_node;
1938     }
1939   else if ((templates && TREE_CHAIN (templates))
1940            || (candidates && TREE_CHAIN (candidates))
1941            || (templates && candidates))
1942     {
1943       error ("ambiguous template specialization %qD for %q+D",
1944              template_id, decl);
1945       chainon (candidates, templates);
1946       print_candidates (candidates);
1947       return error_mark_node;
1948     }
1949
1950   /* We have one, and exactly one, match.  */
1951   if (candidates)
1952     {
1953       tree fn = TREE_VALUE (candidates);
1954       *targs_out = copy_node (DECL_TI_ARGS (fn));
1955       /* DECL is a re-declaration or partial instantiation of a template
1956          function.  */
1957       if (TREE_CODE (fn) == TEMPLATE_DECL)
1958         return fn;
1959       /* It was a specialization of an ordinary member function in a
1960          template class.  */
1961       return DECL_TI_TEMPLATE (fn);
1962     }
1963
1964   /* It was a specialization of a template.  */
1965   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1966   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1967     {
1968       *targs_out = copy_node (targs);
1969       SET_TMPL_ARGS_LEVEL (*targs_out,
1970                            TMPL_ARGS_DEPTH (*targs_out),
1971                            TREE_PURPOSE (templates));
1972     }
1973   else
1974     *targs_out = TREE_PURPOSE (templates);
1975   return TREE_VALUE (templates);
1976 }
1977
1978 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1979    but with the default argument values filled in from those in the
1980    TMPL_TYPES.  */
1981
1982 static tree
1983 copy_default_args_to_explicit_spec_1 (tree spec_types,
1984                                       tree tmpl_types)
1985 {
1986   tree new_spec_types;
1987
1988   if (!spec_types)
1989     return NULL_TREE;
1990
1991   if (spec_types == void_list_node)
1992     return void_list_node;
1993
1994   /* Substitute into the rest of the list.  */
1995   new_spec_types =
1996     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1997                                           TREE_CHAIN (tmpl_types));
1998
1999   /* Add the default argument for this parameter.  */
2000   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2001                          TREE_VALUE (spec_types),
2002                          new_spec_types);
2003 }
2004
2005 /* DECL is an explicit specialization.  Replicate default arguments
2006    from the template it specializes.  (That way, code like:
2007
2008      template <class T> void f(T = 3);
2009      template <> void f(double);
2010      void g () { f (); }
2011
2012    works, as required.)  An alternative approach would be to look up
2013    the correct default arguments at the call-site, but this approach
2014    is consistent with how implicit instantiations are handled.  */
2015
2016 static void
2017 copy_default_args_to_explicit_spec (tree decl)
2018 {
2019   tree tmpl;
2020   tree spec_types;
2021   tree tmpl_types;
2022   tree new_spec_types;
2023   tree old_type;
2024   tree new_type;
2025   tree t;
2026   tree object_type = NULL_TREE;
2027   tree in_charge = NULL_TREE;
2028   tree vtt = NULL_TREE;
2029
2030   /* See if there's anything we need to do.  */
2031   tmpl = DECL_TI_TEMPLATE (decl);
2032   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2033   for (t = tmpl_types; t; t = TREE_CHAIN (t))
2034     if (TREE_PURPOSE (t))
2035       break;
2036   if (!t)
2037     return;
2038
2039   old_type = TREE_TYPE (decl);
2040   spec_types = TYPE_ARG_TYPES (old_type);
2041
2042   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2043     {
2044       /* Remove the this pointer, but remember the object's type for
2045          CV quals.  */
2046       object_type = TREE_TYPE (TREE_VALUE (spec_types));
2047       spec_types = TREE_CHAIN (spec_types);
2048       tmpl_types = TREE_CHAIN (tmpl_types);
2049
2050       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2051         {
2052           /* DECL may contain more parameters than TMPL due to the extra
2053              in-charge parameter in constructors and destructors.  */
2054           in_charge = spec_types;
2055           spec_types = TREE_CHAIN (spec_types);
2056         }
2057       if (DECL_HAS_VTT_PARM_P (decl))
2058         {
2059           vtt = spec_types;
2060           spec_types = TREE_CHAIN (spec_types);
2061         }
2062     }
2063
2064   /* Compute the merged default arguments.  */
2065   new_spec_types =
2066     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2067
2068   /* Compute the new FUNCTION_TYPE.  */
2069   if (object_type)
2070     {
2071       if (vtt)
2072         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2073                                          TREE_VALUE (vtt),
2074                                          new_spec_types);
2075
2076       if (in_charge)
2077         /* Put the in-charge parameter back.  */
2078         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2079                                          TREE_VALUE (in_charge),
2080                                          new_spec_types);
2081
2082       new_type = build_method_type_directly (object_type,
2083                                              TREE_TYPE (old_type),
2084                                              new_spec_types);
2085     }
2086   else
2087     new_type = build_function_type (TREE_TYPE (old_type),
2088                                     new_spec_types);
2089   new_type = cp_build_type_attribute_variant (new_type,
2090                                               TYPE_ATTRIBUTES (old_type));
2091   new_type = build_exception_variant (new_type,
2092                                       TYPE_RAISES_EXCEPTIONS (old_type));
2093   TREE_TYPE (decl) = new_type;
2094 }
2095
2096 /* Check to see if the function just declared, as indicated in
2097    DECLARATOR, and in DECL, is a specialization of a function
2098    template.  We may also discover that the declaration is an explicit
2099    instantiation at this point.
2100
2101    Returns DECL, or an equivalent declaration that should be used
2102    instead if all goes well.  Issues an error message if something is
2103    amiss.  Returns error_mark_node if the error is not easily
2104    recoverable.
2105
2106    FLAGS is a bitmask consisting of the following flags:
2107
2108    2: The function has a definition.
2109    4: The function is a friend.
2110
2111    The TEMPLATE_COUNT is the number of references to qualifying
2112    template classes that appeared in the name of the function.  For
2113    example, in
2114
2115      template <class T> struct S { void f(); };
2116      void S<int>::f();
2117
2118    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
2119    classes are not counted in the TEMPLATE_COUNT, so that in
2120
2121      template <class T> struct S {};
2122      template <> struct S<int> { void f(); }
2123      template <> void S<int>::f();
2124
2125    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
2126    invalid; there should be no template <>.)
2127
2128    If the function is a specialization, it is marked as such via
2129    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
2130    is set up correctly, and it is added to the list of specializations
2131    for that template.  */
2132
2133 tree
2134 check_explicit_specialization (tree declarator,
2135                                tree decl,
2136                                int template_count,
2137                                int flags)
2138 {
2139   int have_def = flags & 2;
2140   int is_friend = flags & 4;
2141   int specialization = 0;
2142   int explicit_instantiation = 0;
2143   int member_specialization = 0;
2144   tree ctype = DECL_CLASS_CONTEXT (decl);
2145   tree dname = DECL_NAME (decl);
2146   tmpl_spec_kind tsk;
2147
2148   if (is_friend)
2149     {
2150       if (!processing_specialization)
2151         tsk = tsk_none;
2152       else
2153         tsk = tsk_excessive_parms;
2154     }
2155   else
2156     tsk = current_tmpl_spec_kind (template_count);
2157
2158   switch (tsk)
2159     {
2160     case tsk_none:
2161       if (processing_specialization)
2162         {
2163           specialization = 1;
2164           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2165         }
2166       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2167         {
2168           if (is_friend)
2169             /* This could be something like:
2170
2171                template <class T> void f(T);
2172                class S { friend void f<>(int); }  */
2173             specialization = 1;
2174           else
2175             {
2176               /* This case handles bogus declarations like template <>
2177                  template <class T> void f<int>(); */
2178
2179               error ("template-id %qD in declaration of primary template",
2180                      declarator);
2181               return decl;
2182             }
2183         }
2184       break;
2185
2186     case tsk_invalid_member_spec:
2187       /* The error has already been reported in
2188          check_specialization_scope.  */
2189       return error_mark_node;
2190
2191     case tsk_invalid_expl_inst:
2192       error ("template parameter list used in explicit instantiation");
2193
2194       /* Fall through.  */
2195
2196     case tsk_expl_inst:
2197       if (have_def)
2198         error ("definition provided for explicit instantiation");
2199
2200       explicit_instantiation = 1;
2201       break;
2202
2203     case tsk_excessive_parms:
2204     case tsk_insufficient_parms:
2205       if (tsk == tsk_excessive_parms)
2206         error ("too many template parameter lists in declaration of %qD",
2207                decl);
2208       else if (template_header_count)
2209         error("too few template parameter lists in declaration of %qD", decl);
2210       else
2211         error("explicit specialization of %qD must be introduced by "
2212               "%<template <>%>", decl);
2213
2214       /* Fall through.  */
2215     case tsk_expl_spec:
2216       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2217       if (ctype)
2218         member_specialization = 1;
2219       else
2220         specialization = 1;
2221       break;
2222
2223     case tsk_template:
2224       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2225         {
2226           /* This case handles bogus declarations like template <>
2227              template <class T> void f<int>(); */
2228
2229           if (uses_template_parms (declarator))
2230             error ("function template partial specialization %qD "
2231                    "is not allowed", declarator);
2232           else
2233             error ("template-id %qD in declaration of primary template",
2234                    declarator);
2235           return decl;
2236         }
2237
2238       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2239         /* This is a specialization of a member template, without
2240            specialization the containing class.  Something like:
2241
2242              template <class T> struct S {
2243                template <class U> void f (U);
2244              };
2245              template <> template <class U> void S<int>::f(U) {}
2246
2247            That's a specialization -- but of the entire template.  */
2248         specialization = 1;
2249       break;
2250
2251     default:
2252       gcc_unreachable ();
2253     }
2254
2255   if (specialization || member_specialization)
2256     {
2257       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2258       for (; t; t = TREE_CHAIN (t))
2259         if (TREE_PURPOSE (t))
2260           {
2261             permerror (input_location, 
2262                        "default argument specified in explicit specialization");
2263             break;
2264           }
2265     }
2266
2267   if (specialization || member_specialization || explicit_instantiation)
2268     {
2269       tree tmpl = NULL_TREE;
2270       tree targs = NULL_TREE;
2271
2272       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2273       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2274         {
2275           tree fns;
2276
2277           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2278           if (ctype)
2279             fns = dname;
2280           else
2281             {
2282               /* If there is no class context, the explicit instantiation
2283                  must be at namespace scope.  */
2284               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2285
2286               /* Find the namespace binding, using the declaration
2287                  context.  */
2288               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2289                                            false, true);
2290               if (fns == error_mark_node || !is_overloaded_fn (fns))
2291                 {
2292                   error ("%qD is not a template function", dname);
2293                   fns = error_mark_node;
2294                 }
2295               else
2296                 {
2297                   tree fn = OVL_CURRENT (fns);
2298                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2299                                                 CP_DECL_CONTEXT (fn)))
2300                     error ("%qD is not declared in %qD",
2301                            decl, current_namespace);
2302                 }
2303             }
2304
2305           declarator = lookup_template_function (fns, NULL_TREE);
2306         }
2307
2308       if (declarator == error_mark_node)
2309         return error_mark_node;
2310
2311       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2312         {
2313           if (!explicit_instantiation)
2314             /* A specialization in class scope.  This is invalid,
2315                but the error will already have been flagged by
2316                check_specialization_scope.  */
2317             return error_mark_node;
2318           else
2319             {
2320               /* It's not valid to write an explicit instantiation in
2321                  class scope, e.g.:
2322
2323                    class C { template void f(); }
2324
2325                    This case is caught by the parser.  However, on
2326                    something like:
2327
2328                    template class C { void f(); };
2329
2330                    (which is invalid) we can get here.  The error will be
2331                    issued later.  */
2332               ;
2333             }
2334
2335           return decl;
2336         }
2337       else if (ctype != NULL_TREE
2338                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2339                    IDENTIFIER_NODE))
2340         {
2341           /* Find the list of functions in ctype that have the same
2342              name as the declared function.  */
2343           tree name = TREE_OPERAND (declarator, 0);
2344           tree fns = NULL_TREE;
2345           int idx;
2346
2347           if (constructor_name_p (name, ctype))
2348             {
2349               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2350
2351               if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2352                   : !CLASSTYPE_DESTRUCTORS (ctype))
2353                 {
2354                   /* From [temp.expl.spec]:
2355
2356                      If such an explicit specialization for the member
2357                      of a class template names an implicitly-declared
2358                      special member function (clause _special_), the
2359                      program is ill-formed.
2360
2361                      Similar language is found in [temp.explicit].  */
2362                   error ("specialization of implicitly-declared special member function");
2363                   return error_mark_node;
2364                 }
2365
2366               name = is_constructor ? ctor_identifier : dtor_identifier;
2367             }
2368
2369           if (!DECL_CONV_FN_P (decl))
2370             {
2371               idx = lookup_fnfields_1 (ctype, name);
2372               if (idx >= 0)
2373                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2374             }
2375           else
2376             {
2377               VEC(tree,gc) *methods;
2378               tree ovl;
2379
2380               /* For a type-conversion operator, we cannot do a
2381                  name-based lookup.  We might be looking for `operator
2382                  int' which will be a specialization of `operator T'.
2383                  So, we find *all* the conversion operators, and then
2384                  select from them.  */
2385               fns = NULL_TREE;
2386
2387               methods = CLASSTYPE_METHOD_VEC (ctype);
2388               if (methods)
2389                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2390                      VEC_iterate (tree, methods, idx, ovl);
2391                      ++idx)
2392                   {
2393                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2394                       /* There are no more conversion functions.  */
2395                       break;
2396
2397                     /* Glue all these conversion functions together
2398                        with those we already have.  */
2399                     for (; ovl; ovl = OVL_NEXT (ovl))
2400                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2401                   }
2402             }
2403
2404           if (fns == NULL_TREE)
2405             {
2406               error ("no member function %qD declared in %qT", name, ctype);
2407               return error_mark_node;
2408             }
2409           else
2410             TREE_OPERAND (declarator, 0) = fns;
2411         }
2412
2413       /* Figure out what exactly is being specialized at this point.
2414          Note that for an explicit instantiation, even one for a
2415          member function, we cannot tell apriori whether the
2416          instantiation is for a member template, or just a member
2417          function of a template class.  Even if a member template is
2418          being instantiated, the member template arguments may be
2419          elided if they can be deduced from the rest of the
2420          declaration.  */
2421       tmpl = determine_specialization (declarator, decl,
2422                                        &targs,
2423                                        member_specialization,
2424                                        template_count,
2425                                        tsk);
2426
2427       if (!tmpl || tmpl == error_mark_node)
2428         /* We couldn't figure out what this declaration was
2429            specializing.  */
2430         return error_mark_node;
2431       else
2432         {
2433           tree gen_tmpl = most_general_template (tmpl);
2434
2435           if (explicit_instantiation)
2436             {
2437               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2438                  is done by do_decl_instantiation later.  */
2439
2440               int arg_depth = TMPL_ARGS_DEPTH (targs);
2441               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2442
2443               if (arg_depth > parm_depth)
2444                 {
2445                   /* If TMPL is not the most general template (for
2446                      example, if TMPL is a friend template that is
2447                      injected into namespace scope), then there will
2448                      be too many levels of TARGS.  Remove some of them
2449                      here.  */
2450                   int i;
2451                   tree new_targs;
2452
2453                   new_targs = make_tree_vec (parm_depth);
2454                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2455                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2456                       = TREE_VEC_ELT (targs, i);
2457                   targs = new_targs;
2458                 }
2459
2460               return instantiate_template (tmpl, targs, tf_error);
2461             }
2462
2463           /* If we thought that the DECL was a member function, but it
2464              turns out to be specializing a static member function,
2465              make DECL a static member function as well.  */
2466           if (DECL_STATIC_FUNCTION_P (tmpl)
2467               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2468             revert_static_member_fn (decl);
2469
2470           /* If this is a specialization of a member template of a
2471              template class, we want to return the TEMPLATE_DECL, not
2472              the specialization of it.  */
2473           if (tsk == tsk_template)
2474             {
2475               tree result = DECL_TEMPLATE_RESULT (tmpl);
2476               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2477               DECL_INITIAL (result) = NULL_TREE;
2478               if (have_def)
2479                 {
2480                   tree parm;
2481                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2482                   DECL_SOURCE_LOCATION (result)
2483                     = DECL_SOURCE_LOCATION (decl);
2484                   /* We want to use the argument list specified in the
2485                      definition, not in the original declaration.  */
2486                   DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2487                   for (parm = DECL_ARGUMENTS (result); parm;
2488                        parm = TREE_CHAIN (parm))
2489                     DECL_CONTEXT (parm) = result;
2490                 }
2491               return register_specialization (tmpl, gen_tmpl, targs,
2492                                               is_friend, 0);
2493             }
2494
2495           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2496           DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2497
2498           /* Inherit default function arguments from the template
2499              DECL is specializing.  */
2500           copy_default_args_to_explicit_spec (decl);
2501
2502           /* This specialization has the same protection as the
2503              template it specializes.  */
2504           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2505           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2506
2507           /* 7.1.1-1 [dcl.stc]
2508
2509              A storage-class-specifier shall not be specified in an
2510              explicit specialization...
2511
2512              The parser rejects these, so unless action is taken here,
2513              explicit function specializations will always appear with
2514              global linkage.
2515
2516              The action recommended by the C++ CWG in response to C++
2517              defect report 605 is to make the storage class and linkage
2518              of the explicit specialization match the templated function:
2519
2520              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2521            */
2522           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2523             {
2524               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2525               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2526
2527               /* This specialization has the same linkage and visibility as
2528                  the function template it specializes.  */
2529               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2530               if (! TREE_PUBLIC (decl))
2531                 {
2532                   DECL_INTERFACE_KNOWN (decl) = 1;
2533                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2534                 }
2535               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2536               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2537                 {
2538                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2539                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2540                 }
2541             }
2542
2543           /* If DECL is a friend declaration, declared using an
2544              unqualified name, the namespace associated with DECL may
2545              have been set incorrectly.  For example, in:
2546
2547                template <typename T> void f(T);
2548                namespace N {
2549                  struct S { friend void f<int>(int); }
2550                }
2551
2552              we will have set the DECL_CONTEXT for the friend
2553              declaration to N, rather than to the global namespace.  */
2554           if (DECL_NAMESPACE_SCOPE_P (decl))
2555             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2556
2557           if (is_friend && !have_def)
2558             /* This is not really a declaration of a specialization.
2559                It's just the name of an instantiation.  But, it's not
2560                a request for an instantiation, either.  */
2561             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2562           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2563             /* This is indeed a specialization.  In case of constructors
2564                and destructors, we need in-charge and not-in-charge
2565                versions in V3 ABI.  */
2566             clone_function_decl (decl, /*update_method_vec_p=*/0);
2567
2568           /* Register this specialization so that we can find it
2569              again.  */
2570           decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2571         }
2572     }
2573
2574   return decl;
2575 }
2576
2577 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2578    parameters.  These are represented in the same format used for
2579    DECL_TEMPLATE_PARMS.  */
2580
2581 int
2582 comp_template_parms (const_tree parms1, const_tree parms2)
2583 {
2584   const_tree p1;
2585   const_tree p2;
2586
2587   if (parms1 == parms2)
2588     return 1;
2589
2590   for (p1 = parms1, p2 = parms2;
2591        p1 != NULL_TREE && p2 != NULL_TREE;
2592        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2593     {
2594       tree t1 = TREE_VALUE (p1);
2595       tree t2 = TREE_VALUE (p2);
2596       int i;
2597
2598       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2599       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2600
2601       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2602         return 0;
2603
2604       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2605         {
2606           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2607           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2608
2609           /* If either of the template parameters are invalid, assume
2610              they match for the sake of error recovery. */
2611           if (parm1 == error_mark_node || parm2 == error_mark_node)
2612             return 1;
2613
2614           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2615             return 0;
2616
2617           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2618               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2619                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2620             continue;
2621           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2622             return 0;
2623         }
2624     }
2625
2626   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2627     /* One set of parameters has more parameters lists than the
2628        other.  */
2629     return 0;
2630
2631   return 1;
2632 }
2633
2634 /* Determine whether PARM is a parameter pack.  */
2635
2636 bool 
2637 template_parameter_pack_p (const_tree parm)
2638 {
2639   /* Determine if we have a non-type template parameter pack.  */
2640   if (TREE_CODE (parm) == PARM_DECL)
2641     return (DECL_TEMPLATE_PARM_P (parm) 
2642             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2643
2644   /* If this is a list of template parameters, we could get a
2645      TYPE_DECL or a TEMPLATE_DECL.  */ 
2646   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2647     parm = TREE_TYPE (parm);
2648
2649   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2650            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2651           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2652 }
2653
2654 /* Determine if T is a function parameter pack.  */
2655
2656 bool
2657 function_parameter_pack_p (const_tree t)
2658 {
2659   if (t && TREE_CODE (t) == PARM_DECL)
2660     return FUNCTION_PARAMETER_PACK_P (t);
2661   return false;
2662 }
2663
2664 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2665    PRIMARY_FUNC_TMPL_INST is a primary function template instantiation.  */
2666
2667 tree
2668 get_function_template_decl (const_tree primary_func_tmpl_inst)
2669 {
2670   if (! primary_func_tmpl_inst
2671       || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2672       || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2673     return NULL;
2674
2675   return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2676 }
2677
2678 /* Return true iff the function parameter PARAM_DECL was expanded
2679    from the function parameter pack PACK.  */
2680
2681 bool
2682 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2683 {
2684     if (DECL_ARTIFICIAL (param_decl)
2685         || !function_parameter_pack_p (pack))
2686       return false;
2687
2688     gcc_assert (DECL_NAME (param_decl) && DECL_NAME (pack));
2689
2690     /* The parameter pack and its pack arguments have the same
2691        DECL_PARM_INDEX.  */
2692     return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2693 }
2694
2695 /* Determine whether ARGS describes a variadic template args list,
2696    i.e., one that is terminated by a template argument pack.  */
2697
2698 static bool 
2699 template_args_variadic_p (tree args)
2700 {
2701   int nargs;
2702   tree last_parm;
2703
2704   if (args == NULL_TREE)
2705     return false;
2706
2707   args = INNERMOST_TEMPLATE_ARGS (args);
2708   nargs = TREE_VEC_LENGTH (args);
2709
2710   if (nargs == 0)
2711     return false;
2712
2713   last_parm = TREE_VEC_ELT (args, nargs - 1);
2714
2715   return ARGUMENT_PACK_P (last_parm);
2716 }
2717
2718 /* Generate a new name for the parameter pack name NAME (an
2719    IDENTIFIER_NODE) that incorporates its */
2720
2721 static tree
2722 make_ith_pack_parameter_name (tree name, int i)
2723 {
2724   /* Munge the name to include the parameter index.  */
2725 #define NUMBUF_LEN 128
2726   char numbuf[NUMBUF_LEN];
2727   char* newname;
2728   int newname_len;
2729
2730   snprintf (numbuf, NUMBUF_LEN, "%i", i);
2731   newname_len = IDENTIFIER_LENGTH (name)
2732                 + strlen (numbuf) + 2;
2733   newname = (char*)alloca (newname_len);
2734   snprintf (newname, newname_len,
2735             "%s#%i", IDENTIFIER_POINTER (name), i);
2736   return get_identifier (newname);
2737 }
2738
2739 /* Return true if T is a primary function
2740    or class template instantiation.  */
2741
2742 static bool
2743 primary_template_instantiation_p (const_tree t)
2744 {
2745   if (!t)
2746     return false;
2747
2748   if (TREE_CODE (t) == FUNCTION_DECL)
2749     return DECL_LANG_SPECIFIC (t)
2750            && DECL_TEMPLATE_INSTANTIATION (t)
2751            && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
2752   else if (CLASS_TYPE_P (t))
2753     return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
2754            && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
2755   return false;
2756 }
2757
2758 /* Return true if PARM is a template template parameter.  */
2759
2760 bool
2761 template_template_parameter_p (const_tree parm)
2762 {
2763   return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
2764 }
2765
2766 /* Return the template parameters of T if T is a
2767    primary template instantiation, NULL otherwise.  */
2768
2769 tree
2770 get_primary_template_innermost_parameters (const_tree t)
2771 {
2772   tree parms = NULL, template_info = NULL;
2773
2774   if ((template_info = get_template_info (t))
2775       && primary_template_instantiation_p (t))
2776     parms = INNERMOST_TEMPLATE_PARMS
2777         (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
2778
2779   return parms;
2780 }
2781
2782 /* Returns the template arguments of T if T is a template instantiation,
2783    NULL otherwise.  */
2784
2785 tree
2786 get_template_innermost_arguments (const_tree t)
2787 {
2788   tree args = NULL, template_info = NULL;
2789
2790   if ((template_info = get_template_info (t))
2791       && TI_ARGS (template_info))
2792     args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
2793
2794   return args;
2795 }
2796
2797 /* Return the argument pack elements of T if T is a template argument pack,
2798    NULL otherwise.  */
2799
2800 tree
2801 get_template_argument_pack_elems (const_tree t)
2802 {
2803   if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
2804       && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
2805     return NULL;
2806
2807   return ARGUMENT_PACK_ARGS (t);
2808 }
2809
2810 /* Structure used to track the progress of find_parameter_packs_r.  */
2811 struct find_parameter_pack_data 
2812 {
2813   /* TREE_LIST that will contain all of the parameter packs found by
2814      the traversal.  */
2815   tree* parameter_packs;
2816
2817   /* Set of AST nodes that have been visited by the traversal.  */
2818   struct pointer_set_t *visited;
2819 };
2820
2821 /* Identifies all of the argument packs that occur in a template
2822    argument and appends them to the TREE_LIST inside DATA, which is a
2823    find_parameter_pack_data structure. This is a subroutine of
2824    make_pack_expansion and uses_parameter_packs.  */
2825 static tree
2826 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2827 {
2828   tree t = *tp;
2829   struct find_parameter_pack_data* ppd = 
2830     (struct find_parameter_pack_data*)data;
2831   bool parameter_pack_p = false;
2832
2833   /* Identify whether this is a parameter pack or not.  */
2834   switch (TREE_CODE (t))
2835     {
2836     case TEMPLATE_PARM_INDEX:
2837       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2838         parameter_pack_p = true;
2839       break;
2840
2841     case TEMPLATE_TYPE_PARM:
2842     case TEMPLATE_TEMPLATE_PARM:
2843       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2844         parameter_pack_p = true;
2845       break;
2846
2847     case PARM_DECL:
2848       if (FUNCTION_PARAMETER_PACK_P (t))
2849         {
2850           /* We don't want to walk into the type of a PARM_DECL,
2851              because we don't want to see the type parameter pack.  */
2852           *walk_subtrees = 0;
2853           parameter_pack_p = true;
2854         }
2855       break;
2856
2857     default:
2858       /* Not a parameter pack.  */
2859       break;
2860     }
2861
2862   if (parameter_pack_p)
2863     {
2864       /* Add this parameter pack to the list.  */
2865       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2866     }
2867
2868   if (TYPE_P (t))
2869     cp_walk_tree (&TYPE_CONTEXT (t), 
2870                   &find_parameter_packs_r, ppd, ppd->visited);
2871
2872   /* This switch statement will return immediately if we don't find a
2873      parameter pack.  */
2874   switch (TREE_CODE (t)) 
2875     {
2876     case TEMPLATE_PARM_INDEX:
2877       return NULL_TREE;
2878
2879     case BOUND_TEMPLATE_TEMPLATE_PARM:
2880       /* Check the template itself.  */
2881       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
2882                     &find_parameter_packs_r, ppd, ppd->visited);
2883       /* Check the template arguments.  */
2884       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
2885                     ppd->visited);
2886       *walk_subtrees = 0;
2887       return NULL_TREE;
2888
2889     case TEMPLATE_TYPE_PARM:
2890     case TEMPLATE_TEMPLATE_PARM:
2891       return NULL_TREE;
2892
2893     case PARM_DECL:
2894       return NULL_TREE;
2895
2896     case RECORD_TYPE:
2897       if (TYPE_PTRMEMFUNC_P (t))
2898         return NULL_TREE;
2899       /* Fall through.  */
2900
2901     case UNION_TYPE:
2902     case ENUMERAL_TYPE:
2903       if (TYPE_TEMPLATE_INFO (t))
2904         cp_walk_tree (&TREE_VALUE (TYPE_TEMPLATE_INFO (t)), 
2905                       &find_parameter_packs_r, ppd, ppd->visited);
2906
2907       *walk_subtrees = 0;
2908       return NULL_TREE;
2909
2910     case TEMPLATE_DECL:
2911       cp_walk_tree (&TREE_TYPE (t),
2912                     &find_parameter_packs_r, ppd, ppd->visited);
2913       return NULL_TREE;
2914  
2915     case TYPENAME_TYPE:
2916       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
2917                    ppd, ppd->visited);
2918       *walk_subtrees = 0;
2919       return NULL_TREE;
2920       
2921     case TYPE_PACK_EXPANSION:
2922     case EXPR_PACK_EXPANSION:
2923       *walk_subtrees = 0;
2924       return NULL_TREE;
2925
2926     case INTEGER_TYPE:
2927       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
2928                     ppd, ppd->visited);
2929       *walk_subtrees = 0;
2930       return NULL_TREE;
2931
2932     case IDENTIFIER_NODE:
2933       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
2934                     ppd->visited);
2935       *walk_subtrees = 0;
2936       return NULL_TREE;
2937
2938     default:
2939       return NULL_TREE;
2940     }
2941
2942   return NULL_TREE;
2943 }
2944
2945 /* Determines if the expression or type T uses any parameter packs.  */
2946 bool
2947 uses_parameter_packs (tree t)
2948 {
2949   tree parameter_packs = NULL_TREE;
2950   struct find_parameter_pack_data ppd;
2951   ppd.parameter_packs = &parameter_packs;
2952   ppd.visited = pointer_set_create ();
2953   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2954   pointer_set_destroy (ppd.visited);
2955   return parameter_packs != NULL_TREE;
2956 }
2957
2958 /* Turn ARG, which may be an expression, type, or a TREE_LIST
2959    representation a base-class initializer into a parameter pack
2960    expansion. If all goes well, the resulting node will be an
2961    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
2962    respectively.  */
2963 tree 
2964 make_pack_expansion (tree arg)
2965 {
2966   tree result;
2967   tree parameter_packs = NULL_TREE;
2968   bool for_types = false;
2969   struct find_parameter_pack_data ppd;
2970
2971   if (!arg || arg == error_mark_node)
2972     return arg;
2973
2974   if (TREE_CODE (arg) == TREE_LIST)
2975     {
2976       /* The only time we will see a TREE_LIST here is for a base
2977          class initializer.  In this case, the TREE_PURPOSE will be a
2978          _TYPE node (representing the base class expansion we're
2979          initializing) and the TREE_VALUE will be a TREE_LIST
2980          containing the initialization arguments. 
2981
2982          The resulting expansion looks somewhat different from most
2983          expansions. Rather than returning just one _EXPANSION, we
2984          return a TREE_LIST whose TREE_PURPOSE is a
2985          TYPE_PACK_EXPANSION containing the bases that will be
2986          initialized.  The TREE_VALUE will be identical to the
2987          original TREE_VALUE, which is a list of arguments that will
2988          be passed to each base.  We do not introduce any new pack
2989          expansion nodes into the TREE_VALUE (although it is possible
2990          that some already exist), because the TREE_PURPOSE and
2991          TREE_VALUE all need to be expanded together with the same
2992          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
2993          resulting TREE_PURPOSE will mention the parameter packs in
2994          both the bases and the arguments to the bases.  */
2995       tree purpose;
2996       tree value;
2997       tree parameter_packs = NULL_TREE;
2998
2999       /* Determine which parameter packs will be used by the base
3000          class expansion.  */
3001       ppd.visited = pointer_set_create ();
3002       ppd.parameter_packs = &parameter_packs;
3003       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
3004                     &ppd, ppd.visited);
3005
3006       if (parameter_packs == NULL_TREE)
3007         {
3008           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3009           pointer_set_destroy (ppd.visited);
3010           return error_mark_node;
3011         }
3012
3013       if (TREE_VALUE (arg) != void_type_node)
3014         {
3015           /* Collect the sets of parameter packs used in each of the
3016              initialization arguments.  */
3017           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3018             {
3019               /* Determine which parameter packs will be expanded in this
3020                  argument.  */
3021               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
3022                             &ppd, ppd.visited);
3023             }
3024         }
3025
3026       pointer_set_destroy (ppd.visited);
3027
3028       /* Create the pack expansion type for the base type.  */
3029       purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3030       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3031       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3032
3033       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3034          they will rarely be compared to anything.  */
3035       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3036
3037       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3038     }
3039
3040   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3041     for_types = true;
3042
3043   /* Build the PACK_EXPANSION_* node.  */
3044   result = for_types
3045      ? cxx_make_type (TYPE_PACK_EXPANSION)
3046      : make_node (EXPR_PACK_EXPANSION);
3047   SET_PACK_EXPANSION_PATTERN (result, arg);
3048   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3049     {
3050       /* Propagate type and const-expression information.  */
3051       TREE_TYPE (result) = TREE_TYPE (arg);
3052       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3053     }
3054   else
3055     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3056        they will rarely be compared to anything.  */
3057     SET_TYPE_STRUCTURAL_EQUALITY (result);
3058
3059   /* Determine which parameter packs will be expanded.  */
3060   ppd.parameter_packs = &parameter_packs;
3061   ppd.visited = pointer_set_create ();
3062   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3063   pointer_set_destroy (ppd.visited);
3064
3065   /* Make sure we found some parameter packs.  */
3066   if (parameter_packs == NULL_TREE)
3067     {
3068       if (TYPE_P (arg))
3069         error ("expansion pattern %<%T%> contains no argument packs", arg);
3070       else
3071         error ("expansion pattern %<%E%> contains no argument packs", arg);
3072       return error_mark_node;
3073     }
3074   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3075
3076   return result;
3077 }
3078
3079 /* Checks T for any "bare" parameter packs, which have not yet been
3080    expanded, and issues an error if any are found. This operation can
3081    only be done on full expressions or types (e.g., an expression
3082    statement, "if" condition, etc.), because we could have expressions like:
3083
3084      foo(f(g(h(args)))...)
3085
3086    where "args" is a parameter pack. check_for_bare_parameter_packs
3087    should not be called for the subexpressions args, h(args),
3088    g(h(args)), or f(g(h(args))), because we would produce erroneous
3089    error messages. 
3090
3091    Returns TRUE and emits an error if there were bare parameter packs,
3092    returns FALSE otherwise.  */
3093 bool 
3094 check_for_bare_parameter_packs (tree t)
3095 {
3096   tree parameter_packs = NULL_TREE;
3097   struct find_parameter_pack_data ppd;
3098
3099   if (!processing_template_decl || !t || t == error_mark_node)
3100     return false;
3101
3102   if (TREE_CODE (t) == TYPE_DECL)
3103     t = TREE_TYPE (t);
3104
3105   ppd.parameter_packs = &parameter_packs;
3106   ppd.visited = pointer_set_create ();
3107   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3108   pointer_set_destroy (ppd.visited);
3109
3110   if (parameter_packs) 
3111     {
3112       error ("parameter packs not expanded with %<...%>:");
3113       while (parameter_packs)
3114         {
3115           tree pack = TREE_VALUE (parameter_packs);
3116           tree name = NULL_TREE;
3117
3118           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3119               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3120             name = TYPE_NAME (pack);
3121           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3122             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3123           else
3124             name = DECL_NAME (pack);
3125
3126           if (name)
3127             inform (input_location, "        %qD", name);
3128           else
3129             inform (input_location, "        <anonymous>");
3130
3131           parameter_packs = TREE_CHAIN (parameter_packs);
3132         }
3133
3134       return true;
3135     }
3136
3137   return false;
3138 }
3139
3140 /* Expand any parameter packs that occur in the template arguments in
3141    ARGS.  */
3142 tree
3143 expand_template_argument_pack (tree args)
3144 {
3145   tree result_args = NULL_TREE;
3146   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3147   int num_result_args = -1;
3148
3149   /* First, determine if we need to expand anything, and the number of
3150      slots we'll need.  */
3151   for (in_arg = 0; in_arg < nargs; ++in_arg)
3152     {
3153       tree arg = TREE_VEC_ELT (args, in_arg);
3154       if (ARGUMENT_PACK_P (arg))
3155         {
3156           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3157           if (num_result_args < 0)
3158             num_result_args = in_arg + num_packed;
3159           else
3160             num_result_args += num_packed;
3161         }
3162       else
3163         {
3164           if (num_result_args >= 0)
3165             num_result_args++;
3166         }
3167     }
3168
3169   /* If no expansion is necessary, we're done.  */
3170   if (num_result_args < 0)
3171     return args;
3172
3173   /* Expand arguments.  */
3174   result_args = make_tree_vec (num_result_args);
3175   for (in_arg = 0; in_arg < nargs; ++in_arg)
3176     {
3177       tree arg = TREE_VEC_ELT (args, in_arg);
3178       if (ARGUMENT_PACK_P (arg))
3179         {
3180           tree packed = ARGUMENT_PACK_ARGS (arg);
3181           int i, num_packed = TREE_VEC_LENGTH (packed);
3182           for (i = 0; i < num_packed; ++i, ++out_arg)
3183             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3184         }
3185       else
3186         {
3187           TREE_VEC_ELT (result_args, out_arg) = arg;
3188           ++out_arg;
3189         }
3190     }
3191
3192   return result_args;
3193 }
3194
3195 /* Checks if DECL shadows a template parameter.
3196
3197    [temp.local]: A template-parameter shall not be redeclared within its
3198    scope (including nested scopes).
3199
3200    Emits an error and returns TRUE if the DECL shadows a parameter,
3201    returns FALSE otherwise.  */
3202
3203 bool
3204 check_template_shadow (tree decl)
3205 {
3206   tree olddecl;
3207
3208   /* If we're not in a template, we can't possibly shadow a template
3209      parameter.  */
3210   if (!current_template_parms)
3211     return true;
3212
3213   /* Figure out what we're shadowing.  */
3214   if (TREE_CODE (decl) == OVERLOAD)
3215     decl = OVL_CURRENT (decl);
3216   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3217
3218   /* If there's no previous binding for this name, we're not shadowing
3219      anything, let alone a template parameter.  */
3220   if (!olddecl)
3221     return true;
3222
3223   /* If we're not shadowing a template parameter, we're done.  Note
3224      that OLDDECL might be an OVERLOAD (or perhaps even an
3225      ERROR_MARK), so we can't just blithely assume it to be a _DECL
3226      node.  */
3227   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3228     return true;
3229
3230   /* We check for decl != olddecl to avoid bogus errors for using a
3231      name inside a class.  We check TPFI to avoid duplicate errors for
3232      inline member templates.  */
3233   if (decl == olddecl
3234       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
3235     return true;
3236
3237   error ("declaration of %q+#D", decl);
3238   error (" shadows template parm %q+#D", olddecl);
3239   return false;
3240 }
3241
3242 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3243    ORIG_LEVEL, DECL, and TYPE.  */
3244
3245 static tree
3246 build_template_parm_index (int index,
3247                            int level,
3248                            int orig_level,
3249                            tree decl,
3250                            tree type)
3251 {
3252   tree t = make_node (TEMPLATE_PARM_INDEX);
3253   TEMPLATE_PARM_IDX (t) = index;
3254   TEMPLATE_PARM_LEVEL (t) = level;
3255   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3256   TEMPLATE_PARM_DECL (t) = decl;
3257   TREE_TYPE (t) = type;
3258   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3259   TREE_READONLY (t) = TREE_READONLY (decl);
3260
3261   return t;
3262 }
3263
3264 /* Find the canonical type parameter for the given template type
3265    parameter.  Returns the canonical type parameter, which may be TYPE
3266    if no such parameter existed.  */
3267 static tree
3268 canonical_type_parameter (tree type)
3269 {
3270   tree list;
3271   int idx = TEMPLATE_TYPE_IDX (type);
3272   if (!canonical_template_parms)
3273     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
3274
3275   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
3276     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
3277
3278   list = VEC_index (tree, canonical_template_parms, idx);
3279   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3280     list = TREE_CHAIN (list);
3281
3282   if (list)
3283     return TREE_VALUE (list);
3284   else
3285     {
3286       VEC_replace(tree, canonical_template_parms, idx,
3287                   tree_cons (NULL_TREE, type, 
3288                              VEC_index (tree, canonical_template_parms, idx)));
3289       return type;
3290     }
3291 }
3292
3293 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3294    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
3295    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3296    new one is created.  */
3297
3298 static tree
3299 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3300                             tsubst_flags_t complain)
3301 {
3302   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3303       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3304           != TEMPLATE_PARM_LEVEL (index) - levels))
3305     {
3306       tree orig_decl = TEMPLATE_PARM_DECL (index);
3307       tree decl, t;
3308
3309       decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3310                          TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3311       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3312       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3313       DECL_ARTIFICIAL (decl) = 1;
3314       SET_DECL_TEMPLATE_PARM_P (decl);
3315
3316       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3317                                      TEMPLATE_PARM_LEVEL (index) - levels,
3318                                      TEMPLATE_PARM_ORIG_LEVEL (index),
3319                                      decl, type);
3320       TEMPLATE_PARM_DESCENDANTS (index) = t;
3321       TEMPLATE_PARM_PARAMETER_PACK (t) 
3322         = TEMPLATE_PARM_PARAMETER_PACK (index);
3323
3324         /* Template template parameters need this.  */
3325       if (TREE_CODE (decl) == TEMPLATE_DECL)
3326         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3327           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3328            args, complain);
3329     }
3330
3331   return TEMPLATE_PARM_DESCENDANTS (index);
3332 }
3333
3334 /* Process information from new template parameter PARM and append it to the
3335    LIST being built.  This new parameter is a non-type parameter iff
3336    IS_NON_TYPE is true. This new parameter is a parameter
3337    pack iff IS_PARAMETER_PACK is true.  The location of PARM is in 
3338    PARM_LOC.  */
3339
3340 tree
3341 process_template_parm (tree list, location_t parm_loc, tree parm, bool is_non_type, 
3342                        bool is_parameter_pack)
3343 {
3344   tree decl = 0;
3345   tree defval;
3346   tree err_parm_list;
3347   int idx = 0;
3348
3349   gcc_assert (TREE_CODE (parm) == TREE_LIST);
3350   defval = TREE_PURPOSE (parm);
3351
3352   if (list)
3353     {
3354       tree p = tree_last (list);
3355
3356       if (p && TREE_VALUE (p) != error_mark_node)
3357         {
3358           p = TREE_VALUE (p);
3359           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3360             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3361           else
3362             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3363         }
3364
3365       ++idx;
3366     }
3367   else
3368     idx = 0;
3369
3370   if (is_non_type)
3371     {
3372       parm = TREE_VALUE (parm);
3373
3374       SET_DECL_TEMPLATE_PARM_P (parm);
3375
3376       if (TREE_TYPE (parm) == error_mark_node)
3377         {
3378           err_parm_list = build_tree_list (defval, parm);
3379           TREE_VALUE (err_parm_list) = error_mark_node;
3380            return chainon (list, err_parm_list);
3381         }
3382       else
3383       {
3384         /* [temp.param]
3385
3386            The top-level cv-qualifiers on the template-parameter are
3387            ignored when determining its type.  */
3388         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3389         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3390           {
3391             err_parm_list = build_tree_list (defval, parm);
3392             TREE_VALUE (err_parm_list) = error_mark_node;
3393              return chainon (list, err_parm_list);
3394           }
3395
3396         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3397           {
3398             /* This template parameter is not a parameter pack, but it
3399                should be. Complain about "bare" parameter packs.  */
3400             check_for_bare_parameter_packs (TREE_TYPE (parm));
3401             
3402             /* Recover by calling this a parameter pack.  */
3403             is_parameter_pack = true;
3404           }
3405       }
3406
3407       /* A template parameter is not modifiable.  */
3408       TREE_CONSTANT (parm) = 1;
3409       TREE_READONLY (parm) = 1;
3410       decl = build_decl (parm_loc,
3411                          CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3412       TREE_CONSTANT (decl) = 1;
3413       TREE_READONLY (decl) = 1;
3414       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3415         = build_template_parm_index (idx, processing_template_decl,
3416                                      processing_template_decl,
3417                                      decl, TREE_TYPE (parm));
3418
3419       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3420         = is_parameter_pack;
3421     }
3422   else
3423     {
3424       tree t;
3425       parm = TREE_VALUE (TREE_VALUE (parm));
3426
3427       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3428         {
3429           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3430           /* This is for distinguishing between real templates and template
3431              template parameters */
3432           TREE_TYPE (parm) = t;
3433           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3434           decl = parm;
3435         }
3436       else
3437         {
3438           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3439           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3440           decl = build_decl (parm_loc,
3441                              TYPE_DECL, parm, t);
3442         }
3443
3444       TYPE_NAME (t) = decl;
3445       TYPE_STUB_DECL (t) = decl;
3446       parm = decl;
3447       TEMPLATE_TYPE_PARM_INDEX (t)
3448         = build_template_parm_index (idx, processing_template_decl,
3449                                      processing_template_decl,
3450                                      decl, TREE_TYPE (parm));
3451       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3452       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3453     }
3454   DECL_ARTIFICIAL (decl) = 1;
3455   SET_DECL_TEMPLATE_PARM_P (decl);
3456   pushdecl (decl);
3457   parm = build_tree_list (defval, parm);
3458   return chainon (list, parm);
3459 }
3460
3461 /* The end of a template parameter list has been reached.  Process the
3462    tree list into a parameter vector, converting each parameter into a more
3463    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3464    as PARM_DECLs.  */
3465
3466 tree
3467 end_template_parm_list (tree parms)
3468 {
3469   int nparms;
3470   tree parm, next;
3471   tree saved_parmlist = make_tree_vec (list_length (parms));
3472
3473   current_template_parms
3474     = tree_cons (size_int (processing_template_decl),
3475                  saved_parmlist, current_template_parms);
3476
3477   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3478     {
3479       next = TREE_CHAIN (parm);
3480       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3481       TREE_CHAIN (parm) = NULL_TREE;
3482     }
3483
3484   --processing_template_parmlist;
3485
3486   return saved_parmlist;
3487 }
3488
3489 /* end_template_decl is called after a template declaration is seen.  */
3490
3491 void
3492 end_template_decl (void)
3493 {
3494   reset_specialization ();
3495
3496   if (! processing_template_decl)
3497     return;
3498
3499   /* This matches the pushlevel in begin_template_parm_list.  */
3500   finish_scope ();
3501
3502   --processing_template_decl;
3503   current_template_parms = TREE_CHAIN (current_template_parms);
3504 }
3505
3506 /* Within the declaration of a template, return all levels of template
3507    parameters that apply.  The template parameters are represented as
3508    a TREE_VEC, in the form documented in cp-tree.h for template
3509    arguments.  */
3510
3511 static tree
3512 current_template_args (void)
3513 {
3514   tree header;
3515   tree args = NULL_TREE;
3516   int length = TMPL_PARMS_DEPTH (current_template_parms);
3517   int l = length;
3518
3519   /* If there is only one level of template parameters, we do not
3520      create a TREE_VEC of TREE_VECs.  Instead, we return a single
3521      TREE_VEC containing the arguments.  */
3522   if (length > 1)
3523     args = make_tree_vec (length);
3524
3525   for (header = current_template_parms; header; header = TREE_CHAIN (header))
3526     {
3527       tree a = copy_node (TREE_VALUE (header));
3528       int i;
3529
3530       TREE_TYPE (a) = NULL_TREE;
3531       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3532         {
3533           tree t = TREE_VEC_ELT (a, i);
3534
3535           /* T will be a list if we are called from within a
3536              begin/end_template_parm_list pair, but a vector directly
3537              if within a begin/end_member_template_processing pair.  */
3538           if (TREE_CODE (t) == TREE_LIST)
3539             {
3540               t = TREE_VALUE (t);
3541
3542               if (!error_operand_p (t))
3543                 {
3544                   if (TREE_CODE (t) == TYPE_DECL
3545                       || TREE_CODE (t) == TEMPLATE_DECL)
3546                     {
3547                       t = TREE_TYPE (t);
3548                       
3549                       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3550                         {
3551                           /* Turn this argument into a TYPE_ARGUMENT_PACK
3552                              with a single element, which expands T.  */
3553                           tree vec = make_tree_vec (1);
3554                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3555                           
3556                           t = cxx_make_type (TYPE_ARGUMENT_PACK);
3557                           SET_ARGUMENT_PACK_ARGS (t, vec);
3558                         }
3559                     }
3560                   else
3561                     {
3562                       t = DECL_INITIAL (t);
3563                       
3564                       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3565                         {
3566                           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3567                              with a single element, which expands T.  */
3568                           tree vec = make_tree_vec (1);
3569                           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3570                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3571                           
3572                           t  = make_node (NONTYPE_ARGUMENT_PACK);
3573                           SET_ARGUMENT_PACK_ARGS (t, vec);
3574                           TREE_TYPE (t) = type;
3575                         }
3576                     }
3577                   TREE_VEC_ELT (a, i) = t;
3578                 }
3579             }
3580         }
3581
3582       if (length > 1)
3583         TREE_VEC_ELT (args, --l) = a;
3584       else
3585         args = a;
3586     }
3587
3588   return args;
3589 }
3590
3591 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3592    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
3593    a member template.  Used by push_template_decl below.  */
3594
3595 static tree
3596 build_template_decl (tree decl, tree parms, bool member_template_p)
3597 {
3598   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3599   DECL_TEMPLATE_PARMS (tmpl) = parms;
3600   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3601   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3602
3603   return tmpl;
3604 }
3605
3606 struct template_parm_data
3607 {
3608   /* The level of the template parameters we are currently
3609      processing.  */
3610   int level;
3611
3612   /* The index of the specialization argument we are currently
3613      processing.  */
3614   int current_arg;
3615
3616   /* An array whose size is the number of template parameters.  The
3617      elements are nonzero if the parameter has been used in any one
3618      of the arguments processed so far.  */
3619   int* parms;
3620
3621   /* An array whose size is the number of template arguments.  The
3622      elements are nonzero if the argument makes use of template
3623      parameters of this level.  */
3624   int* arg_uses_template_parms;
3625 };
3626
3627 /* Subroutine of push_template_decl used to see if each template
3628    parameter in a partial specialization is used in the explicit
3629    argument list.  If T is of the LEVEL given in DATA (which is
3630    treated as a template_parm_data*), then DATA->PARMS is marked
3631    appropriately.  */
3632
3633 static int
3634 mark_template_parm (tree t, void* data)
3635 {
3636   int level;
3637   int idx;
3638   struct template_parm_data* tpd = (struct template_parm_data*) data;
3639
3640   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3641     {
3642       level = TEMPLATE_PARM_LEVEL (t);
3643       idx = TEMPLATE_PARM_IDX (t);
3644     }
3645   else
3646     {
3647       level = TEMPLATE_TYPE_LEVEL (t);
3648       idx = TEMPLATE_TYPE_IDX (t);
3649     }
3650
3651   if (level == tpd->level)
3652     {
3653       tpd->parms[idx] = 1;
3654       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3655     }
3656
3657   /* Return zero so that for_each_template_parm will continue the
3658      traversal of the tree; we want to mark *every* template parm.  */
3659   return 0;
3660 }
3661
3662 /* Process the partial specialization DECL.  */
3663
3664 static tree
3665 process_partial_specialization (tree decl)
3666 {
3667   tree type = TREE_TYPE (decl);
3668   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3669   tree specargs = CLASSTYPE_TI_ARGS (type);
3670   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3671   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3672   tree inner_parms;
3673   int nargs = TREE_VEC_LENGTH (inner_args);
3674   int ntparms;
3675   int  i;
3676   int did_error_intro = 0;
3677   struct template_parm_data tpd;
3678   struct template_parm_data tpd2;
3679
3680   gcc_assert (current_template_parms);
3681
3682   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3683   ntparms = TREE_VEC_LENGTH (inner_parms);
3684
3685   /* We check that each of the template parameters given in the
3686      partial specialization is used in the argument list to the
3687      specialization.  For example:
3688
3689        template <class T> struct S;
3690        template <class T> struct S<T*>;
3691
3692      The second declaration is OK because `T*' uses the template
3693      parameter T, whereas
3694
3695        template <class T> struct S<int>;
3696
3697      is no good.  Even trickier is:
3698
3699        template <class T>
3700        struct S1
3701        {
3702           template <class U>
3703           struct S2;
3704           template <class U>
3705           struct S2<T>;
3706        };
3707
3708      The S2<T> declaration is actually invalid; it is a
3709      full-specialization.  Of course,
3710
3711           template <class U>
3712           struct S2<T (*)(U)>;
3713
3714      or some such would have been OK.  */
3715   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3716   tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3717   memset (tpd.parms, 0, sizeof (int) * ntparms);
3718
3719   tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3720   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3721   for (i = 0; i < nargs; ++i)
3722     {
3723       tpd.current_arg = i;
3724       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3725                               &mark_template_parm,
3726                               &tpd,
3727                               NULL,
3728                               /*include_nondeduced_p=*/false);
3729     }
3730   for (i = 0; i < ntparms; ++i)
3731     if (tpd.parms[i] == 0)
3732       {
3733         /* One of the template parms was not used in the
3734            specialization.  */
3735         if (!did_error_intro)
3736           {
3737             error ("template parameters not used in partial specialization:");
3738             did_error_intro = 1;
3739           }
3740
3741         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3742       }
3743
3744   /* [temp.class.spec]
3745
3746      The argument list of the specialization shall not be identical to
3747      the implicit argument list of the primary template.  */
3748   if (comp_template_args
3749       (inner_args,
3750        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3751                                                    (maintmpl)))))
3752     error ("partial specialization %qT does not specialize any template arguments", type);
3753
3754   /* [temp.class.spec]
3755
3756      A partially specialized non-type argument expression shall not
3757      involve template parameters of the partial specialization except
3758      when the argument expression is a simple identifier.
3759
3760      The type of a template parameter corresponding to a specialized
3761      non-type argument shall not be dependent on a parameter of the
3762      specialization. 
3763
3764      Also, we verify that pack expansions only occur at the
3765      end of the argument list.  */
3766   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3767   tpd2.parms = 0;
3768   for (i = 0; i < nargs; ++i)
3769     {
3770       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3771       tree arg = TREE_VEC_ELT (inner_args, i);
3772       tree packed_args = NULL_TREE;
3773       int j, len = 1;
3774
3775       if (ARGUMENT_PACK_P (arg))
3776         {
3777           /* Extract the arguments from the argument pack. We'll be
3778              iterating over these in the following loop.  */
3779           packed_args = ARGUMENT_PACK_ARGS (arg);
3780           len = TREE_VEC_LENGTH (packed_args);
3781         }
3782
3783       for (j = 0; j < len; j++)
3784         {
3785           if (packed_args)
3786             /* Get the Jth argument in the parameter pack.  */
3787             arg = TREE_VEC_ELT (packed_args, j);
3788
3789           if (PACK_EXPANSION_P (arg))
3790             {
3791               /* Pack expansions must come at the end of the
3792                  argument list.  */
3793               if ((packed_args && j < len - 1)
3794                   || (!packed_args && i < nargs - 1))
3795                 {
3796                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3797                     error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3798                   else
3799                     error ("parameter pack argument %qT must be at the end of the template argument list", arg);
3800
3801                   if (packed_args)
3802                     TREE_VEC_ELT (packed_args, j) = error_mark_node;
3803                 }
3804             }
3805
3806           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3807             /* We only care about the pattern.  */
3808             arg = PACK_EXPANSION_PATTERN (arg);
3809
3810           if (/* These first two lines are the `non-type' bit.  */
3811               !TYPE_P (arg)
3812               && TREE_CODE (arg) != TEMPLATE_DECL
3813               /* This next line is the `argument expression is not just a
3814                  simple identifier' condition and also the `specialized
3815                  non-type argument' bit.  */
3816               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3817             {
3818               if ((!packed_args && tpd.arg_uses_template_parms[i])
3819                   || (packed_args && uses_template_parms (arg)))
3820                 error ("template argument %qE involves template parameter(s)",
3821                        arg);
3822               else 
3823                 {
3824                   /* Look at the corresponding template parameter,
3825                      marking which template parameters its type depends
3826                      upon.  */
3827                   tree type = TREE_TYPE (parm);
3828
3829                   if (!tpd2.parms)
3830                     {
3831                       /* We haven't yet initialized TPD2.  Do so now.  */
3832                       tpd2.arg_uses_template_parms 
3833                         = (int *) alloca (sizeof (int) * nargs);
3834                       /* The number of parameters here is the number in the
3835                          main template, which, as checked in the assertion
3836                          above, is NARGS.  */
3837                       tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3838                       tpd2.level = 
3839                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3840                     }
3841
3842                   /* Mark the template parameters.  But this time, we're
3843                      looking for the template parameters of the main
3844                      template, not in the specialization.  */
3845                   tpd2.current_arg = i;
3846                   tpd2.arg_uses_template_parms[i] = 0;
3847                   memset (tpd2.parms, 0, sizeof (int) * nargs);
3848                   for_each_template_parm (type,
3849                                           &mark_template_parm,
3850                                           &tpd2,
3851                                           NULL,
3852                                           /*include_nondeduced_p=*/false);
3853
3854                   if (tpd2.arg_uses_template_parms [i])
3855                     {
3856                       /* The type depended on some template parameters.
3857                          If they are fully specialized in the
3858                          specialization, that's OK.  */
3859                       int j;
3860                       for (j = 0; j < nargs; ++j)
3861                         if (tpd2.parms[j] != 0
3862                             && tpd.arg_uses_template_parms [j])
3863                           {
3864                             error ("type %qT of template argument %qE depends "
3865                                    "on template parameter(s)", 
3866                                    type,
3867                                    arg);
3868                             break;
3869                           }
3870                     }
3871                 }
3872             }
3873         }
3874     }
3875
3876   /* We should only get here once.  */
3877   gcc_assert (!COMPLETE_TYPE_P (type));
3878
3879   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
3880     = tree_cons (specargs, inner_parms,
3881                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
3882   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3883   return decl;
3884 }
3885
3886 /* Check that a template declaration's use of default arguments and
3887    parameter packs is not invalid.  Here, PARMS are the template
3888    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
3889    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
3890    specialization.
3891    
3892
3893    IS_FRIEND_DECL is nonzero if DECL is a friend function template
3894    declaration (but not a definition); 1 indicates a declaration, 2
3895    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3896    emitted for extraneous default arguments.
3897
3898    Returns TRUE if there were no errors found, FALSE otherwise. */
3899
3900 bool
3901 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
3902                          int is_partial, int is_friend_decl)
3903 {
3904   const char *msg;
3905   int last_level_to_check;
3906   tree parm_level;
3907   bool no_errors = true;
3908
3909   /* [temp.param]
3910
3911      A default template-argument shall not be specified in a
3912      function template declaration or a function template definition, nor
3913      in the template-parameter-list of the definition of a member of a
3914      class template.  */
3915
3916   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
3917     /* You can't have a function template declaration in a local
3918        scope, nor you can you define a member of a class template in a
3919        local scope.  */
3920     return true;
3921
3922   if (current_class_type
3923       && !TYPE_BEING_DEFINED (current_class_type)
3924       && DECL_LANG_SPECIFIC (decl)
3925       && DECL_DECLARES_FUNCTION_P (decl)
3926       /* If this is either a friend defined in the scope of the class
3927          or a member function.  */
3928       && (DECL_FUNCTION_MEMBER_P (decl)
3929           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3930           : DECL_FRIEND_CONTEXT (decl)
3931           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3932           : false)
3933       /* And, if it was a member function, it really was defined in
3934          the scope of the class.  */
3935       && (!DECL_FUNCTION_MEMBER_P (decl)
3936           || DECL_INITIALIZED_IN_CLASS_P (decl)))
3937     /* We already checked these parameters when the template was
3938        declared, so there's no need to do it again now.  This function
3939        was defined in class scope, but we're processing it's body now
3940        that the class is complete.  */
3941     return true;
3942
3943   /* Core issue 226 (C++0x only): the following only applies to class
3944      templates.  */
3945   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
3946     {
3947       /* [temp.param]
3948
3949          If a template-parameter has a default template-argument, all
3950          subsequent template-parameters shall have a default
3951          template-argument supplied.  */
3952       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3953         {
3954           tree inner_parms = TREE_VALUE (parm_level);
3955           int ntparms = TREE_VEC_LENGTH (inner_parms);
3956           int seen_def_arg_p = 0;
3957           int i;
3958
3959           for (i = 0; i < ntparms; ++i)
3960             {
3961               tree parm = TREE_VEC_ELT (inner_parms, i);
3962
3963               if (parm == error_mark_node)
3964                 continue;
3965
3966               if (TREE_PURPOSE (parm))
3967                 seen_def_arg_p = 1;
3968               else if (seen_def_arg_p
3969                        && !template_parameter_pack_p (TREE_VALUE (parm)))
3970                 {
3971                   error ("no default argument for %qD", TREE_VALUE (parm));
3972                   /* For better subsequent error-recovery, we indicate that
3973                      there should have been a default argument.  */
3974                   TREE_PURPOSE (parm) = error_mark_node;
3975                   no_errors = false;
3976                 }
3977               else if (is_primary
3978                        && !is_partial
3979                        && !is_friend_decl
3980                        /* Don't complain about an enclosing partial
3981                           specialization.  */
3982                        && parm_level == parms
3983                        && TREE_CODE (decl) == TYPE_DECL
3984                        && i < ntparms - 1
3985                        && template_parameter_pack_p (TREE_VALUE (parm)))
3986                 {
3987                   /* A primary class template can only have one
3988                      parameter pack, at the end of the template
3989                      parameter list.  */
3990
3991                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
3992                     error ("parameter pack %qE must be at the end of the"
3993                            " template parameter list", TREE_VALUE (parm));
3994                   else
3995                     error ("parameter pack %qT must be at the end of the"
3996                            " template parameter list", 
3997                            TREE_TYPE (TREE_VALUE (parm)));
3998
3999                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
4000                     = error_mark_node;
4001                   no_errors = false;
4002                 }
4003             }
4004         }
4005     }
4006
4007   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4008       || is_partial 
4009       || !is_primary
4010       || is_friend_decl)
4011     /* For an ordinary class template, default template arguments are
4012        allowed at the innermost level, e.g.:
4013          template <class T = int>
4014          struct S {};
4015        but, in a partial specialization, they're not allowed even
4016        there, as we have in [temp.class.spec]:
4017
4018          The template parameter list of a specialization shall not
4019          contain default template argument values.
4020
4021        So, for a partial specialization, or for a function template
4022        (in C++98/C++03), we look at all of them.  */
4023     ;
4024   else
4025     /* But, for a primary class template that is not a partial
4026        specialization we look at all template parameters except the
4027        innermost ones.  */
4028     parms = TREE_CHAIN (parms);
4029
4030   /* Figure out what error message to issue.  */
4031   if (is_friend_decl == 2)
4032     msg = "default template arguments may not be used in function template friend re-declaration";
4033   else if (is_friend_decl)
4034     msg = "default template arguments may not be used in function template friend declarations";
4035   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4036     msg = ("default template arguments may not be used in function templates "
4037            "without -std=c++0x or -std=gnu++0x");
4038   else if (is_partial)
4039     msg = "default template arguments may not be used in partial specializations";
4040   else
4041     msg = "default argument for template parameter for class enclosing %qD";
4042
4043   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4044     /* If we're inside a class definition, there's no need to
4045        examine the parameters to the class itself.  On the one
4046        hand, they will be checked when the class is defined, and,
4047        on the other, default arguments are valid in things like:
4048          template <class T = double>
4049          struct S { template <class U> void f(U); };
4050        Here the default argument for `S' has no bearing on the
4051        declaration of `f'.  */
4052     last_level_to_check = template_class_depth (current_class_type) + 1;
4053   else
4054     /* Check everything.  */
4055     last_level_to_check = 0;
4056
4057   for (parm_level = parms;
4058        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4059        parm_level = TREE_CHAIN (parm_level))
4060     {
4061       tree inner_parms = TREE_VALUE (parm_level);
4062       int i;
4063       int ntparms;
4064
4065       ntparms = TREE_VEC_LENGTH (inner_parms);
4066       for (i = 0; i < ntparms; ++i)
4067         {
4068           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4069             continue;
4070
4071           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4072             {
4073               if (msg)
4074                 {
4075                   no_errors = false;
4076                   if (is_friend_decl == 2)
4077                     return no_errors;
4078
4079                   error (msg, decl);
4080                   msg = 0;
4081                 }
4082
4083               /* Clear out the default argument so that we are not
4084                  confused later.  */
4085               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4086             }
4087         }
4088
4089       /* At this point, if we're still interested in issuing messages,
4090          they must apply to classes surrounding the object declared.  */
4091       if (msg)
4092         msg = "default argument for template parameter for class enclosing %qD";
4093     }
4094
4095   return no_errors;
4096 }
4097
4098 /* Worker for push_template_decl_real, called via
4099    for_each_template_parm.  DATA is really an int, indicating the
4100    level of the parameters we are interested in.  If T is a template
4101    parameter of that level, return nonzero.  */
4102
4103 static int
4104 template_parm_this_level_p (tree t, void* data)
4105 {
4106   int this_level = *(int *)data;
4107   int level;
4108
4109   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4110     level = TEMPLATE_PARM_LEVEL (t);
4111   else
4112     level = TEMPLATE_TYPE_LEVEL (t);
4113   return level == this_level;
4114 }
4115
4116 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4117    parameters given by current_template_args, or reuses a
4118    previously existing one, if appropriate.  Returns the DECL, or an
4119    equivalent one, if it is replaced via a call to duplicate_decls.
4120
4121    If IS_FRIEND is true, DECL is a friend declaration.  */
4122
4123 tree
4124 push_template_decl_real (tree decl, bool is_friend)
4125 {
4126   tree tmpl;
4127   tree args;
4128   tree info;
4129   tree ctx;
4130   int primary;
4131   int is_partial;
4132   int new_template_p = 0;
4133   /* True if the template is a member template, in the sense of
4134      [temp.mem].  */
4135   bool member_template_p = false;
4136
4137   if (decl == error_mark_node || !current_template_parms)
4138     return error_mark_node;
4139
4140   /* See if this is a partial specialization.  */
4141   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4142                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4143                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4144
4145   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4146     is_friend = true;
4147
4148   if (is_friend)
4149     /* For a friend, we want the context of the friend function, not
4150        the type of which it is a friend.  */
4151     ctx = DECL_CONTEXT (decl);
4152   else if (CP_DECL_CONTEXT (decl)
4153            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4154     /* In the case of a virtual function, we want the class in which
4155        it is defined.  */
4156     ctx = CP_DECL_CONTEXT (decl);
4157   else
4158     /* Otherwise, if we're currently defining some class, the DECL
4159        is assumed to be a member of the class.  */
4160     ctx = current_scope ();
4161
4162   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4163     ctx = NULL_TREE;
4164
4165   if (!DECL_CONTEXT (decl))
4166     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4167
4168   /* See if this is a primary template.  */
4169   if (is_friend && ctx)
4170     /* A friend template that specifies a class context, i.e.
4171          template <typename T> friend void A<T>::f();
4172        is not primary.  */
4173     primary = 0;
4174   else
4175     primary = template_parm_scope_p ();
4176
4177   if (primary)
4178     {
4179       if (DECL_CLASS_SCOPE_P (decl))
4180         member_template_p = true;
4181       if (TREE_CODE (decl) == TYPE_DECL
4182           && ANON_AGGRNAME_P (DECL_NAME (decl)))
4183         {
4184           error ("template class without a name");
4185           return error_mark_node;
4186         }
4187       else if (TREE_CODE (decl) == FUNCTION_DECL)
4188         {
4189           if (DECL_DESTRUCTOR_P (decl))
4190             {
4191               /* [temp.mem]
4192
4193                  A destructor shall not be a member template.  */
4194               error ("destructor %qD declared as member template", decl);
4195               return error_mark_node;
4196             }
4197           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4198               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
4199                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4200                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4201                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4202                       == void_list_node)))
4203             {
4204               /* [basic.stc.dynamic.allocation]
4205
4206                  An allocation function can be a function
4207                  template. ... Template allocation functions shall
4208                  have two or more parameters.  */
4209               error ("invalid template declaration of %qD", decl);
4210               return error_mark_node;
4211             }
4212         }
4213       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4214                && CLASS_TYPE_P (TREE_TYPE (decl)))
4215         /* OK */;
4216       else
4217         {
4218           error ("template declaration of %q#D", decl);
4219           return error_mark_node;
4220         }
4221     }
4222
4223   /* Check to see that the rules regarding the use of default
4224      arguments are not being violated.  */
4225   check_default_tmpl_args (decl, current_template_parms,
4226                            primary, is_partial, /*is_friend_decl=*/0);
4227
4228   /* Ensure that there are no parameter packs in the type of this
4229      declaration that have not been expanded.  */
4230   if (TREE_CODE (decl) == FUNCTION_DECL)
4231     {
4232       /* Check each of the arguments individually to see if there are
4233          any bare parameter packs.  */
4234       tree type = TREE_TYPE (decl);
4235       tree arg = DECL_ARGUMENTS (decl);
4236       tree argtype = TYPE_ARG_TYPES (type);
4237
4238       while (arg && argtype)
4239         {
4240           if (!FUNCTION_PARAMETER_PACK_P (arg)
4241               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4242             {
4243             /* This is a PARM_DECL that contains unexpanded parameter
4244                packs. We have already complained about this in the
4245                check_for_bare_parameter_packs call, so just replace
4246                these types with ERROR_MARK_NODE.  */
4247               TREE_TYPE (arg) = error_mark_node;
4248               TREE_VALUE (argtype) = error_mark_node;
4249             }
4250
4251           arg = TREE_CHAIN (arg);
4252           argtype = TREE_CHAIN (argtype);
4253         }
4254
4255       /* Check for bare parameter packs in the return type and the
4256          exception specifiers.  */
4257       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4258         /* Errors were already issued, set return type to int
4259            as the frontend doesn't expect error_mark_node as
4260            the return type.  */
4261         TREE_TYPE (type) = integer_type_node;
4262       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4263         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4264     }
4265   else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
4266     {
4267       TREE_TYPE (decl) = error_mark_node;
4268       return error_mark_node;
4269     }
4270
4271   if (is_partial)
4272     return process_partial_specialization (decl);
4273
4274   args = current_template_args ();
4275
4276   if (!ctx
4277       || TREE_CODE (ctx) == FUNCTION_DECL
4278       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4279       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4280     {
4281       if (DECL_LANG_SPECIFIC (decl)
4282           && DECL_TEMPLATE_INFO (decl)
4283           && DECL_TI_TEMPLATE (decl))
4284         tmpl = DECL_TI_TEMPLATE (decl);
4285       /* If DECL is a TYPE_DECL for a class-template, then there won't
4286          be DECL_LANG_SPECIFIC.  The information equivalent to
4287          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4288       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4289                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4290                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4291         {
4292           /* Since a template declaration already existed for this
4293              class-type, we must be redeclaring it here.  Make sure
4294              that the redeclaration is valid.  */
4295           redeclare_class_template (TREE_TYPE (decl),
4296                                     current_template_parms);
4297           /* We don't need to create a new TEMPLATE_DECL; just use the
4298              one we already had.  */
4299           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4300         }
4301       else
4302         {
4303           tmpl = build_template_decl (decl, current_template_parms,
4304                                       member_template_p);
4305           new_template_p = 1;
4306
4307           if (DECL_LANG_SPECIFIC (decl)
4308               && DECL_TEMPLATE_SPECIALIZATION (decl))
4309             {
4310               /* A specialization of a member template of a template
4311                  class.  */
4312               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4313               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4314               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4315             }
4316         }
4317     }
4318   else
4319     {
4320       tree a, t, current, parms;
4321       int i;
4322       tree tinfo = get_template_info (decl);
4323
4324       if (!tinfo)
4325         {
4326           error ("template definition of non-template %q#D", decl);
4327           return error_mark_node;
4328         }
4329
4330       tmpl = TI_TEMPLATE (tinfo);
4331
4332       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4333           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4334           && DECL_TEMPLATE_SPECIALIZATION (decl)
4335           && DECL_MEMBER_TEMPLATE_P (tmpl))
4336         {
4337           tree new_tmpl;
4338
4339           /* The declaration is a specialization of a member
4340              template, declared outside the class.  Therefore, the
4341              innermost template arguments will be NULL, so we
4342              replace them with the arguments determined by the
4343              earlier call to check_explicit_specialization.  */
4344           args = DECL_TI_ARGS (decl);
4345
4346           new_tmpl
4347             = build_template_decl (decl, current_template_parms,
4348                                    member_template_p);
4349           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4350           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4351           DECL_TI_TEMPLATE (decl) = new_tmpl;
4352           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4353           DECL_TEMPLATE_INFO (new_tmpl)
4354             = tree_cons (tmpl, args, NULL_TREE);
4355
4356           register_specialization (new_tmpl,
4357                                    most_general_template (tmpl),
4358                                    args,
4359                                    is_friend, 0);
4360           return decl;
4361         }
4362
4363       /* Make sure the template headers we got make sense.  */
4364
4365       parms = DECL_TEMPLATE_PARMS (tmpl);
4366       i = TMPL_PARMS_DEPTH (parms);
4367       if (TMPL_ARGS_DEPTH (args) != i)
4368         {
4369           error ("expected %d levels of template parms for %q#D, got %d",
4370                  i, decl, TMPL_ARGS_DEPTH (args));
4371         }
4372       else
4373         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
4374           {
4375             a = TMPL_ARGS_LEVEL (args, i);
4376             t = INNERMOST_TEMPLATE_PARMS (parms);
4377
4378             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
4379               {
4380                 if (current == decl)
4381                   error ("got %d template parameters for %q#D",
4382                          TREE_VEC_LENGTH (a), decl);
4383                 else
4384                   error ("got %d template parameters for %q#T",
4385                          TREE_VEC_LENGTH (a), current);
4386                 error ("  but %d required", TREE_VEC_LENGTH (t));
4387                 return error_mark_node;
4388               }
4389
4390             if (current == decl)
4391               current = ctx;
4392             else
4393               current = (TYPE_P (current)
4394                          ? TYPE_CONTEXT (current)
4395                          : DECL_CONTEXT (current));
4396           }
4397
4398       /* Check that the parms are used in the appropriate qualifying scopes
4399          in the declarator.  */
4400       if (!comp_template_args
4401           (TI_ARGS (tinfo),
4402            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4403         {
4404           error ("\
4405 template arguments to %qD do not match original template %qD",
4406                  decl, DECL_TEMPLATE_RESULT (tmpl));
4407           if (!uses_template_parms (TI_ARGS (tinfo)))
4408             inform (input_location, "use template<> for an explicit specialization");
4409           /* Avoid crash in import_export_decl.  */
4410           DECL_INTERFACE_KNOWN (decl) = 1;
4411           return error_mark_node;
4412         }
4413     }
4414
4415   DECL_TEMPLATE_RESULT (tmpl) = decl;
4416   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4417
4418   /* Push template declarations for global functions and types.  Note
4419      that we do not try to push a global template friend declared in a
4420      template class; such a thing may well depend on the template
4421      parameters of the class.  */
4422   if (new_template_p && !ctx
4423       && !(is_friend && template_class_depth (current_class_type) > 0))
4424     {
4425       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4426       if (tmpl == error_mark_node)
4427         return error_mark_node;
4428
4429       /* Hide template friend classes that haven't been declared yet.  */
4430       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4431         {
4432           DECL_ANTICIPATED (tmpl) = 1;
4433           DECL_FRIEND_P (tmpl) = 1;
4434         }
4435     }
4436
4437   if (primary)
4438     {
4439       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4440       int i;
4441
4442       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4443       if (DECL_CONV_FN_P (tmpl))
4444         {
4445           int depth = TMPL_PARMS_DEPTH (parms);
4446
4447           /* It is a conversion operator. See if the type converted to
4448              depends on innermost template operands.  */
4449
4450           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4451                                          depth))
4452             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4453         }
4454
4455       /* Give template template parms a DECL_CONTEXT of the template
4456          for which they are a parameter.  */
4457       parms = INNERMOST_TEMPLATE_PARMS (parms);
4458       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
4459         {
4460           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4461           if (TREE_CODE (parm) == TEMPLATE_DECL)
4462             DECL_CONTEXT (parm) = tmpl;
4463         }
4464     }
4465
4466   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4467      back to its most general template.  If TMPL is a specialization,
4468      ARGS may only have the innermost set of arguments.  Add the missing
4469      argument levels if necessary.  */
4470   if (DECL_TEMPLATE_INFO (tmpl))
4471     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4472
4473   info = tree_cons (tmpl, args, NULL_TREE);
4474
4475   if (DECL_IMPLICIT_TYPEDEF_P (decl))
4476     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4477   else if (DECL_LANG_SPECIFIC (decl))
4478     DECL_TEMPLATE_INFO (decl) = info;
4479
4480   return DECL_TEMPLATE_RESULT (tmpl);
4481 }
4482
4483 tree
4484 push_template_decl (tree decl)
4485 {
4486   return push_template_decl_real (decl, false);
4487 }
4488
4489 /* Called when a class template TYPE is redeclared with the indicated
4490    template PARMS, e.g.:
4491
4492      template <class T> struct S;
4493      template <class T> struct S {};  */
4494
4495 bool
4496 redeclare_class_template (tree type, tree parms)
4497 {
4498   tree tmpl;
4499   tree tmpl_parms;
4500   int i;
4501
4502   if (!TYPE_TEMPLATE_INFO (type))
4503     {
4504       error ("%qT is not a template type", type);
4505       return false;
4506     }
4507
4508   tmpl = TYPE_TI_TEMPLATE (type);
4509   if (!PRIMARY_TEMPLATE_P (tmpl))
4510     /* The type is nested in some template class.  Nothing to worry
4511        about here; there are no new template parameters for the nested
4512        type.  */
4513     return true;
4514
4515   if (!parms)
4516     {
4517       error ("template specifiers not specified in declaration of %qD",
4518              tmpl);
4519       return false;
4520     }
4521
4522   parms = INNERMOST_TEMPLATE_PARMS (parms);
4523   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4524
4525   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4526     {
4527       error ("redeclared with %d template parameter(s)", 
4528              TREE_VEC_LENGTH (parms));
4529       inform (input_location, "previous declaration %q+D used %d template parameter(s)", 
4530              tmpl, TREE_VEC_LENGTH (tmpl_parms));
4531       return false;
4532     }
4533
4534   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4535     {
4536       tree tmpl_parm;
4537       tree parm;
4538       tree tmpl_default;
4539       tree parm_default;
4540
4541       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4542           || TREE_VEC_ELT (parms, i) == error_mark_node)
4543         continue;
4544
4545       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4546       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4547       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4548       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4549
4550       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4551          TEMPLATE_DECL.  */
4552       if (tmpl_parm != error_mark_node
4553           && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4554               || (TREE_CODE (tmpl_parm) != TYPE_DECL
4555                   && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
4556               || (TREE_CODE (tmpl_parm) != PARM_DECL
4557                   && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
4558                       != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
4559               || (TREE_CODE (tmpl_parm) == PARM_DECL
4560                   && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
4561                       != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))))))
4562         {
4563           error ("template parameter %q+#D", tmpl_parm);
4564           error ("redeclared here as %q#D", parm);
4565           return false;
4566         }
4567
4568       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4569         {
4570           /* We have in [temp.param]:
4571
4572              A template-parameter may not be given default arguments
4573              by two different declarations in the same scope.  */
4574           error_at (input_location, "redefinition of default argument for %q#D", parm);
4575           inform (DECL_SOURCE_LOCATION (tmpl_parm),
4576                   "original definition appeared here");
4577           return false;
4578         }
4579
4580       if (parm_default != NULL_TREE)
4581         /* Update the previous template parameters (which are the ones
4582            that will really count) with the new default value.  */
4583         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4584       else if (tmpl_default != NULL_TREE)
4585         /* Update the new parameters, too; they'll be used as the
4586            parameters for any members.  */
4587         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4588     }
4589
4590     return true;
4591 }
4592
4593 /* Simplify EXPR if it is a non-dependent expression.  Returns the
4594    (possibly simplified) expression.  */
4595
4596 tree
4597 fold_non_dependent_expr (tree expr)
4598 {
4599   if (expr == NULL_TREE)
4600     return NULL_TREE;
4601
4602   /* If we're in a template, but EXPR isn't value dependent, simplify
4603      it.  We're supposed to treat:
4604
4605        template <typename T> void f(T[1 + 1]);
4606        template <typename T> void f(T[2]);
4607
4608      as two declarations of the same function, for example.  */
4609   if (processing_template_decl
4610       && !type_dependent_expression_p (expr)
4611       && !value_dependent_expression_p (expr))
4612     {
4613       HOST_WIDE_INT saved_processing_template_decl;
4614
4615       saved_processing_template_decl = processing_template_decl;
4616       processing_template_decl = 0;
4617       expr = tsubst_copy_and_build (expr,
4618                                     /*args=*/NULL_TREE,
4619                                     tf_error,
4620                                     /*in_decl=*/NULL_TREE,
4621                                     /*function_p=*/false,
4622                                     /*integral_constant_expression_p=*/true);
4623       processing_template_decl = saved_processing_template_decl;
4624     }
4625   return expr;
4626 }
4627
4628 /* EXPR is an expression which is used in a constant-expression context.
4629    For instance, it could be a VAR_DECL with a constant initializer.
4630    Extract the innermost constant expression.
4631
4632    This is basically a more powerful version of
4633    integral_constant_value, which can be used also in templates where
4634    initializers can maintain a syntactic rather than semantic form
4635    (even if they are non-dependent, for access-checking purposes).  */
4636
4637 static tree
4638 fold_decl_constant_value (tree expr)
4639 {
4640   tree const_expr = expr;
4641   do
4642     {
4643       expr = fold_non_dependent_expr (const_expr);
4644       const_expr = integral_constant_value (expr);
4645     }
4646   while (expr != const_expr);
4647
4648   return expr;
4649 }
4650
4651 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4652    must be a function or a pointer-to-function type, as specified
4653    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4654    and check that the resulting function has external linkage.  */
4655
4656 static tree
4657 convert_nontype_argument_function (tree type, tree expr)
4658 {
4659   tree fns = expr;
4660   tree fn, fn_no_ptr;
4661
4662   fn = instantiate_type (type, fns, tf_none);
4663   if (fn == error_mark_node)
4664     return error_mark_node;
4665
4666   fn_no_ptr = fn;
4667   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4668     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4669   if (TREE_CODE (fn_no_ptr) == BASELINK)
4670     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4671  
4672   /* [temp.arg.nontype]/1
4673
4674      A template-argument for a non-type, non-template template-parameter
4675      shall be one of:
4676      [...]
4677      -- the address of an object or function with external linkage.  */
4678   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4679     {
4680       error ("%qE is not a valid template argument for type %qT "
4681              "because function %qD has not external linkage",
4682              expr, type, fn_no_ptr);
4683       return NULL_TREE;
4684     }
4685
4686   return fn;
4687 }
4688
4689 /* Subroutine of convert_nontype_argument.
4690    Check if EXPR of type TYPE is a valid pointer-to-member constant.
4691    Emit an error otherwise.  */
4692
4693 static bool
4694 check_valid_ptrmem_cst_expr (tree type, tree expr)
4695 {
4696   STRIP_NOPS (expr);
4697   if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
4698     return true;
4699   error ("%qE is not a valid template argument for type %qT",
4700          expr, type);
4701   error ("it must be a pointer-to-member of the form `&X::Y'");
4702   return false;
4703 }
4704
4705 /* Attempt to convert the non-type template parameter EXPR to the
4706    indicated TYPE.  If the conversion is successful, return the
4707    converted value.  If the conversion is unsuccessful, return
4708    NULL_TREE if we issued an error message, or error_mark_node if we
4709    did not.  We issue error messages for out-and-out bad template
4710    parameters, but not simply because the conversion failed, since we
4711    might be just trying to do argument deduction.  Both TYPE and EXPR
4712    must be non-dependent.
4713
4714    The conversion follows the special rules described in
4715    [temp.arg.nontype], and it is much more strict than an implicit
4716    conversion.
4717
4718    This function is called twice for each template argument (see
4719    lookup_template_class for a more accurate description of this
4720    problem). This means that we need to handle expressions which
4721    are not valid in a C++ source, but can be created from the
4722    first call (for instance, casts to perform conversions). These
4723    hacks can go away after we fix the double coercion problem.  */
4724
4725 static tree
4726 convert_nontype_argument (tree type, tree expr)
4727 {
4728   tree expr_type;
4729
4730   /* Detect immediately string literals as invalid non-type argument.
4731      This special-case is not needed for correctness (we would easily
4732      catch this later), but only to provide better diagnostic for this
4733      common user mistake. As suggested by DR 100, we do not mention
4734      linkage issues in the diagnostic as this is not the point.  */
4735   if (TREE_CODE (expr) == STRING_CST)
4736     {
4737       error ("%qE is not a valid template argument for type %qT "
4738              "because string literals can never be used in this context",
4739              expr, type);
4740       return NULL_TREE;
4741     }
4742
4743   /* If we are in a template, EXPR may be non-dependent, but still
4744      have a syntactic, rather than semantic, form.  For example, EXPR
4745      might be a SCOPE_REF, rather than the VAR_DECL to which the
4746      SCOPE_REF refers.  Preserving the qualifying scope is necessary
4747      so that access checking can be performed when the template is
4748      instantiated -- but here we need the resolved form so that we can
4749      convert the argument.  */
4750   expr = fold_non_dependent_expr (expr);
4751   if (error_operand_p (expr))
4752     return error_mark_node;
4753   expr_type = TREE_TYPE (expr);
4754
4755   /* HACK: Due to double coercion, we can get a
4756      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4757      which is the tree that we built on the first call (see
4758      below when coercing to reference to object or to reference to
4759      function). We just strip everything and get to the arg.
4760      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4761      for examples.  */
4762   if (TREE_CODE (expr) == NOP_EXPR)
4763     {
4764       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4765         {
4766           /* ??? Maybe we could use convert_from_reference here, but we
4767              would need to relax its constraints because the NOP_EXPR
4768              could actually change the type to something more cv-qualified,
4769              and this is not folded by convert_from_reference.  */
4770           tree addr = TREE_OPERAND (expr, 0);
4771           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4772           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4773           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4774           gcc_assert (same_type_ignoring_top_level_qualifiers_p
4775                       (TREE_TYPE (expr_type),
4776                        TREE_TYPE (TREE_TYPE (addr))));
4777
4778           expr = TREE_OPERAND (addr, 0);
4779           expr_type = TREE_TYPE (expr);
4780         }
4781
4782       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4783          parameter is a pointer to object, through decay and
4784          qualification conversion. Let's strip everything.  */
4785       else if (TYPE_PTROBV_P (type))
4786         {
4787           STRIP_NOPS (expr);
4788           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4789           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4790           /* Skip the ADDR_EXPR only if it is part of the decay for
4791              an array. Otherwise, it is part of the original argument
4792              in the source code.  */
4793           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4794             expr = TREE_OPERAND (expr, 0);
4795           expr_type = TREE_TYPE (expr);
4796         }
4797     }
4798
4799   /* [temp.arg.nontype]/5, bullet 1
4800
4801      For a non-type template-parameter of integral or enumeration type,
4802      integral promotions (_conv.prom_) and integral conversions
4803      (_conv.integral_) are applied.  */
4804   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
4805     {
4806       if (!INTEGRAL_OR_ENUMERATION_TYPE_P (expr_type))
4807         return error_mark_node;
4808
4809       expr = fold_decl_constant_value (expr);
4810       /* Notice that there are constant expressions like '4 % 0' which
4811          do not fold into integer constants.  */
4812       if (TREE_CODE (expr) != INTEGER_CST)
4813         {
4814           error ("%qE is not a valid template argument for type %qT "
4815                  "because it is a non-constant expression", expr, type);
4816           return NULL_TREE;
4817         }
4818
4819       /* At this point, an implicit conversion does what we want,
4820          because we already know that the expression is of integral
4821          type.  */
4822       expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4823       if (expr == error_mark_node)
4824         return error_mark_node;
4825
4826       /* Conversion was allowed: fold it to a bare integer constant.  */
4827       expr = fold (expr);
4828     }
4829   /* [temp.arg.nontype]/5, bullet 2
4830
4831      For a non-type template-parameter of type pointer to object,
4832      qualification conversions (_conv.qual_) and the array-to-pointer
4833      conversion (_conv.array_) are applied.  */
4834   else if (TYPE_PTROBV_P (type))
4835     {
4836       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
4837
4838          A template-argument for a non-type, non-template template-parameter
4839          shall be one of: [...]
4840
4841          -- the name of a non-type template-parameter;
4842          -- the address of an object or function with external linkage, [...]
4843             expressed as "& id-expression" where the & is optional if the name
4844             refers to a function or array, or if the corresponding
4845             template-parameter is a reference.
4846
4847         Here, we do not care about functions, as they are invalid anyway
4848         for a parameter of type pointer-to-object.  */
4849
4850       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4851         /* Non-type template parameters are OK.  */
4852         ;
4853       else if (TREE_CODE (expr) != ADDR_EXPR
4854                && TREE_CODE (expr_type) != ARRAY_TYPE)
4855         {
4856           if (TREE_CODE (expr) == VAR_DECL)
4857             {
4858               error ("%qD is not a valid template argument "
4859                      "because %qD is a variable, not the address of "
4860                      "a variable",
4861                      expr, expr);
4862               return NULL_TREE;
4863             }
4864           /* Other values, like integer constants, might be valid
4865              non-type arguments of some other type.  */
4866           return error_mark_node;
4867         }
4868       else
4869         {
4870           tree decl;
4871
4872           decl = ((TREE_CODE (expr) == ADDR_EXPR)
4873                   ? TREE_OPERAND (expr, 0) : expr);
4874           if (TREE_CODE (decl) != VAR_DECL)
4875             {
4876               error ("%qE is not a valid template argument of type %qT "
4877                      "because %qE is not a variable",
4878                      expr, type, decl);
4879               return NULL_TREE;
4880             }
4881           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4882             {
4883               error ("%qE is not a valid template argument of type %qT "
4884                      "because %qD does not have external linkage",
4885                      expr, type, decl);
4886               return NULL_TREE;
4887             }
4888         }
4889
4890       expr = decay_conversion (expr);
4891       if (expr == error_mark_node)
4892         return error_mark_node;
4893
4894       expr = perform_qualification_conversions (type, expr);
4895       if (expr == error_mark_node)
4896         return error_mark_node;
4897     }
4898   /* [temp.arg.nontype]/5, bullet 3
4899
4900      For a non-type template-parameter of type reference to object, no
4901      conversions apply. The type referred to by the reference may be more
4902      cv-qualified than the (otherwise identical) type of the
4903      template-argument. The template-parameter is bound directly to the
4904      template-argument, which must be an lvalue.  */
4905   else if (TYPE_REF_OBJ_P (type))
4906     {
4907       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4908                                                       expr_type))
4909         return error_mark_node;
4910
4911       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4912         {
4913           error ("%qE is not a valid template argument for type %qT "
4914                  "because of conflicts in cv-qualification", expr, type);
4915           return NULL_TREE;
4916         }
4917
4918       if (!real_lvalue_p (expr))
4919         {
4920           error ("%qE is not a valid template argument for type %qT "
4921                  "because it is not an lvalue", expr, type);
4922           return NULL_TREE;
4923         }
4924
4925       /* [temp.arg.nontype]/1
4926
4927          A template-argument for a non-type, non-template template-parameter
4928          shall be one of: [...]
4929
4930          -- the address of an object or function with external linkage.  */
4931       if (!DECL_EXTERNAL_LINKAGE_P (expr))
4932         {
4933           error ("%qE is not a valid template argument for type %qT "
4934                  "because object %qD has not external linkage",
4935                  expr, type, expr);
4936           return NULL_TREE;
4937         }
4938
4939       expr = build_nop (type, build_address (expr));
4940     }
4941   /* [temp.arg.nontype]/5, bullet 4
4942
4943      For a non-type template-parameter of type pointer to function, only
4944      the function-to-pointer conversion (_conv.func_) is applied. If the
4945      template-argument represents a set of overloaded functions (or a
4946      pointer to such), the matching function is selected from the set
4947      (_over.over_).  */
4948   else if (TYPE_PTRFN_P (type))
4949     {
4950       /* If the argument is a template-id, we might not have enough
4951          context information to decay the pointer.  */
4952       if (!type_unknown_p (expr_type))
4953         {
4954           expr = decay_conversion (expr);
4955           if (expr == error_mark_node)
4956             return error_mark_node;
4957         }
4958
4959       expr = convert_nontype_argument_function (type, expr);
4960       if (!expr || expr == error_mark_node)
4961         return expr;
4962
4963       if (TREE_CODE (expr) != ADDR_EXPR)
4964         {
4965           error ("%qE is not a valid template argument for type %qT", expr, type);
4966           error ("it must be the address of a function with external linkage");
4967           return NULL_TREE;
4968         }
4969     }
4970   /* [temp.arg.nontype]/5, bullet 5
4971
4972      For a non-type template-parameter of type reference to function, no
4973      conversions apply. If the template-argument represents a set of
4974      overloaded functions, the matching function is selected from the set
4975      (_over.over_).  */
4976   else if (TYPE_REFFN_P (type))
4977     {
4978       if (TREE_CODE (expr) == ADDR_EXPR)
4979         {
4980           error ("%qE is not a valid template argument for type %qT "
4981                  "because it is a pointer", expr, type);
4982           inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
4983           return NULL_TREE;
4984         }
4985
4986       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4987       if (!expr || expr == error_mark_node)
4988         return expr;
4989
4990       expr = build_nop (type, build_address (expr));
4991     }
4992   /* [temp.arg.nontype]/5, bullet 6
4993
4994      For a non-type template-parameter of type pointer to member function,
4995      no conversions apply. If the template-argument represents a set of
4996      overloaded member functions, the matching member function is selected
4997      from the set (_over.over_).  */
4998   else if (TYPE_PTRMEMFUNC_P (type))
4999     {
5000       expr = instantiate_type (type, expr, tf_none);
5001       if (expr == error_mark_node)
5002         return error_mark_node;
5003
5004       /* [temp.arg.nontype] bullet 1 says the pointer to member
5005          expression must be a pointer-to-member constant.  */
5006       if (!check_valid_ptrmem_cst_expr (type, expr))
5007         return error_mark_node;
5008
5009       /* There is no way to disable standard conversions in
5010          resolve_address_of_overloaded_function (called by
5011          instantiate_type). It is possible that the call succeeded by
5012          converting &B::I to &D::I (where B is a base of D), so we need
5013          to reject this conversion here.
5014
5015          Actually, even if there was a way to disable standard conversions,
5016          it would still be better to reject them here so that we can
5017          provide a superior diagnostic.  */
5018       if (!same_type_p (TREE_TYPE (expr), type))
5019         {
5020           /* Make sure we are just one standard conversion off.  */
5021           gcc_assert (can_convert (type, TREE_TYPE (expr)));
5022           error ("%qE is not a valid template argument for type %qT "
5023                  "because it is of type %qT", expr, type,
5024                  TREE_TYPE (expr));
5025           inform (input_location, "standard conversions are not allowed in this context");
5026           return NULL_TREE;
5027         }
5028     }
5029   /* [temp.arg.nontype]/5, bullet 7
5030
5031      For a non-type template-parameter of type pointer to data member,
5032      qualification conversions (_conv.qual_) are applied.  */
5033   else if (TYPE_PTRMEM_P (type))
5034     {
5035       /* [temp.arg.nontype] bullet 1 says the pointer to member
5036          expression must be a pointer-to-member constant.  */
5037       if (!check_valid_ptrmem_cst_expr (type, expr))
5038         return error_mark_node;
5039
5040       expr = perform_qualification_conversions (type, expr);
5041       if (expr == error_mark_node)
5042         return expr;
5043     }
5044   /* A template non-type parameter must be one of the above.  */
5045   else
5046     gcc_unreachable ();
5047
5048   /* Sanity check: did we actually convert the argument to the
5049      right type?  */
5050   gcc_assert (same_type_p (type, TREE_TYPE (expr)));
5051   return expr;
5052 }
5053
5054 /* Subroutine of coerce_template_template_parms, which returns 1 if
5055    PARM_PARM and ARG_PARM match using the rule for the template
5056    parameters of template template parameters. Both PARM and ARG are
5057    template parameters; the rest of the arguments are the same as for
5058    coerce_template_template_parms.
5059  */
5060 static int
5061 coerce_template_template_parm (tree parm,
5062                               tree arg,
5063                               tsubst_flags_t complain,
5064                               tree in_decl,
5065                               tree outer_args)
5066 {
5067   if (arg == NULL_TREE || arg == error_mark_node
5068       || parm == NULL_TREE || parm == error_mark_node)
5069     return 0;
5070   
5071   if (TREE_CODE (arg) != TREE_CODE (parm))
5072     return 0;
5073   
5074   switch (TREE_CODE (parm))
5075     {
5076     case TEMPLATE_DECL:
5077       /* We encounter instantiations of templates like
5078          template <template <template <class> class> class TT>
5079          class C;  */
5080       {
5081         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5082         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5083         
5084         if (!coerce_template_template_parms
5085             (parmparm, argparm, complain, in_decl, outer_args))
5086           return 0;
5087       }
5088       /* Fall through.  */
5089       
5090     case TYPE_DECL:
5091       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
5092           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
5093         /* Argument is a parameter pack but parameter is not.  */
5094         return 0;
5095       break;
5096       
5097     case PARM_DECL:
5098       /* The tsubst call is used to handle cases such as
5099          
5100            template <int> class C {};
5101            template <class T, template <T> class TT> class D {};
5102            D<int, C> d;
5103
5104          i.e. the parameter list of TT depends on earlier parameters.  */
5105       if (!uses_template_parms (TREE_TYPE (arg))
5106           && !same_type_p
5107                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
5108                  TREE_TYPE (arg)))
5109         return 0;
5110       
5111       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
5112           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
5113         /* Argument is a parameter pack but parameter is not.  */
5114         return 0;
5115       
5116       break;
5117
5118     default:
5119       gcc_unreachable ();
5120     }
5121
5122   return 1;
5123 }
5124
5125
5126 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
5127    template template parameters.  Both PARM_PARMS and ARG_PARMS are
5128    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
5129    or PARM_DECL.
5130
5131    Consider the example:
5132      template <class T> class A;
5133      template<template <class U> class TT> class B;
5134
5135    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
5136    the parameters to A, and OUTER_ARGS contains A.  */
5137
5138 static int
5139 coerce_template_template_parms (tree parm_parms,
5140                                 tree arg_parms,
5141                                 tsubst_flags_t complain,
5142                                 tree in_decl,
5143                                 tree outer_args)
5144 {
5145   int nparms, nargs, i;
5146   tree parm, arg;
5147   int variadic_p = 0;
5148
5149   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
5150   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
5151
5152   nparms = TREE_VEC_LENGTH (parm_parms);
5153   nargs = TREE_VEC_LENGTH (arg_parms);
5154
5155   /* Determine whether we have a parameter pack at the end of the
5156      template template parameter's template parameter list.  */
5157   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
5158     {
5159       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
5160       
5161       if (parm == error_mark_node)
5162         return 0;
5163
5164       switch (TREE_CODE (parm))
5165         {
5166         case TEMPLATE_DECL:
5167         case TYPE_DECL:
5168           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
5169             variadic_p = 1;
5170           break;
5171           
5172         case PARM_DECL:
5173           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
5174             variadic_p = 1;
5175           break;
5176           
5177         default:
5178           gcc_unreachable ();
5179         }
5180     }
5181  
5182   if (nargs != nparms
5183       && !(variadic_p && nargs >= nparms - 1))
5184     return 0;
5185
5186   /* Check all of the template parameters except the parameter pack at
5187      the end (if any).  */
5188   for (i = 0; i < nparms - variadic_p; ++i)
5189     {
5190       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
5191           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
5192         continue;
5193
5194       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
5195       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
5196
5197       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
5198                                           outer_args))
5199         return 0;
5200
5201     }
5202
5203   if (variadic_p)
5204     {
5205       /* Check each of the template parameters in the template
5206          argument against the template parameter pack at the end of
5207          the template template parameter.  */
5208       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
5209         return 0;
5210
5211       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
5212
5213       for (; i < nargs; ++i)
5214         {
5215           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
5216             continue;
5217  
5218           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
5219  
5220           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
5221                                               outer_args))
5222             return 0;
5223         }
5224     }
5225
5226   return 1;
5227 }
5228
5229 /* Verifies that the deduced template arguments (in TARGS) for the
5230    template template parameters (in TPARMS) represent valid bindings,
5231    by comparing the template parameter list of each template argument
5232    to the template parameter list of its corresponding template
5233    template parameter, in accordance with DR150. This
5234    routine can only be called after all template arguments have been
5235    deduced. It will return TRUE if all of the template template
5236    parameter bindings are okay, FALSE otherwise.  */
5237 bool 
5238 template_template_parm_bindings_ok_p (tree tparms, tree targs)
5239 {
5240   int i, ntparms = TREE_VEC_LENGTH (tparms);
5241   bool ret = true;
5242
5243   /* We're dealing with template parms in this process.  */
5244   ++processing_template_decl;
5245
5246   targs = INNERMOST_TEMPLATE_ARGS (targs);
5247
5248   for (i = 0; i < ntparms; ++i)
5249     {
5250       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
5251       tree targ = TREE_VEC_ELT (targs, i);
5252
5253       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
5254         {
5255           tree packed_args = NULL_TREE;
5256           int idx, len = 1;
5257
5258           if (ARGUMENT_PACK_P (targ))
5259             {
5260               /* Look inside the argument pack.  */
5261               packed_args = ARGUMENT_PACK_ARGS (targ);
5262               len = TREE_VEC_LENGTH (packed_args);
5263             }
5264
5265           for (idx = 0; idx < len; ++idx)
5266             {
5267               tree targ_parms = NULL_TREE;
5268
5269               if (packed_args)
5270                 /* Extract the next argument from the argument
5271                    pack.  */
5272                 targ = TREE_VEC_ELT (packed_args, idx);
5273
5274               if (PACK_EXPANSION_P (targ))
5275                 /* Look at the pattern of the pack expansion.  */
5276                 targ = PACK_EXPANSION_PATTERN (targ);
5277
5278               /* Extract the template parameters from the template
5279                  argument.  */
5280               if (TREE_CODE (targ) == TEMPLATE_DECL)
5281                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
5282               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
5283                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
5284
5285               /* Verify that we can coerce the template template
5286                  parameters from the template argument to the template
5287                  parameter.  This requires an exact match.  */
5288               if (targ_parms
5289                   && !coerce_template_template_parms
5290                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
5291                         targ_parms,
5292                         tf_none,
5293                         tparm,
5294                         targs))
5295                 {
5296                   ret = false;
5297                   goto out;
5298                 }
5299             }
5300         }
5301     }
5302
5303  out:
5304
5305   --processing_template_decl;
5306   return ret;
5307 }
5308
5309 /* Convert the indicated template ARG as necessary to match the
5310    indicated template PARM.  Returns the converted ARG, or
5311    error_mark_node if the conversion was unsuccessful.  Error and
5312    warning messages are issued under control of COMPLAIN.  This
5313    conversion is for the Ith parameter in the parameter list.  ARGS is
5314    the full set of template arguments deduced so far.  */
5315
5316 static tree
5317 convert_template_argument (tree parm,
5318                            tree arg,
5319                            tree args,
5320                            tsubst_flags_t complain,
5321                            int i,
5322                            tree in_decl)
5323 {
5324   tree orig_arg;
5325   tree val;
5326   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
5327
5328   if (TREE_CODE (arg) == TREE_LIST
5329       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
5330     {
5331       /* The template argument was the name of some
5332          member function.  That's usually
5333          invalid, but static members are OK.  In any
5334          case, grab the underlying fields/functions
5335          and issue an error later if required.  */
5336       orig_arg = TREE_VALUE (arg);
5337       TREE_TYPE (arg) = unknown_type_node;
5338     }
5339
5340   orig_arg = arg;
5341
5342   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
5343   requires_type = (TREE_CODE (parm) == TYPE_DECL
5344                    || requires_tmpl_type);
5345
5346   /* When determining whether an argument pack expansion is a template,
5347      look at the pattern.  */
5348   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
5349     arg = PACK_EXPANSION_PATTERN (arg);
5350
5351   is_tmpl_type = 
5352     ((TREE_CODE (arg) == TEMPLATE_DECL
5353       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
5354      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
5355      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
5356
5357   if (is_tmpl_type
5358       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
5359           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
5360     arg = TYPE_STUB_DECL (arg);
5361
5362   is_type = TYPE_P (arg) || is_tmpl_type;
5363
5364   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
5365       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
5366     {
5367       permerror (input_location, "to refer to a type member of a template parameter, "
5368                  "use %<typename %E%>", orig_arg);
5369
5370       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
5371                                      TREE_OPERAND (arg, 1),
5372                                      typename_type,
5373                                      complain & tf_error);
5374       arg = orig_arg;
5375       is_type = 1;
5376     }
5377   if (is_type != requires_type)
5378     {
5379       if (in_decl)
5380         {
5381           if (complain & tf_error)
5382             {
5383               error ("type/value mismatch at argument %d in template "
5384                      "parameter list for %qD",
5385                      i + 1, in_decl);
5386               if (is_type)
5387                 error ("  expected a constant of type %qT, got %qT",
5388                        TREE_TYPE (parm),
5389                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
5390               else if (requires_tmpl_type)
5391                 error ("  expected a class template, got %qE", orig_arg);
5392               else
5393                 error ("  expected a type, got %qE", orig_arg);
5394             }
5395         }
5396       return error_mark_node;
5397     }
5398   if (is_tmpl_type ^ requires_tmpl_type)
5399     {
5400       if (in_decl && (complain & tf_error))
5401         {
5402           error ("type/value mismatch at argument %d in template "
5403                  "parameter list for %qD",
5404                  i + 1, in_decl);
5405           if (is_tmpl_type)
5406             error ("  expected a type, got %qT", DECL_NAME (arg));
5407           else
5408             error ("  expected a class template, got %qT", orig_arg);
5409         }
5410       return error_mark_node;
5411     }
5412
5413   if (is_type)
5414     {
5415       if (requires_tmpl_type)
5416         {
5417           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
5418             /* The number of argument required is not known yet.
5419                Just accept it for now.  */
5420             val = TREE_TYPE (arg);
5421           else
5422             {
5423               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5424               tree argparm;
5425
5426               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5427
5428               if (coerce_template_template_parms (parmparm, argparm,
5429                                                   complain, in_decl,
5430                                                   args))
5431                 {
5432                   val = orig_arg;
5433
5434                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
5435                      TEMPLATE_DECL.  */
5436                   if (val != error_mark_node)
5437                     {
5438                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
5439                         val = TREE_TYPE (val);
5440                       else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
5441                                && DECL_TEMPLATE_TEMPLATE_PARM_P (arg))
5442                         {
5443                           val = TREE_TYPE (arg);
5444                           val = make_pack_expansion (val);
5445                         }
5446                     }
5447                 }
5448               else
5449                 {
5450                   if (in_decl && (complain & tf_error))
5451                     {
5452                       error ("type/value mismatch at argument %d in "
5453                              "template parameter list for %qD",
5454                              i + 1, in_decl);
5455                       error ("  expected a template of type %qD, got %qD",
5456                              parm, orig_arg);
5457                     }
5458
5459                   val = error_mark_node;
5460                 }
5461             }
5462         }
5463       else
5464         val = orig_arg;
5465       /* We only form one instance of each template specialization.
5466          Therefore, if we use a non-canonical variant (i.e., a
5467          typedef), any future messages referring to the type will use
5468          the typedef, which is confusing if those future uses do not
5469          themselves also use the typedef.  */
5470       if (TYPE_P (val))
5471         val = strip_typedefs (val);
5472     }
5473   else
5474     {
5475       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
5476
5477       if (invalid_nontype_parm_type_p (t, complain))
5478         return error_mark_node;
5479
5480       if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
5481         {
5482           if (same_type_p (t, TREE_TYPE (orig_arg)))
5483             val = orig_arg;
5484           else
5485             {
5486               /* Not sure if this is reachable, but it doesn't hurt
5487                  to be robust.  */
5488               error ("type mismatch in nontype parameter pack");
5489               val = error_mark_node;
5490             }
5491         }
5492       else if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
5493         /* We used to call digest_init here.  However, digest_init
5494            will report errors, which we don't want when complain
5495            is zero.  More importantly, digest_init will try too
5496            hard to convert things: for example, `0' should not be
5497            converted to pointer type at this point according to
5498            the standard.  Accepting this is not merely an
5499            extension, since deciding whether or not these
5500            conversions can occur is part of determining which
5501            function template to call, or whether a given explicit
5502            argument specification is valid.  */
5503         val = convert_nontype_argument (t, orig_arg);
5504       else
5505         val = orig_arg;
5506
5507       if (val == NULL_TREE)
5508         val = error_mark_node;
5509       else if (val == error_mark_node && (complain & tf_error))
5510         error ("could not convert template argument %qE to %qT",  orig_arg, t);
5511     }
5512
5513   return val;
5514 }
5515
5516 /* Coerces the remaining template arguments in INNER_ARGS (from
5517    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
5518    Returns the coerced argument pack. PARM_IDX is the position of this
5519    parameter in the template parameter list. ARGS is the original
5520    template argument list.  */
5521 static tree
5522 coerce_template_parameter_pack (tree parms,
5523                                 int parm_idx,
5524                                 tree args,
5525                                 tree inner_args,
5526                                 int arg_idx,
5527                                 tree new_args,
5528                                 int* lost,
5529                                 tree in_decl,
5530                                 tsubst_flags_t complain)
5531 {
5532   tree parm = TREE_VEC_ELT (parms, parm_idx);
5533   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5534   tree packed_args;
5535   tree argument_pack;
5536   tree packed_types = NULL_TREE;
5537
5538   if (arg_idx > nargs)
5539     arg_idx = nargs;
5540
5541   packed_args = make_tree_vec (nargs - arg_idx);
5542
5543   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
5544       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
5545     {
5546       /* When the template parameter is a non-type template
5547          parameter pack whose type uses parameter packs, we need
5548          to look at each of the template arguments
5549          separately. Build a vector of the types for these
5550          non-type template parameters in PACKED_TYPES.  */
5551       tree expansion 
5552         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
5553       packed_types = tsubst_pack_expansion (expansion, args,
5554                                             complain, in_decl);
5555
5556       if (packed_types == error_mark_node)
5557         return error_mark_node;
5558
5559       /* Check that we have the right number of arguments.  */
5560       if (arg_idx < nargs
5561           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
5562           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
5563         {
5564           int needed_parms 
5565             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
5566           error ("wrong number of template arguments (%d, should be %d)",
5567                  nargs, needed_parms);
5568           return error_mark_node;
5569         }
5570
5571       /* If we aren't able to check the actual arguments now
5572          (because they haven't been expanded yet), we can at least
5573          verify that all of the types used for the non-type
5574          template parameter pack are, in fact, valid for non-type
5575          template parameters.  */
5576       if (arg_idx < nargs 
5577           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
5578         {
5579           int j, len = TREE_VEC_LENGTH (packed_types);
5580           for (j = 0; j < len; ++j)
5581             {
5582               tree t = TREE_VEC_ELT (packed_types, j);
5583               if (invalid_nontype_parm_type_p (t, complain))
5584                 return error_mark_node;
5585             }
5586         }
5587     }
5588
5589   /* Convert the remaining arguments, which will be a part of the
5590      parameter pack "parm".  */
5591   for (; arg_idx < nargs; ++arg_idx)
5592     {
5593       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
5594       tree actual_parm = TREE_VALUE (parm);
5595
5596       if (packed_types && !PACK_EXPANSION_P (arg))
5597         {
5598           /* When we have a vector of types (corresponding to the
5599              non-type template parameter pack that uses parameter
5600              packs in its type, as mention above), and the
5601              argument is not an expansion (which expands to a
5602              currently unknown number of arguments), clone the
5603              parm and give it the next type in PACKED_TYPES.  */
5604           actual_parm = copy_node (actual_parm);
5605           TREE_TYPE (actual_parm) = 
5606             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
5607         }
5608
5609       if (arg != error_mark_node)
5610         arg = convert_template_argument (actual_parm, 
5611                                          arg, new_args, complain, parm_idx,
5612                                          in_decl);
5613       if (arg == error_mark_node)
5614         (*lost)++;
5615       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
5616     }
5617
5618   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
5619       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
5620     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
5621   else
5622     {
5623       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
5624       TREE_TYPE (argument_pack) 
5625         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
5626       TREE_CONSTANT (argument_pack) = 1;
5627     }
5628
5629   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
5630   return argument_pack;
5631 }
5632
5633 /* Convert all template arguments to their appropriate types, and
5634    return a vector containing the innermost resulting template
5635    arguments.  If any error occurs, return error_mark_node. Error and
5636    warning messages are issued under control of COMPLAIN.
5637
5638    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
5639    for arguments not specified in ARGS.  Otherwise, if
5640    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
5641    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
5642    USE_DEFAULT_ARGS is false, then all arguments must be specified in
5643    ARGS.  */
5644
5645 static tree
5646 coerce_template_parms (tree parms,
5647                        tree args,
5648                        tree in_decl,
5649                        tsubst_flags_t complain,
5650                        bool require_all_args,
5651                        bool use_default_args)
5652 {
5653   int nparms, nargs, parm_idx, arg_idx, lost = 0;
5654   tree inner_args;
5655   tree new_args;
5656   tree new_inner_args;
5657   int saved_unevaluated_operand;
5658   int saved_inhibit_evaluation_warnings;
5659
5660   /* When used as a boolean value, indicates whether this is a
5661      variadic template parameter list. Since it's an int, we can also
5662      subtract it from nparms to get the number of non-variadic
5663      parameters.  */
5664   int variadic_p = 0;
5665
5666   nparms = TREE_VEC_LENGTH (parms);
5667
5668   /* Determine if there are any parameter packs.  */
5669   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
5670     {
5671       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5672       if (template_parameter_pack_p (tparm))
5673         ++variadic_p;
5674     }
5675
5676   inner_args = INNERMOST_TEMPLATE_ARGS (args);
5677   /* If there are 0 or 1 parameter packs, we need to expand any argument
5678      packs so that we can deduce a parameter pack from some non-packed args
5679      followed by an argument pack, as in variadic85.C.  If there are more
5680      than that, we need to leave argument packs intact so the arguments are
5681      assigned to the right parameter packs.  This should only happen when
5682      dealing with a nested class inside a partial specialization of a class
5683      template, as in variadic92.C.  */
5684   if (variadic_p <= 1)
5685     inner_args = expand_template_argument_pack (inner_args);
5686
5687   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5688   if ((nargs > nparms && !variadic_p)
5689       || (nargs < nparms - variadic_p
5690           && require_all_args
5691           && (!use_default_args
5692               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
5693                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
5694     {
5695       if (complain & tf_error)
5696         {
5697           const char *or_more = "";
5698           if (variadic_p)
5699             {
5700               or_more = " or more";
5701               --nparms;
5702             }
5703
5704           error ("wrong number of template arguments (%d, should be %d%s)",
5705                  nargs, nparms, or_more);
5706
5707           if (in_decl)
5708             error ("provided for %q+D", in_decl);
5709         }
5710
5711       return error_mark_node;
5712     }
5713
5714   /* We need to evaluate the template arguments, even though this
5715      template-id may be nested within a "sizeof".  */
5716   saved_unevaluated_operand = cp_unevaluated_operand;
5717   cp_unevaluated_operand = 0;
5718   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
5719   c_inhibit_evaluation_warnings = 0;
5720   new_inner_args = make_tree_vec (nparms);
5721   new_args = add_outermost_template_args (args, new_inner_args);
5722   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5723     {
5724       tree arg;
5725       tree parm;
5726
5727       /* Get the Ith template parameter.  */
5728       parm = TREE_VEC_ELT (parms, parm_idx);
5729  
5730       if (parm == error_mark_node)
5731       {
5732         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5733         continue;
5734       }
5735
5736       /* Calculate the next argument.  */
5737       if (arg_idx < nargs)
5738         arg = TREE_VEC_ELT (inner_args, arg_idx);
5739       else
5740         arg = NULL_TREE;
5741
5742       if (template_parameter_pack_p (TREE_VALUE (parm))
5743           && !(arg && ARGUMENT_PACK_P (arg)))
5744         {
5745           /* All remaining arguments will be placed in the
5746              template parameter pack PARM.  */
5747           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
5748                                                 inner_args, arg_idx,
5749                                                 new_args, &lost,
5750                                                 in_decl, complain);
5751
5752           /* Store this argument.  */
5753           if (arg == error_mark_node)
5754             lost++;
5755           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5756
5757           /* We are done with all of the arguments.  */
5758           arg_idx = nargs;
5759           
5760           continue;
5761         }
5762       else if (arg)
5763         {
5764           if (PACK_EXPANSION_P (arg))
5765             {
5766               if (complain & tf_error)
5767                 {
5768                   /* FIXME this restriction was removed by N2555; see
5769                      bug 35722.  */
5770                   /* If ARG is a pack expansion, but PARM is not a
5771                      template parameter pack (if it were, we would have
5772                      handled it above), we're trying to expand into a
5773                      fixed-length argument list.  */
5774                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5775                     sorry ("cannot expand %<%E%> into a fixed-length "
5776                            "argument list", arg);
5777                   else
5778                     sorry ("cannot expand %<%T%> into a fixed-length "
5779                            "argument list", arg);
5780                 }
5781               return error_mark_node;
5782             }
5783         }
5784       else if (require_all_args)
5785         /* There must be a default arg in this case.  */
5786         arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5787                                    complain, in_decl);
5788       else
5789         break;
5790
5791       if (arg == error_mark_node)
5792         {
5793           if (complain & tf_error)
5794             error ("template argument %d is invalid", arg_idx + 1);
5795         }
5796       else if (!arg)
5797         /* This only occurs if there was an error in the template
5798            parameter list itself (which we would already have
5799            reported) that we are trying to recover from, e.g., a class
5800            template with a parameter list such as
5801            template<typename..., typename>.  */
5802         return error_mark_node;
5803       else
5804         arg = convert_template_argument (TREE_VALUE (parm),
5805                                          arg, new_args, complain, 
5806                                          parm_idx, in_decl);
5807
5808       if (arg == error_mark_node)
5809         lost++;
5810       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5811     }
5812   cp_unevaluated_operand = saved_unevaluated_operand;
5813   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
5814
5815   if (lost)
5816     return error_mark_node;
5817
5818   return new_inner_args;
5819 }
5820
5821 /* Returns 1 if template args OT and NT are equivalent.  */
5822
5823 static int
5824 template_args_equal (tree ot, tree nt)
5825 {
5826   if (nt == ot)
5827     return 1;
5828
5829   if (TREE_CODE (nt) == TREE_VEC)
5830     /* For member templates */
5831     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5832   else if (PACK_EXPANSION_P (ot))
5833     return PACK_EXPANSION_P (nt) 
5834       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5835                               PACK_EXPANSION_PATTERN (nt));
5836   else if (ARGUMENT_PACK_P (ot))
5837     {
5838       int i, len;
5839       tree opack, npack;
5840
5841       if (!ARGUMENT_PACK_P (nt))
5842         return 0;
5843
5844       opack = ARGUMENT_PACK_ARGS (ot);
5845       npack = ARGUMENT_PACK_ARGS (nt);
5846       len = TREE_VEC_LENGTH (opack);
5847       if (TREE_VEC_LENGTH (npack) != len)
5848         return 0;
5849       for (i = 0; i < len; ++i)
5850         if (!template_args_equal (TREE_VEC_ELT (opack, i),
5851                                   TREE_VEC_ELT (npack, i)))
5852           return 0;
5853       return 1;
5854     }
5855   else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
5856     {
5857       /* We get here probably because we are in the middle of substituting
5858          into the pattern of a pack expansion. In that case the
5859          ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
5860          interested in. So we want to use the initial pack argument for
5861          the comparison.  */
5862       ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
5863       if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
5864         nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
5865       return template_args_equal (ot, nt);
5866     }
5867   else if (TYPE_P (nt))
5868     return TYPE_P (ot) && same_type_p (ot, nt);
5869   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5870     return 0;
5871   else
5872     return cp_tree_equal (ot, nt);
5873 }
5874
5875 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5876    of template arguments.  Returns 0 otherwise.  */
5877
5878 int
5879 comp_template_args (tree oldargs, tree newargs)
5880 {
5881   int i;
5882
5883   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5884     return 0;
5885
5886   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5887     {
5888       tree nt = TREE_VEC_ELT (newargs, i);
5889       tree ot = TREE_VEC_ELT (oldargs, i);
5890
5891       if (! template_args_equal (ot, nt))
5892         return 0;
5893     }
5894   return 1;
5895 }
5896
5897 static void
5898 add_pending_template (tree d)
5899 {
5900   tree ti = (TYPE_P (d)
5901              ? CLASSTYPE_TEMPLATE_INFO (d)
5902              : DECL_TEMPLATE_INFO (d));
5903   struct pending_template *pt;
5904   int level;
5905
5906   if (TI_PENDING_TEMPLATE_FLAG (ti))
5907     return;
5908
5909   /* We are called both from instantiate_decl, where we've already had a
5910      tinst_level pushed, and instantiate_template, where we haven't.
5911      Compensate.  */
5912   level = !current_tinst_level || current_tinst_level->decl != d;
5913
5914   if (level)
5915     push_tinst_level (d);
5916
5917   pt = GGC_NEW (struct pending_template);
5918   pt->next = NULL;
5919   pt->tinst = current_tinst_level;
5920   if (last_pending_template)
5921     last_pending_template->next = pt;
5922   else
5923     pending_templates = pt;
5924
5925   last_pending_template = pt;
5926
5927   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5928
5929   if (level)
5930     pop_tinst_level ();
5931 }
5932
5933
5934 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5935    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
5936    documentation for TEMPLATE_ID_EXPR.  */
5937
5938 tree
5939 lookup_template_function (tree fns, tree arglist)
5940 {
5941   tree type;
5942
5943   if (fns == error_mark_node || arglist == error_mark_node)
5944     return error_mark_node;
5945
5946   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5947   gcc_assert (fns && (is_overloaded_fn (fns)
5948                       || TREE_CODE (fns) == IDENTIFIER_NODE));
5949
5950   if (BASELINK_P (fns))
5951     {
5952       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5953                                          unknown_type_node,
5954                                          BASELINK_FUNCTIONS (fns),
5955                                          arglist);
5956       return fns;
5957     }
5958
5959   type = TREE_TYPE (fns);
5960   if (TREE_CODE (fns) == OVERLOAD || !type)
5961     type = unknown_type_node;
5962
5963   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5964 }
5965
5966 /* Within the scope of a template class S<T>, the name S gets bound
5967    (in build_self_reference) to a TYPE_DECL for the class, not a
5968    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
5969    or one of its enclosing classes, and that type is a template,
5970    return the associated TEMPLATE_DECL.  Otherwise, the original
5971    DECL is returned.  */
5972
5973 tree
5974 maybe_get_template_decl_from_type_decl (tree decl)
5975 {
5976   return (decl != NULL_TREE
5977           && TREE_CODE (decl) == TYPE_DECL
5978           && DECL_ARTIFICIAL (decl)
5979           && CLASS_TYPE_P (TREE_TYPE (decl))
5980           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5981     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5982 }
5983
5984 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5985    parameters, find the desired type.
5986
5987    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5988
5989    IN_DECL, if non-NULL, is the template declaration we are trying to
5990    instantiate.
5991
5992    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5993    the class we are looking up.
5994
5995    Issue error and warning messages under control of COMPLAIN.
5996
5997    If the template class is really a local class in a template
5998    function, then the FUNCTION_CONTEXT is the function in which it is
5999    being instantiated.
6000
6001    ??? Note that this function is currently called *twice* for each
6002    template-id: the first time from the parser, while creating the
6003    incomplete type (finish_template_type), and the second type during the
6004    real instantiation (instantiate_template_class). This is surely something
6005    that we want to avoid. It also causes some problems with argument
6006    coercion (see convert_nontype_argument for more information on this).  */
6007
6008 tree
6009 lookup_template_class (tree d1,
6010                        tree arglist,
6011                        tree in_decl,
6012                        tree context,
6013                        int entering_scope,
6014                        tsubst_flags_t complain)
6015 {
6016   tree templ = NULL_TREE, parmlist;
6017   tree t;
6018   spec_entry **slot;
6019   spec_entry *entry;
6020   spec_entry elt;
6021   hashval_t hash;
6022
6023   timevar_push (TV_NAME_LOOKUP);
6024
6025   if (TREE_CODE (d1) == IDENTIFIER_NODE)
6026     {
6027       tree value = innermost_non_namespace_value (d1);
6028       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
6029         templ = value;
6030       else
6031         {
6032           if (context)
6033             push_decl_namespace (context);
6034           templ = lookup_name (d1);
6035           templ = maybe_get_template_decl_from_type_decl (templ);
6036           if (context)
6037             pop_decl_namespace ();
6038         }
6039       if (templ)
6040         context = DECL_CONTEXT (templ);
6041     }
6042   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
6043     {
6044       tree type = TREE_TYPE (d1);
6045
6046       /* If we are declaring a constructor, say A<T>::A<T>, we will get
6047          an implicit typename for the second A.  Deal with it.  */
6048       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
6049         type = TREE_TYPE (type);
6050
6051       if (CLASSTYPE_TEMPLATE_INFO (type))
6052         {
6053           templ = CLASSTYPE_TI_TEMPLATE (type);
6054           d1 = DECL_NAME (templ);
6055         }
6056     }
6057   else if (TREE_CODE (d1) == ENUMERAL_TYPE
6058            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
6059     {
6060       templ = TYPE_TI_TEMPLATE (d1);
6061       d1 = DECL_NAME (templ);
6062     }
6063   else if (TREE_CODE (d1) == TEMPLATE_DECL
6064            && DECL_TEMPLATE_RESULT (d1)
6065            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
6066     {
6067       templ = d1;
6068       d1 = DECL_NAME (templ);
6069       context = DECL_CONTEXT (templ);
6070     }
6071
6072   /* Issue an error message if we didn't find a template.  */
6073   if (! templ)
6074     {
6075       if (complain & tf_error)
6076         error ("%qT is not a template", d1);
6077       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6078     }
6079
6080   if (TREE_CODE (templ) != TEMPLATE_DECL
6081          /* Make sure it's a user visible template, if it was named by
6082             the user.  */
6083       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
6084           && !PRIMARY_TEMPLATE_P (templ)))
6085     {
6086       if (complain & tf_error)
6087         {
6088           error ("non-template type %qT used as a template", d1);
6089           if (in_decl)
6090             error ("for template declaration %q+D", in_decl);
6091         }
6092       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6093     }
6094
6095   complain &= ~tf_user;
6096
6097   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
6098     {
6099       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
6100          template arguments */
6101
6102       tree parm;
6103       tree arglist2;
6104       tree outer;
6105
6106       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
6107
6108       /* Consider an example where a template template parameter declared as
6109
6110            template <class T, class U = std::allocator<T> > class TT
6111
6112          The template parameter level of T and U are one level larger than
6113          of TT.  To proper process the default argument of U, say when an
6114          instantiation `TT<int>' is seen, we need to build the full
6115          arguments containing {int} as the innermost level.  Outer levels,
6116          available when not appearing as default template argument, can be
6117          obtained from the arguments of the enclosing template.
6118
6119          Suppose that TT is later substituted with std::vector.  The above
6120          instantiation is `TT<int, std::allocator<T> >' with TT at
6121          level 1, and T at level 2, while the template arguments at level 1
6122          becomes {std::vector} and the inner level 2 is {int}.  */
6123
6124       outer = DECL_CONTEXT (templ);
6125       if (outer)
6126         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
6127       else if (current_template_parms)
6128         /* This is an argument of the current template, so we haven't set
6129            DECL_CONTEXT yet.  */
6130         outer = current_template_args ();
6131
6132       if (outer)
6133         arglist = add_to_template_args (outer, arglist);
6134
6135       arglist2 = coerce_template_parms (parmlist, arglist, templ,
6136                                         complain,
6137                                         /*require_all_args=*/true,
6138                                         /*use_default_args=*/true);
6139       if (arglist2 == error_mark_node
6140           || (!uses_template_parms (arglist2)
6141               && check_instantiated_args (templ, arglist2, complain)))
6142         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6143
6144       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
6145       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
6146     }
6147   else
6148     {
6149       tree template_type = TREE_TYPE (templ);
6150       tree gen_tmpl;
6151       tree type_decl;
6152       tree found = NULL_TREE;
6153       int arg_depth;
6154       int parm_depth;
6155       int is_partial_instantiation;
6156
6157       gen_tmpl = most_general_template (templ);
6158       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
6159       parm_depth = TMPL_PARMS_DEPTH (parmlist);
6160       arg_depth = TMPL_ARGS_DEPTH (arglist);
6161
6162       if (arg_depth == 1 && parm_depth > 1)
6163         {
6164           /* We've been given an incomplete set of template arguments.
6165              For example, given:
6166
6167                template <class T> struct S1 {
6168                  template <class U> struct S2 {};
6169                  template <class U> struct S2<U*> {};
6170                 };
6171
6172              we will be called with an ARGLIST of `U*', but the
6173              TEMPLATE will be `template <class T> template
6174              <class U> struct S1<T>::S2'.  We must fill in the missing
6175              arguments.  */
6176           arglist
6177             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
6178                                            arglist);
6179           arg_depth = TMPL_ARGS_DEPTH (arglist);
6180         }
6181
6182       /* Now we should have enough arguments.  */
6183       gcc_assert (parm_depth == arg_depth);
6184
6185       /* From here on, we're only interested in the most general
6186          template.  */
6187
6188       /* Calculate the BOUND_ARGS.  These will be the args that are
6189          actually tsubst'd into the definition to create the
6190          instantiation.  */
6191       if (parm_depth > 1)
6192         {
6193           /* We have multiple levels of arguments to coerce, at once.  */
6194           int i;
6195           int saved_depth = TMPL_ARGS_DEPTH (arglist);
6196
6197           tree bound_args = make_tree_vec (parm_depth);
6198
6199           for (i = saved_depth,
6200                  t = DECL_TEMPLATE_PARMS (gen_tmpl);
6201                i > 0 && t != NULL_TREE;
6202                --i, t = TREE_CHAIN (t))
6203             {
6204               tree a = coerce_template_parms (TREE_VALUE (t),
6205                                               arglist, gen_tmpl,
6206                                               complain,
6207                                               /*require_all_args=*/true,
6208                                               /*use_default_args=*/true);
6209
6210               /* Don't process further if one of the levels fails.  */
6211               if (a == error_mark_node)
6212                 {
6213                   /* Restore the ARGLIST to its full size.  */
6214                   TREE_VEC_LENGTH (arglist) = saved_depth;
6215                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6216                 }
6217
6218               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
6219
6220               /* We temporarily reduce the length of the ARGLIST so
6221                  that coerce_template_parms will see only the arguments
6222                  corresponding to the template parameters it is
6223                  examining.  */
6224               TREE_VEC_LENGTH (arglist)--;
6225             }
6226
6227           /* Restore the ARGLIST to its full size.  */
6228           TREE_VEC_LENGTH (arglist) = saved_depth;
6229
6230           arglist = bound_args;
6231         }
6232       else
6233         arglist
6234           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
6235                                    INNERMOST_TEMPLATE_ARGS (arglist),
6236                                    gen_tmpl,
6237                                    complain,
6238                                    /*require_all_args=*/true,
6239                                    /*use_default_args=*/true);
6240
6241       if (arglist == error_mark_node)
6242         /* We were unable to bind the arguments.  */
6243         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6244
6245       /* In the scope of a template class, explicit references to the
6246          template class refer to the type of the template, not any
6247          instantiation of it.  For example, in:
6248
6249            template <class T> class C { void f(C<T>); }
6250
6251          the `C<T>' is just the same as `C'.  Outside of the
6252          class, however, such a reference is an instantiation.  */
6253       if ((entering_scope
6254            || !PRIMARY_TEMPLATE_P (gen_tmpl)
6255            || currently_open_class (template_type))
6256           /* comp_template_args is expensive, check it last.  */
6257           && comp_template_args (TYPE_TI_ARGS (template_type),
6258                                  arglist))
6259         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, template_type);
6260
6261       /* If we already have this specialization, return it.  */
6262       elt.tmpl = gen_tmpl;
6263       elt.args = arglist;
6264       hash = hash_specialization (&elt);
6265       entry = (spec_entry *) htab_find_with_hash (type_specializations,
6266                                                   &elt, hash);
6267
6268       if (entry)
6269         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, entry->spec);
6270
6271       /* This type is a "partial instantiation" if any of the template
6272          arguments still involve template parameters.  Note that we set
6273          IS_PARTIAL_INSTANTIATION for partial specializations as
6274          well.  */
6275       is_partial_instantiation = uses_template_parms (arglist);
6276
6277       /* If the deduced arguments are invalid, then the binding
6278          failed.  */
6279       if (!is_partial_instantiation
6280           && check_instantiated_args (gen_tmpl,
6281                                       INNERMOST_TEMPLATE_ARGS (arglist),
6282                                       complain))
6283         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6284
6285       if (!is_partial_instantiation
6286           && !PRIMARY_TEMPLATE_P (gen_tmpl)
6287           && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
6288           && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
6289         {
6290           found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
6291                                       DECL_NAME (gen_tmpl),
6292                                       /*tag_scope=*/ts_global);
6293           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
6294         }
6295
6296       context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
6297                         complain, in_decl);
6298       if (!context)
6299         context = global_namespace;
6300
6301       /* Create the type.  */
6302       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
6303         {
6304           if (!is_partial_instantiation)
6305             {
6306               set_current_access_from_decl (TYPE_NAME (template_type));
6307               t = start_enum (TYPE_IDENTIFIER (template_type),
6308                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
6309                                       arglist, complain, in_decl),
6310                               SCOPED_ENUM_P (template_type));
6311             }
6312           else
6313             {
6314               /* We don't want to call start_enum for this type, since
6315                  the values for the enumeration constants may involve
6316                  template parameters.  And, no one should be interested
6317                  in the enumeration constants for such a type.  */
6318               t = cxx_make_type (ENUMERAL_TYPE);
6319               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
6320             }
6321         }
6322       else
6323         {
6324           t = make_class_type (TREE_CODE (template_type));
6325           CLASSTYPE_DECLARED_CLASS (t)
6326             = CLASSTYPE_DECLARED_CLASS (template_type);
6327           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
6328           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
6329
6330           /* A local class.  Make sure the decl gets registered properly.  */
6331           if (context == current_function_decl)
6332             pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
6333
6334           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
6335             /* This instantiation is another name for the primary
6336                template type. Set the TYPE_CANONICAL field
6337                appropriately. */
6338             TYPE_CANONICAL (t) = template_type;
6339           else if (any_template_arguments_need_structural_equality_p (arglist))
6340             /* Some of the template arguments require structural
6341                equality testing, so this template class requires
6342                structural equality testing. */
6343             SET_TYPE_STRUCTURAL_EQUALITY (t);
6344         }
6345
6346       /* If we called start_enum or pushtag above, this information
6347          will already be set up.  */
6348       if (!TYPE_NAME (t))
6349         {
6350           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
6351
6352           type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
6353           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
6354           TYPE_STUB_DECL (t) = type_decl;
6355           DECL_SOURCE_LOCATION (type_decl)
6356             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
6357         }
6358       else
6359         type_decl = TYPE_NAME (t);
6360
6361       TREE_PRIVATE (type_decl)
6362         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
6363       TREE_PROTECTED (type_decl)
6364         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
6365       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
6366         {
6367           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
6368           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
6369         }
6370
6371       /* Set up the template information.  We have to figure out which
6372          template is the immediate parent if this is a full
6373          instantiation.  */
6374       if (parm_depth == 1 || is_partial_instantiation
6375           || !PRIMARY_TEMPLATE_P (gen_tmpl))
6376         /* This case is easy; there are no member templates involved.  */
6377         found = gen_tmpl;
6378       else
6379         {
6380           /* This is a full instantiation of a member template.  Find
6381              the partial instantiation of which this is an instance.  */
6382
6383           /* Temporarily reduce by one the number of levels in the ARGLIST
6384              so as to avoid comparing the last set of arguments.  */
6385           TREE_VEC_LENGTH (arglist)--;
6386           found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
6387           TREE_VEC_LENGTH (arglist)++;
6388           found = CLASSTYPE_TI_TEMPLATE (found);
6389         }
6390
6391       SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
6392
6393       elt.spec = t;
6394       slot = (spec_entry **) htab_find_slot_with_hash (type_specializations,
6395                                                        &elt, hash, INSERT);
6396       *slot = GGC_NEW (spec_entry);
6397       **slot = elt;
6398
6399       /* Note this use of the partial instantiation so we can check it
6400          later in maybe_process_partial_specialization.  */
6401       DECL_TEMPLATE_INSTANTIATIONS (templ)
6402         = tree_cons (arglist, t,
6403                      DECL_TEMPLATE_INSTANTIATIONS (templ));
6404
6405       if (TREE_CODE (t) == ENUMERAL_TYPE
6406           && !is_partial_instantiation)
6407         /* Now that the type has been registered on the instantiations
6408            list, we set up the enumerators.  Because the enumeration
6409            constants may involve the enumeration type itself, we make
6410            sure to register the type first, and then create the
6411            constants.  That way, doing tsubst_expr for the enumeration
6412            constants won't result in recursive calls here; we'll find
6413            the instantiation and exit above.  */
6414         tsubst_enum (template_type, t, arglist);
6415
6416       if (is_partial_instantiation)
6417         /* If the type makes use of template parameters, the
6418            code that generates debugging information will crash.  */
6419         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
6420
6421       /* Possibly limit visibility based on template args.  */
6422       TREE_PUBLIC (type_decl) = 1;
6423       determine_visibility (type_decl);
6424
6425       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
6426     }
6427   timevar_pop (TV_NAME_LOOKUP);
6428 }
6429 \f
6430 struct pair_fn_data
6431 {
6432   tree_fn_t fn;
6433   void *data;
6434   /* True when we should also visit template parameters that occur in
6435      non-deduced contexts.  */
6436   bool include_nondeduced_p;
6437   struct pointer_set_t *visited;
6438 };
6439
6440 /* Called from for_each_template_parm via walk_tree.  */
6441
6442 static tree
6443 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
6444 {
6445   tree t = *tp;
6446   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
6447   tree_fn_t fn = pfd->fn;
6448   void *data = pfd->data;
6449
6450   if (TYPE_P (t)
6451       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
6452       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
6453                                  pfd->include_nondeduced_p))
6454     return error_mark_node;
6455
6456   switch (TREE_CODE (t))
6457     {
6458     case RECORD_TYPE:
6459       if (TYPE_PTRMEMFUNC_P (t))
6460         break;
6461       /* Fall through.  */
6462
6463     case UNION_TYPE:
6464     case ENUMERAL_TYPE:
6465       if (!TYPE_TEMPLATE_INFO (t))
6466         *walk_subtrees = 0;
6467       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
6468                                        fn, data, pfd->visited, 
6469                                        pfd->include_nondeduced_p))
6470         return error_mark_node;
6471       break;
6472
6473     case INTEGER_TYPE:
6474       if (for_each_template_parm (TYPE_MIN_VALUE (t),
6475                                   fn, data, pfd->visited, 
6476                                   pfd->include_nondeduced_p)
6477           || for_each_template_parm (TYPE_MAX_VALUE (t),
6478                                      fn, data, pfd->visited,
6479                                      pfd->include_nondeduced_p))
6480         return error_mark_node;
6481       break;
6482
6483     case METHOD_TYPE:
6484       /* Since we're not going to walk subtrees, we have to do this
6485          explicitly here.  */
6486       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
6487                                   pfd->visited, pfd->include_nondeduced_p))
6488         return error_mark_node;
6489       /* Fall through.  */
6490
6491     case FUNCTION_TYPE:
6492       /* Check the return type.  */
6493       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6494                                   pfd->include_nondeduced_p))
6495         return error_mark_node;
6496
6497       /* Check the parameter types.  Since default arguments are not
6498          instantiated until they are needed, the TYPE_ARG_TYPES may
6499          contain expressions that involve template parameters.  But,
6500          no-one should be looking at them yet.  And, once they're
6501          instantiated, they don't contain template parameters, so
6502          there's no point in looking at them then, either.  */
6503       {
6504         tree parm;
6505
6506         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
6507           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
6508                                       pfd->visited, pfd->include_nondeduced_p))
6509             return error_mark_node;
6510
6511         /* Since we've already handled the TYPE_ARG_TYPES, we don't
6512            want walk_tree walking into them itself.  */
6513         *walk_subtrees = 0;
6514       }
6515       break;
6516
6517     case TYPEOF_TYPE:
6518       if (pfd->include_nondeduced_p
6519           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
6520                                      pfd->visited, 
6521                                      pfd->include_nondeduced_p))
6522         return error_mark_node;
6523       break;
6524
6525     case FUNCTION_DECL:
6526     case VAR_DECL:
6527       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
6528           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
6529                                      pfd->visited, pfd->include_nondeduced_p))
6530         return error_mark_node;
6531       /* Fall through.  */
6532
6533     case PARM_DECL:
6534     case CONST_DECL:
6535       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
6536           && for_each_template_parm (DECL_INITIAL (t), fn, data,
6537                                      pfd->visited, pfd->include_nondeduced_p))
6538         return error_mark_node;
6539       if (DECL_CONTEXT (t)
6540           && pfd->include_nondeduced_p
6541           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
6542                                      pfd->visited, pfd->include_nondeduced_p))
6543         return error_mark_node;
6544       break;
6545
6546     case BOUND_TEMPLATE_TEMPLATE_PARM:
6547       /* Record template parameters such as `T' inside `TT<T>'.  */
6548       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
6549                                   pfd->include_nondeduced_p))
6550         return error_mark_node;
6551       /* Fall through.  */
6552
6553     case TEMPLATE_TEMPLATE_PARM:
6554     case TEMPLATE_TYPE_PARM:
6555     case TEMPLATE_PARM_INDEX:
6556       if (fn && (*fn)(t, data))
6557         return error_mark_node;
6558       else if (!fn)
6559         return error_mark_node;
6560       break;
6561
6562     case TEMPLATE_DECL:
6563       /* A template template parameter is encountered.  */
6564       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
6565           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6566                                      pfd->include_nondeduced_p))
6567         return error_mark_node;
6568
6569       /* Already substituted template template parameter */
6570       *walk_subtrees = 0;
6571       break;
6572
6573     case TYPENAME_TYPE:
6574       if (!fn
6575           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
6576                                      data, pfd->visited, 
6577                                      pfd->include_nondeduced_p))
6578         return error_mark_node;
6579       break;
6580
6581     case CONSTRUCTOR:
6582       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
6583           && pfd->include_nondeduced_p
6584           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
6585                                      (TREE_TYPE (t)), fn, data,
6586                                      pfd->visited, pfd->include_nondeduced_p))
6587         return error_mark_node;
6588       break;
6589
6590     case INDIRECT_REF:
6591     case COMPONENT_REF:
6592       /* If there's no type, then this thing must be some expression
6593          involving template parameters.  */
6594       if (!fn && !TREE_TYPE (t))
6595         return error_mark_node;
6596       break;
6597
6598     case MODOP_EXPR:
6599     case CAST_EXPR:
6600     case REINTERPRET_CAST_EXPR:
6601     case CONST_CAST_EXPR:
6602     case STATIC_CAST_EXPR:
6603     case DYNAMIC_CAST_EXPR:
6604     case ARROW_EXPR:
6605     case DOTSTAR_EXPR:
6606     case TYPEID_EXPR:
6607     case PSEUDO_DTOR_EXPR:
6608       if (!fn)
6609         return error_mark_node;
6610       break;
6611
6612     default:
6613       break;
6614     }
6615
6616   /* We didn't find any template parameters we liked.  */
6617   return NULL_TREE;
6618 }
6619
6620 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
6621    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
6622    call FN with the parameter and the DATA.
6623    If FN returns nonzero, the iteration is terminated, and
6624    for_each_template_parm returns 1.  Otherwise, the iteration
6625    continues.  If FN never returns a nonzero value, the value
6626    returned by for_each_template_parm is 0.  If FN is NULL, it is
6627    considered to be the function which always returns 1.
6628
6629    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
6630    parameters that occur in non-deduced contexts.  When false, only
6631    visits those template parameters that can be deduced.  */
6632
6633 static int
6634 for_each_template_parm (tree t, tree_fn_t fn, void* data,
6635                         struct pointer_set_t *visited,
6636                         bool include_nondeduced_p)
6637 {
6638   struct pair_fn_data pfd;
6639   int result;
6640
6641   /* Set up.  */
6642   pfd.fn = fn;
6643   pfd.data = data;
6644   pfd.include_nondeduced_p = include_nondeduced_p;
6645
6646   /* Walk the tree.  (Conceptually, we would like to walk without
6647      duplicates, but for_each_template_parm_r recursively calls
6648      for_each_template_parm, so we would need to reorganize a fair
6649      bit to use walk_tree_without_duplicates, so we keep our own
6650      visited list.)  */
6651   if (visited)
6652     pfd.visited = visited;
6653   else
6654     pfd.visited = pointer_set_create ();
6655   result = cp_walk_tree (&t,
6656                          for_each_template_parm_r,
6657                          &pfd,
6658                          pfd.visited) != NULL_TREE;
6659
6660   /* Clean up.  */
6661   if (!visited)
6662     {
6663       pointer_set_destroy (pfd.visited);
6664       pfd.visited = 0;
6665     }
6666
6667   return result;
6668 }
6669
6670 /* Returns true if T depends on any template parameter.  */
6671
6672 int
6673 uses_template_parms (tree t)
6674 {
6675   bool dependent_p;
6676   int saved_processing_template_decl;
6677
6678   saved_processing_template_decl = processing_template_decl;
6679   if (!saved_processing_template_decl)
6680     processing_template_decl = 1;
6681   if (TYPE_P (t))
6682     dependent_p = dependent_type_p (t);
6683   else if (TREE_CODE (t) == TREE_VEC)
6684     dependent_p = any_dependent_template_arguments_p (t);
6685   else if (TREE_CODE (t) == TREE_LIST)
6686     dependent_p = (uses_template_parms (TREE_VALUE (t))
6687                    || uses_template_parms (TREE_CHAIN (t)));
6688   else if (TREE_CODE (t) == TYPE_DECL)
6689     dependent_p = dependent_type_p (TREE_TYPE (t));
6690   else if (DECL_P (t)
6691            || EXPR_P (t)
6692            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
6693            || TREE_CODE (t) == OVERLOAD
6694            || TREE_CODE (t) == BASELINK
6695            || TREE_CODE (t) == IDENTIFIER_NODE
6696            || TREE_CODE (t) == TRAIT_EXPR
6697            || TREE_CODE (t) == CONSTRUCTOR
6698            || CONSTANT_CLASS_P (t))
6699     dependent_p = (type_dependent_expression_p (t)
6700                    || value_dependent_expression_p (t));
6701   else
6702     {
6703       gcc_assert (t == error_mark_node);
6704       dependent_p = false;
6705     }
6706
6707   processing_template_decl = saved_processing_template_decl;
6708
6709   return dependent_p;
6710 }
6711
6712 /* Returns true if T depends on any template parameter with level LEVEL.  */
6713
6714 int
6715 uses_template_parms_level (tree t, int level)
6716 {
6717   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
6718                                  /*include_nondeduced_p=*/true);
6719 }
6720
6721 static int tinst_depth;
6722 extern int max_tinst_depth;
6723 #ifdef GATHER_STATISTICS
6724 int depth_reached;
6725 #endif
6726 static int tinst_level_tick;
6727 static int last_template_error_tick;
6728
6729 /* We're starting to instantiate D; record the template instantiation context
6730    for diagnostics and to restore it later.  */
6731
6732 static int
6733 push_tinst_level (tree d)
6734 {
6735   struct tinst_level *new_level;
6736
6737   if (tinst_depth >= max_tinst_depth)
6738     {
6739       /* If the instantiation in question still has unbound template parms,
6740          we don't really care if we can't instantiate it, so just return.
6741          This happens with base instantiation for implicit `typename'.  */
6742       if (uses_template_parms (d))
6743         return 0;
6744
6745       last_template_error_tick = tinst_level_tick;
6746       error ("template instantiation depth exceeds maximum of %d (use "
6747              "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
6748              max_tinst_depth, d);
6749
6750       print_instantiation_context ();
6751
6752       return 0;
6753     }
6754
6755   new_level = GGC_NEW (struct tinst_level);
6756   new_level->decl = d;
6757   new_level->locus = input_location;
6758   new_level->in_system_header_p = in_system_header;
6759   new_level->next = current_tinst_level;
6760   current_tinst_level = new_level;
6761
6762   ++tinst_depth;
6763 #ifdef GATHER_STATISTICS
6764   if (tinst_depth > depth_reached)
6765     depth_reached = tinst_depth;
6766 #endif
6767
6768   ++tinst_level_tick;
6769   return 1;
6770 }
6771
6772 /* We're done instantiating this template; return to the instantiation
6773    context.  */
6774
6775 static void
6776 pop_tinst_level (void)
6777 {
6778   /* Restore the filename and line number stashed away when we started
6779      this instantiation.  */
6780   input_location = current_tinst_level->locus;
6781   current_tinst_level = current_tinst_level->next;
6782   --tinst_depth;
6783   ++tinst_level_tick;
6784 }
6785
6786 /* We're instantiating a deferred template; restore the template
6787    instantiation context in which the instantiation was requested, which
6788    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
6789
6790 static tree
6791 reopen_tinst_level (struct tinst_level *level)
6792 {
6793   struct tinst_level *t;
6794
6795   tinst_depth = 0;
6796   for (t = level; t; t = t->next)
6797     ++tinst_depth;
6798
6799   current_tinst_level = level;
6800   pop_tinst_level ();
6801   return level->decl;
6802 }
6803
6804 /* Returns the TINST_LEVEL which gives the original instantiation
6805    context.  */
6806
6807 struct tinst_level *
6808 outermost_tinst_level (void)
6809 {
6810   struct tinst_level *level = current_tinst_level;
6811   if (level)
6812     while (level->next)
6813       level = level->next;
6814   return level;
6815 }
6816
6817 /* Returns TRUE if PARM is a parameter of the template TEMPL.  */
6818
6819 bool
6820 parameter_of_template_p (tree parm, tree templ)
6821 {
6822   tree parms;
6823   int i;
6824
6825   if (!parm || !templ)
6826     return false;
6827
6828   gcc_assert (DECL_TEMPLATE_PARM_P (parm));
6829   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
6830
6831   parms = DECL_TEMPLATE_PARMS (templ);
6832   parms = INNERMOST_TEMPLATE_PARMS (parms);
6833
6834   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
6835     if (parm == TREE_VALUE (TREE_VEC_ELT (parms, i)))
6836       return true;
6837
6838   return false;
6839 }
6840
6841 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
6842    vector of template arguments, as for tsubst.
6843
6844    Returns an appropriate tsubst'd friend declaration.  */
6845
6846 static tree
6847 tsubst_friend_function (tree decl, tree args)
6848 {
6849   tree new_friend;
6850
6851   if (TREE_CODE (decl) == FUNCTION_DECL
6852       && DECL_TEMPLATE_INSTANTIATION (decl)
6853       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6854     /* This was a friend declared with an explicit template
6855        argument list, e.g.:
6856
6857        friend void f<>(T);
6858
6859        to indicate that f was a template instantiation, not a new
6860        function declaration.  Now, we have to figure out what
6861        instantiation of what template.  */
6862     {
6863       tree template_id, arglist, fns;
6864       tree new_args;
6865       tree tmpl;
6866       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6867
6868       /* Friend functions are looked up in the containing namespace scope.
6869          We must enter that scope, to avoid finding member functions of the
6870          current class with same name.  */
6871       push_nested_namespace (ns);
6872       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6873                          tf_warning_or_error, NULL_TREE,
6874                          /*integral_constant_expression_p=*/false);
6875       pop_nested_namespace (ns);
6876       arglist = tsubst (DECL_TI_ARGS (decl), args,
6877                         tf_warning_or_error, NULL_TREE);
6878       template_id = lookup_template_function (fns, arglist);
6879
6880       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6881       tmpl = determine_specialization (template_id, new_friend,
6882                                        &new_args,
6883                                        /*need_member_template=*/0,
6884                                        TREE_VEC_LENGTH (args),
6885                                        tsk_none);
6886       return instantiate_template (tmpl, new_args, tf_error);
6887     }
6888
6889   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6890
6891   /* The NEW_FRIEND will look like an instantiation, to the
6892      compiler, but is not an instantiation from the point of view of
6893      the language.  For example, we might have had:
6894
6895      template <class T> struct S {
6896        template <class U> friend void f(T, U);
6897      };
6898
6899      Then, in S<int>, template <class U> void f(int, U) is not an
6900      instantiation of anything.  */
6901   if (new_friend == error_mark_node)
6902     return error_mark_node;
6903
6904   DECL_USE_TEMPLATE (new_friend) = 0;
6905   if (TREE_CODE (decl) == TEMPLATE_DECL)
6906     {
6907       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6908       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6909         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6910     }
6911
6912   /* The mangled name for the NEW_FRIEND is incorrect.  The function
6913      is not a template instantiation and should not be mangled like
6914      one.  Therefore, we forget the mangling here; we'll recompute it
6915      later if we need it.  */
6916   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6917     {
6918       SET_DECL_RTL (new_friend, NULL_RTX);
6919       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6920     }
6921
6922   if (DECL_NAMESPACE_SCOPE_P (new_friend))
6923     {
6924       tree old_decl;
6925       tree new_friend_template_info;
6926       tree new_friend_result_template_info;
6927       tree ns;
6928       int  new_friend_is_defn;
6929
6930       /* We must save some information from NEW_FRIEND before calling
6931          duplicate decls since that function will free NEW_FRIEND if
6932          possible.  */
6933       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6934       new_friend_is_defn =
6935             (DECL_INITIAL (DECL_TEMPLATE_RESULT
6936                            (template_for_substitution (new_friend)))
6937              != NULL_TREE);
6938       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6939         {
6940           /* This declaration is a `primary' template.  */
6941           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6942
6943           new_friend_result_template_info
6944             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6945         }
6946       else
6947         new_friend_result_template_info = NULL_TREE;
6948
6949       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
6950       if (new_friend_is_defn)
6951         DECL_INITIAL (new_friend) = error_mark_node;
6952
6953       /* Inside pushdecl_namespace_level, we will push into the
6954          current namespace. However, the friend function should go
6955          into the namespace of the template.  */
6956       ns = decl_namespace_context (new_friend);
6957       push_nested_namespace (ns);
6958       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6959       pop_nested_namespace (ns);
6960
6961       if (old_decl == error_mark_node)
6962         return error_mark_node;
6963
6964       if (old_decl != new_friend)
6965         {
6966           /* This new friend declaration matched an existing
6967              declaration.  For example, given:
6968
6969                template <class T> void f(T);
6970                template <class U> class C {
6971                  template <class T> friend void f(T) {}
6972                };
6973
6974              the friend declaration actually provides the definition
6975              of `f', once C has been instantiated for some type.  So,
6976              old_decl will be the out-of-class template declaration,
6977              while new_friend is the in-class definition.
6978
6979              But, if `f' was called before this point, the
6980              instantiation of `f' will have DECL_TI_ARGS corresponding
6981              to `T' but not to `U', references to which might appear
6982              in the definition of `f'.  Previously, the most general
6983              template for an instantiation of `f' was the out-of-class
6984              version; now it is the in-class version.  Therefore, we
6985              run through all specialization of `f', adding to their
6986              DECL_TI_ARGS appropriately.  In particular, they need a
6987              new set of outer arguments, corresponding to the
6988              arguments for this class instantiation.
6989
6990              The same situation can arise with something like this:
6991
6992                friend void f(int);
6993                template <class T> class C {
6994                  friend void f(T) {}
6995                };
6996
6997              when `C<int>' is instantiated.  Now, `f(int)' is defined
6998              in the class.  */
6999
7000           if (!new_friend_is_defn)
7001             /* On the other hand, if the in-class declaration does
7002                *not* provide a definition, then we don't want to alter
7003                existing definitions.  We can just leave everything
7004                alone.  */
7005             ;
7006           else
7007             {
7008               tree new_template = TI_TEMPLATE (new_friend_template_info);
7009               tree new_args = TI_ARGS (new_friend_template_info);
7010
7011               /* Overwrite whatever template info was there before, if
7012                  any, with the new template information pertaining to
7013                  the declaration.  */
7014               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
7015
7016               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
7017                 /* We should have called reregister_specialization in
7018                    duplicate_decls.  */
7019                 gcc_assert (retrieve_specialization (new_template,
7020                                                      new_args, 0)
7021                             == old_decl);
7022               else
7023                 {
7024                   tree t;
7025
7026                   /* Indicate that the old function template is a partial
7027                      instantiation.  */
7028                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
7029                     = new_friend_result_template_info;
7030
7031                   gcc_assert (new_template
7032                               == most_general_template (new_template));
7033                   gcc_assert (new_template != old_decl);
7034
7035                   /* Reassign any specializations already in the hash table
7036                      to the new more general template, and add the
7037                      additional template args.  */
7038                   for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
7039                        t != NULL_TREE;
7040                        t = TREE_CHAIN (t))
7041                     {
7042                       tree spec = TREE_VALUE (t);
7043                       spec_entry elt;
7044
7045                       elt.tmpl = old_decl;
7046                       elt.args = DECL_TI_ARGS (spec);
7047                       elt.spec = NULL_TREE;
7048
7049                       htab_remove_elt (decl_specializations, &elt);
7050
7051                       DECL_TI_ARGS (spec)
7052                         = add_outermost_template_args (new_args,
7053                                                        DECL_TI_ARGS (spec));
7054
7055                       register_specialization
7056                         (spec, new_template, DECL_TI_ARGS (spec), true, 0);
7057
7058                     }
7059                   DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
7060                 }
7061             }
7062
7063           /* The information from NEW_FRIEND has been merged into OLD_DECL
7064              by duplicate_decls.  */
7065           new_friend = old_decl;
7066         }
7067     }
7068   else
7069     {
7070       tree context = DECL_CONTEXT (new_friend);
7071       bool dependent_p;
7072
7073       /* In the code
7074            template <class T> class C {
7075              template <class U> friend void C1<U>::f (); // case 1
7076              friend void C2<T>::f ();                    // case 2
7077            };
7078          we only need to make sure CONTEXT is a complete type for
7079          case 2.  To distinguish between the two cases, we note that
7080          CONTEXT of case 1 remains dependent type after tsubst while
7081          this isn't true for case 2.  */
7082       ++processing_template_decl;
7083       dependent_p = dependent_type_p (context);
7084       --processing_template_decl;
7085
7086       if (!dependent_p
7087           && !complete_type_or_else (context, NULL_TREE))
7088         return error_mark_node;
7089
7090       if (COMPLETE_TYPE_P (context))
7091         {
7092           /* Check to see that the declaration is really present, and,
7093              possibly obtain an improved declaration.  */
7094           tree fn = check_classfn (context,
7095                                    new_friend, NULL_TREE);
7096
7097           if (fn)
7098             new_friend = fn;
7099         }
7100     }
7101
7102   return new_friend;
7103 }
7104
7105 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
7106    template arguments, as for tsubst.
7107
7108    Returns an appropriate tsubst'd friend type or error_mark_node on
7109    failure.  */
7110
7111 static tree
7112 tsubst_friend_class (tree friend_tmpl, tree args)
7113 {
7114   tree friend_type;
7115   tree tmpl;
7116   tree context;
7117
7118   context = DECL_CONTEXT (friend_tmpl);
7119
7120   if (context)
7121     {
7122       if (TREE_CODE (context) == NAMESPACE_DECL)
7123         push_nested_namespace (context);
7124       else
7125         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
7126     }
7127
7128   /* Look for a class template declaration.  We look for hidden names
7129      because two friend declarations of the same template are the
7130      same.  For example, in:
7131
7132        struct A { 
7133          template <typename> friend class F;
7134        };
7135        template <typename> struct B { 
7136          template <typename> friend class F;
7137        };
7138
7139      both F templates are the same.  */
7140   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
7141                            /*block_p=*/true, 0, 
7142                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
7143
7144   /* But, if we don't find one, it might be because we're in a
7145      situation like this:
7146
7147        template <class T>
7148        struct S {
7149          template <class U>
7150          friend struct S;
7151        };
7152
7153      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
7154      for `S<int>', not the TEMPLATE_DECL.  */
7155   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
7156     {
7157       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
7158       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
7159     }
7160
7161   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
7162     {
7163       /* The friend template has already been declared.  Just
7164          check to see that the declarations match, and install any new
7165          default parameters.  We must tsubst the default parameters,
7166          of course.  We only need the innermost template parameters
7167          because that is all that redeclare_class_template will look
7168          at.  */
7169       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
7170           > TMPL_ARGS_DEPTH (args))
7171         {
7172           tree parms;
7173           location_t saved_input_location;
7174           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
7175                                          args, tf_warning_or_error);
7176
7177           saved_input_location = input_location;
7178           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
7179           redeclare_class_template (TREE_TYPE (tmpl), parms);
7180           input_location = saved_input_location;
7181           
7182         }
7183
7184       friend_type = TREE_TYPE (tmpl);
7185     }
7186   else
7187     {
7188       /* The friend template has not already been declared.  In this
7189          case, the instantiation of the template class will cause the
7190          injection of this template into the global scope.  */
7191       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
7192       if (tmpl == error_mark_node)
7193         return error_mark_node;
7194
7195       /* The new TMPL is not an instantiation of anything, so we
7196          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
7197          the new type because that is supposed to be the corresponding
7198          template decl, i.e., TMPL.  */
7199       DECL_USE_TEMPLATE (tmpl) = 0;
7200       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
7201       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
7202       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
7203         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
7204
7205       /* Inject this template into the global scope.  */
7206       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
7207     }
7208
7209   if (context)
7210     {
7211       if (TREE_CODE (context) == NAMESPACE_DECL)
7212         pop_nested_namespace (context);
7213       else
7214         pop_nested_class ();
7215     }
7216
7217   return friend_type;
7218 }
7219
7220 /* Returns zero if TYPE cannot be completed later due to circularity.
7221    Otherwise returns one.  */
7222
7223 static int
7224 can_complete_type_without_circularity (tree type)
7225 {
7226   if (type == NULL_TREE || type == error_mark_node)
7227     return 0;
7228   else if (COMPLETE_TYPE_P (type))
7229     return 1;
7230   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
7231     return can_complete_type_without_circularity (TREE_TYPE (type));
7232   else if (CLASS_TYPE_P (type)
7233            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
7234     return 0;
7235   else
7236     return 1;
7237 }
7238
7239 /* Apply any attributes which had to be deferred until instantiation
7240    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
7241    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
7242
7243 static void
7244 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
7245                                 tree args, tsubst_flags_t complain, tree in_decl)
7246 {
7247   tree last_dep = NULL_TREE;
7248   tree t;
7249   tree *p;
7250
7251   for (t = attributes; t; t = TREE_CHAIN (t))
7252     if (ATTR_IS_DEPENDENT (t))
7253       {
7254         last_dep = t;
7255         attributes = copy_list (attributes);
7256         break;
7257       }
7258
7259   if (DECL_P (*decl_p))
7260     {
7261       if (TREE_TYPE (*decl_p) == error_mark_node)
7262         return;
7263       p = &DECL_ATTRIBUTES (*decl_p);
7264     }
7265   else
7266     p = &TYPE_ATTRIBUTES (*decl_p);
7267
7268   if (last_dep)
7269     {
7270       tree late_attrs = NULL_TREE;
7271       tree *q = &late_attrs;
7272
7273       for (*p = attributes; *p; )
7274         {
7275           t = *p;
7276           if (ATTR_IS_DEPENDENT (t))
7277             {
7278               *p = TREE_CHAIN (t);
7279               TREE_CHAIN (t) = NULL_TREE;
7280               /* If the first attribute argument is an identifier, don't
7281                  pass it through tsubst.  Attributes like mode, format,
7282                  cleanup and several target specific attributes expect it
7283                  unmodified.  */
7284               if (TREE_VALUE (t)
7285                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
7286                   && TREE_VALUE (TREE_VALUE (t))
7287                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
7288                       == IDENTIFIER_NODE))
7289                 {
7290                   tree chain
7291                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
7292                                    in_decl,
7293                                    /*integral_constant_expression_p=*/false);
7294                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
7295                     TREE_VALUE (t)
7296                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
7297                                    chain);
7298                 }
7299               else
7300                 TREE_VALUE (t)
7301                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
7302                                  /*integral_constant_expression_p=*/false);
7303               *q = t;
7304               q = &TREE_CHAIN (t);
7305             }
7306           else
7307             p = &TREE_CHAIN (t);
7308         }
7309
7310       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
7311     }
7312 }
7313
7314 /* Perform (or defer) access check for typedefs that were referenced
7315    from within the template TMPL code.
7316    This is a subroutine of instantiate_template and instantiate_class_template.
7317    TMPL is the template to consider and TARGS is the list of arguments of
7318    that template.  */
7319
7320 static void
7321 perform_typedefs_access_check (tree tmpl, tree targs)
7322 {
7323   tree t;
7324
7325   if (!tmpl
7326       || (!CLASS_TYPE_P (tmpl)
7327           && TREE_CODE (tmpl) != FUNCTION_DECL))
7328     return;
7329
7330   for (t = get_types_needing_access_check (tmpl); t; t = TREE_CHAIN (t))
7331     {
7332       tree type_decl = TREE_PURPOSE (t);
7333       tree type_scope = TREE_VALUE (t);
7334
7335       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
7336         continue;
7337
7338       if (uses_template_parms (type_decl))
7339         type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
7340       if (uses_template_parms (type_scope))
7341         type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
7342
7343       perform_or_defer_access_check (TYPE_BINFO (type_scope),
7344                                      type_decl, type_decl);
7345     }
7346 }
7347
7348 tree
7349 instantiate_class_template (tree type)
7350 {
7351   tree templ, args, pattern, t, member;
7352   tree typedecl;
7353   tree pbinfo;
7354   tree base_list;
7355   unsigned int saved_maximum_field_alignment;
7356
7357   if (type == error_mark_node)
7358     return error_mark_node;
7359
7360   if (TYPE_BEING_DEFINED (type)
7361       || COMPLETE_TYPE_P (type)
7362       || uses_template_parms (type))
7363     return type;
7364
7365   /* Figure out which template is being instantiated.  */
7366   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
7367   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
7368
7369   /* Determine what specialization of the original template to
7370      instantiate.  */
7371   t = most_specialized_class (type, templ);
7372   if (t == error_mark_node)
7373     {
7374       TYPE_BEING_DEFINED (type) = 1;
7375       return error_mark_node;
7376     }
7377   else if (t)
7378     {
7379       /* This TYPE is actually an instantiation of a partial
7380          specialization.  We replace the innermost set of ARGS with
7381          the arguments appropriate for substitution.  For example,
7382          given:
7383
7384            template <class T> struct S {};
7385            template <class T> struct S<T*> {};
7386
7387          and supposing that we are instantiating S<int*>, ARGS will
7388          presently be {int*} -- but we need {int}.  */
7389       pattern = TREE_TYPE (t);
7390       args = TREE_PURPOSE (t);
7391     }
7392   else
7393     {
7394       pattern = TREE_TYPE (templ);
7395       args = CLASSTYPE_TI_ARGS (type);
7396     }
7397
7398   /* If the template we're instantiating is incomplete, then clearly
7399      there's nothing we can do.  */
7400   if (!COMPLETE_TYPE_P (pattern))
7401     return type;
7402
7403   /* If we've recursively instantiated too many templates, stop.  */
7404   if (! push_tinst_level (type))
7405     return type;
7406
7407   /* Now we're really doing the instantiation.  Mark the type as in
7408      the process of being defined.  */
7409   TYPE_BEING_DEFINED (type) = 1;
7410
7411   /* We may be in the middle of deferred access check.  Disable
7412      it now.  */
7413   push_deferring_access_checks (dk_no_deferred);
7414
7415   push_to_top_level ();
7416   /* Use #pragma pack from the template context.  */
7417   saved_maximum_field_alignment = maximum_field_alignment;
7418   maximum_field_alignment = TYPE_PRECISION (pattern);
7419
7420   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
7421
7422   /* Set the input location to the most specialized template definition.
7423      This is needed if tsubsting causes an error.  */
7424   typedecl = TYPE_MAIN_DECL (pattern);
7425   input_location = DECL_SOURCE_LOCATION (typedecl);
7426
7427   TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern);
7428   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
7429   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
7430   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
7431   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
7432   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
7433   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
7434   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
7435   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
7436   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
7437   TYPE_PACKED (type) = TYPE_PACKED (pattern);
7438   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
7439   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
7440   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
7441   if (ANON_AGGR_TYPE_P (pattern))
7442     SET_ANON_AGGR_TYPE_P (type);
7443   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
7444     {
7445       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
7446       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
7447     }
7448
7449   pbinfo = TYPE_BINFO (pattern);
7450
7451   /* We should never instantiate a nested class before its enclosing
7452      class; we need to look up the nested class by name before we can
7453      instantiate it, and that lookup should instantiate the enclosing
7454      class.  */
7455   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
7456               || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
7457               || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
7458
7459   base_list = NULL_TREE;
7460   if (BINFO_N_BASE_BINFOS (pbinfo))
7461     {
7462       tree pbase_binfo;
7463       tree context = TYPE_CONTEXT (type);
7464       tree pushed_scope;
7465       int i;
7466
7467       /* We must enter the scope containing the type, as that is where
7468          the accessibility of types named in dependent bases are
7469          looked up from.  */
7470       pushed_scope = push_scope (context ? context : global_namespace);
7471
7472       /* Substitute into each of the bases to determine the actual
7473          basetypes.  */
7474       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
7475         {
7476           tree base;
7477           tree access = BINFO_BASE_ACCESS (pbinfo, i);
7478           tree expanded_bases = NULL_TREE;
7479           int idx, len = 1;
7480
7481           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
7482             {
7483               expanded_bases = 
7484                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
7485                                        args, tf_error, NULL_TREE);
7486               if (expanded_bases == error_mark_node)
7487                 continue;
7488
7489               len = TREE_VEC_LENGTH (expanded_bases);
7490             }
7491
7492           for (idx = 0; idx < len; idx++)
7493             {
7494               if (expanded_bases)
7495                 /* Extract the already-expanded base class.  */
7496                 base = TREE_VEC_ELT (expanded_bases, idx);
7497               else
7498                 /* Substitute to figure out the base class.  */
7499                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
7500                                NULL_TREE);
7501
7502               if (base == error_mark_node)
7503                 continue;
7504
7505               base_list = tree_cons (access, base, base_list);
7506               if (BINFO_VIRTUAL_P (pbase_binfo))
7507                 TREE_TYPE (base_list) = integer_type_node;
7508             }
7509         }
7510
7511       /* The list is now in reverse order; correct that.  */
7512       base_list = nreverse (base_list);
7513
7514       if (pushed_scope)
7515         pop_scope (pushed_scope);
7516     }
7517   /* Now call xref_basetypes to set up all the base-class
7518      information.  */
7519   xref_basetypes (type, base_list);
7520
7521   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
7522                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
7523                                   args, tf_error, NULL_TREE);
7524
7525   /* Now that our base classes are set up, enter the scope of the
7526      class, so that name lookups into base classes, etc. will work
7527      correctly.  This is precisely analogous to what we do in
7528      begin_class_definition when defining an ordinary non-template
7529      class, except we also need to push the enclosing classes.  */
7530   push_nested_class (type);
7531
7532   /* Now members are processed in the order of declaration.  */
7533   for (member = CLASSTYPE_DECL_LIST (pattern);
7534        member; member = TREE_CHAIN (member))
7535     {
7536       tree t = TREE_VALUE (member);
7537
7538       if (TREE_PURPOSE (member))
7539         {
7540           if (TYPE_P (t))
7541             {
7542               /* Build new CLASSTYPE_NESTED_UTDS.  */
7543
7544               tree newtag;
7545               bool class_template_p;
7546
7547               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
7548                                   && TYPE_LANG_SPECIFIC (t)
7549                                   && CLASSTYPE_IS_TEMPLATE (t));
7550               /* If the member is a class template, then -- even after
7551                  substitution -- there may be dependent types in the
7552                  template argument list for the class.  We increment
7553                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
7554                  that function will assume that no types are dependent
7555                  when outside of a template.  */
7556               if (class_template_p)
7557                 ++processing_template_decl;
7558               newtag = tsubst (t, args, tf_error, NULL_TREE);
7559               if (class_template_p)
7560                 --processing_template_decl;
7561               if (newtag == error_mark_node)
7562                 continue;
7563
7564               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
7565                 {
7566                   tree name = TYPE_IDENTIFIER (t);
7567
7568                   if (class_template_p)
7569                     /* Unfortunately, lookup_template_class sets
7570                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
7571                        instantiation (i.e., for the type of a member
7572                        template class nested within a template class.)
7573                        This behavior is required for
7574                        maybe_process_partial_specialization to work
7575                        correctly, but is not accurate in this case;
7576                        the TAG is not an instantiation of anything.
7577                        (The corresponding TEMPLATE_DECL is an
7578                        instantiation, but the TYPE is not.) */
7579                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
7580
7581                   /* Now, we call pushtag to put this NEWTAG into the scope of
7582                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
7583                      pushtag calling push_template_decl.  We don't have to do
7584                      this for enums because it will already have been done in
7585                      tsubst_enum.  */
7586                   if (name)
7587                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
7588                   pushtag (name, newtag, /*tag_scope=*/ts_current);
7589                 }
7590             }
7591           else if (TREE_CODE (t) == FUNCTION_DECL
7592                    || DECL_FUNCTION_TEMPLATE_P (t))
7593             {
7594               /* Build new TYPE_METHODS.  */
7595               tree r;
7596
7597               if (TREE_CODE (t) == TEMPLATE_DECL)
7598                 ++processing_template_decl;
7599               r = tsubst (t, args, tf_error, NULL_TREE);
7600               if (TREE_CODE (t) == TEMPLATE_DECL)
7601                 --processing_template_decl;
7602               set_current_access_from_decl (r);
7603               finish_member_declaration (r);
7604             }
7605           else
7606             {
7607               /* Build new TYPE_FIELDS.  */
7608               if (TREE_CODE (t) == STATIC_ASSERT)
7609                 {
7610                   tree condition = 
7611                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
7612                                  tf_warning_or_error, NULL_TREE,
7613                                  /*integral_constant_expression_p=*/true);
7614                   finish_static_assert (condition,
7615                                         STATIC_ASSERT_MESSAGE (t), 
7616                                         STATIC_ASSERT_SOURCE_LOCATION (t),
7617                                         /*member_p=*/true);
7618                 }
7619               else if (TREE_CODE (t) != CONST_DECL)
7620                 {
7621                   tree r;
7622
7623                   /* The file and line for this declaration, to
7624                      assist in error message reporting.  Since we
7625                      called push_tinst_level above, we don't need to
7626                      restore these.  */
7627                   input_location = DECL_SOURCE_LOCATION (t);
7628
7629                   if (TREE_CODE (t) == TEMPLATE_DECL)
7630                     ++processing_template_decl;
7631                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
7632                   if (TREE_CODE (t) == TEMPLATE_DECL)
7633                     --processing_template_decl;
7634                   if (TREE_CODE (r) == VAR_DECL)
7635                     {
7636                       /* In [temp.inst]:
7637
7638                            [t]he initialization (and any associated
7639                            side-effects) of a static data member does
7640                            not occur unless the static data member is
7641                            itself used in a way that requires the
7642                            definition of the static data member to
7643                            exist.
7644
7645                          Therefore, we do not substitute into the
7646                          initialized for the static data member here.  */
7647                       finish_static_data_member_decl
7648                         (r,
7649                          /*init=*/NULL_TREE,
7650                          /*init_const_expr_p=*/false,
7651                          /*asmspec_tree=*/NULL_TREE,
7652                          /*flags=*/0);
7653                       if (DECL_INITIALIZED_IN_CLASS_P (r))
7654                         check_static_variable_definition (r, TREE_TYPE (r));
7655                     }
7656                   else if (TREE_CODE (r) == FIELD_DECL)
7657                     {
7658                       /* Determine whether R has a valid type and can be
7659                          completed later.  If R is invalid, then it is
7660                          replaced by error_mark_node so that it will not be
7661                          added to TYPE_FIELDS.  */
7662                       tree rtype = TREE_TYPE (r);
7663                       if (can_complete_type_without_circularity (rtype))
7664                         complete_type (rtype);
7665
7666                       if (!COMPLETE_TYPE_P (rtype))
7667                         {
7668                           cxx_incomplete_type_error (r, rtype);
7669                           r = error_mark_node;
7670                         }
7671                     }
7672
7673                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
7674                      such a thing will already have been added to the field
7675                      list by tsubst_enum in finish_member_declaration in the
7676                      CLASSTYPE_NESTED_UTDS case above.  */
7677                   if (!(TREE_CODE (r) == TYPE_DECL
7678                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
7679                         && DECL_ARTIFICIAL (r)))
7680                     {
7681                       set_current_access_from_decl (r);
7682                       finish_member_declaration (r);
7683                     }
7684                 }
7685             }
7686         }
7687       else
7688         {
7689           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
7690             {
7691               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
7692
7693               tree friend_type = t;
7694               bool adjust_processing_template_decl = false;
7695
7696               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7697                 {
7698                   /* template <class T> friend class C;  */
7699                   friend_type = tsubst_friend_class (friend_type, args);
7700                   adjust_processing_template_decl = true;
7701                 }
7702               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
7703                 {
7704                   /* template <class T> friend class C::D;  */
7705                   friend_type = tsubst (friend_type, args,
7706                                         tf_warning_or_error, NULL_TREE);
7707                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7708                     friend_type = TREE_TYPE (friend_type);
7709                   adjust_processing_template_decl = true;
7710                 }
7711               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
7712                 {
7713                   /* This could be either
7714
7715                        friend class T::C;
7716
7717                      when dependent_type_p is false or
7718
7719                        template <class U> friend class T::C;
7720
7721                      otherwise.  */
7722                   friend_type = tsubst (friend_type, args,
7723                                         tf_warning_or_error, NULL_TREE);
7724                   /* Bump processing_template_decl for correct
7725                      dependent_type_p calculation.  */
7726                   ++processing_template_decl;
7727                   if (dependent_type_p (friend_type))
7728                     adjust_processing_template_decl = true;
7729                   --processing_template_decl;
7730                 }
7731               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
7732                        && hidden_name_p (TYPE_NAME (friend_type)))
7733                 {
7734                   /* friend class C;
7735
7736                      where C hasn't been declared yet.  Let's lookup name
7737                      from namespace scope directly, bypassing any name that
7738                      come from dependent base class.  */
7739                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
7740
7741                   /* The call to xref_tag_from_type does injection for friend
7742                      classes.  */
7743                   push_nested_namespace (ns);
7744                   friend_type =
7745                     xref_tag_from_type (friend_type, NULL_TREE,
7746                                         /*tag_scope=*/ts_current);
7747                   pop_nested_namespace (ns);
7748                 }
7749               else if (uses_template_parms (friend_type))
7750                 /* friend class C<T>;  */
7751                 friend_type = tsubst (friend_type, args,
7752                                       tf_warning_or_error, NULL_TREE);
7753               /* Otherwise it's
7754
7755                    friend class C;
7756
7757                  where C is already declared or
7758
7759                    friend class C<int>;
7760
7761                  We don't have to do anything in these cases.  */
7762
7763               if (adjust_processing_template_decl)
7764                 /* Trick make_friend_class into realizing that the friend
7765                    we're adding is a template, not an ordinary class.  It's
7766                    important that we use make_friend_class since it will
7767                    perform some error-checking and output cross-reference
7768                    information.  */
7769                 ++processing_template_decl;
7770
7771               if (friend_type != error_mark_node)
7772                 make_friend_class (type, friend_type, /*complain=*/false);
7773
7774               if (adjust_processing_template_decl)
7775                 --processing_template_decl;
7776             }
7777           else
7778             {
7779               /* Build new DECL_FRIENDLIST.  */
7780               tree r;
7781
7782               /* The file and line for this declaration, to
7783                  assist in error message reporting.  Since we
7784                  called push_tinst_level above, we don't need to
7785                  restore these.  */
7786               input_location = DECL_SOURCE_LOCATION (t);
7787
7788               if (TREE_CODE (t) == TEMPLATE_DECL)
7789                 {
7790                   ++processing_template_decl;
7791                   push_deferring_access_checks (dk_no_check);
7792                 }
7793
7794               r = tsubst_friend_function (t, args);
7795               add_friend (type, r, /*complain=*/false);
7796               if (TREE_CODE (t) == TEMPLATE_DECL)
7797                 {
7798                   pop_deferring_access_checks ();
7799                   --processing_template_decl;
7800                 }
7801             }
7802         }
7803     }
7804
7805   /* Set the file and line number information to whatever is given for
7806      the class itself.  This puts error messages involving generated
7807      implicit functions at a predictable point, and the same point
7808      that would be used for non-template classes.  */
7809   input_location = DECL_SOURCE_LOCATION (typedecl);
7810
7811   unreverse_member_declarations (type);
7812   finish_struct_1 (type);
7813   TYPE_BEING_DEFINED (type) = 0;
7814
7815   /* Now that the class is complete, instantiate default arguments for
7816      any member functions.  We don't do this earlier because the
7817      default arguments may reference members of the class.  */
7818   if (!PRIMARY_TEMPLATE_P (templ))
7819     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
7820       if (TREE_CODE (t) == FUNCTION_DECL
7821           /* Implicitly generated member functions will not have template
7822              information; they are not instantiations, but instead are
7823              created "fresh" for each instantiation.  */
7824           && DECL_TEMPLATE_INFO (t))
7825         tsubst_default_arguments (t);
7826
7827   /* Some typedefs referenced from within the template code need to be access
7828      checked at template instantiation time, i.e now. These types were
7829      added to the template at parsing time. Let's get those and perform
7830      the access checks then.  */
7831   perform_typedefs_access_check (pattern, args);
7832   perform_deferred_access_checks ();
7833   pop_nested_class ();
7834   maximum_field_alignment = saved_maximum_field_alignment;
7835   pop_from_top_level ();
7836   pop_deferring_access_checks ();
7837   pop_tinst_level ();
7838
7839   /* The vtable for a template class can be emitted in any translation
7840      unit in which the class is instantiated.  When there is no key
7841      method, however, finish_struct_1 will already have added TYPE to
7842      the keyed_classes list.  */
7843   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
7844     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
7845
7846   return type;
7847 }
7848
7849 static tree
7850 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7851 {
7852   tree r;
7853
7854   if (!t)
7855     r = t;
7856   else if (TYPE_P (t))
7857     r = tsubst (t, args, complain, in_decl);
7858   else
7859     {
7860       r = tsubst_expr (t, args, complain, in_decl,
7861                        /*integral_constant_expression_p=*/true);
7862       r = fold_non_dependent_expr (r);
7863     }
7864   return r;
7865 }
7866
7867 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
7868    NONTYPE_ARGUMENT_PACK.  */
7869
7870 static tree
7871 make_fnparm_pack (tree spec_parm)
7872 {
7873   /* Collect all of the extra "packed" parameters into an
7874      argument pack.  */
7875   tree parmvec;
7876   tree parmtypevec;
7877   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
7878   tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
7879   int i, len = list_length (spec_parm);
7880
7881   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
7882   parmvec = make_tree_vec (len);
7883   parmtypevec = make_tree_vec (len);
7884   for (i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
7885     {
7886       TREE_VEC_ELT (parmvec, i) = spec_parm;
7887       TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
7888     }
7889
7890   /* Build the argument packs.  */
7891   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
7892   SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
7893   TREE_TYPE (argpack) = argtypepack;
7894
7895   return argpack;
7896 }        
7897
7898 /* Substitute ARGS into T, which is an pack expansion
7899    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
7900    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
7901    (if only a partial substitution could be performed) or
7902    ERROR_MARK_NODE if there was an error.  */
7903 tree
7904 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
7905                        tree in_decl)
7906 {
7907   tree pattern;
7908   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
7909   tree first_arg_pack; int i, len = -1;
7910   tree result;
7911   int incomplete = 0;
7912   bool very_local_specializations = false;
7913
7914   gcc_assert (PACK_EXPANSION_P (t));
7915   pattern = PACK_EXPANSION_PATTERN (t);
7916
7917   /* Determine the argument packs that will instantiate the parameter
7918      packs used in the expansion expression. While we're at it,
7919      compute the number of arguments to be expanded and make sure it
7920      is consistent.  */
7921   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
7922        pack = TREE_CHAIN (pack))
7923     {
7924       tree parm_pack = TREE_VALUE (pack);
7925       tree arg_pack = NULL_TREE;
7926       tree orig_arg = NULL_TREE;
7927
7928       if (TREE_CODE (parm_pack) == PARM_DECL)
7929         {
7930           arg_pack = retrieve_local_specialization (parm_pack);
7931           if (arg_pack == NULL_TREE)
7932             {
7933               /* This can happen for a parameter name used later in a function
7934                  declaration (such as in a late-specified return type).  Just
7935                  make a dummy decl, since it's only used for its type.  */
7936               gcc_assert (cp_unevaluated_operand != 0);
7937               arg_pack = tsubst_decl (parm_pack, args, complain);
7938               arg_pack = make_fnparm_pack (arg_pack);
7939             }
7940         }
7941       else
7942         {
7943           int level, idx, levels;
7944           template_parm_level_and_index (parm_pack, &level, &idx);
7945
7946           levels = TMPL_ARGS_DEPTH (args);
7947           if (level <= levels)
7948             arg_pack = TMPL_ARG (args, level, idx);
7949         }
7950
7951       orig_arg = arg_pack;
7952       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
7953         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
7954       
7955       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
7956         /* This can only happen if we forget to expand an argument
7957            pack somewhere else. Just return an error, silently.  */
7958         {
7959           result = make_tree_vec (1);
7960           TREE_VEC_ELT (result, 0) = error_mark_node;
7961           return result;
7962         }
7963
7964       if (arg_pack
7965           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
7966           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
7967         {
7968           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
7969           tree pattern = PACK_EXPANSION_PATTERN (expansion);
7970           if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack))
7971               || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern)))
7972             /* The argument pack that the parameter maps to is just an
7973                expansion of the parameter itself, such as one would
7974                find in the implicit typedef of a class inside the
7975                class itself.  Consider this parameter "unsubstituted",
7976                so that we will maintain the outer pack expansion.  */
7977             arg_pack = NULL_TREE;
7978         }
7979           
7980       if (arg_pack)
7981         {
7982           int my_len = 
7983             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7984
7985           /* It's all-or-nothing with incomplete argument packs.  */
7986           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7987             return error_mark_node;
7988           
7989           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7990             incomplete = 1;
7991
7992           if (len < 0)
7993             {
7994               len = my_len;
7995               first_arg_pack = arg_pack;
7996             }
7997           else if (len != my_len)
7998             {
7999               if (incomplete)
8000                 /* We got explicit args for some packs but not others;
8001                    do nothing now and try again after deduction.  */
8002                 return t;
8003               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
8004                 error ("mismatched argument pack lengths while expanding "
8005                        "%<%T%>",
8006                        pattern);
8007               else
8008                 error ("mismatched argument pack lengths while expanding "
8009                        "%<%E%>",
8010                        pattern);
8011               return error_mark_node;
8012             }
8013
8014           /* Keep track of the parameter packs and their corresponding
8015              argument packs.  */
8016           packs = tree_cons (parm_pack, arg_pack, packs);
8017           TREE_TYPE (packs) = orig_arg;
8018         }
8019       else
8020         /* We can't substitute for this parameter pack.  */
8021         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
8022                                          TREE_VALUE (pack),
8023                                          unsubstituted_packs);
8024     }
8025
8026   /* We cannot expand this expansion expression, because we don't have
8027      all of the argument packs we need. Substitute into the pattern
8028      and return a PACK_EXPANSION_*. The caller will need to deal with
8029      that.  */
8030   if (unsubstituted_packs)
8031     {
8032       tree new_pat;
8033       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
8034         new_pat = tsubst_expr (pattern, args, complain, in_decl,
8035                                /*integral_constant_expression_p=*/false);
8036       else
8037         new_pat = tsubst (pattern, args, complain, in_decl);
8038       return make_pack_expansion (new_pat);
8039     }
8040
8041   /* We could not find any argument packs that work.  */
8042   if (len < 0)
8043     return error_mark_node;
8044
8045   if (!local_specializations)
8046     {
8047       /* We're in a late-specified return type, so we don't have a local
8048          specializations table.  Create one for doing this expansion.  */
8049       very_local_specializations = true;
8050       local_specializations = htab_create (37,
8051                                            hash_local_specialization,
8052                                            eq_local_specializations,
8053                                            NULL);
8054     }
8055
8056   /* For each argument in each argument pack, substitute into the
8057      pattern.  */
8058   result = make_tree_vec (len + incomplete);
8059   for (i = 0; i < len + incomplete; ++i)
8060     {
8061       /* For parameter pack, change the substitution of the parameter
8062          pack to the ith argument in its argument pack, then expand
8063          the pattern.  */
8064       for (pack = packs; pack; pack = TREE_CHAIN (pack))
8065         {
8066           tree parm = TREE_PURPOSE (pack);
8067
8068           if (TREE_CODE (parm) == PARM_DECL)
8069             {
8070               /* Select the Ith argument from the pack.  */
8071               tree arg = make_node (ARGUMENT_PACK_SELECT);
8072               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
8073               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
8074               mark_used (parm);
8075               register_local_specialization (arg, parm);
8076             }
8077           else
8078             {
8079               tree value = parm;
8080               int idx, level;
8081               template_parm_level_and_index (parm, &level, &idx);
8082               
8083               if (i < len) 
8084                 {
8085                   /* Select the Ith argument from the pack. */
8086                   value = make_node (ARGUMENT_PACK_SELECT);
8087                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
8088                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
8089                 }
8090
8091               /* Update the corresponding argument.  */
8092               TMPL_ARG (args, level, idx) = value;
8093             }
8094         }
8095
8096       /* Substitute into the PATTERN with the altered arguments.  */
8097       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
8098         TREE_VEC_ELT (result, i) = 
8099           tsubst_expr (pattern, args, complain, in_decl,
8100                        /*integral_constant_expression_p=*/false);
8101       else
8102         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
8103
8104       if (i == len)
8105         /* When we have incomplete argument packs, the last "expanded"
8106            result is itself a pack expansion, which allows us
8107            to deduce more arguments.  */
8108         TREE_VEC_ELT (result, i) = 
8109           make_pack_expansion (TREE_VEC_ELT (result, i));
8110
8111       if (TREE_VEC_ELT (result, i) == error_mark_node)
8112         {
8113           result = error_mark_node;
8114           break;
8115         }
8116     }
8117
8118   /* Update ARGS to restore the substitution from parameter packs to
8119      their argument packs.  */
8120   for (pack = packs; pack; pack = TREE_CHAIN (pack))
8121     {
8122       tree parm = TREE_PURPOSE (pack);
8123
8124       if (TREE_CODE (parm) == PARM_DECL)
8125         register_local_specialization (TREE_TYPE (pack), parm);
8126       else
8127         {
8128           int idx, level;
8129           template_parm_level_and_index (parm, &level, &idx);
8130           
8131           /* Update the corresponding argument.  */
8132           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
8133             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
8134               TREE_TYPE (pack);
8135           else
8136             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
8137         }
8138     }
8139
8140   if (very_local_specializations)
8141     {
8142       htab_delete (local_specializations);
8143       local_specializations = NULL;
8144     }
8145   
8146   return result;
8147 }
8148
8149 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
8150    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
8151    parameter packs; all parms generated from a function parameter pack will
8152    have the same DECL_PARM_INDEX.  */
8153
8154 tree
8155 get_pattern_parm (tree parm, tree tmpl)
8156 {
8157   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
8158   tree patparm;
8159
8160   if (DECL_ARTIFICIAL (parm))
8161     {
8162       for (patparm = DECL_ARGUMENTS (pattern);
8163            patparm; patparm = TREE_CHAIN (patparm))
8164         if (DECL_ARTIFICIAL (patparm)
8165             && DECL_NAME (parm) == DECL_NAME (patparm))
8166           break;
8167     }
8168   else
8169     {
8170       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
8171       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
8172       gcc_assert (DECL_PARM_INDEX (patparm)
8173                   == DECL_PARM_INDEX (parm));
8174     }
8175
8176   return patparm;
8177 }
8178
8179 /* Substitute ARGS into the vector or list of template arguments T.  */
8180
8181 static tree
8182 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8183 {
8184   tree orig_t = t;
8185   int len = TREE_VEC_LENGTH (t);
8186   int need_new = 0, i, expanded_len_adjust = 0, out;
8187   tree *elts = (tree *) alloca (len * sizeof (tree));
8188
8189   for (i = 0; i < len; i++)
8190     {
8191       tree orig_arg = TREE_VEC_ELT (t, i);
8192       tree new_arg;
8193
8194       if (TREE_CODE (orig_arg) == TREE_VEC)
8195         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
8196       else if (PACK_EXPANSION_P (orig_arg))
8197         {
8198           /* Substitute into an expansion expression.  */
8199           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
8200
8201           if (TREE_CODE (new_arg) == TREE_VEC)
8202             /* Add to the expanded length adjustment the number of
8203                expanded arguments. We subtract one from this
8204                measurement, because the argument pack expression
8205                itself is already counted as 1 in
8206                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
8207                the argument pack is empty.  */
8208             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
8209         }
8210       else if (ARGUMENT_PACK_P (orig_arg))
8211         {
8212           /* Substitute into each of the arguments.  */
8213           new_arg = TYPE_P (orig_arg)
8214             ? cxx_make_type (TREE_CODE (orig_arg))
8215             : make_node (TREE_CODE (orig_arg));
8216           
8217           SET_ARGUMENT_PACK_ARGS (
8218             new_arg,
8219             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
8220                                   args, complain, in_decl));
8221
8222           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
8223             new_arg = error_mark_node;
8224
8225           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
8226             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
8227                                           complain, in_decl);
8228             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
8229
8230             if (TREE_TYPE (new_arg) == error_mark_node)
8231               new_arg = error_mark_node;
8232           }
8233         }
8234       else
8235         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
8236
8237       if (new_arg == error_mark_node)
8238         return error_mark_node;
8239
8240       elts[i] = new_arg;
8241       if (new_arg != orig_arg)
8242         need_new = 1;
8243     }
8244
8245   if (!need_new)
8246     return t;
8247
8248   /* Make space for the expanded arguments coming from template
8249      argument packs.  */
8250   t = make_tree_vec (len + expanded_len_adjust);
8251   for (i = 0, out = 0; i < len; i++)
8252     {
8253       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
8254            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
8255           && TREE_CODE (elts[i]) == TREE_VEC)
8256         {
8257           int idx;
8258
8259           /* Now expand the template argument pack "in place".  */
8260           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
8261             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
8262         }
8263       else
8264         {
8265           TREE_VEC_ELT (t, out) = elts[i];
8266           out++;
8267         }
8268     }
8269
8270   return t;
8271 }
8272
8273 /* Return the result of substituting ARGS into the template parameters
8274    given by PARMS.  If there are m levels of ARGS and m + n levels of
8275    PARMS, then the result will contain n levels of PARMS.  For
8276    example, if PARMS is `template <class T> template <class U>
8277    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
8278    result will be `template <int*, double, class V>'.  */
8279
8280 static tree
8281 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
8282 {
8283   tree r = NULL_TREE;
8284   tree* new_parms;
8285
8286   /* When substituting into a template, we must set
8287      PROCESSING_TEMPLATE_DECL as the template parameters may be
8288      dependent if they are based on one-another, and the dependency
8289      predicates are short-circuit outside of templates.  */
8290   ++processing_template_decl;
8291
8292   for (new_parms = &r;
8293        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
8294        new_parms = &(TREE_CHAIN (*new_parms)),
8295          parms = TREE_CHAIN (parms))
8296     {
8297       tree new_vec =
8298         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
8299       int i;
8300
8301       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
8302         {
8303           tree tuple;
8304           tree default_value;
8305           tree parm_decl;
8306
8307           if (parms == error_mark_node)
8308             continue;
8309
8310           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
8311
8312           if (tuple == error_mark_node)
8313             continue;
8314
8315           default_value = TREE_PURPOSE (tuple);
8316           parm_decl = TREE_VALUE (tuple);
8317
8318           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
8319           if (TREE_CODE (parm_decl) == PARM_DECL
8320               && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
8321             parm_decl = error_mark_node;
8322           default_value = tsubst_template_arg (default_value, args,
8323                                                complain, NULL_TREE);
8324
8325           tuple = build_tree_list (default_value, parm_decl);
8326           TREE_VEC_ELT (new_vec, i) = tuple;
8327         }
8328
8329       *new_parms =
8330         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
8331                              - TMPL_ARGS_DEPTH (args)),
8332                    new_vec, NULL_TREE);
8333     }
8334
8335   --processing_template_decl;
8336
8337   return r;
8338 }
8339
8340 /* Substitute the ARGS into the indicated aggregate (or enumeration)
8341    type T.  If T is not an aggregate or enumeration type, it is
8342    handled as if by tsubst.  IN_DECL is as for tsubst.  If
8343    ENTERING_SCOPE is nonzero, T is the context for a template which
8344    we are presently tsubst'ing.  Return the substituted value.  */
8345
8346 static tree
8347 tsubst_aggr_type (tree t,
8348                   tree args,
8349                   tsubst_flags_t complain,
8350                   tree in_decl,
8351                   int entering_scope)
8352 {
8353   if (t == NULL_TREE)
8354     return NULL_TREE;
8355
8356   switch (TREE_CODE (t))
8357     {
8358     case RECORD_TYPE:
8359       if (TYPE_PTRMEMFUNC_P (t))
8360         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
8361
8362       /* Else fall through.  */
8363     case ENUMERAL_TYPE:
8364     case UNION_TYPE:
8365       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
8366         {
8367           tree argvec;
8368           tree context;
8369           tree r;
8370           int saved_unevaluated_operand;
8371           int saved_inhibit_evaluation_warnings;
8372
8373           /* In "sizeof(X<I>)" we need to evaluate "I".  */
8374           saved_unevaluated_operand = cp_unevaluated_operand;
8375           cp_unevaluated_operand = 0;
8376           saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
8377           c_inhibit_evaluation_warnings = 0;
8378
8379           /* First, determine the context for the type we are looking
8380              up.  */
8381           context = TYPE_CONTEXT (t);
8382           if (context)
8383             {
8384               context = tsubst_aggr_type (context, args, complain,
8385                                           in_decl, /*entering_scope=*/1);
8386               /* If context is a nested class inside a class template,
8387                  it may still need to be instantiated (c++/33959).  */
8388               if (TYPE_P (context))
8389                 context = complete_type (context);
8390             }
8391
8392           /* Then, figure out what arguments are appropriate for the
8393              type we are trying to find.  For example, given:
8394
8395                template <class T> struct S;
8396                template <class T, class U> void f(T, U) { S<U> su; }
8397
8398              and supposing that we are instantiating f<int, double>,
8399              then our ARGS will be {int, double}, but, when looking up
8400              S we only want {double}.  */
8401           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
8402                                          complain, in_decl);
8403           if (argvec == error_mark_node)
8404             r = error_mark_node;
8405           else
8406             {
8407               r = lookup_template_class (t, argvec, in_decl, context,
8408                                          entering_scope, complain);
8409               r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
8410             }
8411
8412           cp_unevaluated_operand = saved_unevaluated_operand;
8413           c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
8414
8415           return r;
8416         }
8417       else
8418         /* This is not a template type, so there's nothing to do.  */
8419         return t;
8420
8421     default:
8422       return tsubst (t, args, complain, in_decl);
8423     }
8424 }
8425
8426 /* Substitute into the default argument ARG (a default argument for
8427    FN), which has the indicated TYPE.  */
8428
8429 tree
8430 tsubst_default_argument (tree fn, tree type, tree arg)
8431 {
8432   tree saved_class_ptr = NULL_TREE;
8433   tree saved_class_ref = NULL_TREE;
8434
8435   /* This default argument came from a template.  Instantiate the
8436      default argument here, not in tsubst.  In the case of
8437      something like:
8438
8439        template <class T>
8440        struct S {
8441          static T t();
8442          void f(T = t());
8443        };
8444
8445      we must be careful to do name lookup in the scope of S<T>,
8446      rather than in the current class.  */
8447   push_access_scope (fn);
8448   /* The "this" pointer is not valid in a default argument.  */
8449   if (cfun)
8450     {
8451       saved_class_ptr = current_class_ptr;
8452       cp_function_chain->x_current_class_ptr = NULL_TREE;
8453       saved_class_ref = current_class_ref;
8454       cp_function_chain->x_current_class_ref = NULL_TREE;
8455     }
8456
8457   push_deferring_access_checks(dk_no_deferred);
8458   /* The default argument expression may cause implicitly defined
8459      member functions to be synthesized, which will result in garbage
8460      collection.  We must treat this situation as if we were within
8461      the body of function so as to avoid collecting live data on the
8462      stack.  */
8463   ++function_depth;
8464   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
8465                      tf_warning_or_error, NULL_TREE,
8466                      /*integral_constant_expression_p=*/false);
8467   --function_depth;
8468   pop_deferring_access_checks();
8469
8470   /* Restore the "this" pointer.  */
8471   if (cfun)
8472     {
8473       cp_function_chain->x_current_class_ptr = saved_class_ptr;
8474       cp_function_chain->x_current_class_ref = saved_class_ref;
8475     }
8476
8477   /* Make sure the default argument is reasonable.  */
8478   arg = check_default_argument (type, arg);
8479
8480   pop_access_scope (fn);
8481
8482   return arg;
8483 }
8484
8485 /* Substitute into all the default arguments for FN.  */
8486
8487 static void
8488 tsubst_default_arguments (tree fn)
8489 {
8490   tree arg;
8491   tree tmpl_args;
8492
8493   tmpl_args = DECL_TI_ARGS (fn);
8494
8495   /* If this function is not yet instantiated, we certainly don't need
8496      its default arguments.  */
8497   if (uses_template_parms (tmpl_args))
8498     return;
8499
8500   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
8501        arg;
8502        arg = TREE_CHAIN (arg))
8503     if (TREE_PURPOSE (arg))
8504       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
8505                                                     TREE_VALUE (arg),
8506                                                     TREE_PURPOSE (arg));
8507 }
8508
8509 /* Substitute the ARGS into the T, which is a _DECL.  Return the
8510    result of the substitution.  Issue error and warning messages under
8511    control of COMPLAIN.  */
8512
8513 static tree
8514 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
8515 {
8516 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
8517   location_t saved_loc;
8518   tree r = NULL_TREE;
8519   tree in_decl = t;
8520   hashval_t hash = 0;
8521
8522   /* Set the filename and linenumber to improve error-reporting.  */
8523   saved_loc = input_location;
8524   input_location = DECL_SOURCE_LOCATION (t);
8525
8526   switch (TREE_CODE (t))
8527     {
8528     case TEMPLATE_DECL:
8529       {
8530         /* We can get here when processing a member function template,
8531            member class template, or template template parameter.  */
8532         tree decl = DECL_TEMPLATE_RESULT (t);
8533         tree spec;
8534         tree tmpl_args;
8535         tree full_args;
8536
8537         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
8538           {
8539             /* Template template parameter is treated here.  */
8540             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8541             if (new_type == error_mark_node)
8542               RETURN (error_mark_node);
8543
8544             r = copy_decl (t);
8545             TREE_CHAIN (r) = NULL_TREE;
8546             TREE_TYPE (r) = new_type;
8547             DECL_TEMPLATE_RESULT (r)
8548               = build_decl (DECL_SOURCE_LOCATION (decl),
8549                             TYPE_DECL, DECL_NAME (decl), new_type);
8550             DECL_TEMPLATE_PARMS (r)
8551               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
8552                                        complain);
8553             TYPE_NAME (new_type) = r;
8554             break;
8555           }
8556
8557         /* We might already have an instance of this template.
8558            The ARGS are for the surrounding class type, so the
8559            full args contain the tsubst'd args for the context,
8560            plus the innermost args from the template decl.  */
8561         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
8562           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
8563           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
8564         /* Because this is a template, the arguments will still be
8565            dependent, even after substitution.  If
8566            PROCESSING_TEMPLATE_DECL is not set, the dependency
8567            predicates will short-circuit.  */
8568         ++processing_template_decl;
8569         full_args = tsubst_template_args (tmpl_args, args,
8570                                           complain, in_decl);
8571         --processing_template_decl;
8572         if (full_args == error_mark_node)
8573           RETURN (error_mark_node);
8574
8575         /* If this is a default template template argument,
8576            tsubst might not have changed anything.  */
8577         if (full_args == tmpl_args)
8578           RETURN (t);
8579
8580         hash = hash_tmpl_and_args (t, full_args);
8581         spec = retrieve_specialization (t, full_args, hash);
8582         if (spec != NULL_TREE)
8583           {
8584             r = spec;
8585             break;
8586           }
8587
8588         /* Make a new template decl.  It will be similar to the
8589            original, but will record the current template arguments.
8590            We also create a new function declaration, which is just
8591            like the old one, but points to this new template, rather
8592            than the old one.  */
8593         r = copy_decl (t);
8594         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
8595         TREE_CHAIN (r) = NULL_TREE;
8596
8597         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
8598
8599         if (TREE_CODE (decl) == TYPE_DECL)
8600           {
8601             tree new_type;
8602             ++processing_template_decl;
8603             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8604             --processing_template_decl;
8605             if (new_type == error_mark_node)
8606               RETURN (error_mark_node);
8607
8608             TREE_TYPE (r) = new_type;
8609             CLASSTYPE_TI_TEMPLATE (new_type) = r;
8610             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
8611             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
8612             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
8613           }
8614         else
8615           {
8616             tree new_decl;
8617             ++processing_template_decl;
8618             new_decl = tsubst (decl, args, complain, in_decl);
8619             --processing_template_decl;
8620             if (new_decl == error_mark_node)
8621               RETURN (error_mark_node);
8622
8623             DECL_TEMPLATE_RESULT (r) = new_decl;
8624             DECL_TI_TEMPLATE (new_decl) = r;
8625             TREE_TYPE (r) = TREE_TYPE (new_decl);
8626             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
8627             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
8628           }
8629
8630         SET_DECL_IMPLICIT_INSTANTIATION (r);
8631         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
8632         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
8633
8634         /* The template parameters for this new template are all the
8635            template parameters for the old template, except the
8636            outermost level of parameters.  */
8637         DECL_TEMPLATE_PARMS (r)
8638           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
8639                                    complain);
8640
8641         if (PRIMARY_TEMPLATE_P (t))
8642           DECL_PRIMARY_TEMPLATE (r) = r;
8643
8644         if (TREE_CODE (decl) != TYPE_DECL)
8645           /* Record this non-type partial instantiation.  */
8646           register_specialization (r, t,
8647                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
8648                                    false, hash);
8649       }
8650       break;
8651
8652     case FUNCTION_DECL:
8653       {
8654         tree ctx;
8655         tree argvec = NULL_TREE;
8656         tree *friends;
8657         tree gen_tmpl;
8658         tree type;
8659         int member;
8660         int args_depth;
8661         int parms_depth;
8662
8663         /* Nobody should be tsubst'ing into non-template functions.  */
8664         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
8665
8666         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
8667           {
8668             tree spec;
8669             bool dependent_p;
8670
8671             /* If T is not dependent, just return it.  We have to
8672                increment PROCESSING_TEMPLATE_DECL because
8673                value_dependent_expression_p assumes that nothing is
8674                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
8675             ++processing_template_decl;
8676             dependent_p = value_dependent_expression_p (t);
8677             --processing_template_decl;
8678             if (!dependent_p)
8679               RETURN (t);
8680
8681             /* Calculate the most general template of which R is a
8682                specialization, and the complete set of arguments used to
8683                specialize R.  */
8684             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
8685             argvec = tsubst_template_args (DECL_TI_ARGS
8686                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
8687                                            args, complain, in_decl);
8688
8689             /* Check to see if we already have this specialization.  */
8690             hash = hash_tmpl_and_args (gen_tmpl, argvec);
8691             spec = retrieve_specialization (gen_tmpl, argvec, hash);
8692
8693             if (spec)
8694               {
8695                 r = spec;
8696                 break;
8697               }
8698
8699             /* We can see more levels of arguments than parameters if
8700                there was a specialization of a member template, like
8701                this:
8702
8703                  template <class T> struct S { template <class U> void f(); }
8704                  template <> template <class U> void S<int>::f(U);
8705
8706                Here, we'll be substituting into the specialization,
8707                because that's where we can find the code we actually
8708                want to generate, but we'll have enough arguments for
8709                the most general template.
8710
8711                We also deal with the peculiar case:
8712
8713                  template <class T> struct S {
8714                    template <class U> friend void f();
8715                  };
8716                  template <class U> void f() {}
8717                  template S<int>;
8718                  template void f<double>();
8719
8720                Here, the ARGS for the instantiation of will be {int,
8721                double}.  But, we only need as many ARGS as there are
8722                levels of template parameters in CODE_PATTERN.  We are
8723                careful not to get fooled into reducing the ARGS in
8724                situations like:
8725
8726                  template <class T> struct S { template <class U> void f(U); }
8727                  template <class T> template <> void S<T>::f(int) {}
8728
8729                which we can spot because the pattern will be a
8730                specialization in this case.  */
8731             args_depth = TMPL_ARGS_DEPTH (args);
8732             parms_depth =
8733               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
8734             if (args_depth > parms_depth
8735                 && !DECL_TEMPLATE_SPECIALIZATION (t))
8736               args = get_innermost_template_args (args, parms_depth);
8737           }
8738         else
8739           {
8740             /* This special case arises when we have something like this:
8741
8742                  template <class T> struct S {
8743                    friend void f<int>(int, double);
8744                  };
8745
8746                Here, the DECL_TI_TEMPLATE for the friend declaration
8747                will be an IDENTIFIER_NODE.  We are being called from
8748                tsubst_friend_function, and we want only to create a
8749                new decl (R) with appropriate types so that we can call
8750                determine_specialization.  */
8751             gen_tmpl = NULL_TREE;
8752           }
8753
8754         if (DECL_CLASS_SCOPE_P (t))
8755           {
8756             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
8757               member = 2;
8758             else
8759               member = 1;
8760             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
8761                                     complain, t, /*entering_scope=*/1);
8762           }
8763         else
8764           {
8765             member = 0;
8766             ctx = DECL_CONTEXT (t);
8767           }
8768         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8769         if (type == error_mark_node)
8770           RETURN (error_mark_node);
8771
8772         /* We do NOT check for matching decls pushed separately at this
8773            point, as they may not represent instantiations of this
8774            template, and in any case are considered separate under the
8775            discrete model.  */
8776         r = copy_decl (t);
8777         DECL_USE_TEMPLATE (r) = 0;
8778         TREE_TYPE (r) = type;
8779         /* Clear out the mangled name and RTL for the instantiation.  */
8780         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8781         SET_DECL_RTL (r, NULL_RTX);
8782         /* Leave DECL_INITIAL set on deleted instantiations.  */
8783         if (!DECL_DELETED_FN (r))
8784           DECL_INITIAL (r) = NULL_TREE;
8785         DECL_CONTEXT (r) = ctx;
8786
8787         if (member && DECL_CONV_FN_P (r))
8788           /* Type-conversion operator.  Reconstruct the name, in
8789              case it's the name of one of the template's parameters.  */
8790           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
8791
8792         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
8793                                      complain, t);
8794         DECL_RESULT (r) = NULL_TREE;
8795
8796         TREE_STATIC (r) = 0;
8797         TREE_PUBLIC (r) = TREE_PUBLIC (t);
8798         DECL_EXTERNAL (r) = 1;
8799         /* If this is an instantiation of a function with internal
8800            linkage, we already know what object file linkage will be
8801            assigned to the instantiation.  */
8802         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
8803         DECL_DEFER_OUTPUT (r) = 0;
8804         TREE_CHAIN (r) = NULL_TREE;
8805         DECL_PENDING_INLINE_INFO (r) = 0;
8806         DECL_PENDING_INLINE_P (r) = 0;
8807         DECL_SAVED_TREE (r) = NULL_TREE;
8808         DECL_STRUCT_FUNCTION (r) = NULL;
8809         TREE_USED (r) = 0;
8810         /* We'll re-clone as appropriate in instantiate_template.  */
8811         DECL_CLONED_FUNCTION (r) = NULL_TREE;
8812
8813         /* If we aren't complaining now, return on error before we register
8814            the specialization so that we'll complain eventually.  */
8815         if ((complain & tf_error) == 0
8816             && IDENTIFIER_OPNAME_P (DECL_NAME (r))
8817             && !grok_op_properties (r, /*complain=*/false))
8818           RETURN (error_mark_node);
8819
8820         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
8821            this in the special friend case mentioned above where
8822            GEN_TMPL is NULL.  */
8823         if (gen_tmpl)
8824           {
8825             DECL_TEMPLATE_INFO (r)
8826               = tree_cons (gen_tmpl, argvec, NULL_TREE);
8827             SET_DECL_IMPLICIT_INSTANTIATION (r);
8828             register_specialization (r, gen_tmpl, argvec, false, hash);
8829
8830             /* We're not supposed to instantiate default arguments
8831                until they are called, for a template.  But, for a
8832                declaration like:
8833
8834                  template <class T> void f ()
8835                  { extern void g(int i = T()); }
8836
8837                we should do the substitution when the template is
8838                instantiated.  We handle the member function case in
8839                instantiate_class_template since the default arguments
8840                might refer to other members of the class.  */
8841             if (!member
8842                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
8843                 && !uses_template_parms (argvec))
8844               tsubst_default_arguments (r);
8845           }
8846         else
8847           DECL_TEMPLATE_INFO (r) = NULL_TREE;
8848
8849         /* Copy the list of befriending classes.  */
8850         for (friends = &DECL_BEFRIENDING_CLASSES (r);
8851              *friends;
8852              friends = &TREE_CHAIN (*friends))
8853           {
8854             *friends = copy_node (*friends);
8855             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
8856                                             args, complain,
8857                                             in_decl);
8858           }
8859
8860         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
8861           {
8862             maybe_retrofit_in_chrg (r);
8863             if (DECL_CONSTRUCTOR_P (r))
8864               grok_ctor_properties (ctx, r);
8865             /* If this is an instantiation of a member template, clone it.
8866                If it isn't, that'll be handled by
8867                clone_constructors_and_destructors.  */
8868             if (PRIMARY_TEMPLATE_P (gen_tmpl))
8869               clone_function_decl (r, /*update_method_vec_p=*/0);
8870           }
8871         else if ((complain & tf_error) != 0
8872                  && IDENTIFIER_OPNAME_P (DECL_NAME (r))
8873                  && !grok_op_properties (r, /*complain=*/true))
8874           RETURN (error_mark_node);
8875
8876         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
8877           SET_DECL_FRIEND_CONTEXT (r,
8878                                    tsubst (DECL_FRIEND_CONTEXT (t),
8879                                             args, complain, in_decl));
8880
8881         /* Possibly limit visibility based on template args.  */
8882         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8883         if (DECL_VISIBILITY_SPECIFIED (t))
8884           {
8885             DECL_VISIBILITY_SPECIFIED (r) = 0;
8886             DECL_ATTRIBUTES (r)
8887               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8888           }
8889         determine_visibility (r);
8890         if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
8891             && !processing_template_decl)
8892           defaulted_late_check (r);
8893
8894         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8895                                         args, complain, in_decl);
8896       }
8897       break;
8898
8899     case PARM_DECL:
8900       {
8901         tree type = NULL_TREE;
8902         int i, len = 1;
8903         tree expanded_types = NULL_TREE;
8904         tree prev_r = NULL_TREE;
8905         tree first_r = NULL_TREE;
8906
8907         if (FUNCTION_PARAMETER_PACK_P (t))
8908           {
8909             /* If there is a local specialization that isn't a
8910                parameter pack, it means that we're doing a "simple"
8911                substitution from inside tsubst_pack_expansion. Just
8912                return the local specialization (which will be a single
8913                parm).  */
8914             tree spec = retrieve_local_specialization (t);
8915             if (spec 
8916                 && TREE_CODE (spec) == PARM_DECL
8917                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
8918               RETURN (spec);
8919
8920             /* Expand the TYPE_PACK_EXPANSION that provides the types for
8921                the parameters in this function parameter pack.  */
8922             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
8923                                                     complain, in_decl);
8924             if (TREE_CODE (expanded_types) == TREE_VEC)
8925               {
8926                 len = TREE_VEC_LENGTH (expanded_types);
8927
8928                 /* Zero-length parameter packs are boring. Just substitute
8929                    into the chain.  */
8930                 if (len == 0)
8931                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
8932                                   TREE_CHAIN (t)));
8933               }
8934             else
8935               {
8936                 /* All we did was update the type. Make a note of that.  */
8937                 type = expanded_types;
8938                 expanded_types = NULL_TREE;
8939               }
8940           }
8941
8942         /* Loop through all of the parameter's we'll build. When T is
8943            a function parameter pack, LEN is the number of expanded
8944            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
8945         r = NULL_TREE;
8946         for (i = 0; i < len; ++i)
8947           {
8948             prev_r = r;
8949             r = copy_node (t);
8950             if (DECL_TEMPLATE_PARM_P (t))
8951               SET_DECL_TEMPLATE_PARM_P (r);
8952
8953             /* An argument of a function parameter pack is not a parameter
8954                pack.  */
8955             FUNCTION_PARAMETER_PACK_P (r) = false;
8956
8957             if (expanded_types)
8958               /* We're on the Ith parameter of the function parameter
8959                  pack.  */
8960               {
8961                 /* Get the Ith type.  */
8962                 type = TREE_VEC_ELT (expanded_types, i);
8963
8964                 if (DECL_NAME (r))
8965                   /* Rename the parameter to include the index.  */
8966                   DECL_NAME (r) =
8967                     make_ith_pack_parameter_name (DECL_NAME (r), i);
8968               }
8969             else if (!type)
8970               /* We're dealing with a normal parameter.  */
8971               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8972
8973             type = type_decays_to (type);
8974             TREE_TYPE (r) = type;
8975             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8976
8977             if (DECL_INITIAL (r))
8978               {
8979                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
8980                   DECL_INITIAL (r) = TREE_TYPE (r);
8981                 else
8982                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
8983                                              complain, in_decl);
8984               }
8985
8986             DECL_CONTEXT (r) = NULL_TREE;
8987
8988             if (!DECL_TEMPLATE_PARM_P (r))
8989               DECL_ARG_TYPE (r) = type_passed_as (type);
8990
8991             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8992                                             args, complain, in_decl);
8993
8994             /* Keep track of the first new parameter we
8995                generate. That's what will be returned to the
8996                caller.  */
8997             if (!first_r)
8998               first_r = r;
8999
9000             /* Build a proper chain of parameters when substituting
9001                into a function parameter pack.  */
9002             if (prev_r)
9003               TREE_CHAIN (prev_r) = r;
9004           }
9005
9006         if (TREE_CHAIN (t))
9007           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
9008                                    complain, TREE_CHAIN (t));
9009
9010         /* FIRST_R contains the start of the chain we've built.  */
9011         r = first_r;
9012       }
9013       break;
9014
9015     case FIELD_DECL:
9016       {
9017         tree type;
9018
9019         r = copy_decl (t);
9020         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9021         if (type == error_mark_node)
9022           RETURN (error_mark_node);
9023         TREE_TYPE (r) = type;
9024         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9025
9026         /* DECL_INITIAL gives the number of bits in a bit-field.  */
9027         DECL_INITIAL (r)
9028           = tsubst_expr (DECL_INITIAL (t), args,
9029                          complain, in_decl,
9030                          /*integral_constant_expression_p=*/true);
9031         /* We don't have to set DECL_CONTEXT here; it is set by
9032            finish_member_declaration.  */
9033         TREE_CHAIN (r) = NULL_TREE;
9034         if (VOID_TYPE_P (type))
9035           error ("instantiation of %q+D as type %qT", r, type);
9036
9037         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9038                                         args, complain, in_decl);
9039       }
9040       break;
9041
9042     case USING_DECL:
9043       /* We reach here only for member using decls.  */
9044       if (DECL_DEPENDENT_P (t))
9045         {
9046           r = do_class_using_decl
9047             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
9048              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
9049           if (!r)
9050             r = error_mark_node;
9051           else
9052             {
9053               TREE_PROTECTED (r) = TREE_PROTECTED (t);
9054               TREE_PRIVATE (r) = TREE_PRIVATE (t);
9055             }
9056         }
9057       else
9058         {
9059           r = copy_node (t);
9060           TREE_CHAIN (r) = NULL_TREE;
9061         }
9062       break;
9063
9064     case TYPE_DECL:
9065     case VAR_DECL:
9066       {
9067         tree argvec = NULL_TREE;
9068         tree gen_tmpl = NULL_TREE;
9069         tree spec;
9070         tree tmpl = NULL_TREE;
9071         tree ctx;
9072         tree type = NULL_TREE;
9073         bool local_p;
9074
9075         if (TREE_CODE (t) == TYPE_DECL
9076             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
9077           {
9078             /* If this is the canonical decl, we don't have to
9079                mess with instantiations, and often we can't (for
9080                typename, template type parms and such).  Note that
9081                TYPE_NAME is not correct for the above test if
9082                we've copied the type for a typedef.  */
9083             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9084             if (type == error_mark_node)
9085               RETURN (error_mark_node);
9086             r = TYPE_NAME (type);
9087             break;
9088           }
9089
9090         /* Check to see if we already have the specialization we
9091            need.  */
9092         spec = NULL_TREE;
9093         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
9094           {
9095             /* T is a static data member or namespace-scope entity.
9096                We have to substitute into namespace-scope variables
9097                (even though such entities are never templates) because
9098                of cases like:
9099                
9100                  template <class T> void f() { extern T t; }
9101
9102                where the entity referenced is not known until
9103                instantiation time.  */
9104             local_p = false;
9105             ctx = DECL_CONTEXT (t);
9106             if (DECL_CLASS_SCOPE_P (t))
9107               {
9108                 ctx = tsubst_aggr_type (ctx, args,
9109                                         complain,
9110                                         in_decl, /*entering_scope=*/1);
9111                 /* If CTX is unchanged, then T is in fact the
9112                    specialization we want.  That situation occurs when
9113                    referencing a static data member within in its own
9114                    class.  We can use pointer equality, rather than
9115                    same_type_p, because DECL_CONTEXT is always
9116                    canonical.  */
9117                 if (ctx == DECL_CONTEXT (t))
9118                   spec = t;
9119               }
9120
9121             if (!spec)
9122               {
9123                 tmpl = DECL_TI_TEMPLATE (t);
9124                 gen_tmpl = most_general_template (tmpl);
9125                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
9126                 hash = hash_tmpl_and_args (gen_tmpl, argvec);
9127                 spec = retrieve_specialization (gen_tmpl, argvec, hash);
9128               }
9129           }
9130         else
9131           {
9132             /* A local variable.  */
9133             local_p = true;
9134             /* Subsequent calls to pushdecl will fill this in.  */
9135             ctx = NULL_TREE;
9136             spec = retrieve_local_specialization (t);
9137           }
9138         /* If we already have the specialization we need, there is
9139            nothing more to do.  */ 
9140         if (spec)
9141           {
9142             r = spec;
9143             break;
9144           }
9145
9146         /* Create a new node for the specialization we need.  */
9147         r = copy_decl (t);
9148         if (type == NULL_TREE)
9149           type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9150         if (TREE_CODE (r) == VAR_DECL)
9151           {
9152             /* Even if the original location is out of scope, the
9153                newly substituted one is not.  */
9154             DECL_DEAD_FOR_LOCAL (r) = 0;
9155             DECL_INITIALIZED_P (r) = 0;
9156             DECL_TEMPLATE_INSTANTIATED (r) = 0;
9157             if (type == error_mark_node)
9158               RETURN (error_mark_node);
9159             if (TREE_CODE (type) == FUNCTION_TYPE)
9160               {
9161                 /* It may seem that this case cannot occur, since:
9162
9163                      typedef void f();
9164                      void g() { f x; }
9165
9166                    declares a function, not a variable.  However:
9167       
9168                      typedef void f();
9169                      template <typename T> void g() { T t; }
9170                      template void g<f>();
9171
9172                    is an attempt to declare a variable with function
9173                    type.  */
9174                 error ("variable %qD has function type",
9175                        /* R is not yet sufficiently initialized, so we
9176                           just use its name.  */
9177                        DECL_NAME (r));
9178                 RETURN (error_mark_node);
9179               }
9180             type = complete_type (type);
9181             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
9182               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
9183             type = check_var_type (DECL_NAME (r), type);
9184
9185             if (DECL_HAS_VALUE_EXPR_P (t))
9186               {
9187                 tree ve = DECL_VALUE_EXPR (t);
9188                 ve = tsubst_expr (ve, args, complain, in_decl,
9189                                   /*constant_expression_p=*/false);
9190                 SET_DECL_VALUE_EXPR (r, ve);
9191               }
9192           }
9193         else if (DECL_SELF_REFERENCE_P (t))
9194           SET_DECL_SELF_REFERENCE_P (r);
9195         TREE_TYPE (r) = type;
9196         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9197         DECL_CONTEXT (r) = ctx;
9198         /* Clear out the mangled name and RTL for the instantiation.  */
9199         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
9200         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
9201           SET_DECL_RTL (r, NULL_RTX);
9202         /* The initializer must not be expanded until it is required;
9203            see [temp.inst].  */
9204         DECL_INITIAL (r) = NULL_TREE;
9205         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
9206           SET_DECL_RTL (r, NULL_RTX);
9207         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
9208         if (TREE_CODE (r) == VAR_DECL)
9209           {
9210             /* Possibly limit visibility based on template args.  */
9211             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
9212             if (DECL_VISIBILITY_SPECIFIED (t))
9213               {
9214                 DECL_VISIBILITY_SPECIFIED (r) = 0;
9215                 DECL_ATTRIBUTES (r)
9216                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
9217               }
9218             determine_visibility (r);
9219           }
9220         /* Preserve a typedef that names a type.  */
9221         else if (TREE_CODE (r) == TYPE_DECL
9222                  && DECL_ORIGINAL_TYPE (t)
9223                  && type != error_mark_node)
9224           {
9225             DECL_ORIGINAL_TYPE (r) = tsubst (DECL_ORIGINAL_TYPE (t),
9226                                              args, complain, in_decl);
9227             TREE_TYPE (r) = type = build_variant_type_copy (type);
9228             TYPE_NAME (type) = r;
9229           }
9230
9231         if (!local_p)
9232           {
9233             /* A static data member declaration is always marked
9234                external when it is declared in-class, even if an
9235                initializer is present.  We mimic the non-template
9236                processing here.  */
9237             DECL_EXTERNAL (r) = 1;
9238
9239             register_specialization (r, gen_tmpl, argvec, false, hash);
9240             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
9241             SET_DECL_IMPLICIT_INSTANTIATION (r);
9242           }
9243         else if (cp_unevaluated_operand)
9244           {
9245             /* We're substituting this var in a decltype outside of its
9246                scope, such as for a lambda return type.  Don't add it to
9247                local_specializations, do perform auto deduction.  */
9248             tree auto_node = type_uses_auto (type);
9249             tree init
9250               = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
9251                              /*constant_expression_p=*/false);
9252
9253             if (auto_node && init && describable_type (init))
9254               {
9255                 type = do_auto_deduction (type, init, auto_node);
9256                 TREE_TYPE (r) = type;
9257               }
9258           }
9259         else
9260           register_local_specialization (r, t);
9261
9262         TREE_CHAIN (r) = NULL_TREE;
9263
9264         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
9265                                         (int) ATTR_FLAG_TYPE_IN_PLACE,
9266                                         args, complain, in_decl);
9267         layout_decl (r, 0);
9268       }
9269       break;
9270
9271     default:
9272       gcc_unreachable ();
9273     }
9274 #undef RETURN
9275
9276  out:
9277   /* Restore the file and line information.  */
9278   input_location = saved_loc;
9279
9280   return r;
9281 }
9282
9283 /* Substitute into the ARG_TYPES of a function type.  */
9284
9285 static tree
9286 tsubst_arg_types (tree arg_types,
9287                   tree args,
9288                   tsubst_flags_t complain,
9289                   tree in_decl)
9290 {
9291   tree remaining_arg_types;
9292   tree type = NULL_TREE;
9293   int i = 1;
9294   tree expanded_args = NULL_TREE;
9295   tree default_arg;
9296
9297   if (!arg_types || arg_types == void_list_node)
9298     return arg_types;
9299
9300   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
9301                                           args, complain, in_decl);
9302   if (remaining_arg_types == error_mark_node)
9303     return error_mark_node;
9304
9305   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
9306     {
9307       /* For a pack expansion, perform substitution on the
9308          entire expression. Later on, we'll handle the arguments
9309          one-by-one.  */
9310       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
9311                                             args, complain, in_decl);
9312
9313       if (TREE_CODE (expanded_args) == TREE_VEC)
9314         /* So that we'll spin through the parameters, one by one.  */
9315         i = TREE_VEC_LENGTH (expanded_args);
9316       else
9317         {
9318           /* We only partially substituted into the parameter
9319              pack. Our type is TYPE_PACK_EXPANSION.  */
9320           type = expanded_args;
9321           expanded_args = NULL_TREE;
9322         }
9323     }
9324
9325   while (i > 0) {
9326     --i;
9327     
9328     if (expanded_args)
9329       type = TREE_VEC_ELT (expanded_args, i);
9330     else if (!type)
9331       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
9332
9333     if (type == error_mark_node)
9334       return error_mark_node;
9335     if (VOID_TYPE_P (type))
9336       {
9337         if (complain & tf_error)
9338           {
9339             error ("invalid parameter type %qT", type);
9340             if (in_decl)
9341               error ("in declaration %q+D", in_decl);
9342           }
9343         return error_mark_node;
9344     }
9345     
9346     /* Do array-to-pointer, function-to-pointer conversion, and ignore
9347        top-level qualifiers as required.  */
9348     type = TYPE_MAIN_VARIANT (type_decays_to (type));
9349
9350     /* We do not substitute into default arguments here.  The standard
9351        mandates that they be instantiated only when needed, which is
9352        done in build_over_call.  */
9353     default_arg = TREE_PURPOSE (arg_types);
9354
9355     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
9356       {
9357         /* We've instantiated a template before its default arguments
9358            have been parsed.  This can happen for a nested template
9359            class, and is not an error unless we require the default
9360            argument in a call of this function.  */
9361         remaining_arg_types = 
9362           tree_cons (default_arg, type, remaining_arg_types);
9363         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
9364                        remaining_arg_types);
9365       }
9366     else
9367       remaining_arg_types = 
9368         hash_tree_cons (default_arg, type, remaining_arg_types);
9369   }
9370         
9371   return remaining_arg_types;
9372 }
9373
9374 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
9375    *not* handle the exception-specification for FNTYPE, because the
9376    initial substitution of explicitly provided template parameters
9377    during argument deduction forbids substitution into the
9378    exception-specification:
9379
9380      [temp.deduct]
9381
9382      All references in the function type of the function template to  the
9383      corresponding template parameters are replaced by the specified tem-
9384      plate argument values.  If a substitution in a template parameter or
9385      in  the function type of the function template results in an invalid
9386      type, type deduction fails.  [Note: The equivalent  substitution  in
9387      exception specifications is done only when the function is instanti-
9388      ated, at which point a program is  ill-formed  if  the  substitution
9389      results in an invalid type.]  */
9390
9391 static tree
9392 tsubst_function_type (tree t,
9393                       tree args,
9394                       tsubst_flags_t complain,
9395                       tree in_decl)
9396 {
9397   tree return_type;
9398   tree arg_types;
9399   tree fntype;
9400
9401   /* The TYPE_CONTEXT is not used for function/method types.  */
9402   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
9403
9404   /* Substitute the return type.  */
9405   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9406   if (return_type == error_mark_node)
9407     return error_mark_node;
9408   /* The standard does not presently indicate that creation of a
9409      function type with an invalid return type is a deduction failure.
9410      However, that is clearly analogous to creating an array of "void"
9411      or a reference to a reference.  This is core issue #486.  */
9412   if (TREE_CODE (return_type) == ARRAY_TYPE
9413       || TREE_CODE (return_type) == FUNCTION_TYPE)
9414     {
9415       if (complain & tf_error)
9416         {
9417           if (TREE_CODE (return_type) == ARRAY_TYPE)
9418             error ("function returning an array");
9419           else
9420             error ("function returning a function");
9421         }
9422       return error_mark_node;
9423     }
9424
9425   /* Substitute the argument types.  */
9426   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
9427                                 complain, in_decl);
9428   if (arg_types == error_mark_node)
9429     return error_mark_node;
9430
9431   /* Construct a new type node and return it.  */
9432   if (TREE_CODE (t) == FUNCTION_TYPE)
9433     fntype = build_function_type (return_type, arg_types);
9434   else
9435     {
9436       tree r = TREE_TYPE (TREE_VALUE (arg_types));
9437       if (! MAYBE_CLASS_TYPE_P (r))
9438         {
9439           /* [temp.deduct]
9440
9441              Type deduction may fail for any of the following
9442              reasons:
9443
9444              -- Attempting to create "pointer to member of T" when T
9445              is not a class type.  */
9446           if (complain & tf_error)
9447             error ("creating pointer to member function of non-class type %qT",
9448                       r);
9449           return error_mark_node;
9450         }
9451
9452       fntype = build_method_type_directly (r, return_type,
9453                                            TREE_CHAIN (arg_types));
9454     }
9455   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
9456   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
9457
9458   return fntype;
9459 }
9460
9461 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
9462    ARGS into that specification, and return the substituted
9463    specification.  If there is no specification, return NULL_TREE.  */
9464
9465 static tree
9466 tsubst_exception_specification (tree fntype,
9467                                 tree args,
9468                                 tsubst_flags_t complain,
9469                                 tree in_decl)
9470 {
9471   tree specs;
9472   tree new_specs;
9473
9474   specs = TYPE_RAISES_EXCEPTIONS (fntype);
9475   new_specs = NULL_TREE;
9476   if (specs)
9477     {
9478       if (! TREE_VALUE (specs))
9479         new_specs = specs;
9480       else
9481         while (specs)
9482           {
9483             tree spec;
9484             int i, len = 1;
9485             tree expanded_specs = NULL_TREE;
9486
9487             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
9488               {
9489                 /* Expand the pack expansion type.  */
9490                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
9491                                                        args, complain,
9492                                                        in_decl);
9493
9494                 if (expanded_specs == error_mark_node)
9495                   return error_mark_node;
9496                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
9497                   len = TREE_VEC_LENGTH (expanded_specs);
9498                 else
9499                   {
9500                     /* We're substituting into a member template, so
9501                        we got a TYPE_PACK_EXPANSION back.  Add that
9502                        expansion and move on.  */
9503                     gcc_assert (TREE_CODE (expanded_specs) 
9504                                 == TYPE_PACK_EXPANSION);
9505                     new_specs = add_exception_specifier (new_specs,
9506                                                          expanded_specs,
9507                                                          complain);
9508                     specs = TREE_CHAIN (specs);
9509                     continue;
9510                   }
9511               }
9512
9513             for (i = 0; i < len; ++i)
9514               {
9515                 if (expanded_specs)
9516                   spec = TREE_VEC_ELT (expanded_specs, i);
9517                 else
9518                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
9519                 if (spec == error_mark_node)
9520                   return spec;
9521                 new_specs = add_exception_specifier (new_specs, spec, 
9522                                                      complain);
9523               }
9524
9525             specs = TREE_CHAIN (specs);
9526           }
9527     }
9528   return new_specs;
9529 }
9530
9531 /* Take the tree structure T and replace template parameters used
9532    therein with the argument vector ARGS.  IN_DECL is an associated
9533    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
9534    Issue error and warning messages under control of COMPLAIN.  Note
9535    that we must be relatively non-tolerant of extensions here, in
9536    order to preserve conformance; if we allow substitutions that
9537    should not be allowed, we may allow argument deductions that should
9538    not succeed, and therefore report ambiguous overload situations
9539    where there are none.  In theory, we could allow the substitution,
9540    but indicate that it should have failed, and allow our caller to
9541    make sure that the right thing happens, but we don't try to do this
9542    yet.
9543
9544    This function is used for dealing with types, decls and the like;
9545    for expressions, use tsubst_expr or tsubst_copy.  */
9546
9547 tree
9548 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9549 {
9550   tree type, r;
9551
9552   if (t == NULL_TREE || t == error_mark_node
9553       || t == integer_type_node
9554       || t == void_type_node
9555       || t == char_type_node
9556       || t == unknown_type_node
9557       || TREE_CODE (t) == NAMESPACE_DECL)
9558     return t;
9559
9560   if (DECL_P (t))
9561     return tsubst_decl (t, args, complain);
9562
9563   if (args == NULL_TREE)
9564     return t;
9565
9566   if (TREE_CODE (t) == IDENTIFIER_NODE)
9567     type = IDENTIFIER_TYPE_VALUE (t);
9568   else
9569     type = TREE_TYPE (t);
9570
9571   gcc_assert (type != unknown_type_node);
9572
9573   /* Reuse typedefs.  We need to do this to handle dependent attributes,
9574      such as attribute aligned.  */
9575   if (TYPE_P (t)
9576       && TYPE_NAME (t)
9577       && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
9578     {
9579       tree decl = TYPE_NAME (t);
9580       
9581       if (DECL_CLASS_SCOPE_P (decl)
9582           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
9583           && uses_template_parms (DECL_CONTEXT (decl)))
9584         {
9585           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
9586           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
9587           r = retrieve_specialization (tmpl, gen_args, 0);
9588         }
9589       else if (DECL_FUNCTION_SCOPE_P (decl)
9590                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
9591                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
9592         r = retrieve_local_specialization (decl);
9593       else
9594         /* The typedef is from a non-template context.  */
9595         return t;
9596
9597       if (r)
9598         {
9599           r = TREE_TYPE (r);
9600           r = cp_build_qualified_type_real
9601             (r, cp_type_quals (t) | cp_type_quals (r),
9602              complain | tf_ignore_bad_quals);
9603           return r;
9604         }
9605       /* Else we must be instantiating the typedef, so fall through.  */
9606     }
9607
9608   if (type
9609       && TREE_CODE (t) != TYPENAME_TYPE
9610       && TREE_CODE (t) != IDENTIFIER_NODE
9611       && TREE_CODE (t) != FUNCTION_TYPE
9612       && TREE_CODE (t) != METHOD_TYPE)
9613     type = tsubst (type, args, complain, in_decl);
9614   if (type == error_mark_node)
9615     return error_mark_node;
9616
9617   switch (TREE_CODE (t))
9618     {
9619     case RECORD_TYPE:
9620     case UNION_TYPE:
9621     case ENUMERAL_TYPE:
9622       return tsubst_aggr_type (t, args, complain, in_decl,
9623                                /*entering_scope=*/0);
9624
9625     case ERROR_MARK:
9626     case IDENTIFIER_NODE:
9627     case VOID_TYPE:
9628     case REAL_TYPE:
9629     case COMPLEX_TYPE:
9630     case VECTOR_TYPE:
9631     case BOOLEAN_TYPE:
9632     case INTEGER_CST:
9633     case REAL_CST:
9634     case STRING_CST:
9635       return t;
9636
9637     case INTEGER_TYPE:
9638       if (t == integer_type_node)
9639         return t;
9640
9641       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
9642           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
9643         return t;
9644
9645       {
9646         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
9647
9648         max = tsubst_expr (omax, args, complain, in_decl,
9649                            /*integral_constant_expression_p=*/false);
9650
9651         /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
9652            needed.  */
9653         if (TREE_CODE (max) == NOP_EXPR
9654             && TREE_SIDE_EFFECTS (omax)
9655             && !TREE_TYPE (max))
9656           TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
9657
9658         max = fold_decl_constant_value (max);
9659
9660         /* If we're in a partial instantiation, preserve the magic NOP_EXPR
9661            with TREE_SIDE_EFFECTS that indicates this is not an integral
9662            constant expression.  */
9663         if (processing_template_decl
9664             && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
9665           {
9666             gcc_assert (TREE_CODE (max) == NOP_EXPR);
9667             TREE_SIDE_EFFECTS (max) = 1;
9668           }
9669
9670         if (TREE_CODE (max) != INTEGER_CST
9671             && !at_function_scope_p ()
9672             && !TREE_SIDE_EFFECTS (max)
9673             && !value_dependent_expression_p (max))
9674           {
9675             if (complain & tf_error)
9676               error ("array bound is not an integer constant");
9677             return error_mark_node;
9678           }
9679
9680         /* [temp.deduct]
9681
9682            Type deduction may fail for any of the following
9683            reasons:
9684
9685              Attempting to create an array with a size that is
9686              zero or negative.  */
9687         if (integer_zerop (max) && !(complain & tf_error))
9688           /* We must fail if performing argument deduction (as
9689              indicated by the state of complain), so that
9690              another substitution can be found.  */
9691           return error_mark_node;
9692         else if (TREE_CODE (max) == INTEGER_CST
9693                  && INT_CST_LT (max, integer_zero_node))
9694           {
9695             if (complain & tf_error)
9696               error ("creating array with negative size (%qE)", max);
9697
9698             return error_mark_node;
9699           }
9700
9701         return compute_array_index_type (NULL_TREE, max);
9702       }
9703
9704     case TEMPLATE_TYPE_PARM:
9705     case TEMPLATE_TEMPLATE_PARM:
9706     case BOUND_TEMPLATE_TEMPLATE_PARM:
9707     case TEMPLATE_PARM_INDEX:
9708       {
9709         int idx;
9710         int level;
9711         int levels;
9712         tree arg = NULL_TREE;
9713
9714         r = NULL_TREE;
9715
9716         gcc_assert (TREE_VEC_LENGTH (args) > 0);
9717         template_parm_level_and_index (t, &level, &idx); 
9718
9719         levels = TMPL_ARGS_DEPTH (args);
9720         if (level <= levels)
9721           {
9722             arg = TMPL_ARG (args, level, idx);
9723
9724             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
9725               /* See through ARGUMENT_PACK_SELECT arguments. */
9726               arg = ARGUMENT_PACK_SELECT_ARG (arg);
9727           }
9728
9729         if (arg == error_mark_node)
9730           return error_mark_node;
9731         else if (arg != NULL_TREE)
9732           {
9733             if (ARGUMENT_PACK_P (arg))
9734               /* If ARG is an argument pack, we don't actually want to
9735                  perform a substitution here, because substitutions
9736                  for argument packs are only done
9737                  element-by-element. We can get to this point when
9738                  substituting the type of a non-type template
9739                  parameter pack, when that type actually contains
9740                  template parameter packs from an outer template, e.g.,
9741
9742                  template<typename... Types> struct A {
9743                    template<Types... Values> struct B { };
9744                  };  */
9745               return t;
9746
9747             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
9748               {
9749                 int quals;
9750                 gcc_assert (TYPE_P (arg));
9751
9752                 /* cv-quals from the template are discarded when
9753                    substituting in a function or reference type.  */
9754                 if (TREE_CODE (arg) == FUNCTION_TYPE
9755                     || TREE_CODE (arg) == METHOD_TYPE
9756                     || TREE_CODE (arg) == REFERENCE_TYPE)
9757                   quals = cp_type_quals (arg);
9758                 else
9759                   quals = cp_type_quals (arg) | cp_type_quals (t);
9760                   
9761                 return cp_build_qualified_type_real
9762                   (arg, quals, complain | tf_ignore_bad_quals);
9763               }
9764             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9765               {
9766                 /* We are processing a type constructed from a
9767                    template template parameter.  */
9768                 tree argvec = tsubst (TYPE_TI_ARGS (t),
9769                                       args, complain, in_decl);
9770                 if (argvec == error_mark_node)
9771                   return error_mark_node;
9772
9773                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
9774                    are resolving nested-types in the signature of a
9775                    member function templates.  Otherwise ARG is a
9776                    TEMPLATE_DECL and is the real template to be
9777                    instantiated.  */
9778                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
9779                   arg = TYPE_NAME (arg);
9780
9781                 r = lookup_template_class (arg,
9782                                            argvec, in_decl,
9783                                            DECL_CONTEXT (arg),
9784                                             /*entering_scope=*/0,
9785                                            complain);
9786                 return cp_build_qualified_type_real
9787                   (r, TYPE_QUALS (t), complain);
9788               }
9789             else
9790               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
9791               return arg;
9792           }
9793
9794         if (level == 1)
9795           /* This can happen during the attempted tsubst'ing in
9796              unify.  This means that we don't yet have any information
9797              about the template parameter in question.  */
9798           return t;
9799
9800         /* If we get here, we must have been looking at a parm for a
9801            more deeply nested template.  Make a new version of this
9802            template parameter, but with a lower level.  */
9803         switch (TREE_CODE (t))
9804           {
9805           case TEMPLATE_TYPE_PARM:
9806           case TEMPLATE_TEMPLATE_PARM:
9807           case BOUND_TEMPLATE_TEMPLATE_PARM:
9808             if (cp_type_quals (t))
9809               {
9810                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
9811                 r = cp_build_qualified_type_real
9812                   (r, cp_type_quals (t),
9813                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
9814                                ? tf_ignore_bad_quals : 0));
9815               }
9816             else
9817               {
9818                 r = copy_type (t);
9819                 TEMPLATE_TYPE_PARM_INDEX (r)
9820                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
9821                                                 r, levels, args, complain);
9822                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
9823                 TYPE_MAIN_VARIANT (r) = r;
9824                 TYPE_POINTER_TO (r) = NULL_TREE;
9825                 TYPE_REFERENCE_TO (r) = NULL_TREE;
9826
9827                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
9828                   /* We have reduced the level of the template
9829                      template parameter, but not the levels of its
9830                      template parameters, so canonical_type_parameter
9831                      will not be able to find the canonical template
9832                      template parameter for this level. Thus, we
9833                      require structural equality checking to compare
9834                      TEMPLATE_TEMPLATE_PARMs. */
9835                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9836                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
9837                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9838                 else
9839                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
9840
9841                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9842                   {
9843                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
9844                                           complain, in_decl);
9845                     if (argvec == error_mark_node)
9846                       return error_mark_node;
9847
9848                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
9849                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
9850                   }
9851               }
9852             break;
9853
9854           case TEMPLATE_PARM_INDEX:
9855             r = reduce_template_parm_level (t, type, levels, args, complain);
9856             break;
9857
9858           default:
9859             gcc_unreachable ();
9860           }
9861
9862         return r;
9863       }
9864
9865     case TREE_LIST:
9866       {
9867         tree purpose, value, chain;
9868
9869         if (t == void_list_node)
9870           return t;
9871
9872         purpose = TREE_PURPOSE (t);
9873         if (purpose)
9874           {
9875             purpose = tsubst (purpose, args, complain, in_decl);
9876             if (purpose == error_mark_node)
9877               return error_mark_node;
9878           }
9879         value = TREE_VALUE (t);
9880         if (value)
9881           {
9882             value = tsubst (value, args, complain, in_decl);
9883             if (value == error_mark_node)
9884               return error_mark_node;
9885           }
9886         chain = TREE_CHAIN (t);
9887         if (chain && chain != void_type_node)
9888           {
9889             chain = tsubst (chain, args, complain, in_decl);
9890             if (chain == error_mark_node)
9891               return error_mark_node;
9892           }
9893         if (purpose == TREE_PURPOSE (t)
9894             && value == TREE_VALUE (t)
9895             && chain == TREE_CHAIN (t))
9896           return t;
9897         return hash_tree_cons (purpose, value, chain);
9898       }
9899
9900     case TREE_BINFO:
9901       /* We should never be tsubsting a binfo.  */
9902       gcc_unreachable ();
9903
9904     case TREE_VEC:
9905       /* A vector of template arguments.  */
9906       gcc_assert (!type);
9907       return tsubst_template_args (t, args, complain, in_decl);
9908
9909     case POINTER_TYPE:
9910     case REFERENCE_TYPE:
9911       {
9912         enum tree_code code;
9913
9914         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
9915           return t;
9916
9917         code = TREE_CODE (t);
9918
9919
9920         /* [temp.deduct]
9921
9922            Type deduction may fail for any of the following
9923            reasons:
9924
9925            -- Attempting to create a pointer to reference type.
9926            -- Attempting to create a reference to a reference type or
9927               a reference to void.
9928
9929           Core issue 106 says that creating a reference to a reference
9930           during instantiation is no longer a cause for failure. We
9931           only enforce this check in strict C++98 mode.  */
9932         if ((TREE_CODE (type) == REFERENCE_TYPE
9933              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
9934             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
9935           {
9936             static location_t last_loc;
9937
9938             /* We keep track of the last time we issued this error
9939                message to avoid spewing a ton of messages during a
9940                single bad template instantiation.  */
9941             if (complain & tf_error
9942                 && last_loc != input_location)
9943               {
9944                 if (TREE_CODE (type) == VOID_TYPE)
9945                   error ("forming reference to void");
9946                 else
9947                   error ("forming %s to reference type %qT",
9948                          (code == POINTER_TYPE) ? "pointer" : "reference",
9949                          type);
9950                 last_loc = input_location;
9951               }
9952
9953             return error_mark_node;
9954           }
9955         else if (code == POINTER_TYPE)
9956           {
9957             r = build_pointer_type (type);
9958             if (TREE_CODE (type) == METHOD_TYPE)
9959               r = build_ptrmemfunc_type (r);
9960           }
9961         else if (TREE_CODE (type) == REFERENCE_TYPE)
9962           /* In C++0x, during template argument substitution, when there is an
9963              attempt to create a reference to a reference type, reference
9964              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
9965
9966              "If a template-argument for a template-parameter T names a type
9967              that is a reference to a type A, an attempt to create the type
9968              'lvalue reference to cv T' creates the type 'lvalue reference to
9969              A,' while an attempt to create the type type rvalue reference to
9970              cv T' creates the type T"
9971           */
9972           r = cp_build_reference_type
9973               (TREE_TYPE (type),
9974                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
9975         else
9976           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
9977         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
9978
9979         if (r != error_mark_node)
9980           /* Will this ever be needed for TYPE_..._TO values?  */
9981           layout_type (r);
9982
9983         return r;
9984       }
9985     case OFFSET_TYPE:
9986       {
9987         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
9988         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
9989           {
9990             /* [temp.deduct]
9991
9992                Type deduction may fail for any of the following
9993                reasons:
9994
9995                -- Attempting to create "pointer to member of T" when T
9996                   is not a class type.  */
9997             if (complain & tf_error)
9998               error ("creating pointer to member of non-class type %qT", r);
9999             return error_mark_node;
10000           }
10001         if (TREE_CODE (type) == REFERENCE_TYPE)
10002           {
10003             if (complain & tf_error)
10004               error ("creating pointer to member reference type %qT", type);
10005             return error_mark_node;
10006           }
10007         if (TREE_CODE (type) == VOID_TYPE)
10008           {
10009             if (complain & tf_error)
10010               error ("creating pointer to member of type void");
10011             return error_mark_node;
10012           }
10013         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
10014         if (TREE_CODE (type) == FUNCTION_TYPE)
10015           {
10016             /* The type of the implicit object parameter gets its
10017                cv-qualifiers from the FUNCTION_TYPE. */
10018             tree memptr;
10019             tree method_type = build_memfn_type (type, r, cp_type_quals (type));
10020             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
10021             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
10022                                                  complain);
10023           }
10024         else
10025           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
10026                                                TYPE_QUALS (t),
10027                                                complain);
10028       }
10029     case FUNCTION_TYPE:
10030     case METHOD_TYPE:
10031       {
10032         tree fntype;
10033         tree specs;
10034         fntype = tsubst_function_type (t, args, complain, in_decl);
10035         if (fntype == error_mark_node)
10036           return error_mark_node;
10037
10038         /* Substitute the exception specification.  */
10039         specs = tsubst_exception_specification (t, args, complain,
10040                                                 in_decl);
10041         if (specs == error_mark_node)
10042           return error_mark_node;
10043         if (specs)
10044           fntype = build_exception_variant (fntype, specs);
10045         return fntype;
10046       }
10047     case ARRAY_TYPE:
10048       {
10049         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
10050         if (domain == error_mark_node)
10051           return error_mark_node;
10052
10053         /* As an optimization, we avoid regenerating the array type if
10054            it will obviously be the same as T.  */
10055         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
10056           return t;
10057
10058         /* These checks should match the ones in grokdeclarator.
10059
10060            [temp.deduct]
10061
10062            The deduction may fail for any of the following reasons:
10063
10064            -- Attempting to create an array with an element type that
10065               is void, a function type, or a reference type, or [DR337]
10066               an abstract class type.  */
10067         if (TREE_CODE (type) == VOID_TYPE
10068             || TREE_CODE (type) == FUNCTION_TYPE
10069             || TREE_CODE (type) == REFERENCE_TYPE)
10070           {
10071             if (complain & tf_error)
10072               error ("creating array of %qT", type);
10073             return error_mark_node;
10074           }
10075         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
10076           {
10077             if (complain & tf_error)
10078               error ("creating array of %qT, which is an abstract class type",
10079                      type);
10080             return error_mark_node;
10081           }
10082
10083         r = build_cplus_array_type (type, domain);
10084
10085         if (TYPE_USER_ALIGN (t))
10086           {
10087             TYPE_ALIGN (r) = TYPE_ALIGN (t);
10088             TYPE_USER_ALIGN (r) = 1;
10089           }
10090
10091         return r;
10092       }
10093
10094     case PLUS_EXPR:
10095     case MINUS_EXPR:
10096       {
10097         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
10098         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
10099
10100         if (e1 == error_mark_node || e2 == error_mark_node)
10101           return error_mark_node;
10102
10103         return fold_build2_loc (input_location,
10104                             TREE_CODE (t), TREE_TYPE (t), e1, e2);
10105       }
10106
10107     case NEGATE_EXPR:
10108     case NOP_EXPR:
10109       {
10110         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
10111         if (e == error_mark_node)
10112           return error_mark_node;
10113
10114         return fold_build1_loc (input_location, TREE_CODE (t), TREE_TYPE (t), e);
10115       }
10116
10117     case TYPENAME_TYPE:
10118       {
10119         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
10120                                      in_decl, /*entering_scope=*/1);
10121         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
10122                               complain, in_decl);
10123
10124         if (ctx == error_mark_node || f == error_mark_node)
10125           return error_mark_node;
10126
10127         if (!MAYBE_CLASS_TYPE_P (ctx))
10128           {
10129             if (complain & tf_error)
10130               error ("%qT is not a class, struct, or union type", ctx);
10131             return error_mark_node;
10132           }
10133         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
10134           {
10135             /* Normally, make_typename_type does not require that the CTX
10136                have complete type in order to allow things like:
10137
10138                  template <class T> struct S { typename S<T>::X Y; };
10139
10140                But, such constructs have already been resolved by this
10141                point, so here CTX really should have complete type, unless
10142                it's a partial instantiation.  */
10143             if (!(complain & tf_no_class_instantiations))
10144               ctx = complete_type (ctx);
10145             if (!COMPLETE_TYPE_P (ctx))
10146               {
10147                 if (complain & tf_error)
10148                   cxx_incomplete_type_error (NULL_TREE, ctx);
10149                 return error_mark_node;
10150               }
10151           }
10152
10153         f = make_typename_type (ctx, f, typename_type,
10154                                 (complain & tf_error) | tf_keep_type_decl);
10155         if (f == error_mark_node)
10156           return f;
10157         if (TREE_CODE (f) == TYPE_DECL)
10158           {
10159             complain |= tf_ignore_bad_quals;
10160             f = TREE_TYPE (f);
10161           }
10162
10163         if (TREE_CODE (f) != TYPENAME_TYPE)
10164           {
10165             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
10166               error ("%qT resolves to %qT, which is not an enumeration type",
10167                      t, f);
10168             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
10169               error ("%qT resolves to %qT, which is is not a class type",
10170                      t, f);
10171           }
10172
10173         return cp_build_qualified_type_real
10174           (f, cp_type_quals (f) | cp_type_quals (t), complain);
10175       }
10176
10177     case UNBOUND_CLASS_TEMPLATE:
10178       {
10179         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
10180                                      in_decl, /*entering_scope=*/1);
10181         tree name = TYPE_IDENTIFIER (t);
10182         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
10183
10184         if (ctx == error_mark_node || name == error_mark_node)
10185           return error_mark_node;
10186
10187         if (parm_list)
10188           parm_list = tsubst_template_parms (parm_list, args, complain);
10189         return make_unbound_class_template (ctx, name, parm_list, complain);
10190       }
10191
10192     case INDIRECT_REF:
10193     case ADDR_EXPR:
10194     case CALL_EXPR:
10195       gcc_unreachable ();
10196
10197     case ARRAY_REF:
10198       {
10199         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
10200         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
10201                                /*integral_constant_expression_p=*/false);
10202         if (e1 == error_mark_node || e2 == error_mark_node)
10203           return error_mark_node;
10204
10205         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
10206       }
10207
10208     case SCOPE_REF:
10209       {
10210         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
10211         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
10212         if (e1 == error_mark_node || e2 == error_mark_node)
10213           return error_mark_node;
10214
10215         return build_qualified_name (/*type=*/NULL_TREE,
10216                                      e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
10217       }
10218
10219     case TYPEOF_TYPE:
10220       {
10221         tree type;
10222
10223         type = finish_typeof (tsubst_expr 
10224                               (TYPEOF_TYPE_EXPR (t), args,
10225                                complain, in_decl,
10226                                /*integral_constant_expression_p=*/false));
10227         return cp_build_qualified_type_real (type,
10228                                              cp_type_quals (t)
10229                                              | cp_type_quals (type),
10230                                              complain);
10231       }
10232
10233     case DECLTYPE_TYPE:
10234       {
10235         tree type;
10236
10237         ++cp_unevaluated_operand;
10238         ++c_inhibit_evaluation_warnings;
10239
10240         type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
10241                             complain, in_decl,
10242                             /*integral_constant_expression_p=*/false);
10243
10244         --cp_unevaluated_operand;
10245         --c_inhibit_evaluation_warnings;
10246
10247         if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
10248           type = lambda_capture_field_type (type);
10249         else if (DECLTYPE_FOR_LAMBDA_RETURN (t))
10250           type = lambda_return_type (type);
10251         else
10252           type = finish_decltype_type
10253             (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
10254         return cp_build_qualified_type_real (type,
10255                                              cp_type_quals (t)
10256                                              | cp_type_quals (type),
10257                                              complain);
10258       }
10259
10260     case TYPE_ARGUMENT_PACK:
10261     case NONTYPE_ARGUMENT_PACK:
10262       {
10263         tree r = TYPE_P (t)
10264           ? cxx_make_type (TREE_CODE (t))
10265           : make_node (TREE_CODE (t));
10266         tree packed_out = 
10267           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
10268                                 args,
10269                                 complain,
10270                                 in_decl);
10271         SET_ARGUMENT_PACK_ARGS (r, packed_out);
10272
10273         /* For template nontype argument packs, also substitute into
10274            the type.  */
10275         if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
10276           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
10277
10278         return r;
10279       }
10280       break;
10281
10282     default:
10283       sorry ("use of %qs in template",
10284              tree_code_name [(int) TREE_CODE (t)]);
10285       return error_mark_node;
10286     }
10287 }
10288
10289 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
10290    type of the expression on the left-hand side of the "." or "->"
10291    operator.  */
10292
10293 static tree
10294 tsubst_baselink (tree baselink, tree object_type,
10295                  tree args, tsubst_flags_t complain, tree in_decl)
10296 {
10297     tree name;
10298     tree qualifying_scope;
10299     tree fns;
10300     tree optype;
10301     tree template_args = 0;
10302     bool template_id_p = false;
10303
10304     /* A baselink indicates a function from a base class.  Both the
10305        BASELINK_ACCESS_BINFO and the base class referenced may
10306        indicate bases of the template class, rather than the
10307        instantiated class.  In addition, lookups that were not
10308        ambiguous before may be ambiguous now.  Therefore, we perform
10309        the lookup again.  */
10310     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
10311     qualifying_scope = tsubst (qualifying_scope, args,
10312                                complain, in_decl);
10313     fns = BASELINK_FUNCTIONS (baselink);
10314     optype = BASELINK_OPTYPE (baselink);
10315     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
10316       {
10317         template_id_p = true;
10318         template_args = TREE_OPERAND (fns, 1);
10319         fns = TREE_OPERAND (fns, 0);
10320         if (template_args)
10321           template_args = tsubst_template_args (template_args, args,
10322                                                 complain, in_decl);
10323       }
10324     name = DECL_NAME (get_first_fn (fns));
10325     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
10326
10327     /* If lookup found a single function, mark it as used at this
10328        point.  (If it lookup found multiple functions the one selected
10329        later by overload resolution will be marked as used at that
10330        point.)  */
10331     if (BASELINK_P (baselink))
10332       fns = BASELINK_FUNCTIONS (baselink);
10333     if (!template_id_p && !really_overloaded_fn (fns))
10334       mark_used (OVL_CURRENT (fns));
10335
10336     /* Add back the template arguments, if present.  */
10337     if (BASELINK_P (baselink) && template_id_p)
10338       BASELINK_FUNCTIONS (baselink)
10339         = build_nt (TEMPLATE_ID_EXPR,
10340                     BASELINK_FUNCTIONS (baselink),
10341                     template_args);
10342     /* Update the conversion operator type.  */
10343     BASELINK_OPTYPE (baselink) 
10344       = tsubst (optype, args, complain, in_decl);
10345
10346     if (!object_type)
10347       object_type = current_class_type;
10348     return adjust_result_of_qualified_name_lookup (baselink,
10349                                                    qualifying_scope,
10350                                                    object_type);
10351 }
10352
10353 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
10354    true if the qualified-id will be a postfix-expression in-and-of
10355    itself; false if more of the postfix-expression follows the
10356    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
10357    of "&".  */
10358
10359 static tree
10360 tsubst_qualified_id (tree qualified_id, tree args,
10361                      tsubst_flags_t complain, tree in_decl,
10362                      bool done, bool address_p)
10363 {
10364   tree expr;
10365   tree scope;
10366   tree name;
10367   bool is_template;
10368   tree template_args;
10369
10370   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
10371
10372   /* Figure out what name to look up.  */
10373   name = TREE_OPERAND (qualified_id, 1);
10374   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
10375     {
10376       is_template = true;
10377       template_args = TREE_OPERAND (name, 1);
10378       if (template_args)
10379         template_args = tsubst_template_args (template_args, args,
10380                                               complain, in_decl);
10381       name = TREE_OPERAND (name, 0);
10382     }
10383   else
10384     {
10385       is_template = false;
10386       template_args = NULL_TREE;
10387     }
10388
10389   /* Substitute into the qualifying scope.  When there are no ARGS, we
10390      are just trying to simplify a non-dependent expression.  In that
10391      case the qualifying scope may be dependent, and, in any case,
10392      substituting will not help.  */
10393   scope = TREE_OPERAND (qualified_id, 0);
10394   if (args)
10395     {
10396       scope = tsubst (scope, args, complain, in_decl);
10397       expr = tsubst_copy (name, args, complain, in_decl);
10398     }
10399   else
10400     expr = name;
10401
10402   if (dependent_type_p (scope))
10403     {
10404       tree type = NULL_TREE;
10405       if (DECL_P (expr) && !dependent_scope_p (scope))
10406         type = TREE_TYPE (expr);
10407       return build_qualified_name (type, scope, expr,
10408                                    QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
10409     }
10410
10411   if (!BASELINK_P (name) && !DECL_P (expr))
10412     {
10413       if (TREE_CODE (expr) == BIT_NOT_EXPR)
10414         {
10415           /* A BIT_NOT_EXPR is used to represent a destructor.  */
10416           if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
10417             {
10418               error ("qualifying type %qT does not match destructor name ~%qT",
10419                      scope, TREE_OPERAND (expr, 0));
10420               expr = error_mark_node;
10421             }
10422           else
10423             expr = lookup_qualified_name (scope, complete_dtor_identifier,
10424                                           /*is_type_p=*/0, false);
10425         }
10426       else
10427         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
10428       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
10429                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
10430         {
10431           if (complain & tf_error)
10432             {
10433               error ("dependent-name %qE is parsed as a non-type, but "
10434                      "instantiation yields a type", qualified_id);
10435               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
10436             }
10437           return error_mark_node;
10438         }
10439     }
10440
10441   if (DECL_P (expr))
10442     {
10443       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
10444                                            scope);
10445       /* Remember that there was a reference to this entity.  */
10446       mark_used (expr);
10447     }
10448
10449   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
10450     {
10451       if (complain & tf_error)
10452         qualified_name_lookup_error (scope,
10453                                      TREE_OPERAND (qualified_id, 1),
10454                                      expr, input_location);
10455       return error_mark_node;
10456     }
10457
10458   if (is_template)
10459     expr = lookup_template_function (expr, template_args);
10460
10461   if (expr == error_mark_node && complain & tf_error)
10462     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
10463                                  expr, input_location);
10464   else if (TYPE_P (scope))
10465     {
10466       expr = (adjust_result_of_qualified_name_lookup
10467               (expr, scope, current_class_type));
10468       expr = (finish_qualified_id_expr
10469               (scope, expr, done, address_p,
10470                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
10471                /*template_arg_p=*/false));
10472     }
10473
10474   /* Expressions do not generally have reference type.  */
10475   if (TREE_CODE (expr) != SCOPE_REF
10476       /* However, if we're about to form a pointer-to-member, we just
10477          want the referenced member referenced.  */
10478       && TREE_CODE (expr) != OFFSET_REF)
10479     expr = convert_from_reference (expr);
10480
10481   return expr;
10482 }
10483
10484 /* Like tsubst, but deals with expressions.  This function just replaces
10485    template parms; to finish processing the resultant expression, use
10486    tsubst_expr.  */
10487
10488 static tree
10489 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10490 {
10491   enum tree_code code;
10492   tree r;
10493
10494   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
10495     return t;
10496
10497   code = TREE_CODE (t);
10498
10499   switch (code)
10500     {
10501     case PARM_DECL:
10502       r = retrieve_local_specialization (t);
10503
10504       if (r == NULL)
10505         {
10506           tree c;
10507           /* This can happen for a parameter name used later in a function
10508              declaration (such as in a late-specified return type).  Just
10509              make a dummy decl, since it's only used for its type.  */
10510           gcc_assert (cp_unevaluated_operand != 0);
10511           /* We copy T because want to tsubst the PARM_DECL only,
10512              not the following PARM_DECLs that are chained to T.  */
10513           c = copy_node (t);
10514           r = tsubst_decl (c, args, complain);
10515           /* Give it the template pattern as its context; its true context
10516              hasn't been instantiated yet and this is good enough for
10517              mangling.  */
10518           DECL_CONTEXT (r) = DECL_CONTEXT (t);
10519         }
10520       
10521       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
10522         r = ARGUMENT_PACK_SELECT_ARG (r);
10523       mark_used (r);
10524       return r;
10525
10526     case CONST_DECL:
10527       {
10528         tree enum_type;
10529         tree v;
10530
10531         if (DECL_TEMPLATE_PARM_P (t))
10532           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
10533         /* There is no need to substitute into namespace-scope
10534            enumerators.  */
10535         if (DECL_NAMESPACE_SCOPE_P (t))
10536           return t;
10537         /* If ARGS is NULL, then T is known to be non-dependent.  */
10538         if (args == NULL_TREE)
10539           return integral_constant_value (t);
10540
10541         /* Unfortunately, we cannot just call lookup_name here.
10542            Consider:
10543
10544              template <int I> int f() {
10545              enum E { a = I };
10546              struct S { void g() { E e = a; } };
10547              };
10548
10549            When we instantiate f<7>::S::g(), say, lookup_name is not
10550            clever enough to find f<7>::a.  */
10551         enum_type
10552           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
10553                               /*entering_scope=*/0);
10554
10555         for (v = TYPE_VALUES (enum_type);
10556              v != NULL_TREE;
10557              v = TREE_CHAIN (v))
10558           if (TREE_PURPOSE (v) == DECL_NAME (t))
10559             return TREE_VALUE (v);
10560
10561           /* We didn't find the name.  That should never happen; if
10562              name-lookup found it during preliminary parsing, we
10563              should find it again here during instantiation.  */
10564         gcc_unreachable ();
10565       }
10566       return t;
10567
10568     case FIELD_DECL:
10569       if (DECL_CONTEXT (t))
10570         {
10571           tree ctx;
10572
10573           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
10574                                   /*entering_scope=*/1);
10575           if (ctx != DECL_CONTEXT (t))
10576             {
10577               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
10578               if (!r)
10579                 {
10580                   if (complain & tf_error)
10581                     error ("using invalid field %qD", t);
10582                   return error_mark_node;
10583                 }
10584               return r;
10585             }
10586         }
10587
10588       return t;
10589
10590     case VAR_DECL:
10591     case FUNCTION_DECL:
10592       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
10593           || local_variable_p (t))
10594         t = tsubst (t, args, complain, in_decl);
10595       mark_used (t);
10596       return t;
10597
10598     case BASELINK:
10599       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
10600
10601     case TEMPLATE_DECL:
10602       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
10603         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
10604                        args, complain, in_decl);
10605       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
10606         return tsubst (t, args, complain, in_decl);
10607       else if (DECL_CLASS_SCOPE_P (t)
10608                && uses_template_parms (DECL_CONTEXT (t)))
10609         {
10610           /* Template template argument like the following example need
10611              special treatment:
10612
10613                template <template <class> class TT> struct C {};
10614                template <class T> struct D {
10615                  template <class U> struct E {};
10616                  C<E> c;                                // #1
10617                };
10618                D<int> d;                                // #2
10619
10620              We are processing the template argument `E' in #1 for
10621              the template instantiation #2.  Originally, `E' is a
10622              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
10623              have to substitute this with one having context `D<int>'.  */
10624
10625           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
10626           return lookup_field (context, DECL_NAME(t), 0, false);
10627         }
10628       else
10629         /* Ordinary template template argument.  */
10630         return t;
10631
10632     case CAST_EXPR:
10633     case REINTERPRET_CAST_EXPR:
10634     case CONST_CAST_EXPR:
10635     case STATIC_CAST_EXPR:
10636     case DYNAMIC_CAST_EXPR:
10637     case NOP_EXPR:
10638       return build1
10639         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
10640          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
10641
10642     case SIZEOF_EXPR:
10643       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
10644         {
10645           /* We only want to compute the number of arguments.  */
10646           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
10647                                                 complain, in_decl);
10648           int len = 0;
10649
10650           if (TREE_CODE (expanded) == TREE_VEC)
10651             len = TREE_VEC_LENGTH (expanded);
10652
10653           if (expanded == error_mark_node)
10654             return error_mark_node;
10655           else if (PACK_EXPANSION_P (expanded)
10656                    || (TREE_CODE (expanded) == TREE_VEC
10657                        && len > 0
10658                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
10659             {
10660               if (TREE_CODE (expanded) == TREE_VEC)
10661                 expanded = TREE_VEC_ELT (expanded, len - 1);
10662
10663               if (TYPE_P (expanded))
10664                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
10665                                                    complain & tf_error);
10666               else
10667                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
10668                                                    complain & tf_error);
10669             }
10670           else
10671             return build_int_cst (size_type_node, len);
10672         }
10673       /* Fall through */
10674
10675     case INDIRECT_REF:
10676     case NEGATE_EXPR:
10677     case TRUTH_NOT_EXPR:
10678     case BIT_NOT_EXPR:
10679     case ADDR_EXPR:
10680     case UNARY_PLUS_EXPR:      /* Unary + */
10681     case ALIGNOF_EXPR:
10682     case ARROW_EXPR:
10683     case THROW_EXPR:
10684     case TYPEID_EXPR:
10685     case REALPART_EXPR:
10686     case IMAGPART_EXPR:
10687       return build1
10688         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
10689          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
10690
10691     case COMPONENT_REF:
10692       {
10693         tree object;
10694         tree name;
10695
10696         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
10697         name = TREE_OPERAND (t, 1);
10698         if (TREE_CODE (name) == BIT_NOT_EXPR)
10699           {
10700             name = tsubst_copy (TREE_OPERAND (name, 0), args,
10701                                 complain, in_decl);
10702             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
10703           }
10704         else if (TREE_CODE (name) == SCOPE_REF
10705                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
10706           {
10707             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
10708                                      complain, in_decl);
10709             name = TREE_OPERAND (name, 1);
10710             name = tsubst_copy (TREE_OPERAND (name, 0), args,
10711                                 complain, in_decl);
10712             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
10713             name = build_qualified_name (/*type=*/NULL_TREE,
10714                                          base, name,
10715                                          /*template_p=*/false);
10716           }
10717         else if (TREE_CODE (name) == BASELINK)
10718           name = tsubst_baselink (name,
10719                                   non_reference (TREE_TYPE (object)),
10720                                   args, complain,
10721                                   in_decl);
10722         else
10723           name = tsubst_copy (name, args, complain, in_decl);
10724         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
10725       }
10726
10727     case PLUS_EXPR:
10728     case MINUS_EXPR:
10729     case MULT_EXPR:
10730     case TRUNC_DIV_EXPR:
10731     case CEIL_DIV_EXPR:
10732     case FLOOR_DIV_EXPR:
10733     case ROUND_DIV_EXPR:
10734     case EXACT_DIV_EXPR:
10735     case BIT_AND_EXPR:
10736     case BIT_IOR_EXPR:
10737     case BIT_XOR_EXPR:
10738     case TRUNC_MOD_EXPR:
10739     case FLOOR_MOD_EXPR:
10740     case TRUTH_ANDIF_EXPR:
10741     case TRUTH_ORIF_EXPR:
10742     case TRUTH_AND_EXPR:
10743     case TRUTH_OR_EXPR:
10744     case RSHIFT_EXPR:
10745     case LSHIFT_EXPR:
10746     case RROTATE_EXPR:
10747     case LROTATE_EXPR:
10748     case EQ_EXPR:
10749     case NE_EXPR:
10750     case MAX_EXPR:
10751     case MIN_EXPR:
10752     case LE_EXPR:
10753     case GE_EXPR:
10754     case LT_EXPR:
10755     case GT_EXPR:
10756     case COMPOUND_EXPR:
10757     case DOTSTAR_EXPR:
10758     case MEMBER_REF:
10759     case PREDECREMENT_EXPR:
10760     case PREINCREMENT_EXPR:
10761     case POSTDECREMENT_EXPR:
10762     case POSTINCREMENT_EXPR:
10763       return build_nt
10764         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10765          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
10766
10767     case SCOPE_REF:
10768       return build_qualified_name (/*type=*/NULL_TREE,
10769                                    tsubst_copy (TREE_OPERAND (t, 0),
10770                                                 args, complain, in_decl),
10771                                    tsubst_copy (TREE_OPERAND (t, 1),
10772                                                 args, complain, in_decl),
10773                                    QUALIFIED_NAME_IS_TEMPLATE (t));
10774
10775     case ARRAY_REF:
10776       return build_nt
10777         (ARRAY_REF,
10778          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10779          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10780          NULL_TREE, NULL_TREE);
10781
10782     case CALL_EXPR:
10783       {
10784         int n = VL_EXP_OPERAND_LENGTH (t);
10785         tree result = build_vl_exp (CALL_EXPR, n);
10786         int i;
10787         for (i = 0; i < n; i++)
10788           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
10789                                              complain, in_decl);
10790         return result;
10791       }
10792
10793     case COND_EXPR:
10794     case MODOP_EXPR:
10795     case PSEUDO_DTOR_EXPR:
10796       {
10797         r = build_nt
10798           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10799            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10800            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
10801         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10802         return r;
10803       }
10804
10805     case NEW_EXPR:
10806       {
10807         r = build_nt
10808         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10809          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10810          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
10811         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
10812         return r;
10813       }
10814
10815     case DELETE_EXPR:
10816       {
10817         r = build_nt
10818         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10819          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
10820         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
10821         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
10822         return r;
10823       }
10824
10825     case TEMPLATE_ID_EXPR:
10826       {
10827         /* Substituted template arguments */
10828         tree fn = TREE_OPERAND (t, 0);
10829         tree targs = TREE_OPERAND (t, 1);
10830
10831         fn = tsubst_copy (fn, args, complain, in_decl);
10832         if (targs)
10833           targs = tsubst_template_args (targs, args, complain, in_decl);
10834
10835         return lookup_template_function (fn, targs);
10836       }
10837
10838     case TREE_LIST:
10839       {
10840         tree purpose, value, chain;
10841
10842         if (t == void_list_node)
10843           return t;
10844
10845         purpose = TREE_PURPOSE (t);
10846         if (purpose)
10847           purpose = tsubst_copy (purpose, args, complain, in_decl);
10848         value = TREE_VALUE (t);
10849         if (value)
10850           value = tsubst_copy (value, args, complain, in_decl);
10851         chain = TREE_CHAIN (t);
10852         if (chain && chain != void_type_node)
10853           chain = tsubst_copy (chain, args, complain, in_decl);
10854         if (purpose == TREE_PURPOSE (t)
10855             && value == TREE_VALUE (t)
10856             && chain == TREE_CHAIN (t))
10857           return t;
10858         return tree_cons (purpose, value, chain);
10859       }
10860
10861     case RECORD_TYPE:
10862     case UNION_TYPE:
10863     case ENUMERAL_TYPE:
10864     case INTEGER_TYPE:
10865     case TEMPLATE_TYPE_PARM:
10866     case TEMPLATE_TEMPLATE_PARM:
10867     case BOUND_TEMPLATE_TEMPLATE_PARM:
10868     case TEMPLATE_PARM_INDEX:
10869     case POINTER_TYPE:
10870     case REFERENCE_TYPE:
10871     case OFFSET_TYPE:
10872     case FUNCTION_TYPE:
10873     case METHOD_TYPE:
10874     case ARRAY_TYPE:
10875     case TYPENAME_TYPE:
10876     case UNBOUND_CLASS_TEMPLATE:
10877     case TYPEOF_TYPE:
10878     case DECLTYPE_TYPE:
10879     case TYPE_DECL:
10880       return tsubst (t, args, complain, in_decl);
10881
10882     case IDENTIFIER_NODE:
10883       if (IDENTIFIER_TYPENAME_P (t))
10884         {
10885           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10886           return mangle_conv_op_name_for_type (new_type);
10887         }
10888       else
10889         return t;
10890
10891     case CONSTRUCTOR:
10892       /* This is handled by tsubst_copy_and_build.  */
10893       gcc_unreachable ();
10894
10895     case VA_ARG_EXPR:
10896       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
10897                                           in_decl),
10898                              tsubst (TREE_TYPE (t), args, complain, in_decl));
10899
10900     case CLEANUP_POINT_EXPR:
10901       /* We shouldn't have built any of these during initial template
10902          generation.  Instead, they should be built during instantiation
10903          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
10904       gcc_unreachable ();
10905
10906     case OFFSET_REF:
10907       mark_used (TREE_OPERAND (t, 1));
10908       return t;
10909
10910     case EXPR_PACK_EXPANSION:
10911       error ("invalid use of pack expansion expression");
10912       return error_mark_node;
10913
10914     case NONTYPE_ARGUMENT_PACK:
10915       error ("use %<...%> to expand argument pack");
10916       return error_mark_node;
10917
10918     default:
10919       return t;
10920     }
10921 }
10922
10923 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
10924
10925 static tree
10926 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
10927                     tree in_decl)
10928 {
10929   tree new_clauses = NULL, nc, oc;
10930
10931   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
10932     {
10933       nc = copy_node (oc);
10934       OMP_CLAUSE_CHAIN (nc) = new_clauses;
10935       new_clauses = nc;
10936
10937       switch (OMP_CLAUSE_CODE (nc))
10938         {
10939         case OMP_CLAUSE_LASTPRIVATE:
10940           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
10941             {
10942               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
10943               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
10944                            in_decl, /*integral_constant_expression_p=*/false);
10945               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
10946                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
10947             }
10948           /* FALLTHRU */
10949         case OMP_CLAUSE_PRIVATE:
10950         case OMP_CLAUSE_SHARED:
10951         case OMP_CLAUSE_FIRSTPRIVATE:
10952         case OMP_CLAUSE_REDUCTION:
10953         case OMP_CLAUSE_COPYIN:
10954         case OMP_CLAUSE_COPYPRIVATE:
10955         case OMP_CLAUSE_IF:
10956         case OMP_CLAUSE_NUM_THREADS:
10957         case OMP_CLAUSE_SCHEDULE:
10958         case OMP_CLAUSE_COLLAPSE:
10959           OMP_CLAUSE_OPERAND (nc, 0)
10960             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
10961                            in_decl, /*integral_constant_expression_p=*/false);
10962           break;
10963         case OMP_CLAUSE_NOWAIT:
10964         case OMP_CLAUSE_ORDERED:
10965         case OMP_CLAUSE_DEFAULT:
10966         case OMP_CLAUSE_UNTIED:
10967           break;
10968         default:
10969           gcc_unreachable ();
10970         }
10971     }
10972
10973   return finish_omp_clauses (nreverse (new_clauses));
10974 }
10975
10976 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
10977
10978 static tree
10979 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
10980                           tree in_decl)
10981 {
10982 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
10983
10984   tree purpose, value, chain;
10985
10986   if (t == NULL)
10987     return t;
10988
10989   if (TREE_CODE (t) != TREE_LIST)
10990     return tsubst_copy_and_build (t, args, complain, in_decl,
10991                                   /*function_p=*/false,
10992                                   /*integral_constant_expression_p=*/false);
10993
10994   if (t == void_list_node)
10995     return t;
10996
10997   purpose = TREE_PURPOSE (t);
10998   if (purpose)
10999     purpose = RECUR (purpose);
11000   value = TREE_VALUE (t);
11001   if (value && TREE_CODE (value) != LABEL_DECL)
11002     value = RECUR (value);
11003   chain = TREE_CHAIN (t);
11004   if (chain && chain != void_type_node)
11005     chain = RECUR (chain);
11006   return tree_cons (purpose, value, chain);
11007 #undef RECUR
11008 }
11009
11010 /* Substitute one OMP_FOR iterator.  */
11011
11012 static void
11013 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
11014                          tree condv, tree incrv, tree *clauses,
11015                          tree args, tsubst_flags_t complain, tree in_decl,
11016                          bool integral_constant_expression_p)
11017 {
11018 #define RECUR(NODE)                             \
11019   tsubst_expr ((NODE), args, complain, in_decl, \
11020                integral_constant_expression_p)
11021   tree decl, init, cond, incr, auto_node;
11022
11023   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
11024   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
11025   decl = RECUR (TREE_OPERAND (init, 0));
11026   init = TREE_OPERAND (init, 1);
11027   auto_node = type_uses_auto (TREE_TYPE (decl));
11028   if (auto_node && init)
11029     {
11030       tree init_expr = init;
11031       if (TREE_CODE (init_expr) == DECL_EXPR)
11032         init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
11033       init_expr = RECUR (init_expr);
11034       TREE_TYPE (decl)
11035         = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
11036     }
11037   gcc_assert (!type_dependent_expression_p (decl));
11038
11039   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
11040     {
11041       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
11042       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
11043       if (TREE_CODE (incr) == MODIFY_EXPR)
11044         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
11045                                     RECUR (TREE_OPERAND (incr, 1)),
11046                                     complain);
11047       else
11048         incr = RECUR (incr);
11049       TREE_VEC_ELT (declv, i) = decl;
11050       TREE_VEC_ELT (initv, i) = init;
11051       TREE_VEC_ELT (condv, i) = cond;
11052       TREE_VEC_ELT (incrv, i) = incr;
11053       return;
11054     }
11055
11056   if (init && TREE_CODE (init) != DECL_EXPR)
11057     {
11058       tree c;
11059       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
11060         {
11061           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
11062                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
11063               && OMP_CLAUSE_DECL (c) == decl)
11064             break;
11065           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
11066                    && OMP_CLAUSE_DECL (c) == decl)
11067             error ("iteration variable %qD should not be firstprivate", decl);
11068           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
11069                    && OMP_CLAUSE_DECL (c) == decl)
11070             error ("iteration variable %qD should not be reduction", decl);
11071         }
11072       if (c == NULL)
11073         {
11074           c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
11075           OMP_CLAUSE_DECL (c) = decl;
11076           c = finish_omp_clauses (c);
11077           if (c)
11078             {
11079               OMP_CLAUSE_CHAIN (c) = *clauses;
11080               *clauses = c;
11081             }
11082         }
11083     }
11084   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
11085   if (COMPARISON_CLASS_P (cond))
11086     cond = build2 (TREE_CODE (cond), boolean_type_node,
11087                    RECUR (TREE_OPERAND (cond, 0)),
11088                    RECUR (TREE_OPERAND (cond, 1)));
11089   else
11090     cond = RECUR (cond);
11091   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
11092   switch (TREE_CODE (incr))
11093     {
11094     case PREINCREMENT_EXPR:
11095     case PREDECREMENT_EXPR:
11096     case POSTINCREMENT_EXPR:
11097     case POSTDECREMENT_EXPR:
11098       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
11099                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
11100       break;
11101     case MODIFY_EXPR:
11102       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
11103           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
11104         {
11105           tree rhs = TREE_OPERAND (incr, 1);
11106           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
11107                          RECUR (TREE_OPERAND (incr, 0)),
11108                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
11109                                  RECUR (TREE_OPERAND (rhs, 0)),
11110                                  RECUR (TREE_OPERAND (rhs, 1))));
11111         }
11112       else
11113         incr = RECUR (incr);
11114       break;
11115     case MODOP_EXPR:
11116       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
11117           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
11118         {
11119           tree lhs = RECUR (TREE_OPERAND (incr, 0));
11120           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
11121                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
11122                                  TREE_TYPE (decl), lhs,
11123                                  RECUR (TREE_OPERAND (incr, 2))));
11124         }
11125       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
11126                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
11127                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
11128         {
11129           tree rhs = TREE_OPERAND (incr, 2);
11130           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
11131                          RECUR (TREE_OPERAND (incr, 0)),
11132                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
11133                                  RECUR (TREE_OPERAND (rhs, 0)),
11134                                  RECUR (TREE_OPERAND (rhs, 1))));
11135         }
11136       else
11137         incr = RECUR (incr);
11138       break;
11139     default:
11140       incr = RECUR (incr);
11141       break;
11142     }
11143
11144   TREE_VEC_ELT (declv, i) = decl;
11145   TREE_VEC_ELT (initv, i) = init;
11146   TREE_VEC_ELT (condv, i) = cond;
11147   TREE_VEC_ELT (incrv, i) = incr;
11148 #undef RECUR
11149 }
11150
11151 /* Like tsubst_copy for expressions, etc. but also does semantic
11152    processing.  */
11153
11154 static tree
11155 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
11156              bool integral_constant_expression_p)
11157 {
11158 #define RECUR(NODE)                             \
11159   tsubst_expr ((NODE), args, complain, in_decl, \
11160                integral_constant_expression_p)
11161
11162   tree stmt, tmp;
11163
11164   if (t == NULL_TREE || t == error_mark_node)
11165     return t;
11166
11167   if (EXPR_HAS_LOCATION (t))
11168     input_location = EXPR_LOCATION (t);
11169   if (STATEMENT_CODE_P (TREE_CODE (t)))
11170     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
11171
11172   switch (TREE_CODE (t))
11173     {
11174     case STATEMENT_LIST:
11175       {
11176         tree_stmt_iterator i;
11177         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
11178           RECUR (tsi_stmt (i));
11179         break;
11180       }
11181
11182     case CTOR_INITIALIZER:
11183       finish_mem_initializers (tsubst_initializer_list
11184                                (TREE_OPERAND (t, 0), args));
11185       break;
11186
11187     case RETURN_EXPR:
11188       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
11189       break;
11190
11191     case EXPR_STMT:
11192       tmp = RECUR (EXPR_STMT_EXPR (t));
11193       if (EXPR_STMT_STMT_EXPR_RESULT (t))
11194         finish_stmt_expr_expr (tmp, cur_stmt_expr);
11195       else
11196         finish_expr_stmt (tmp);
11197       break;
11198
11199     case USING_STMT:
11200       do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
11201       break;
11202
11203     case DECL_EXPR:
11204       {
11205         tree decl;
11206         tree init;
11207
11208         decl = DECL_EXPR_DECL (t);
11209         if (TREE_CODE (decl) == LABEL_DECL)
11210           finish_label_decl (DECL_NAME (decl));
11211         else if (TREE_CODE (decl) == USING_DECL)
11212           {
11213             tree scope = USING_DECL_SCOPE (decl);
11214             tree name = DECL_NAME (decl);
11215             tree decl;
11216
11217             scope = RECUR (scope);
11218             decl = lookup_qualified_name (scope, name,
11219                                           /*is_type_p=*/false,
11220                                           /*complain=*/false);
11221             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
11222               qualified_name_lookup_error (scope, name, decl, input_location);
11223             else
11224               do_local_using_decl (decl, scope, name);
11225           }
11226         else
11227           {
11228             init = DECL_INITIAL (decl);
11229             decl = tsubst (decl, args, complain, in_decl);
11230             if (decl != error_mark_node)
11231               {
11232                 /* By marking the declaration as instantiated, we avoid
11233                    trying to instantiate it.  Since instantiate_decl can't
11234                    handle local variables, and since we've already done
11235                    all that needs to be done, that's the right thing to
11236                    do.  */
11237                 if (TREE_CODE (decl) == VAR_DECL)
11238                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
11239                 if (TREE_CODE (decl) == VAR_DECL
11240                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
11241                   /* Anonymous aggregates are a special case.  */
11242                   finish_anon_union (decl);
11243                 else
11244                   {
11245                     maybe_push_decl (decl);
11246                     if (TREE_CODE (decl) == VAR_DECL
11247                         && DECL_PRETTY_FUNCTION_P (decl))
11248                       {
11249                         /* For __PRETTY_FUNCTION__ we have to adjust the
11250                            initializer.  */
11251                         const char *const name
11252                           = cxx_printable_name (current_function_decl, 2);
11253                         init = cp_fname_init (name, &TREE_TYPE (decl));
11254                       }
11255                     else
11256                       {
11257                         tree t = RECUR (init);
11258
11259                         if (init && !t)
11260                           /* If we had an initializer but it
11261                              instantiated to nothing,
11262                              value-initialize the object.  This will
11263                              only occur when the initializer was a
11264                              pack expansion where the parameter packs
11265                              used in that expansion were of length
11266                              zero.  */
11267                           init = build_value_init (TREE_TYPE (decl));
11268                         else
11269                           init = t;
11270                       }
11271
11272                     cp_finish_decl (decl, init, false, NULL_TREE, 0);
11273                   }
11274               }
11275           }
11276
11277         /* A DECL_EXPR can also be used as an expression, in the condition
11278            clause of an if/for/while construct.  */
11279         return decl;
11280       }
11281
11282     case FOR_STMT:
11283       stmt = begin_for_stmt ();
11284                           RECUR (FOR_INIT_STMT (t));
11285       finish_for_init_stmt (stmt);
11286       tmp = RECUR (FOR_COND (t));
11287       finish_for_cond (tmp, stmt);
11288       tmp = RECUR (FOR_EXPR (t));
11289       finish_for_expr (tmp, stmt);
11290       RECUR (FOR_BODY (t));
11291       finish_for_stmt (stmt);
11292       break;
11293
11294     case WHILE_STMT:
11295       stmt = begin_while_stmt ();
11296       tmp = RECUR (WHILE_COND (t));
11297       finish_while_stmt_cond (tmp, stmt);
11298       RECUR (WHILE_BODY (t));
11299       finish_while_stmt (stmt);
11300       break;
11301
11302     case DO_STMT:
11303       stmt = begin_do_stmt ();
11304       RECUR (DO_BODY (t));
11305       finish_do_body (stmt);
11306       tmp = RECUR (DO_COND (t));
11307       finish_do_stmt (tmp, stmt);
11308       break;
11309
11310     case IF_STMT:
11311       stmt = begin_if_stmt ();
11312       tmp = RECUR (IF_COND (t));
11313       finish_if_stmt_cond (tmp, stmt);
11314       RECUR (THEN_CLAUSE (t));
11315       finish_then_clause (stmt);
11316
11317       if (ELSE_CLAUSE (t))
11318         {
11319           begin_else_clause (stmt);
11320           RECUR (ELSE_CLAUSE (t));
11321           finish_else_clause (stmt);
11322         }
11323
11324       finish_if_stmt (stmt);
11325       break;
11326
11327     case BIND_EXPR:
11328       if (BIND_EXPR_BODY_BLOCK (t))
11329         stmt = begin_function_body ();
11330       else
11331         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
11332                                     ? BCS_TRY_BLOCK : 0);
11333
11334       RECUR (BIND_EXPR_BODY (t));
11335
11336       if (BIND_EXPR_BODY_BLOCK (t))
11337         finish_function_body (stmt);
11338       else
11339         finish_compound_stmt (stmt);
11340       break;
11341
11342     case BREAK_STMT:
11343       finish_break_stmt ();
11344       break;
11345
11346     case CONTINUE_STMT:
11347       finish_continue_stmt ();
11348       break;
11349
11350     case SWITCH_STMT:
11351       stmt = begin_switch_stmt ();
11352       tmp = RECUR (SWITCH_STMT_COND (t));
11353       finish_switch_cond (tmp, stmt);
11354       RECUR (SWITCH_STMT_BODY (t));
11355       finish_switch_stmt (stmt);
11356       break;
11357
11358     case CASE_LABEL_EXPR:
11359       finish_case_label (EXPR_LOCATION (t),
11360                          RECUR (CASE_LOW (t)),
11361                          RECUR (CASE_HIGH (t)));
11362       break;
11363
11364     case LABEL_EXPR:
11365       {
11366         tree decl = LABEL_EXPR_LABEL (t);
11367         tree label;
11368
11369         label = finish_label_stmt (DECL_NAME (decl));
11370         if (DECL_ATTRIBUTES (decl) != NULL_TREE)
11371           cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
11372       }
11373       break;
11374
11375     case GOTO_EXPR:
11376       tmp = GOTO_DESTINATION (t);
11377       if (TREE_CODE (tmp) != LABEL_DECL)
11378         /* Computed goto's must be tsubst'd into.  On the other hand,
11379            non-computed gotos must not be; the identifier in question
11380            will have no binding.  */
11381         tmp = RECUR (tmp);
11382       else
11383         tmp = DECL_NAME (tmp);
11384       finish_goto_stmt (tmp);
11385       break;
11386
11387     case ASM_EXPR:
11388       tmp = finish_asm_stmt
11389         (ASM_VOLATILE_P (t),
11390          RECUR (ASM_STRING (t)),
11391          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
11392          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
11393          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
11394          tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
11395       {
11396         tree asm_expr = tmp;
11397         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
11398           asm_expr = TREE_OPERAND (asm_expr, 0);
11399         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
11400       }
11401       break;
11402
11403     case TRY_BLOCK:
11404       if (CLEANUP_P (t))
11405         {
11406           stmt = begin_try_block ();
11407           RECUR (TRY_STMTS (t));
11408           finish_cleanup_try_block (stmt);
11409           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
11410         }
11411       else
11412         {
11413           tree compound_stmt = NULL_TREE;
11414
11415           if (FN_TRY_BLOCK_P (t))
11416             stmt = begin_function_try_block (&compound_stmt);
11417           else
11418             stmt = begin_try_block ();
11419
11420           RECUR (TRY_STMTS (t));
11421
11422           if (FN_TRY_BLOCK_P (t))
11423             finish_function_try_block (stmt);
11424           else
11425             finish_try_block (stmt);
11426
11427           RECUR (TRY_HANDLERS (t));
11428           if (FN_TRY_BLOCK_P (t))
11429             finish_function_handler_sequence (stmt, compound_stmt);
11430           else
11431             finish_handler_sequence (stmt);
11432         }
11433       break;
11434
11435     case HANDLER:
11436       {
11437         tree decl = HANDLER_PARMS (t);
11438
11439         if (decl)
11440           {
11441             decl = tsubst (decl, args, complain, in_decl);
11442             /* Prevent instantiate_decl from trying to instantiate
11443                this variable.  We've already done all that needs to be
11444                done.  */
11445             if (decl != error_mark_node)
11446               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
11447           }
11448         stmt = begin_handler ();
11449         finish_handler_parms (decl, stmt);
11450         RECUR (HANDLER_BODY (t));
11451         finish_handler (stmt);
11452       }
11453       break;
11454
11455     case TAG_DEFN:
11456       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
11457       break;
11458
11459     case STATIC_ASSERT:
11460       {
11461         tree condition = 
11462           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
11463                        args,
11464                        complain, in_decl,
11465                        /*integral_constant_expression_p=*/true);
11466         finish_static_assert (condition,
11467                               STATIC_ASSERT_MESSAGE (t),
11468                               STATIC_ASSERT_SOURCE_LOCATION (t),
11469                               /*member_p=*/false);
11470       }
11471       break;
11472
11473     case OMP_PARALLEL:
11474       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
11475                                 args, complain, in_decl);
11476       stmt = begin_omp_parallel ();
11477       RECUR (OMP_PARALLEL_BODY (t));
11478       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
11479         = OMP_PARALLEL_COMBINED (t);
11480       break;
11481
11482     case OMP_TASK:
11483       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
11484                                 args, complain, in_decl);
11485       stmt = begin_omp_task ();
11486       RECUR (OMP_TASK_BODY (t));
11487       finish_omp_task (tmp, stmt);
11488       break;
11489
11490     case OMP_FOR:
11491       {
11492         tree clauses, body, pre_body;
11493         tree declv, initv, condv, incrv;
11494         int i;
11495
11496         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
11497                                       args, complain, in_decl);
11498         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
11499         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
11500         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
11501         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
11502
11503         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
11504           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
11505                                    &clauses, args, complain, in_decl,
11506                                    integral_constant_expression_p);
11507
11508         stmt = begin_omp_structured_block ();
11509
11510         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
11511           if (TREE_VEC_ELT (initv, i) == NULL
11512               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
11513             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
11514           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
11515             {
11516               tree init = RECUR (TREE_VEC_ELT (initv, i));
11517               gcc_assert (init == TREE_VEC_ELT (declv, i));
11518               TREE_VEC_ELT (initv, i) = NULL_TREE;
11519             }
11520           else
11521             {
11522               tree decl_expr = TREE_VEC_ELT (initv, i);
11523               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
11524               gcc_assert (init != NULL);
11525               TREE_VEC_ELT (initv, i) = RECUR (init);
11526               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
11527               RECUR (decl_expr);
11528               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
11529             }
11530
11531         pre_body = push_stmt_list ();
11532         RECUR (OMP_FOR_PRE_BODY (t));
11533         pre_body = pop_stmt_list (pre_body);
11534
11535         body = push_stmt_list ();
11536         RECUR (OMP_FOR_BODY (t));
11537         body = pop_stmt_list (body);
11538
11539         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
11540                             body, pre_body, clauses);
11541
11542         add_stmt (finish_omp_structured_block (stmt));
11543       }
11544       break;
11545
11546     case OMP_SECTIONS:
11547     case OMP_SINGLE:
11548       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
11549       stmt = push_stmt_list ();
11550       RECUR (OMP_BODY (t));
11551       stmt = pop_stmt_list (stmt);
11552
11553       t = copy_node (t);
11554       OMP_BODY (t) = stmt;
11555       OMP_CLAUSES (t) = tmp;
11556       add_stmt (t);
11557       break;
11558
11559     case OMP_SECTION:
11560     case OMP_CRITICAL:
11561     case OMP_MASTER:
11562     case OMP_ORDERED:
11563       stmt = push_stmt_list ();
11564       RECUR (OMP_BODY (t));
11565       stmt = pop_stmt_list (stmt);
11566
11567       t = copy_node (t);
11568       OMP_BODY (t) = stmt;
11569       add_stmt (t);
11570       break;
11571
11572     case OMP_ATOMIC:
11573       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
11574       {
11575         tree op1 = TREE_OPERAND (t, 1);
11576         tree lhs = RECUR (TREE_OPERAND (op1, 0));
11577         tree rhs = RECUR (TREE_OPERAND (op1, 1));
11578         finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
11579       }
11580       break;
11581
11582     case EXPR_PACK_EXPANSION:
11583       error ("invalid use of pack expansion expression");
11584       return error_mark_node;
11585
11586     case NONTYPE_ARGUMENT_PACK:
11587       error ("use %<...%> to expand argument pack");
11588       return error_mark_node;
11589
11590     default:
11591       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
11592
11593       return tsubst_copy_and_build (t, args, complain, in_decl,
11594                                     /*function_p=*/false,
11595                                     integral_constant_expression_p);
11596     }
11597
11598   return NULL_TREE;
11599 #undef RECUR
11600 }
11601
11602 /* T is a postfix-expression that is not being used in a function
11603    call.  Return the substituted version of T.  */
11604
11605 static tree
11606 tsubst_non_call_postfix_expression (tree t, tree args,
11607                                     tsubst_flags_t complain,
11608                                     tree in_decl)
11609 {
11610   if (TREE_CODE (t) == SCOPE_REF)
11611     t = tsubst_qualified_id (t, args, complain, in_decl,
11612                              /*done=*/false, /*address_p=*/false);
11613   else
11614     t = tsubst_copy_and_build (t, args, complain, in_decl,
11615                                /*function_p=*/false,
11616                                /*integral_constant_expression_p=*/false);
11617
11618   return t;
11619 }
11620
11621 /* Like tsubst but deals with expressions and performs semantic
11622    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
11623
11624 tree
11625 tsubst_copy_and_build (tree t,
11626                        tree args,
11627                        tsubst_flags_t complain,
11628                        tree in_decl,
11629                        bool function_p,
11630                        bool integral_constant_expression_p)
11631 {
11632 #define RECUR(NODE)                                             \
11633   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
11634                          /*function_p=*/false,                  \
11635                          integral_constant_expression_p)
11636
11637   tree op1;
11638
11639   if (t == NULL_TREE || t == error_mark_node)
11640     return t;
11641
11642   switch (TREE_CODE (t))
11643     {
11644     case USING_DECL:
11645       t = DECL_NAME (t);
11646       /* Fall through.  */
11647     case IDENTIFIER_NODE:
11648       {
11649         tree decl;
11650         cp_id_kind idk;
11651         bool non_integral_constant_expression_p;
11652         const char *error_msg;
11653
11654         if (IDENTIFIER_TYPENAME_P (t))
11655           {
11656             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11657             t = mangle_conv_op_name_for_type (new_type);
11658           }
11659
11660         /* Look up the name.  */
11661         decl = lookup_name (t);
11662
11663         /* By convention, expressions use ERROR_MARK_NODE to indicate
11664            failure, not NULL_TREE.  */
11665         if (decl == NULL_TREE)
11666           decl = error_mark_node;
11667
11668         decl = finish_id_expression (t, decl, NULL_TREE,
11669                                      &idk,
11670                                      integral_constant_expression_p,
11671                                      /*allow_non_integral_constant_expression_p=*/false,
11672                                      &non_integral_constant_expression_p,
11673                                      /*template_p=*/false,
11674                                      /*done=*/true,
11675                                      /*address_p=*/false,
11676                                      /*template_arg_p=*/false,
11677                                      &error_msg,
11678                                      input_location);
11679         if (error_msg)
11680           error (error_msg);
11681         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
11682           decl = unqualified_name_lookup_error (decl);
11683         return decl;
11684       }
11685
11686     case TEMPLATE_ID_EXPR:
11687       {
11688         tree object;
11689         tree templ = RECUR (TREE_OPERAND (t, 0));
11690         tree targs = TREE_OPERAND (t, 1);
11691
11692         if (targs)
11693           targs = tsubst_template_args (targs, args, complain, in_decl);
11694
11695         if (TREE_CODE (templ) == COMPONENT_REF)
11696           {
11697             object = TREE_OPERAND (templ, 0);
11698             templ = TREE_OPERAND (templ, 1);
11699           }
11700         else
11701           object = NULL_TREE;
11702         templ = lookup_template_function (templ, targs);
11703
11704         if (object)
11705           return build3 (COMPONENT_REF, TREE_TYPE (templ),
11706                          object, templ, NULL_TREE);
11707         else
11708           return baselink_for_fns (templ);
11709       }
11710
11711     case INDIRECT_REF:
11712       {
11713         tree r = RECUR (TREE_OPERAND (t, 0));
11714
11715         if (REFERENCE_REF_P (t))
11716           {
11717             /* A type conversion to reference type will be enclosed in
11718                such an indirect ref, but the substitution of the cast
11719                will have also added such an indirect ref.  */
11720             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
11721               r = convert_from_reference (r);
11722           }
11723         else
11724           r = build_x_indirect_ref (r, "unary *", complain);
11725         return r;
11726       }
11727
11728     case NOP_EXPR:
11729       return build_nop
11730         (tsubst (TREE_TYPE (t), args, complain, in_decl),
11731          RECUR (TREE_OPERAND (t, 0)));
11732
11733     case CAST_EXPR:
11734     case REINTERPRET_CAST_EXPR:
11735     case CONST_CAST_EXPR:
11736     case DYNAMIC_CAST_EXPR:
11737     case STATIC_CAST_EXPR:
11738       {
11739         tree type;
11740         tree op;
11741
11742         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11743         if (integral_constant_expression_p
11744             && !cast_valid_in_integral_constant_expression_p (type))
11745           {
11746             if (complain & tf_error)
11747               error ("a cast to a type other than an integral or "
11748                      "enumeration type cannot appear in a constant-expression");
11749             return error_mark_node; 
11750           }
11751
11752         op = RECUR (TREE_OPERAND (t, 0));
11753
11754         switch (TREE_CODE (t))
11755           {
11756           case CAST_EXPR:
11757             return build_functional_cast (type, op, complain);
11758           case REINTERPRET_CAST_EXPR:
11759             return build_reinterpret_cast (type, op, complain);
11760           case CONST_CAST_EXPR:
11761             return build_const_cast (type, op, complain);
11762           case DYNAMIC_CAST_EXPR:
11763             return build_dynamic_cast (type, op, complain);
11764           case STATIC_CAST_EXPR:
11765             return build_static_cast (type, op, complain);
11766           default:
11767             gcc_unreachable ();
11768           }
11769       }
11770
11771     case POSTDECREMENT_EXPR:
11772     case POSTINCREMENT_EXPR:
11773       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11774                                                 args, complain, in_decl);
11775       return build_x_unary_op (TREE_CODE (t), op1, complain);
11776
11777     case PREDECREMENT_EXPR:
11778     case PREINCREMENT_EXPR:
11779     case NEGATE_EXPR:
11780     case BIT_NOT_EXPR:
11781     case ABS_EXPR:
11782     case TRUTH_NOT_EXPR:
11783     case UNARY_PLUS_EXPR:  /* Unary + */
11784     case REALPART_EXPR:
11785     case IMAGPART_EXPR:
11786       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
11787                                complain);
11788
11789     case ADDR_EXPR:
11790       op1 = TREE_OPERAND (t, 0);
11791       if (TREE_CODE (op1) == SCOPE_REF)
11792         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
11793                                    /*done=*/true, /*address_p=*/true);
11794       else
11795         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
11796                                                   in_decl);
11797       if (TREE_CODE (op1) == LABEL_DECL)
11798         return finish_label_address_expr (DECL_NAME (op1),
11799                                           EXPR_LOCATION (op1));
11800       return build_x_unary_op (ADDR_EXPR, op1, complain);
11801
11802     case PLUS_EXPR:
11803     case MINUS_EXPR:
11804     case MULT_EXPR:
11805     case TRUNC_DIV_EXPR:
11806     case CEIL_DIV_EXPR:
11807     case FLOOR_DIV_EXPR:
11808     case ROUND_DIV_EXPR:
11809     case EXACT_DIV_EXPR:
11810     case BIT_AND_EXPR:
11811     case BIT_IOR_EXPR:
11812     case BIT_XOR_EXPR:
11813     case TRUNC_MOD_EXPR:
11814     case FLOOR_MOD_EXPR:
11815     case TRUTH_ANDIF_EXPR:
11816     case TRUTH_ORIF_EXPR:
11817     case TRUTH_AND_EXPR:
11818     case TRUTH_OR_EXPR:
11819     case RSHIFT_EXPR:
11820     case LSHIFT_EXPR:
11821     case RROTATE_EXPR:
11822     case LROTATE_EXPR:
11823     case EQ_EXPR:
11824     case NE_EXPR:
11825     case MAX_EXPR:
11826     case MIN_EXPR:
11827     case LE_EXPR:
11828     case GE_EXPR:
11829     case LT_EXPR:
11830     case GT_EXPR:
11831     case MEMBER_REF:
11832     case DOTSTAR_EXPR:
11833       return build_x_binary_op
11834         (TREE_CODE (t),
11835          RECUR (TREE_OPERAND (t, 0)),
11836          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
11837           ? ERROR_MARK
11838           : TREE_CODE (TREE_OPERAND (t, 0))),
11839          RECUR (TREE_OPERAND (t, 1)),
11840          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
11841           ? ERROR_MARK
11842           : TREE_CODE (TREE_OPERAND (t, 1))),
11843          /*overloaded_p=*/NULL,
11844          complain);
11845
11846     case SCOPE_REF:
11847       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
11848                                   /*address_p=*/false);
11849     case ARRAY_REF:
11850       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11851                                                 args, complain, in_decl);
11852       return build_x_array_ref (op1, RECUR (TREE_OPERAND (t, 1)), complain);
11853
11854     case SIZEOF_EXPR:
11855       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
11856         return tsubst_copy (t, args, complain, in_decl);
11857       /* Fall through */
11858       
11859     case ALIGNOF_EXPR:
11860       op1 = TREE_OPERAND (t, 0);
11861       if (!args)
11862         {
11863           /* When there are no ARGS, we are trying to evaluate a
11864              non-dependent expression from the parser.  Trying to do
11865              the substitutions may not work.  */
11866           if (!TYPE_P (op1))
11867             op1 = TREE_TYPE (op1);
11868         }
11869       else
11870         {
11871           ++cp_unevaluated_operand;
11872           ++c_inhibit_evaluation_warnings;
11873           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
11874                                        /*function_p=*/false,
11875                                        /*integral_constant_expression_p=*/false);
11876           --cp_unevaluated_operand;
11877           --c_inhibit_evaluation_warnings;
11878         }
11879       if (TYPE_P (op1))
11880         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
11881                                            complain & tf_error);
11882       else
11883         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
11884                                            complain & tf_error);
11885
11886     case MODOP_EXPR:
11887       {
11888         tree r = build_x_modify_expr
11889           (RECUR (TREE_OPERAND (t, 0)),
11890            TREE_CODE (TREE_OPERAND (t, 1)),
11891            RECUR (TREE_OPERAND (t, 2)),
11892            complain);
11893         /* TREE_NO_WARNING must be set if either the expression was
11894            parenthesized or it uses an operator such as >>= rather
11895            than plain assignment.  In the former case, it was already
11896            set and must be copied.  In the latter case,
11897            build_x_modify_expr sets it and it must not be reset
11898            here.  */
11899         if (TREE_NO_WARNING (t))
11900           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
11901         return r;
11902       }
11903
11904     case ARROW_EXPR:
11905       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11906                                                 args, complain, in_decl);
11907       /* Remember that there was a reference to this entity.  */
11908       if (DECL_P (op1))
11909         mark_used (op1);
11910       return build_x_arrow (op1);
11911
11912     case NEW_EXPR:
11913       {
11914         tree placement = RECUR (TREE_OPERAND (t, 0));
11915         tree init = RECUR (TREE_OPERAND (t, 3));
11916         VEC(tree,gc) *placement_vec;
11917         VEC(tree,gc) *init_vec;
11918         tree ret;
11919
11920         if (placement == NULL_TREE)
11921           placement_vec = NULL;
11922         else
11923           {
11924             placement_vec = make_tree_vector ();
11925             for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
11926               VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement));
11927           }
11928
11929         /* If there was an initializer in the original tree, but it
11930            instantiated to an empty list, then we should pass a
11931            non-NULL empty vector to tell build_new that it was an
11932            empty initializer() rather than no initializer.  This can
11933            only happen when the initializer is a pack expansion whose
11934            parameter packs are of length zero.  */
11935         if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
11936           init_vec = NULL;
11937         else
11938           {
11939             init_vec = make_tree_vector ();
11940             if (init == void_zero_node)
11941               gcc_assert (init_vec != NULL);
11942             else
11943               {
11944                 for (; init != NULL_TREE; init = TREE_CHAIN (init))
11945                   VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init));
11946               }
11947           }
11948
11949         ret = build_new (&placement_vec,
11950                          RECUR (TREE_OPERAND (t, 1)),
11951                          RECUR (TREE_OPERAND (t, 2)),
11952                          &init_vec,
11953                          NEW_EXPR_USE_GLOBAL (t),
11954                          complain);
11955
11956         if (placement_vec != NULL)
11957           release_tree_vector (placement_vec);
11958         if (init_vec != NULL)
11959           release_tree_vector (init_vec);
11960
11961         return ret;
11962       }
11963
11964     case DELETE_EXPR:
11965      return delete_sanity
11966        (RECUR (TREE_OPERAND (t, 0)),
11967         RECUR (TREE_OPERAND (t, 1)),
11968         DELETE_EXPR_USE_VEC (t),
11969         DELETE_EXPR_USE_GLOBAL (t));
11970
11971     case COMPOUND_EXPR:
11972       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
11973                                     RECUR (TREE_OPERAND (t, 1)),
11974                                     complain);
11975
11976     case CALL_EXPR:
11977       {
11978         tree function;
11979         VEC(tree,gc) *call_args;
11980         unsigned int nargs, i;
11981         bool qualified_p;
11982         bool koenig_p;
11983         tree ret;
11984
11985         function = CALL_EXPR_FN (t);
11986         /* When we parsed the expression,  we determined whether or
11987            not Koenig lookup should be performed.  */
11988         koenig_p = KOENIG_LOOKUP_P (t);
11989         if (TREE_CODE (function) == SCOPE_REF)
11990           {
11991             qualified_p = true;
11992             function = tsubst_qualified_id (function, args, complain, in_decl,
11993                                             /*done=*/false,
11994                                             /*address_p=*/false);
11995           }
11996         else
11997           {
11998             if (TREE_CODE (function) == COMPONENT_REF)
11999               {
12000                 tree op = TREE_OPERAND (function, 1);
12001
12002                 qualified_p = (TREE_CODE (op) == SCOPE_REF
12003                                || (BASELINK_P (op)
12004                                    && BASELINK_QUALIFIED_P (op)));
12005               }
12006             else
12007               qualified_p = false;
12008
12009             function = tsubst_copy_and_build (function, args, complain,
12010                                               in_decl,
12011                                               !qualified_p,
12012                                               integral_constant_expression_p);
12013
12014             if (BASELINK_P (function))
12015               qualified_p = true;
12016           }
12017
12018         nargs = call_expr_nargs (t);
12019         call_args = make_tree_vector ();
12020         for (i = 0; i < nargs; ++i)
12021           {
12022             tree arg = CALL_EXPR_ARG (t, i);
12023
12024             if (!PACK_EXPANSION_P (arg))
12025               VEC_safe_push (tree, gc, call_args,
12026                              RECUR (CALL_EXPR_ARG (t, i)));
12027             else
12028               {
12029                 /* Expand the pack expansion and push each entry onto
12030                    CALL_ARGS.  */
12031                 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
12032                 if (TREE_CODE (arg) == TREE_VEC)
12033                   {
12034                     unsigned int len, j;
12035
12036                     len = TREE_VEC_LENGTH (arg);
12037                     for (j = 0; j < len; ++j)
12038                       {
12039                         tree value = TREE_VEC_ELT (arg, j);
12040                         if (value != NULL_TREE)
12041                           value = convert_from_reference (value);
12042                         VEC_safe_push (tree, gc, call_args, value);
12043                       }
12044                   }
12045                 else
12046                   {
12047                     /* A partial substitution.  Add one entry.  */
12048                     VEC_safe_push (tree, gc, call_args, arg);
12049                   }
12050               }
12051           }
12052
12053         /* We do not perform argument-dependent lookup if normal
12054            lookup finds a non-function, in accordance with the
12055            expected resolution of DR 218.  */
12056         if (koenig_p
12057             && ((is_overloaded_fn (function)
12058                  /* If lookup found a member function, the Koenig lookup is
12059                     not appropriate, even if an unqualified-name was used
12060                     to denote the function.  */
12061                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
12062                 || TREE_CODE (function) == IDENTIFIER_NODE)
12063             /* Only do this when substitution turns a dependent call
12064                into a non-dependent call.  */
12065             && type_dependent_expression_p_push (t)
12066             && !any_type_dependent_arguments_p (call_args))
12067           function = perform_koenig_lookup (function, call_args);
12068
12069         if (TREE_CODE (function) == IDENTIFIER_NODE)
12070           {
12071             unqualified_name_lookup_error (function);
12072             release_tree_vector (call_args);
12073             return error_mark_node;
12074           }
12075
12076         /* Remember that there was a reference to this entity.  */
12077         if (DECL_P (function))
12078           mark_used (function);
12079
12080         if (TREE_CODE (function) == OFFSET_REF)
12081           ret = build_offset_ref_call_from_tree (function, &call_args);
12082         else if (TREE_CODE (function) == COMPONENT_REF)
12083           {
12084             if (!BASELINK_P (TREE_OPERAND (function, 1)))
12085               ret = finish_call_expr (function, &call_args,
12086                                        /*disallow_virtual=*/false,
12087                                        /*koenig_p=*/false,
12088                                        complain);
12089             else
12090               ret = (build_new_method_call
12091                       (TREE_OPERAND (function, 0),
12092                        TREE_OPERAND (function, 1),
12093                        &call_args, NULL_TREE,
12094                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
12095                        /*fn_p=*/NULL,
12096                        complain));
12097           }
12098         else
12099           ret = finish_call_expr (function, &call_args,
12100                                   /*disallow_virtual=*/qualified_p,
12101                                   koenig_p,
12102                                   complain);
12103
12104         release_tree_vector (call_args);
12105
12106         return ret;
12107       }
12108
12109     case COND_EXPR:
12110       return build_x_conditional_expr
12111         (RECUR (TREE_OPERAND (t, 0)),
12112          RECUR (TREE_OPERAND (t, 1)),
12113          RECUR (TREE_OPERAND (t, 2)),
12114          complain);
12115
12116     case PSEUDO_DTOR_EXPR:
12117       return finish_pseudo_destructor_expr
12118         (RECUR (TREE_OPERAND (t, 0)),
12119          RECUR (TREE_OPERAND (t, 1)),
12120          RECUR (TREE_OPERAND (t, 2)));
12121
12122     case TREE_LIST:
12123       {
12124         tree purpose, value, chain;
12125
12126         if (t == void_list_node)
12127           return t;
12128
12129         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
12130             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
12131           {
12132             /* We have pack expansions, so expand those and
12133                create a new list out of it.  */
12134             tree purposevec = NULL_TREE;
12135             tree valuevec = NULL_TREE;
12136             tree chain;
12137             int i, len = -1;
12138
12139             /* Expand the argument expressions.  */
12140             if (TREE_PURPOSE (t))
12141               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
12142                                                  complain, in_decl);
12143             if (TREE_VALUE (t))
12144               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
12145                                                complain, in_decl);
12146
12147             /* Build the rest of the list.  */
12148             chain = TREE_CHAIN (t);
12149             if (chain && chain != void_type_node)
12150               chain = RECUR (chain);
12151
12152             /* Determine the number of arguments.  */
12153             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
12154               {
12155                 len = TREE_VEC_LENGTH (purposevec);
12156                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
12157               }
12158             else if (TREE_CODE (valuevec) == TREE_VEC)
12159               len = TREE_VEC_LENGTH (valuevec);
12160             else
12161               {
12162                 /* Since we only performed a partial substitution into
12163                    the argument pack, we only return a single list
12164                    node.  */
12165                 if (purposevec == TREE_PURPOSE (t)
12166                     && valuevec == TREE_VALUE (t)
12167                     && chain == TREE_CHAIN (t))
12168                   return t;
12169
12170                 return tree_cons (purposevec, valuevec, chain);
12171               }
12172             
12173             /* Convert the argument vectors into a TREE_LIST */
12174             i = len;
12175             while (i > 0)
12176               {
12177                 /* Grab the Ith values.  */
12178                 i--;
12179                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
12180                                      : NULL_TREE;
12181                 value 
12182                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
12183                              : NULL_TREE;
12184
12185                 /* Build the list (backwards).  */
12186                 chain = tree_cons (purpose, value, chain);
12187               }
12188
12189             return chain;
12190           }
12191
12192         purpose = TREE_PURPOSE (t);
12193         if (purpose)
12194           purpose = RECUR (purpose);
12195         value = TREE_VALUE (t);
12196         if (value)
12197           value = RECUR (value);
12198         chain = TREE_CHAIN (t);
12199         if (chain && chain != void_type_node)
12200           chain = RECUR (chain);
12201         if (purpose == TREE_PURPOSE (t)
12202             && value == TREE_VALUE (t)
12203             && chain == TREE_CHAIN (t))
12204           return t;
12205         return tree_cons (purpose, value, chain);
12206       }
12207
12208     case COMPONENT_REF:
12209       {
12210         tree object;
12211         tree object_type;
12212         tree member;
12213
12214         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12215                                                      args, complain, in_decl);
12216         /* Remember that there was a reference to this entity.  */
12217         if (DECL_P (object))
12218           mark_used (object);
12219         object_type = TREE_TYPE (object);
12220
12221         member = TREE_OPERAND (t, 1);
12222         if (BASELINK_P (member))
12223           member = tsubst_baselink (member,
12224                                     non_reference (TREE_TYPE (object)),
12225                                     args, complain, in_decl);
12226         else
12227           member = tsubst_copy (member, args, complain, in_decl);
12228         if (member == error_mark_node)
12229           return error_mark_node;
12230
12231         if (object_type && !CLASS_TYPE_P (object_type))
12232           {
12233             if (SCALAR_TYPE_P (object_type))
12234               {
12235                 tree s = NULL_TREE;
12236                 tree dtor = member;
12237
12238                 if (TREE_CODE (dtor) == SCOPE_REF)
12239                   {
12240                     s = TREE_OPERAND (dtor, 0);
12241                     dtor = TREE_OPERAND (dtor, 1);
12242                   }
12243                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
12244                   {
12245                     dtor = TREE_OPERAND (dtor, 0);
12246                     if (TYPE_P (dtor))
12247                       return finish_pseudo_destructor_expr (object, s, dtor);
12248                   }
12249               }
12250           }
12251         else if (TREE_CODE (member) == SCOPE_REF
12252                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
12253           {
12254             tree tmpl;
12255             tree args;
12256
12257             /* Lookup the template functions now that we know what the
12258                scope is.  */
12259             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
12260             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
12261             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
12262                                             /*is_type_p=*/false,
12263                                             /*complain=*/false);
12264             if (BASELINK_P (member))
12265               {
12266                 BASELINK_FUNCTIONS (member)
12267                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
12268                               args);
12269                 member = (adjust_result_of_qualified_name_lookup
12270                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
12271                            object_type));
12272               }
12273             else
12274               {
12275                 qualified_name_lookup_error (object_type, tmpl, member,
12276                                              input_location);
12277                 return error_mark_node;
12278               }
12279           }
12280         else if (TREE_CODE (member) == SCOPE_REF
12281                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
12282                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
12283           {
12284             if (complain & tf_error)
12285               {
12286                 if (TYPE_P (TREE_OPERAND (member, 0)))
12287                   error ("%qT is not a class or namespace",
12288                          TREE_OPERAND (member, 0));
12289                 else
12290                   error ("%qD is not a class or namespace",
12291                          TREE_OPERAND (member, 0));
12292               }
12293             return error_mark_node;
12294           }
12295         else if (TREE_CODE (member) == FIELD_DECL)
12296           return finish_non_static_data_member (member, object, NULL_TREE);
12297
12298         return finish_class_member_access_expr (object, member,
12299                                                 /*template_p=*/false,
12300                                                 complain);
12301       }
12302
12303     case THROW_EXPR:
12304       return build_throw
12305         (RECUR (TREE_OPERAND (t, 0)));
12306
12307     case CONSTRUCTOR:
12308       {
12309         VEC(constructor_elt,gc) *n;
12310         constructor_elt *ce;
12311         unsigned HOST_WIDE_INT idx;
12312         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12313         bool process_index_p;
12314         int newlen;
12315         bool need_copy_p = false;
12316         tree r;
12317
12318         if (type == error_mark_node)
12319           return error_mark_node;
12320
12321         /* digest_init will do the wrong thing if we let it.  */
12322         if (type && TYPE_PTRMEMFUNC_P (type))
12323           return t;
12324
12325         /* We do not want to process the index of aggregate
12326            initializers as they are identifier nodes which will be
12327            looked up by digest_init.  */
12328         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
12329
12330         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
12331         newlen = VEC_length (constructor_elt, n);
12332         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
12333           {
12334             if (ce->index && process_index_p)
12335               ce->index = RECUR (ce->index);
12336
12337             if (PACK_EXPANSION_P (ce->value))
12338               {
12339                 /* Substitute into the pack expansion.  */
12340                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
12341                                                   in_decl);
12342
12343                 if (ce->value == error_mark_node)
12344                   ;
12345                 else if (TREE_VEC_LENGTH (ce->value) == 1)
12346                   /* Just move the argument into place.  */
12347                   ce->value = TREE_VEC_ELT (ce->value, 0);
12348                 else
12349                   {
12350                     /* Update the length of the final CONSTRUCTOR
12351                        arguments vector, and note that we will need to
12352                        copy.*/
12353                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
12354                     need_copy_p = true;
12355                   }
12356               }
12357             else
12358               ce->value = RECUR (ce->value);
12359           }
12360
12361         if (need_copy_p)
12362           {
12363             VEC(constructor_elt,gc) *old_n = n;
12364
12365             n = VEC_alloc (constructor_elt, gc, newlen);
12366             for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce); 
12367                  idx++)
12368               {
12369                 if (TREE_CODE (ce->value) == TREE_VEC)
12370                   {
12371                     int i, len = TREE_VEC_LENGTH (ce->value);
12372                     for (i = 0; i < len; ++i)
12373                       CONSTRUCTOR_APPEND_ELT (n, 0,
12374                                               TREE_VEC_ELT (ce->value, i));
12375                   }
12376                 else
12377                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
12378               }
12379           }
12380
12381         r = build_constructor (init_list_type_node, n);
12382         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
12383
12384         if (TREE_HAS_CONSTRUCTOR (t))
12385           return finish_compound_literal (type, r);
12386
12387         return r;
12388       }
12389
12390     case TYPEID_EXPR:
12391       {
12392         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
12393         if (TYPE_P (operand_0))
12394           return get_typeid (operand_0);
12395         return build_typeid (operand_0);
12396       }
12397
12398     case VAR_DECL:
12399       if (!args)
12400         return t;
12401       /* Fall through */
12402
12403     case PARM_DECL:
12404       {
12405         tree r = tsubst_copy (t, args, complain, in_decl);
12406
12407         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
12408           /* If the original type was a reference, we'll be wrapped in
12409              the appropriate INDIRECT_REF.  */
12410           r = convert_from_reference (r);
12411         return r;
12412       }
12413
12414     case VA_ARG_EXPR:
12415       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
12416                              tsubst_copy (TREE_TYPE (t), args, complain,
12417                                           in_decl));
12418
12419     case OFFSETOF_EXPR:
12420       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
12421
12422     case TRAIT_EXPR:
12423       {
12424         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
12425                                   complain, in_decl);
12426
12427         tree type2 = TRAIT_EXPR_TYPE2 (t);
12428         if (type2)
12429           type2 = tsubst_copy (type2, args, complain, in_decl);
12430         
12431         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
12432       }
12433
12434     case STMT_EXPR:
12435       {
12436         tree old_stmt_expr = cur_stmt_expr;
12437         tree stmt_expr = begin_stmt_expr ();
12438
12439         cur_stmt_expr = stmt_expr;
12440         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
12441                      integral_constant_expression_p);
12442         stmt_expr = finish_stmt_expr (stmt_expr, false);
12443         cur_stmt_expr = old_stmt_expr;
12444
12445         return stmt_expr;
12446       }
12447
12448     case CONST_DECL:
12449       t = tsubst_copy (t, args, complain, in_decl);
12450       /* As in finish_id_expression, we resolve enumeration constants
12451          to their underlying values.  */
12452       if (TREE_CODE (t) == CONST_DECL)
12453         {
12454           used_types_insert (TREE_TYPE (t));
12455           return DECL_INITIAL (t);
12456         }
12457       return t;
12458
12459     case LAMBDA_EXPR:
12460       {
12461         tree r = build_lambda_expr ();
12462
12463         tree type = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
12464         TREE_TYPE (r) = type;
12465         CLASSTYPE_LAMBDA_EXPR (type) = r;
12466
12467         LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
12468           = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
12469         LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
12470         LAMBDA_EXPR_DISCRIMINATOR (r)
12471           = (LAMBDA_EXPR_DISCRIMINATOR (t));
12472         LAMBDA_EXPR_CAPTURE_LIST (r)
12473           = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
12474         LAMBDA_EXPR_THIS_CAPTURE (r)
12475           = RECUR (LAMBDA_EXPR_THIS_CAPTURE (t));
12476         LAMBDA_EXPR_EXTRA_SCOPE (r)
12477           = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
12478
12479         /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
12480         determine_visibility (TYPE_NAME (type));
12481         /* Now that we know visibility, instantiate the type so we have a
12482            declaration of the op() for later calls to lambda_function.  */
12483         complete_type (type);
12484
12485         type = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
12486         if (type)
12487           apply_lambda_return_type (r, type);
12488
12489         return build_lambda_object (r);
12490       }
12491
12492     default:
12493       /* Handle Objective-C++ constructs, if appropriate.  */
12494       {
12495         tree subst
12496           = objcp_tsubst_copy_and_build (t, args, complain,
12497                                          in_decl, /*function_p=*/false);
12498         if (subst)
12499           return subst;
12500       }
12501       return tsubst_copy (t, args, complain, in_decl);
12502     }
12503
12504 #undef RECUR
12505 }
12506
12507 /* Verify that the instantiated ARGS are valid. For type arguments,
12508    make sure that the type's linkage is ok. For non-type arguments,
12509    make sure they are constants if they are integral or enumerations.
12510    Emit an error under control of COMPLAIN, and return TRUE on error.  */
12511
12512 static bool
12513 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
12514 {
12515   if (ARGUMENT_PACK_P (t))
12516     {
12517       tree vec = ARGUMENT_PACK_ARGS (t);
12518       int len = TREE_VEC_LENGTH (vec);
12519       bool result = false;
12520       int i;
12521
12522       for (i = 0; i < len; ++i)
12523         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
12524           result = true;
12525       return result;
12526     }
12527   else if (TYPE_P (t))
12528     {
12529       /* [basic.link]: A name with no linkage (notably, the name
12530          of a class or enumeration declared in a local scope)
12531          shall not be used to declare an entity with linkage.
12532          This implies that names with no linkage cannot be used as
12533          template arguments
12534
12535          DR 757 relaxes this restriction for C++0x.  */
12536       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
12537                  : no_linkage_check (t, /*relaxed_p=*/false));
12538
12539       if (nt)
12540         {
12541           /* DR 488 makes use of a type with no linkage cause
12542              type deduction to fail.  */
12543           if (complain & tf_error)
12544             {
12545               if (TYPE_ANONYMOUS_P (nt))
12546                 error ("%qT is/uses anonymous type", t);
12547               else
12548                 error ("template argument for %qD uses local type %qT",
12549                        tmpl, t);
12550             }
12551           return true;
12552         }
12553       /* In order to avoid all sorts of complications, we do not
12554          allow variably-modified types as template arguments.  */
12555       else if (variably_modified_type_p (t, NULL_TREE))
12556         {
12557           if (complain & tf_error)
12558             error ("%qT is a variably modified type", t);
12559           return true;
12560         }
12561     }
12562   /* A non-type argument of integral or enumerated type must be a
12563      constant.  */
12564   else if (TREE_TYPE (t)
12565            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
12566            && !TREE_CONSTANT (t))
12567     {
12568       if (complain & tf_error)
12569         error ("integral expression %qE is not constant", t);
12570       return true;
12571     }
12572   return false;
12573 }
12574
12575 static bool
12576 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
12577 {
12578   int ix, len = DECL_NTPARMS (tmpl);
12579   bool result = false;
12580
12581   for (ix = 0; ix != len; ix++)
12582     {
12583       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
12584         result = true;
12585     }
12586   if (result && (complain & tf_error))
12587     error ("  trying to instantiate %qD", tmpl);
12588   return result;
12589 }
12590
12591 /* Instantiate the indicated variable or function template TMPL with
12592    the template arguments in TARG_PTR.  */
12593
12594 tree
12595 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
12596 {
12597   tree targ_ptr = orig_args;
12598   tree fndecl;
12599   tree gen_tmpl;
12600   tree spec;
12601   HOST_WIDE_INT saved_processing_template_decl;
12602
12603   if (tmpl == error_mark_node)
12604     return error_mark_node;
12605
12606   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
12607
12608   /* If this function is a clone, handle it specially.  */
12609   if (DECL_CLONED_FUNCTION_P (tmpl))
12610     {
12611       tree spec;
12612       tree clone;
12613
12614       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
12615          DECL_CLONED_FUNCTION.  */
12616       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
12617                                    targ_ptr, complain);
12618       if (spec == error_mark_node)
12619         return error_mark_node;
12620
12621       /* Look for the clone.  */
12622       FOR_EACH_CLONE (clone, spec)
12623         if (DECL_NAME (clone) == DECL_NAME (tmpl))
12624           return clone;
12625       /* We should always have found the clone by now.  */
12626       gcc_unreachable ();
12627       return NULL_TREE;
12628     }
12629
12630   /* Check to see if we already have this specialization.  */
12631   gen_tmpl = most_general_template (tmpl);
12632   if (tmpl != gen_tmpl)
12633     /* The TMPL is a partial instantiation.  To get a full set of
12634        arguments we must add the arguments used to perform the
12635        partial instantiation.  */
12636     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
12637                                             targ_ptr);
12638
12639   /* It would be nice to avoid hashing here and then again in tsubst_decl,
12640      but it doesn't seem to be on the hot path.  */
12641   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
12642
12643   gcc_assert (tmpl == gen_tmpl
12644               || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
12645                   == spec)
12646               || fndecl == NULL_TREE);
12647
12648   if (spec != NULL_TREE)
12649     return spec;
12650
12651   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
12652                                complain))
12653     return error_mark_node;
12654
12655   /* We are building a FUNCTION_DECL, during which the access of its
12656      parameters and return types have to be checked.  However this
12657      FUNCTION_DECL which is the desired context for access checking
12658      is not built yet.  We solve this chicken-and-egg problem by
12659      deferring all checks until we have the FUNCTION_DECL.  */
12660   push_deferring_access_checks (dk_deferred);
12661
12662   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
12663      (because, for example, we have encountered a non-dependent
12664      function call in the body of a template function and must now
12665      determine which of several overloaded functions will be called),
12666      within the instantiation itself we are not processing a
12667      template.  */  
12668   saved_processing_template_decl = processing_template_decl;
12669   processing_template_decl = 0;
12670   /* Substitute template parameters to obtain the specialization.  */
12671   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
12672                    targ_ptr, complain, gen_tmpl);
12673   processing_template_decl = saved_processing_template_decl;
12674   if (fndecl == error_mark_node)
12675     return error_mark_node;
12676
12677   /* Now we know the specialization, compute access previously
12678      deferred.  */
12679   push_access_scope (fndecl);
12680
12681   /* Some typedefs referenced from within the template code need to be access
12682      checked at template instantiation time, i.e now. These types were
12683      added to the template at parsing time. Let's get those and perfom
12684      the acces checks then.  */
12685   perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
12686   perform_deferred_access_checks ();
12687   pop_access_scope (fndecl);
12688   pop_deferring_access_checks ();
12689
12690   /* The DECL_TI_TEMPLATE should always be the immediate parent
12691      template, not the most general template.  */
12692   DECL_TI_TEMPLATE (fndecl) = tmpl;
12693
12694   /* If we've just instantiated the main entry point for a function,
12695      instantiate all the alternate entry points as well.  We do this
12696      by cloning the instantiation of the main entry point, not by
12697      instantiating the template clones.  */
12698   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
12699     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
12700
12701   return fndecl;
12702 }
12703
12704 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
12705    NARGS elements of the arguments that are being used when calling
12706    it.  TARGS is a vector into which the deduced template arguments
12707    are placed.
12708
12709    Return zero for success, 2 for an incomplete match that doesn't resolve
12710    all the types, and 1 for complete failure.  An error message will be
12711    printed only for an incomplete match.
12712
12713    If FN is a conversion operator, or we are trying to produce a specific
12714    specialization, RETURN_TYPE is the return type desired.
12715
12716    The EXPLICIT_TARGS are explicit template arguments provided via a
12717    template-id.
12718
12719    The parameter STRICT is one of:
12720
12721    DEDUCE_CALL:
12722      We are deducing arguments for a function call, as in
12723      [temp.deduct.call].
12724
12725    DEDUCE_CONV:
12726      We are deducing arguments for a conversion function, as in
12727      [temp.deduct.conv].
12728
12729    DEDUCE_EXACT:
12730      We are deducing arguments when doing an explicit instantiation
12731      as in [temp.explicit], when determining an explicit specialization
12732      as in [temp.expl.spec], or when taking the address of a function
12733      template, as in [temp.deduct.funcaddr].  */
12734
12735 int
12736 fn_type_unification (tree fn,
12737                      tree explicit_targs,
12738                      tree targs,
12739                      const tree *args,
12740                      unsigned int nargs,
12741                      tree return_type,
12742                      unification_kind_t strict,
12743                      int flags)
12744 {
12745   tree parms;
12746   tree fntype;
12747   int result;
12748   bool incomplete_argument_packs_p = false;
12749
12750   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
12751
12752   fntype = TREE_TYPE (fn);
12753   if (explicit_targs)
12754     {
12755       /* [temp.deduct]
12756
12757          The specified template arguments must match the template
12758          parameters in kind (i.e., type, nontype, template), and there
12759          must not be more arguments than there are parameters;
12760          otherwise type deduction fails.
12761
12762          Nontype arguments must match the types of the corresponding
12763          nontype template parameters, or must be convertible to the
12764          types of the corresponding nontype parameters as specified in
12765          _temp.arg.nontype_, otherwise type deduction fails.
12766
12767          All references in the function type of the function template
12768          to the corresponding template parameters are replaced by the
12769          specified template argument values.  If a substitution in a
12770          template parameter or in the function type of the function
12771          template results in an invalid type, type deduction fails.  */
12772       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
12773       int i, len = TREE_VEC_LENGTH (tparms);
12774       tree converted_args;
12775       bool incomplete = false;
12776
12777       if (explicit_targs == error_mark_node)
12778         return 1;
12779
12780       converted_args
12781         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
12782                                   /*require_all_args=*/false,
12783                                   /*use_default_args=*/false));
12784       if (converted_args == error_mark_node)
12785         return 1;
12786
12787       /* Substitute the explicit args into the function type.  This is
12788          necessary so that, for instance, explicitly declared function
12789          arguments can match null pointed constants.  If we were given
12790          an incomplete set of explicit args, we must not do semantic
12791          processing during substitution as we could create partial
12792          instantiations.  */
12793       for (i = 0; i < len; i++)
12794         {
12795           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
12796           bool parameter_pack = false;
12797
12798           /* Dig out the actual parm.  */
12799           if (TREE_CODE (parm) == TYPE_DECL
12800               || TREE_CODE (parm) == TEMPLATE_DECL)
12801             {
12802               parm = TREE_TYPE (parm);
12803               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
12804             }
12805           else if (TREE_CODE (parm) == PARM_DECL)
12806             {
12807               parm = DECL_INITIAL (parm);
12808               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
12809             }
12810
12811           if (parameter_pack)
12812             {
12813               int level, idx;
12814               tree targ;
12815               template_parm_level_and_index (parm, &level, &idx);
12816
12817               /* Mark the argument pack as "incomplete". We could
12818                  still deduce more arguments during unification.  */
12819               targ = TMPL_ARG (converted_args, level, idx);
12820               if (targ)
12821                 {
12822                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
12823                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
12824                     = ARGUMENT_PACK_ARGS (targ);
12825                 }
12826
12827               /* We have some incomplete argument packs.  */
12828               incomplete_argument_packs_p = true;
12829             }
12830         }
12831
12832       if (incomplete_argument_packs_p)
12833         /* Any substitution is guaranteed to be incomplete if there
12834            are incomplete argument packs, because we can still deduce
12835            more arguments.  */
12836         incomplete = 1;
12837       else
12838         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
12839
12840       processing_template_decl += incomplete;
12841       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
12842       processing_template_decl -= incomplete;
12843
12844       if (fntype == error_mark_node)
12845         return 1;
12846
12847       /* Place the explicitly specified arguments in TARGS.  */
12848       for (i = NUM_TMPL_ARGS (converted_args); i--;)
12849         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
12850     }
12851
12852   /* Never do unification on the 'this' parameter.  */
12853   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
12854
12855   if (return_type)
12856     {
12857       tree *new_args;
12858
12859       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
12860       new_args = XALLOCAVEC (tree, nargs + 1);
12861       new_args[0] = return_type;
12862       memcpy (new_args + 1, args, nargs * sizeof (tree));
12863       args = new_args;
12864       ++nargs;
12865     }
12866
12867   /* We allow incomplete unification without an error message here
12868      because the standard doesn't seem to explicitly prohibit it.  Our
12869      callers must be ready to deal with unification failures in any
12870      event.  */
12871   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
12872                                   targs, parms, args, nargs, /*subr=*/0,
12873                                   strict, flags);
12874
12875   if (result == 0 && incomplete_argument_packs_p)
12876     {
12877       int i, len = NUM_TMPL_ARGS (targs);
12878
12879       /* Clear the "incomplete" flags on all argument packs.  */
12880       for (i = 0; i < len; i++)
12881         {
12882           tree arg = TREE_VEC_ELT (targs, i);
12883           if (ARGUMENT_PACK_P (arg))
12884             {
12885               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
12886               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
12887             }
12888         }
12889     }
12890
12891   /* Now that we have bindings for all of the template arguments,
12892      ensure that the arguments deduced for the template template
12893      parameters have compatible template parameter lists.  We cannot
12894      check this property before we have deduced all template
12895      arguments, because the template parameter types of a template
12896      template parameter might depend on prior template parameters
12897      deduced after the template template parameter.  The following
12898      ill-formed example illustrates this issue:
12899
12900        template<typename T, template<T> class C> void f(C<5>, T);
12901
12902        template<int N> struct X {};
12903
12904        void g() {
12905          f(X<5>(), 5l); // error: template argument deduction fails
12906        }
12907
12908      The template parameter list of 'C' depends on the template type
12909      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
12910      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
12911      time that we deduce 'C'.  */
12912   if (result == 0
12913       && !template_template_parm_bindings_ok_p 
12914            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
12915     return 1;
12916
12917   if (result == 0)
12918     /* All is well so far.  Now, check:
12919
12920        [temp.deduct]
12921
12922        When all template arguments have been deduced, all uses of
12923        template parameters in nondeduced contexts are replaced with
12924        the corresponding deduced argument values.  If the
12925        substitution results in an invalid type, as described above,
12926        type deduction fails.  */
12927     {
12928       tree substed = tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE);
12929       if (substed == error_mark_node)
12930         return 1;
12931
12932       /* If we're looking for an exact match, check that what we got
12933          is indeed an exact match.  It might not be if some template
12934          parameters are used in non-deduced contexts.  */
12935       if (strict == DEDUCE_EXACT)
12936         {
12937           unsigned int i;
12938
12939           tree sarg
12940             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
12941           if (return_type)
12942             sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
12943           for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
12944             if (!same_type_p (args[i], TREE_VALUE (sarg)))
12945               return 1;
12946         }
12947     }
12948
12949   return result;
12950 }
12951
12952 /* Adjust types before performing type deduction, as described in
12953    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
12954    sections are symmetric.  PARM is the type of a function parameter
12955    or the return type of the conversion function.  ARG is the type of
12956    the argument passed to the call, or the type of the value
12957    initialized with the result of the conversion function.
12958    ARG_EXPR is the original argument expression, which may be null.  */
12959
12960 static int
12961 maybe_adjust_types_for_deduction (unification_kind_t strict,
12962                                   tree* parm,
12963                                   tree* arg,
12964                                   tree arg_expr)
12965 {
12966   int result = 0;
12967
12968   switch (strict)
12969     {
12970     case DEDUCE_CALL:
12971       break;
12972
12973     case DEDUCE_CONV:
12974       {
12975         /* Swap PARM and ARG throughout the remainder of this
12976            function; the handling is precisely symmetric since PARM
12977            will initialize ARG rather than vice versa.  */
12978         tree* temp = parm;
12979         parm = arg;
12980         arg = temp;
12981         break;
12982       }
12983
12984     case DEDUCE_EXACT:
12985       /* Core issue #873: Do the DR606 thing (see below) for these cases,
12986          too, but here handle it by stripping the reference from PARM
12987          rather than by adding it to ARG.  */
12988       if (TREE_CODE (*parm) == REFERENCE_TYPE
12989           && TYPE_REF_IS_RVALUE (*parm)
12990           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
12991           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
12992           && TREE_CODE (*arg) == REFERENCE_TYPE
12993           && !TYPE_REF_IS_RVALUE (*arg))
12994         *parm = TREE_TYPE (*parm);
12995       /* Nothing else to do in this case.  */
12996       return 0;
12997
12998     default:
12999       gcc_unreachable ();
13000     }
13001
13002   if (TREE_CODE (*parm) != REFERENCE_TYPE)
13003     {
13004       /* [temp.deduct.call]
13005
13006          If P is not a reference type:
13007
13008          --If A is an array type, the pointer type produced by the
13009          array-to-pointer standard conversion (_conv.array_) is
13010          used in place of A for type deduction; otherwise,
13011
13012          --If A is a function type, the pointer type produced by
13013          the function-to-pointer standard conversion
13014          (_conv.func_) is used in place of A for type deduction;
13015          otherwise,
13016
13017          --If A is a cv-qualified type, the top level
13018          cv-qualifiers of A's type are ignored for type
13019          deduction.  */
13020       if (TREE_CODE (*arg) == ARRAY_TYPE)
13021         *arg = build_pointer_type (TREE_TYPE (*arg));
13022       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
13023         *arg = build_pointer_type (*arg);
13024       else
13025         *arg = TYPE_MAIN_VARIANT (*arg);
13026     }
13027
13028   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
13029      of the form T&&, where T is a template parameter, and the argument
13030      is an lvalue, T is deduced as A& */
13031   if (TREE_CODE (*parm) == REFERENCE_TYPE
13032       && TYPE_REF_IS_RVALUE (*parm)
13033       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
13034       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
13035       && arg_expr && real_lvalue_p (arg_expr))
13036     *arg = build_reference_type (*arg);
13037
13038   /* [temp.deduct.call]
13039
13040      If P is a cv-qualified type, the top level cv-qualifiers
13041      of P's type are ignored for type deduction.  If P is a
13042      reference type, the type referred to by P is used for
13043      type deduction.  */
13044   *parm = TYPE_MAIN_VARIANT (*parm);
13045   if (TREE_CODE (*parm) == REFERENCE_TYPE)
13046     {
13047       *parm = TREE_TYPE (*parm);
13048       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
13049     }
13050
13051   /* DR 322. For conversion deduction, remove a reference type on parm
13052      too (which has been swapped into ARG).  */
13053   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
13054     *arg = TREE_TYPE (*arg);
13055
13056   return result;
13057 }
13058
13059 /* Most parms like fn_type_unification.
13060
13061    If SUBR is 1, we're being called recursively (to unify the
13062    arguments of a function or method parameter of a function
13063    template). */
13064
13065 static int
13066 type_unification_real (tree tparms,
13067                        tree targs,
13068                        tree xparms,
13069                        const tree *xargs,
13070                        unsigned int xnargs,
13071                        int subr,
13072                        unification_kind_t strict,
13073                        int flags)
13074 {
13075   tree parm, arg, arg_expr;
13076   int i;
13077   int ntparms = TREE_VEC_LENGTH (tparms);
13078   int sub_strict;
13079   int saw_undeduced = 0;
13080   tree parms;
13081   const tree *args;
13082   unsigned int nargs;
13083   unsigned int ia;
13084
13085   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
13086   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
13087   gcc_assert (ntparms > 0);
13088
13089   switch (strict)
13090     {
13091     case DEDUCE_CALL:
13092       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
13093                     | UNIFY_ALLOW_DERIVED);
13094       break;
13095
13096     case DEDUCE_CONV:
13097       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
13098       break;
13099
13100     case DEDUCE_EXACT:
13101       sub_strict = UNIFY_ALLOW_NONE;
13102       break;
13103
13104     default:
13105       gcc_unreachable ();
13106     }
13107
13108  again:
13109   parms = xparms;
13110   args = xargs;
13111   nargs = xnargs;
13112
13113   ia = 0;
13114   while (parms && parms != void_list_node
13115          && ia < nargs)
13116     {
13117       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
13118         break;
13119
13120       parm = TREE_VALUE (parms);
13121       parms = TREE_CHAIN (parms);
13122       arg = args[ia];
13123       ++ia;
13124       arg_expr = NULL;
13125
13126       if (arg == error_mark_node)
13127         return 1;
13128       if (arg == unknown_type_node)
13129         /* We can't deduce anything from this, but we might get all the
13130            template args from other function args.  */
13131         continue;
13132
13133       /* Conversions will be performed on a function argument that
13134          corresponds with a function parameter that contains only
13135          non-deducible template parameters and explicitly specified
13136          template parameters.  */
13137       if (!uses_template_parms (parm))
13138         {
13139           tree type;
13140
13141           if (!TYPE_P (arg))
13142             type = TREE_TYPE (arg);
13143           else
13144             type = arg;
13145
13146           if (same_type_p (parm, type))
13147             continue;
13148           if (strict != DEDUCE_EXACT
13149               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
13150                                   flags))
13151             continue;
13152
13153           return 1;
13154         }
13155
13156       if (!TYPE_P (arg))
13157         {
13158           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
13159           if (type_unknown_p (arg))
13160             {
13161               /* [temp.deduct.type] 
13162
13163                  A template-argument can be deduced from a pointer to
13164                  function or pointer to member function argument if
13165                  the set of overloaded functions does not contain
13166                  function templates and at most one of a set of
13167                  overloaded functions provides a unique match.  */
13168               if (resolve_overloaded_unification
13169                   (tparms, targs, parm, arg, strict, sub_strict))
13170                 continue;
13171
13172               return 1;
13173             }
13174           arg_expr = arg;
13175           arg = unlowered_expr_type (arg);
13176           if (arg == error_mark_node)
13177             return 1;
13178         }
13179
13180       {
13181         int arg_strict = sub_strict;
13182
13183         if (!subr)
13184           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
13185                                                           arg_expr);
13186
13187         if (arg == init_list_type_node && arg_expr)
13188           arg = arg_expr;
13189         if (unify (tparms, targs, parm, arg, arg_strict))
13190           return 1;
13191       }
13192     }
13193
13194
13195   if (parms 
13196       && parms != void_list_node
13197       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
13198     {
13199       /* Unify the remaining arguments with the pack expansion type.  */
13200       tree argvec;
13201       tree parmvec = make_tree_vec (1);
13202
13203       /* Allocate a TREE_VEC and copy in all of the arguments */ 
13204       argvec = make_tree_vec (nargs - ia);
13205       for (i = 0; ia < nargs; ++ia, ++i)
13206         TREE_VEC_ELT (argvec, i) = args[ia];
13207
13208       /* Copy the parameter into parmvec.  */
13209       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
13210       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
13211                                 /*call_args_p=*/true, /*subr=*/subr))
13212         return 1;
13213
13214       /* Advance to the end of the list of parameters.  */
13215       parms = TREE_CHAIN (parms);
13216     }
13217
13218   /* Fail if we've reached the end of the parm list, and more args
13219      are present, and the parm list isn't variadic.  */
13220   if (ia < nargs && parms == void_list_node)
13221     return 1;
13222   /* Fail if parms are left and they don't have default values.  */
13223   if (parms && parms != void_list_node
13224       && TREE_PURPOSE (parms) == NULL_TREE)
13225     return 1;
13226
13227   if (!subr)
13228     for (i = 0; i < ntparms; i++)
13229       if (!TREE_VEC_ELT (targs, i))
13230         {
13231           tree tparm;
13232
13233           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
13234             continue;
13235
13236           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
13237
13238           /* If this is an undeduced nontype parameter that depends on
13239              a type parameter, try another pass; its type may have been
13240              deduced from a later argument than the one from which
13241              this parameter can be deduced.  */
13242           if (TREE_CODE (tparm) == PARM_DECL
13243               && uses_template_parms (TREE_TYPE (tparm))
13244               && !saw_undeduced++)
13245             goto again;
13246
13247           /* Core issue #226 (C++0x) [temp.deduct]:
13248
13249                If a template argument has not been deduced, its
13250                default template argument, if any, is used. 
13251
13252              When we are in C++98 mode, TREE_PURPOSE will either
13253              be NULL_TREE or ERROR_MARK_NODE, so we do not need
13254              to explicitly check cxx_dialect here.  */
13255           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
13256             {
13257               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
13258               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
13259               arg = tsubst_template_arg (arg, targs, tf_none, NULL_TREE);
13260               arg = convert_template_argument (parm, arg, targs, tf_none,
13261                                                i, NULL_TREE);
13262               if (arg == error_mark_node)
13263                 return 1;
13264               else
13265                 {
13266                   TREE_VEC_ELT (targs, i) = arg;
13267                   continue;
13268                 }
13269             }
13270
13271           /* If the type parameter is a parameter pack, then it will
13272              be deduced to an empty parameter pack.  */
13273           if (template_parameter_pack_p (tparm))
13274             {
13275               tree arg;
13276
13277               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
13278                 {
13279                   arg = make_node (NONTYPE_ARGUMENT_PACK);
13280                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
13281                   TREE_CONSTANT (arg) = 1;
13282                 }
13283               else
13284                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
13285
13286               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
13287
13288               TREE_VEC_ELT (targs, i) = arg;
13289               continue;
13290             }
13291
13292           return 2;
13293         }
13294
13295   return 0;
13296 }
13297
13298 /* Subroutine of type_unification_real.  Args are like the variables
13299    at the call site.  ARG is an overloaded function (or template-id);
13300    we try deducing template args from each of the overloads, and if
13301    only one succeeds, we go with that.  Modifies TARGS and returns
13302    true on success.  */
13303
13304 static bool
13305 resolve_overloaded_unification (tree tparms,
13306                                 tree targs,
13307                                 tree parm,
13308                                 tree arg,
13309                                 unification_kind_t strict,
13310                                 int sub_strict)
13311 {
13312   tree tempargs = copy_node (targs);
13313   int good = 0;
13314   tree goodfn = NULL_TREE;
13315   bool addr_p;
13316
13317   if (TREE_CODE (arg) == ADDR_EXPR)
13318     {
13319       arg = TREE_OPERAND (arg, 0);
13320       addr_p = true;
13321     }
13322   else
13323     addr_p = false;
13324
13325   if (TREE_CODE (arg) == COMPONENT_REF)
13326     /* Handle `&x' where `x' is some static or non-static member
13327        function name.  */
13328     arg = TREE_OPERAND (arg, 1);
13329
13330   if (TREE_CODE (arg) == OFFSET_REF)
13331     arg = TREE_OPERAND (arg, 1);
13332
13333   /* Strip baselink information.  */
13334   if (BASELINK_P (arg))
13335     arg = BASELINK_FUNCTIONS (arg);
13336
13337   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
13338     {
13339       /* If we got some explicit template args, we need to plug them into
13340          the affected templates before we try to unify, in case the
13341          explicit args will completely resolve the templates in question.  */
13342
13343       tree expl_subargs = TREE_OPERAND (arg, 1);
13344       arg = TREE_OPERAND (arg, 0);
13345
13346       for (; arg; arg = OVL_NEXT (arg))
13347         {
13348           tree fn = OVL_CURRENT (arg);
13349           tree subargs, elem;
13350
13351           if (TREE_CODE (fn) != TEMPLATE_DECL)
13352             continue;
13353
13354           ++processing_template_decl;
13355           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
13356                                   expl_subargs, /*check_ret=*/false);
13357           if (subargs)
13358             {
13359               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
13360               if (try_one_overload (tparms, targs, tempargs, parm,
13361                                     elem, strict, sub_strict, addr_p)
13362                   && (!goodfn || !decls_match (goodfn, elem)))
13363                 {
13364                   goodfn = elem;
13365                   ++good;
13366                 }
13367             }
13368           --processing_template_decl;
13369         }
13370     }
13371   else if (TREE_CODE (arg) != OVERLOAD
13372            && TREE_CODE (arg) != FUNCTION_DECL)
13373     /* If ARG is, for example, "(0, &f)" then its type will be unknown
13374        -- but the deduction does not succeed because the expression is
13375        not just the function on its own.  */
13376     return false;
13377   else
13378     for (; arg; arg = OVL_NEXT (arg))
13379       if (try_one_overload (tparms, targs, tempargs, parm,
13380                             TREE_TYPE (OVL_CURRENT (arg)),
13381                             strict, sub_strict, addr_p)
13382           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
13383         {
13384           goodfn = OVL_CURRENT (arg);
13385           ++good;
13386         }
13387
13388   /* [temp.deduct.type] A template-argument can be deduced from a pointer
13389      to function or pointer to member function argument if the set of
13390      overloaded functions does not contain function templates and at most
13391      one of a set of overloaded functions provides a unique match.
13392
13393      So if we found multiple possibilities, we return success but don't
13394      deduce anything.  */
13395
13396   if (good == 1)
13397     {
13398       int i = TREE_VEC_LENGTH (targs);
13399       for (; i--; )
13400         if (TREE_VEC_ELT (tempargs, i))
13401           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
13402     }
13403   if (good)
13404     return true;
13405
13406   return false;
13407 }
13408
13409 /* Core DR 115: In contexts where deduction is done and fails, or in
13410    contexts where deduction is not done, if a template argument list is
13411    specified and it, along with any default template arguments, identifies
13412    a single function template specialization, then the template-id is an
13413    lvalue for the function template specialization.  */
13414
13415 tree
13416 resolve_nondeduced_context (tree orig_expr)
13417 {
13418   tree expr, offset, baselink;
13419   bool addr;
13420
13421   if (!type_unknown_p (orig_expr))
13422     return orig_expr;
13423
13424   expr = orig_expr;
13425   addr = false;
13426   offset = NULL_TREE;
13427   baselink = NULL_TREE;
13428
13429   if (TREE_CODE (expr) == ADDR_EXPR)
13430     {
13431       expr = TREE_OPERAND (expr, 0);
13432       addr = true;
13433     }
13434   if (TREE_CODE (expr) == OFFSET_REF)
13435     {
13436       offset = expr;
13437       expr = TREE_OPERAND (expr, 1);
13438     }
13439   if (TREE_CODE (expr) == BASELINK)
13440     {
13441       baselink = expr;
13442       expr = BASELINK_FUNCTIONS (expr);
13443     }
13444
13445   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
13446     {
13447       int good = 0;
13448       tree goodfn = NULL_TREE;
13449
13450       /* If we got some explicit template args, we need to plug them into
13451          the affected templates before we try to unify, in case the
13452          explicit args will completely resolve the templates in question.  */
13453
13454       tree expl_subargs = TREE_OPERAND (expr, 1);
13455       tree arg = TREE_OPERAND (expr, 0);
13456       tree badfn = NULL_TREE;
13457       tree badargs = NULL_TREE;
13458
13459       for (; arg; arg = OVL_NEXT (arg))
13460         {
13461           tree fn = OVL_CURRENT (arg);
13462           tree subargs, elem;
13463
13464           if (TREE_CODE (fn) != TEMPLATE_DECL)
13465             continue;
13466
13467           ++processing_template_decl;
13468           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
13469                                   expl_subargs, /*check_ret=*/false);
13470           if (subargs && !any_dependent_template_arguments_p (subargs))
13471             {
13472               elem = instantiate_template (fn, subargs, tf_none);
13473               if (elem == error_mark_node)
13474                 {
13475                   badfn = fn;
13476                   badargs = subargs;
13477                 }
13478               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
13479                 {
13480                   goodfn = elem;
13481                   ++good;
13482                 }
13483             }
13484           --processing_template_decl;
13485         }
13486       if (good == 1)
13487         {
13488           expr = goodfn;
13489           if (baselink)
13490             expr = build_baselink (BASELINK_BINFO (baselink),
13491                                    BASELINK_ACCESS_BINFO (baselink),
13492                                    expr, BASELINK_OPTYPE (baselink));
13493           if (offset)
13494             expr = build2 (OFFSET_REF, TREE_TYPE (expr),
13495                            TREE_OPERAND (offset, 0), expr);
13496           if (addr)
13497             expr = build_address (expr);
13498           return expr;
13499         }
13500       else if (good == 0 && badargs)
13501         /* There were no good options and at least one bad one, so let the
13502            user know what the problem is.  */
13503         instantiate_template (badfn, badargs, tf_warning_or_error);
13504     }
13505   return orig_expr;
13506 }
13507
13508 /* Subroutine of resolve_overloaded_unification; does deduction for a single
13509    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
13510    different overloads deduce different arguments for a given parm.
13511    ADDR_P is true if the expression for which deduction is being
13512    performed was of the form "& fn" rather than simply "fn".
13513
13514    Returns 1 on success.  */
13515
13516 static int
13517 try_one_overload (tree tparms,
13518                   tree orig_targs,
13519                   tree targs,
13520                   tree parm,
13521                   tree arg,
13522                   unification_kind_t strict,
13523                   int sub_strict,
13524                   bool addr_p)
13525 {
13526   int nargs;
13527   tree tempargs;
13528   int i;
13529
13530   /* [temp.deduct.type] A template-argument can be deduced from a pointer
13531      to function or pointer to member function argument if the set of
13532      overloaded functions does not contain function templates and at most
13533      one of a set of overloaded functions provides a unique match.
13534
13535      So if this is a template, just return success.  */
13536
13537   if (uses_template_parms (arg))
13538     return 1;
13539
13540   if (TREE_CODE (arg) == METHOD_TYPE)
13541     arg = build_ptrmemfunc_type (build_pointer_type (arg));
13542   else if (addr_p)
13543     arg = build_pointer_type (arg);
13544
13545   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
13546
13547   /* We don't copy orig_targs for this because if we have already deduced
13548      some template args from previous args, unify would complain when we
13549      try to deduce a template parameter for the same argument, even though
13550      there isn't really a conflict.  */
13551   nargs = TREE_VEC_LENGTH (targs);
13552   tempargs = make_tree_vec (nargs);
13553
13554   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
13555     return 0;
13556
13557   /* First make sure we didn't deduce anything that conflicts with
13558      explicitly specified args.  */
13559   for (i = nargs; i--; )
13560     {
13561       tree elt = TREE_VEC_ELT (tempargs, i);
13562       tree oldelt = TREE_VEC_ELT (orig_targs, i);
13563
13564       if (!elt)
13565         /*NOP*/;
13566       else if (uses_template_parms (elt))
13567         /* Since we're unifying against ourselves, we will fill in
13568            template args used in the function parm list with our own
13569            template parms.  Discard them.  */
13570         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
13571       else if (oldelt && !template_args_equal (oldelt, elt))
13572         return 0;
13573     }
13574
13575   for (i = nargs; i--; )
13576     {
13577       tree elt = TREE_VEC_ELT (tempargs, i);
13578
13579       if (elt)
13580         TREE_VEC_ELT (targs, i) = elt;
13581     }
13582
13583   return 1;
13584 }
13585
13586 /* PARM is a template class (perhaps with unbound template
13587    parameters).  ARG is a fully instantiated type.  If ARG can be
13588    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
13589    TARGS are as for unify.  */
13590
13591 static tree
13592 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
13593 {
13594   tree copy_of_targs;
13595
13596   if (!CLASSTYPE_TEMPLATE_INFO (arg)
13597       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
13598           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
13599     return NULL_TREE;
13600
13601   /* We need to make a new template argument vector for the call to
13602      unify.  If we used TARGS, we'd clutter it up with the result of
13603      the attempted unification, even if this class didn't work out.
13604      We also don't want to commit ourselves to all the unifications
13605      we've already done, since unification is supposed to be done on
13606      an argument-by-argument basis.  In other words, consider the
13607      following pathological case:
13608
13609        template <int I, int J, int K>
13610        struct S {};
13611
13612        template <int I, int J>
13613        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
13614
13615        template <int I, int J, int K>
13616        void f(S<I, J, K>, S<I, I, I>);
13617
13618        void g() {
13619          S<0, 0, 0> s0;
13620          S<0, 1, 2> s2;
13621
13622          f(s0, s2);
13623        }
13624
13625      Now, by the time we consider the unification involving `s2', we
13626      already know that we must have `f<0, 0, 0>'.  But, even though
13627      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
13628      because there are two ways to unify base classes of S<0, 1, 2>
13629      with S<I, I, I>.  If we kept the already deduced knowledge, we
13630      would reject the possibility I=1.  */
13631   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
13632
13633   /* If unification failed, we're done.  */
13634   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
13635              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
13636     return NULL_TREE;
13637
13638   return arg;
13639 }
13640
13641 /* Given a template type PARM and a class type ARG, find the unique
13642    base type in ARG that is an instance of PARM.  We do not examine
13643    ARG itself; only its base-classes.  If there is not exactly one
13644    appropriate base class, return NULL_TREE.  PARM may be the type of
13645    a partial specialization, as well as a plain template type.  Used
13646    by unify.  */
13647
13648 static tree
13649 get_template_base (tree tparms, tree targs, tree parm, tree arg)
13650 {
13651   tree rval = NULL_TREE;
13652   tree binfo;
13653
13654   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
13655
13656   binfo = TYPE_BINFO (complete_type (arg));
13657   if (!binfo)
13658     /* The type could not be completed.  */
13659     return NULL_TREE;
13660
13661   /* Walk in inheritance graph order.  The search order is not
13662      important, and this avoids multiple walks of virtual bases.  */
13663   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
13664     {
13665       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
13666
13667       if (r)
13668         {
13669           /* If there is more than one satisfactory baseclass, then:
13670
13671                [temp.deduct.call]
13672
13673               If they yield more than one possible deduced A, the type
13674               deduction fails.
13675
13676              applies.  */
13677           if (rval && !same_type_p (r, rval))
13678             return NULL_TREE;
13679
13680           rval = r;
13681         }
13682     }
13683
13684   return rval;
13685 }
13686
13687 /* Returns the level of DECL, which declares a template parameter.  */
13688
13689 static int
13690 template_decl_level (tree decl)
13691 {
13692   switch (TREE_CODE (decl))
13693     {
13694     case TYPE_DECL:
13695     case TEMPLATE_DECL:
13696       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
13697
13698     case PARM_DECL:
13699       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
13700
13701     default:
13702       gcc_unreachable ();
13703     }
13704   return 0;
13705 }
13706
13707 /* Decide whether ARG can be unified with PARM, considering only the
13708    cv-qualifiers of each type, given STRICT as documented for unify.
13709    Returns nonzero iff the unification is OK on that basis.  */
13710
13711 static int
13712 check_cv_quals_for_unify (int strict, tree arg, tree parm)
13713 {
13714   int arg_quals = cp_type_quals (arg);
13715   int parm_quals = cp_type_quals (parm);
13716
13717   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
13718       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
13719     {
13720       /*  Although a CVR qualifier is ignored when being applied to a
13721           substituted template parameter ([8.3.2]/1 for example), that
13722           does not apply during deduction [14.8.2.4]/1, (even though
13723           that is not explicitly mentioned, [14.8.2.4]/9 indicates
13724           this).  Except when we're allowing additional CV qualifiers
13725           at the outer level [14.8.2.1]/3,1st bullet.  */
13726       if ((TREE_CODE (arg) == REFERENCE_TYPE
13727            || TREE_CODE (arg) == FUNCTION_TYPE
13728            || TREE_CODE (arg) == METHOD_TYPE)
13729           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
13730         return 0;
13731
13732       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
13733           && (parm_quals & TYPE_QUAL_RESTRICT))
13734         return 0;
13735     }
13736
13737   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
13738       && (arg_quals & parm_quals) != parm_quals)
13739     return 0;
13740
13741   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
13742       && (parm_quals & arg_quals) != arg_quals)
13743     return 0;
13744
13745   return 1;
13746 }
13747
13748 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
13749 void 
13750 template_parm_level_and_index (tree parm, int* level, int* index)
13751 {
13752   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
13753       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
13754       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
13755     {
13756       *index = TEMPLATE_TYPE_IDX (parm);
13757       *level = TEMPLATE_TYPE_LEVEL (parm);
13758     }
13759   else
13760     {
13761       *index = TEMPLATE_PARM_IDX (parm);
13762       *level = TEMPLATE_PARM_LEVEL (parm);
13763     }
13764 }
13765
13766 /* Unifies the remaining arguments in PACKED_ARGS with the pack
13767    expansion at the end of PACKED_PARMS. Returns 0 if the type
13768    deduction succeeds, 1 otherwise. STRICT is the same as in
13769    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
13770    call argument list. We'll need to adjust the arguments to make them
13771    types. SUBR tells us if this is from a recursive call to
13772    type_unification_real.  */
13773 int
13774 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
13775                       tree packed_args, int strict, bool call_args_p,
13776                       bool subr)
13777 {
13778   tree parm 
13779     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
13780   tree pattern = PACK_EXPANSION_PATTERN (parm);
13781   tree pack, packs = NULL_TREE;
13782   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
13783   int len = TREE_VEC_LENGTH (packed_args);
13784
13785   /* Determine the parameter packs we will be deducing from the
13786      pattern, and record their current deductions.  */
13787   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
13788        pack; pack = TREE_CHAIN (pack))
13789     {
13790       tree parm_pack = TREE_VALUE (pack);
13791       int idx, level;
13792
13793       /* Determine the index and level of this parameter pack.  */
13794       template_parm_level_and_index (parm_pack, &level, &idx);
13795
13796       /* Keep track of the parameter packs and their corresponding
13797          argument packs.  */
13798       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
13799       TREE_TYPE (packs) = make_tree_vec (len - start);
13800     }
13801   
13802   /* Loop through all of the arguments that have not yet been
13803      unified and unify each with the pattern.  */
13804   for (i = start; i < len; i++)
13805     {
13806       tree parm = pattern;
13807
13808       /* For each parameter pack, clear out the deduced value so that
13809          we can deduce it again.  */
13810       for (pack = packs; pack; pack = TREE_CHAIN (pack))
13811         {
13812           int idx, level;
13813           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
13814
13815           TMPL_ARG (targs, level, idx) = NULL_TREE;
13816         }
13817
13818       /* Unify the pattern with the current argument.  */
13819       {
13820         tree arg = TREE_VEC_ELT (packed_args, i);
13821         tree arg_expr = NULL_TREE;
13822         int arg_strict = strict;
13823         bool skip_arg_p = false;
13824
13825         if (call_args_p)
13826           {
13827             int sub_strict;
13828
13829             /* This mirrors what we do in type_unification_real.  */
13830             switch (strict)
13831               {
13832               case DEDUCE_CALL:
13833                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
13834                               | UNIFY_ALLOW_MORE_CV_QUAL
13835                               | UNIFY_ALLOW_DERIVED);
13836                 break;
13837                 
13838               case DEDUCE_CONV:
13839                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
13840                 break;
13841                 
13842               case DEDUCE_EXACT:
13843                 sub_strict = UNIFY_ALLOW_NONE;
13844                 break;
13845                 
13846               default:
13847                 gcc_unreachable ();
13848               }
13849
13850             if (!TYPE_P (arg))
13851               {
13852                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
13853                 if (type_unknown_p (arg))
13854                   {
13855                     /* [temp.deduct.type] A template-argument can be
13856                        deduced from a pointer to function or pointer
13857                        to member function argument if the set of
13858                        overloaded functions does not contain function
13859                        templates and at most one of a set of
13860                        overloaded functions provides a unique
13861                        match.  */
13862
13863                     if (resolve_overloaded_unification
13864                         (tparms, targs, parm, arg,
13865                          (unification_kind_t) strict,
13866                          sub_strict)
13867                         != 0)
13868                       return 1;
13869                     skip_arg_p = true;
13870                   }
13871
13872                 if (!skip_arg_p)
13873                   {
13874                     arg_expr = arg;
13875                     arg = unlowered_expr_type (arg);
13876                     if (arg == error_mark_node)
13877                       return 1;
13878                   }
13879               }
13880       
13881             arg_strict = sub_strict;
13882
13883             if (!subr)
13884               arg_strict |= 
13885                 maybe_adjust_types_for_deduction ((unification_kind_t) strict,
13886                                                   &parm, &arg, arg_expr);
13887           }
13888
13889         if (!skip_arg_p)
13890           {
13891             if (unify (tparms, targs, parm, arg, arg_strict))
13892               return 1;
13893           }
13894       }
13895
13896       /* For each parameter pack, collect the deduced value.  */
13897       for (pack = packs; pack; pack = TREE_CHAIN (pack))
13898         {
13899           int idx, level;
13900           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
13901
13902           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
13903             TMPL_ARG (targs, level, idx);
13904         }
13905     }
13906
13907   /* Verify that the results of unification with the parameter packs
13908      produce results consistent with what we've seen before, and make
13909      the deduced argument packs available.  */
13910   for (pack = packs; pack; pack = TREE_CHAIN (pack))
13911     {
13912       tree old_pack = TREE_VALUE (pack);
13913       tree new_args = TREE_TYPE (pack);
13914       int i, len = TREE_VEC_LENGTH (new_args);
13915       bool nondeduced_p = false;
13916
13917       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
13918          actually deduce anything.  */
13919       for (i = 0; i < len && !nondeduced_p; ++i)
13920         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
13921           nondeduced_p = true;
13922       if (nondeduced_p)
13923         continue;
13924
13925       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
13926         {
13927           /* Prepend the explicit arguments onto NEW_ARGS.  */
13928           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
13929           tree old_args = new_args;
13930           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
13931           int len = explicit_len + TREE_VEC_LENGTH (old_args);
13932
13933           /* Copy the explicit arguments.  */
13934           new_args = make_tree_vec (len);
13935           for (i = 0; i < explicit_len; i++)
13936             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
13937
13938           /* Copy the deduced arguments.  */
13939           for (; i < len; i++)
13940             TREE_VEC_ELT (new_args, i) =
13941               TREE_VEC_ELT (old_args, i - explicit_len);
13942         }
13943
13944       if (!old_pack)
13945         {
13946           tree result;
13947           int idx, level;
13948           
13949           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
13950
13951           /* Build the deduced *_ARGUMENT_PACK.  */
13952           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
13953             {
13954               result = make_node (NONTYPE_ARGUMENT_PACK);
13955               TREE_TYPE (result) = 
13956                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
13957               TREE_CONSTANT (result) = 1;
13958             }
13959           else
13960             result = cxx_make_type (TYPE_ARGUMENT_PACK);
13961
13962           SET_ARGUMENT_PACK_ARGS (result, new_args);
13963
13964           /* Note the deduced argument packs for this parameter
13965              pack.  */
13966           TMPL_ARG (targs, level, idx) = result;
13967         }
13968       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
13969                && (ARGUMENT_PACK_ARGS (old_pack) 
13970                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
13971         {
13972           /* We only had the explicitly-provided arguments before, but
13973              now we have a complete set of arguments.  */
13974           int idx, level;
13975           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
13976           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
13977
13978           /* Keep the original deduced argument pack.  */
13979           TMPL_ARG (targs, level, idx) = old_pack;
13980
13981           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
13982           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
13983           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
13984         }
13985       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
13986                                     new_args))
13987         /* Inconsistent unification of this parameter pack.  */
13988         return 1;
13989       else
13990         {
13991           int idx, level;
13992           
13993           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
13994
13995           /* Keep the original deduced argument pack.  */
13996           TMPL_ARG (targs, level, idx) = old_pack;
13997         }
13998     }
13999
14000   return 0;
14001 }
14002
14003 /* Deduce the value of template parameters.  TPARMS is the (innermost)
14004    set of template parameters to a template.  TARGS is the bindings
14005    for those template parameters, as determined thus far; TARGS may
14006    include template arguments for outer levels of template parameters
14007    as well.  PARM is a parameter to a template function, or a
14008    subcomponent of that parameter; ARG is the corresponding argument.
14009    This function attempts to match PARM with ARG in a manner
14010    consistent with the existing assignments in TARGS.  If more values
14011    are deduced, then TARGS is updated.
14012
14013    Returns 0 if the type deduction succeeds, 1 otherwise.  The
14014    parameter STRICT is a bitwise or of the following flags:
14015
14016      UNIFY_ALLOW_NONE:
14017        Require an exact match between PARM and ARG.
14018      UNIFY_ALLOW_MORE_CV_QUAL:
14019        Allow the deduced ARG to be more cv-qualified (by qualification
14020        conversion) than ARG.
14021      UNIFY_ALLOW_LESS_CV_QUAL:
14022        Allow the deduced ARG to be less cv-qualified than ARG.
14023      UNIFY_ALLOW_DERIVED:
14024        Allow the deduced ARG to be a template base class of ARG,
14025        or a pointer to a template base class of the type pointed to by
14026        ARG.
14027      UNIFY_ALLOW_INTEGER:
14028        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
14029        case for more information.
14030      UNIFY_ALLOW_OUTER_LEVEL:
14031        This is the outermost level of a deduction. Used to determine validity
14032        of qualification conversions. A valid qualification conversion must
14033        have const qualified pointers leading up to the inner type which
14034        requires additional CV quals, except at the outer level, where const
14035        is not required [conv.qual]. It would be normal to set this flag in
14036        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
14037      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
14038        This is the outermost level of a deduction, and PARM can be more CV
14039        qualified at this point.
14040      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
14041        This is the outermost level of a deduction, and PARM can be less CV
14042        qualified at this point.  */
14043
14044 static int
14045 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
14046 {
14047   int idx;
14048   tree targ;
14049   tree tparm;
14050   int strict_in = strict;
14051
14052   /* I don't think this will do the right thing with respect to types.
14053      But the only case I've seen it in so far has been array bounds, where
14054      signedness is the only information lost, and I think that will be
14055      okay.  */
14056   while (TREE_CODE (parm) == NOP_EXPR)
14057     parm = TREE_OPERAND (parm, 0);
14058
14059   if (arg == error_mark_node)
14060     return 1;
14061   if (arg == unknown_type_node
14062       || arg == init_list_type_node)
14063     /* We can't deduce anything from this, but we might get all the
14064        template args from other function args.  */
14065     return 0;
14066
14067   /* If PARM uses template parameters, then we can't bail out here,
14068      even if ARG == PARM, since we won't record unifications for the
14069      template parameters.  We might need them if we're trying to
14070      figure out which of two things is more specialized.  */
14071   if (arg == parm && !uses_template_parms (parm))
14072     return 0;
14073
14074   /* Handle init lists early, so the rest of the function can assume
14075      we're dealing with a type. */
14076   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
14077     {
14078       tree elt, elttype;
14079       unsigned i;
14080       tree orig_parm = parm;
14081
14082       /* Replace T with std::initializer_list<T> for deduction.  */
14083       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14084           && flag_deduce_init_list)
14085         parm = listify (parm);
14086
14087       if (!is_std_init_list (parm))
14088         /* We can only deduce from an initializer list argument if the
14089            parameter is std::initializer_list; otherwise this is a
14090            non-deduced context. */
14091         return 0;
14092
14093       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
14094
14095       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
14096         {
14097           int elt_strict = strict;
14098           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
14099             {
14100               tree type = TREE_TYPE (elt);
14101               /* It should only be possible to get here for a call.  */
14102               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
14103               elt_strict |= maybe_adjust_types_for_deduction
14104                 (DEDUCE_CALL, &elttype, &type, elt);
14105               elt = type;
14106             }
14107
14108           if (unify (tparms, targs, elttype, elt, elt_strict))
14109             return 1;
14110         }
14111
14112       /* If the std::initializer_list<T> deduction worked, replace the
14113          deduced A with std::initializer_list<A>.  */
14114       if (orig_parm != parm)
14115         {
14116           idx = TEMPLATE_TYPE_IDX (orig_parm);
14117           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
14118           targ = listify (targ);
14119           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
14120         }
14121       return 0;
14122     }
14123
14124   /* Immediately reject some pairs that won't unify because of
14125      cv-qualification mismatches.  */
14126   if (TREE_CODE (arg) == TREE_CODE (parm)
14127       && TYPE_P (arg)
14128       /* It is the elements of the array which hold the cv quals of an array
14129          type, and the elements might be template type parms. We'll check
14130          when we recurse.  */
14131       && TREE_CODE (arg) != ARRAY_TYPE
14132       /* We check the cv-qualifiers when unifying with template type
14133          parameters below.  We want to allow ARG `const T' to unify with
14134          PARM `T' for example, when computing which of two templates
14135          is more specialized, for example.  */
14136       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
14137       && !check_cv_quals_for_unify (strict_in, arg, parm))
14138     return 1;
14139
14140   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
14141       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
14142     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
14143   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
14144   strict &= ~UNIFY_ALLOW_DERIVED;
14145   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
14146   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
14147
14148   switch (TREE_CODE (parm))
14149     {
14150     case TYPENAME_TYPE:
14151     case SCOPE_REF:
14152     case UNBOUND_CLASS_TEMPLATE:
14153       /* In a type which contains a nested-name-specifier, template
14154          argument values cannot be deduced for template parameters used
14155          within the nested-name-specifier.  */
14156       return 0;
14157
14158     case TEMPLATE_TYPE_PARM:
14159     case TEMPLATE_TEMPLATE_PARM:
14160     case BOUND_TEMPLATE_TEMPLATE_PARM:
14161       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
14162       if (tparm == error_mark_node)
14163         return 1;
14164
14165       if (TEMPLATE_TYPE_LEVEL (parm)
14166           != template_decl_level (tparm))
14167         /* The PARM is not one we're trying to unify.  Just check
14168            to see if it matches ARG.  */
14169         return (TREE_CODE (arg) == TREE_CODE (parm)
14170                 && same_type_p (parm, arg)) ? 0 : 1;
14171       idx = TEMPLATE_TYPE_IDX (parm);
14172       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
14173       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
14174
14175       /* Check for mixed types and values.  */
14176       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14177            && TREE_CODE (tparm) != TYPE_DECL)
14178           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
14179               && TREE_CODE (tparm) != TEMPLATE_DECL))
14180         return 1;
14181
14182       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
14183         {
14184           /* ARG must be constructed from a template class or a template
14185              template parameter.  */
14186           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
14187               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
14188             return 1;
14189
14190           {
14191             tree parmvec = TYPE_TI_ARGS (parm);
14192             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
14193             tree parm_parms 
14194               = DECL_INNERMOST_TEMPLATE_PARMS
14195                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
14196             int i, len;
14197             int parm_variadic_p = 0;
14198
14199             /* The resolution to DR150 makes clear that default
14200                arguments for an N-argument may not be used to bind T
14201                to a template template parameter with fewer than N
14202                parameters.  It is not safe to permit the binding of
14203                default arguments as an extension, as that may change
14204                the meaning of a conforming program.  Consider:
14205
14206                   struct Dense { static const unsigned int dim = 1; };
14207
14208                   template <template <typename> class View,
14209                             typename Block>
14210                   void operator+(float, View<Block> const&);
14211
14212                   template <typename Block,
14213                             unsigned int Dim = Block::dim>
14214                   struct Lvalue_proxy { operator float() const; };
14215
14216                   void
14217                   test_1d (void) {
14218                     Lvalue_proxy<Dense> p;
14219                     float b;
14220                     b + p;
14221                   }
14222
14223               Here, if Lvalue_proxy is permitted to bind to View, then
14224               the global operator+ will be used; if they are not, the
14225               Lvalue_proxy will be converted to float.  */
14226             if (coerce_template_parms (parm_parms,
14227                                        argvec,
14228                                        TYPE_TI_TEMPLATE (parm),
14229                                        tf_none,
14230                                        /*require_all_args=*/true,
14231                                        /*use_default_args=*/false)
14232                 == error_mark_node)
14233               return 1;
14234
14235             /* Deduce arguments T, i from TT<T> or TT<i>.
14236                We check each element of PARMVEC and ARGVEC individually
14237                rather than the whole TREE_VEC since they can have
14238                different number of elements.  */
14239
14240             parmvec = expand_template_argument_pack (parmvec);
14241             argvec = expand_template_argument_pack (argvec);
14242
14243             len = TREE_VEC_LENGTH (parmvec);
14244
14245             /* Check if the parameters end in a pack, making them
14246                variadic.  */
14247             if (len > 0
14248                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
14249               parm_variadic_p = 1;
14250             
14251             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
14252               return 1;
14253
14254              for (i = 0; i < len - parm_variadic_p; ++i)
14255               {
14256                 if (unify (tparms, targs,
14257                            TREE_VEC_ELT (parmvec, i),
14258                            TREE_VEC_ELT (argvec, i),
14259                            UNIFY_ALLOW_NONE))
14260                   return 1;
14261               }
14262
14263             if (parm_variadic_p
14264                 && unify_pack_expansion (tparms, targs,
14265                                          parmvec, argvec,
14266                                          UNIFY_ALLOW_NONE,
14267                                          /*call_args_p=*/false,
14268                                          /*subr=*/false))
14269               return 1;
14270           }
14271           arg = TYPE_TI_TEMPLATE (arg);
14272
14273           /* Fall through to deduce template name.  */
14274         }
14275
14276       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
14277           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
14278         {
14279           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
14280
14281           /* Simple cases: Value already set, does match or doesn't.  */
14282           if (targ != NULL_TREE && template_args_equal (targ, arg))
14283             return 0;
14284           else if (targ)
14285             return 1;
14286         }
14287       else
14288         {
14289           /* If PARM is `const T' and ARG is only `int', we don't have
14290              a match unless we are allowing additional qualification.
14291              If ARG is `const int' and PARM is just `T' that's OK;
14292              that binds `const int' to `T'.  */
14293           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
14294                                          arg, parm))
14295             return 1;
14296
14297           /* Consider the case where ARG is `const volatile int' and
14298              PARM is `const T'.  Then, T should be `volatile int'.  */
14299           arg = cp_build_qualified_type_real
14300             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
14301           if (arg == error_mark_node)
14302             return 1;
14303
14304           /* Simple cases: Value already set, does match or doesn't.  */
14305           if (targ != NULL_TREE && same_type_p (targ, arg))
14306             return 0;
14307           else if (targ)
14308             return 1;
14309
14310           /* Make sure that ARG is not a variable-sized array.  (Note
14311              that were talking about variable-sized arrays (like
14312              `int[n]'), rather than arrays of unknown size (like
14313              `int[]').)  We'll get very confused by such a type since
14314              the bound of the array will not be computable in an
14315              instantiation.  Besides, such types are not allowed in
14316              ISO C++, so we can do as we please here.  */
14317           if (variably_modified_type_p (arg, NULL_TREE))
14318             return 1;
14319
14320           /* Strip typedefs as in convert_template_argument.  */
14321           arg = strip_typedefs (arg);
14322         }
14323
14324       /* If ARG is a parameter pack or an expansion, we cannot unify
14325          against it unless PARM is also a parameter pack.  */
14326       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
14327           && !template_parameter_pack_p (parm))
14328         return 1;
14329
14330       /* If the argument deduction results is a METHOD_TYPE,
14331          then there is a problem.
14332          METHOD_TYPE doesn't map to any real C++ type the result of
14333          the deduction can not be of that type.  */
14334       if (TREE_CODE (arg) == METHOD_TYPE)
14335         return 1;
14336
14337       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
14338       return 0;
14339
14340     case TEMPLATE_PARM_INDEX:
14341       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
14342       if (tparm == error_mark_node)
14343         return 1;
14344
14345       if (TEMPLATE_PARM_LEVEL (parm)
14346           != template_decl_level (tparm))
14347         /* The PARM is not one we're trying to unify.  Just check
14348            to see if it matches ARG.  */
14349         return !(TREE_CODE (arg) == TREE_CODE (parm)
14350                  && cp_tree_equal (parm, arg));
14351
14352       idx = TEMPLATE_PARM_IDX (parm);
14353       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
14354
14355       if (targ)
14356         return !cp_tree_equal (targ, arg);
14357
14358       /* [temp.deduct.type] If, in the declaration of a function template
14359          with a non-type template-parameter, the non-type
14360          template-parameter is used in an expression in the function
14361          parameter-list and, if the corresponding template-argument is
14362          deduced, the template-argument type shall match the type of the
14363          template-parameter exactly, except that a template-argument
14364          deduced from an array bound may be of any integral type.
14365          The non-type parameter might use already deduced type parameters.  */
14366       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
14367       if (!TREE_TYPE (arg))
14368         /* Template-parameter dependent expression.  Just accept it for now.
14369            It will later be processed in convert_template_argument.  */
14370         ;
14371       else if (same_type_p (TREE_TYPE (arg), tparm))
14372         /* OK */;
14373       else if ((strict & UNIFY_ALLOW_INTEGER)
14374                && (TREE_CODE (tparm) == INTEGER_TYPE
14375                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
14376         /* Convert the ARG to the type of PARM; the deduced non-type
14377            template argument must exactly match the types of the
14378            corresponding parameter.  */
14379         arg = fold (build_nop (tparm, arg));
14380       else if (uses_template_parms (tparm))
14381         /* We haven't deduced the type of this parameter yet.  Try again
14382            later.  */
14383         return 0;
14384       else
14385         return 1;
14386
14387       /* If ARG is a parameter pack or an expansion, we cannot unify
14388          against it unless PARM is also a parameter pack.  */
14389       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
14390           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
14391         return 1;
14392
14393       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
14394       return 0;
14395
14396     case PTRMEM_CST:
14397      {
14398         /* A pointer-to-member constant can be unified only with
14399          another constant.  */
14400       if (TREE_CODE (arg) != PTRMEM_CST)
14401         return 1;
14402
14403       /* Just unify the class member. It would be useless (and possibly
14404          wrong, depending on the strict flags) to unify also
14405          PTRMEM_CST_CLASS, because we want to be sure that both parm and
14406          arg refer to the same variable, even if through different
14407          classes. For instance:
14408
14409          struct A { int x; };
14410          struct B : A { };
14411
14412          Unification of &A::x and &B::x must succeed.  */
14413       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
14414                     PTRMEM_CST_MEMBER (arg), strict);
14415      }
14416
14417     case POINTER_TYPE:
14418       {
14419         if (TREE_CODE (arg) != POINTER_TYPE)
14420           return 1;
14421
14422         /* [temp.deduct.call]
14423
14424            A can be another pointer or pointer to member type that can
14425            be converted to the deduced A via a qualification
14426            conversion (_conv.qual_).
14427
14428            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
14429            This will allow for additional cv-qualification of the
14430            pointed-to types if appropriate.  */
14431
14432         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
14433           /* The derived-to-base conversion only persists through one
14434              level of pointers.  */
14435           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
14436
14437         return unify (tparms, targs, TREE_TYPE (parm),
14438                       TREE_TYPE (arg), strict);
14439       }
14440
14441     case REFERENCE_TYPE:
14442       if (TREE_CODE (arg) != REFERENCE_TYPE)
14443         return 1;
14444       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
14445                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
14446
14447     case ARRAY_TYPE:
14448       if (TREE_CODE (arg) != ARRAY_TYPE)
14449         return 1;
14450       if ((TYPE_DOMAIN (parm) == NULL_TREE)
14451           != (TYPE_DOMAIN (arg) == NULL_TREE))
14452         return 1;
14453       if (TYPE_DOMAIN (parm) != NULL_TREE)
14454         {
14455           tree parm_max;
14456           tree arg_max;
14457           bool parm_cst;
14458           bool arg_cst;
14459
14460           /* Our representation of array types uses "N - 1" as the
14461              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
14462              not an integer constant.  We cannot unify arbitrarily
14463              complex expressions, so we eliminate the MINUS_EXPRs
14464              here.  */
14465           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
14466           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
14467           if (!parm_cst)
14468             {
14469               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
14470               parm_max = TREE_OPERAND (parm_max, 0);
14471             }
14472           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
14473           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
14474           if (!arg_cst)
14475             {
14476               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
14477                  trying to unify the type of a variable with the type
14478                  of a template parameter.  For example:
14479
14480                    template <unsigned int N>
14481                    void f (char (&) [N]);
14482                    int g(); 
14483                    void h(int i) {
14484                      char a[g(i)];
14485                      f(a); 
14486                    }
14487
14488                 Here, the type of the ARG will be "int [g(i)]", and
14489                 may be a SAVE_EXPR, etc.  */
14490               if (TREE_CODE (arg_max) != MINUS_EXPR)
14491                 return 1;
14492               arg_max = TREE_OPERAND (arg_max, 0);
14493             }
14494
14495           /* If only one of the bounds used a MINUS_EXPR, compensate
14496              by adding one to the other bound.  */
14497           if (parm_cst && !arg_cst)
14498             parm_max = fold_build2_loc (input_location, PLUS_EXPR,
14499                                     integer_type_node,
14500                                     parm_max,
14501                                     integer_one_node);
14502           else if (arg_cst && !parm_cst)
14503             arg_max = fold_build2_loc (input_location, PLUS_EXPR,
14504                                    integer_type_node,
14505                                    arg_max,
14506                                    integer_one_node);
14507
14508           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
14509             return 1;
14510         }
14511       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
14512                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
14513
14514     case REAL_TYPE:
14515     case COMPLEX_TYPE:
14516     case VECTOR_TYPE:
14517     case INTEGER_TYPE:
14518     case BOOLEAN_TYPE:
14519     case ENUMERAL_TYPE:
14520     case VOID_TYPE:
14521       if (TREE_CODE (arg) != TREE_CODE (parm))
14522         return 1;
14523
14524       /* We have already checked cv-qualification at the top of the
14525          function.  */
14526       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
14527         return 1;
14528
14529       /* As far as unification is concerned, this wins.  Later checks
14530          will invalidate it if necessary.  */
14531       return 0;
14532
14533       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
14534       /* Type INTEGER_CST can come from ordinary constant template args.  */
14535     case INTEGER_CST:
14536       while (TREE_CODE (arg) == NOP_EXPR)
14537         arg = TREE_OPERAND (arg, 0);
14538
14539       if (TREE_CODE (arg) != INTEGER_CST)
14540         return 1;
14541       return !tree_int_cst_equal (parm, arg);
14542
14543     case TREE_VEC:
14544       {
14545         int i;
14546         if (TREE_CODE (arg) != TREE_VEC)
14547           return 1;
14548         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
14549           return 1;
14550         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
14551           if (unify (tparms, targs,
14552                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
14553                      UNIFY_ALLOW_NONE))
14554             return 1;
14555         return 0;
14556       }
14557
14558     case RECORD_TYPE:
14559     case UNION_TYPE:
14560       if (TREE_CODE (arg) != TREE_CODE (parm))
14561         return 1;
14562
14563       if (TYPE_PTRMEMFUNC_P (parm))
14564         {
14565           if (!TYPE_PTRMEMFUNC_P (arg))
14566             return 1;
14567
14568           return unify (tparms, targs,
14569                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
14570                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
14571                         strict);
14572         }
14573
14574       if (CLASSTYPE_TEMPLATE_INFO (parm))
14575         {
14576           tree t = NULL_TREE;
14577
14578           if (strict_in & UNIFY_ALLOW_DERIVED)
14579             {
14580               /* First, we try to unify the PARM and ARG directly.  */
14581               t = try_class_unification (tparms, targs,
14582                                          parm, arg);
14583
14584               if (!t)
14585                 {
14586                   /* Fallback to the special case allowed in
14587                      [temp.deduct.call]:
14588
14589                        If P is a class, and P has the form
14590                        template-id, then A can be a derived class of
14591                        the deduced A.  Likewise, if P is a pointer to
14592                        a class of the form template-id, A can be a
14593                        pointer to a derived class pointed to by the
14594                        deduced A.  */
14595                   t = get_template_base (tparms, targs, parm, arg);
14596
14597                   if (!t)
14598                     return 1;
14599                 }
14600             }
14601           else if (CLASSTYPE_TEMPLATE_INFO (arg)
14602                    && (CLASSTYPE_TI_TEMPLATE (parm)
14603                        == CLASSTYPE_TI_TEMPLATE (arg)))
14604             /* Perhaps PARM is something like S<U> and ARG is S<int>.
14605                Then, we should unify `int' and `U'.  */
14606             t = arg;
14607           else
14608             /* There's no chance of unification succeeding.  */
14609             return 1;
14610
14611           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
14612                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
14613         }
14614       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
14615         return 1;
14616       return 0;
14617
14618     case METHOD_TYPE:
14619     case FUNCTION_TYPE:
14620       {
14621         unsigned int nargs;
14622         tree *args;
14623         tree a;
14624         unsigned int i;
14625
14626         if (TREE_CODE (arg) != TREE_CODE (parm))
14627           return 1;
14628
14629         /* CV qualifications for methods can never be deduced, they must
14630            match exactly.  We need to check them explicitly here,
14631            because type_unification_real treats them as any other
14632            cv-qualified parameter.  */
14633         if (TREE_CODE (parm) == METHOD_TYPE
14634             && (!check_cv_quals_for_unify
14635                 (UNIFY_ALLOW_NONE,
14636                  TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
14637                  TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
14638           return 1;
14639
14640         if (unify (tparms, targs, TREE_TYPE (parm),
14641                    TREE_TYPE (arg), UNIFY_ALLOW_NONE))
14642           return 1;
14643
14644         nargs = list_length (TYPE_ARG_TYPES (arg));
14645         args = XALLOCAVEC (tree, nargs);
14646         for (a = TYPE_ARG_TYPES (arg), i = 0;
14647              a != NULL_TREE && a != void_list_node;
14648              a = TREE_CHAIN (a), ++i)
14649           args[i] = TREE_VALUE (a);
14650         nargs = i;
14651
14652         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
14653                                       args, nargs, 1, DEDUCE_EXACT,
14654                                       LOOKUP_NORMAL);
14655       }
14656
14657     case OFFSET_TYPE:
14658       /* Unify a pointer to member with a pointer to member function, which
14659          deduces the type of the member as a function type. */
14660       if (TYPE_PTRMEMFUNC_P (arg))
14661         {
14662           tree method_type;
14663           tree fntype;
14664           cp_cv_quals cv_quals;
14665
14666           /* Check top-level cv qualifiers */
14667           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
14668             return 1;
14669
14670           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
14671                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
14672             return 1;
14673
14674           /* Determine the type of the function we are unifying against. */
14675           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
14676           fntype =
14677             build_function_type (TREE_TYPE (method_type),
14678                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
14679
14680           /* Extract the cv-qualifiers of the member function from the
14681              implicit object parameter and place them on the function
14682              type to be restored later. */
14683           cv_quals =
14684             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
14685           fntype = build_qualified_type (fntype, cv_quals);
14686           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
14687         }
14688
14689       if (TREE_CODE (arg) != OFFSET_TYPE)
14690         return 1;
14691       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
14692                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
14693         return 1;
14694       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
14695                     strict);
14696
14697     case CONST_DECL:
14698       if (DECL_TEMPLATE_PARM_P (parm))
14699         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
14700       if (arg != integral_constant_value (parm))
14701         return 1;
14702       return 0;
14703
14704     case FIELD_DECL:
14705     case TEMPLATE_DECL:
14706       /* Matched cases are handled by the ARG == PARM test above.  */
14707       return 1;
14708
14709     case TYPE_ARGUMENT_PACK:
14710     case NONTYPE_ARGUMENT_PACK:
14711       {
14712         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
14713         tree packed_args = ARGUMENT_PACK_ARGS (arg);
14714         int i, len = TREE_VEC_LENGTH (packed_parms);
14715         int argslen = TREE_VEC_LENGTH (packed_args);
14716         int parm_variadic_p = 0;
14717
14718         for (i = 0; i < len; ++i)
14719           {
14720             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
14721               {
14722                 if (i == len - 1)
14723                   /* We can unify against something with a trailing
14724                      parameter pack.  */
14725                   parm_variadic_p = 1;
14726                 else
14727                   /* Since there is something following the pack
14728                      expansion, we cannot unify this template argument
14729                      list.  */
14730                   return 0;
14731               }
14732           }
14733           
14734
14735         /* If we don't have enough arguments to satisfy the parameters
14736            (not counting the pack expression at the end), or we have
14737            too many arguments for a parameter list that doesn't end in
14738            a pack expression, we can't unify.  */
14739         if (argslen < (len - parm_variadic_p)
14740             || (argslen > len && !parm_variadic_p))
14741           return 1;
14742
14743         /* Unify all of the parameters that precede the (optional)
14744            pack expression.  */
14745         for (i = 0; i < len - parm_variadic_p; ++i)
14746           {
14747             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
14748                        TREE_VEC_ELT (packed_args, i), strict))
14749               return 1;
14750           }
14751
14752         if (parm_variadic_p)
14753           return unify_pack_expansion (tparms, targs, 
14754                                        packed_parms, packed_args,
14755                                        strict, /*call_args_p=*/false,
14756                                        /*subr=*/false);
14757         return 0;
14758       }
14759
14760       break;
14761
14762     case TYPEOF_TYPE:
14763     case DECLTYPE_TYPE:
14764       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
14765          nodes.  */
14766       return 0;
14767
14768     case ERROR_MARK:
14769       /* Unification fails if we hit an error node.  */
14770       return 1;
14771
14772     default:
14773       gcc_assert (EXPR_P (parm));
14774
14775       /* We must be looking at an expression.  This can happen with
14776          something like:
14777
14778            template <int I>
14779            void foo(S<I>, S<I + 2>);
14780
14781          This is a "nondeduced context":
14782
14783            [deduct.type]
14784
14785            The nondeduced contexts are:
14786
14787            --A type that is a template-id in which one or more of
14788              the template-arguments is an expression that references
14789              a template-parameter.
14790
14791          In these cases, we assume deduction succeeded, but don't
14792          actually infer any unifications.  */
14793
14794       if (!uses_template_parms (parm)
14795           && !template_args_equal (parm, arg))
14796         return 1;
14797       else
14798         return 0;
14799     }
14800 }
14801 \f
14802 /* Note that DECL can be defined in this translation unit, if
14803    required.  */
14804
14805 static void
14806 mark_definable (tree decl)
14807 {
14808   tree clone;
14809   DECL_NOT_REALLY_EXTERN (decl) = 1;
14810   FOR_EACH_CLONE (clone, decl)
14811     DECL_NOT_REALLY_EXTERN (clone) = 1;
14812 }
14813
14814 /* Called if RESULT is explicitly instantiated, or is a member of an
14815    explicitly instantiated class.  */
14816
14817 void
14818 mark_decl_instantiated (tree result, int extern_p)
14819 {
14820   SET_DECL_EXPLICIT_INSTANTIATION (result);
14821
14822   /* If this entity has already been written out, it's too late to
14823      make any modifications.  */
14824   if (TREE_ASM_WRITTEN (result))
14825     return;
14826
14827   if (TREE_CODE (result) != FUNCTION_DECL)
14828     /* The TREE_PUBLIC flag for function declarations will have been
14829        set correctly by tsubst.  */
14830     TREE_PUBLIC (result) = 1;
14831
14832   /* This might have been set by an earlier implicit instantiation.  */
14833   DECL_COMDAT (result) = 0;
14834
14835   if (extern_p)
14836     DECL_NOT_REALLY_EXTERN (result) = 0;
14837   else
14838     {
14839       mark_definable (result);
14840       /* Always make artificials weak.  */
14841       if (DECL_ARTIFICIAL (result) && flag_weak)
14842         comdat_linkage (result);
14843       /* For WIN32 we also want to put explicit instantiations in
14844          linkonce sections.  */
14845       else if (TREE_PUBLIC (result))
14846         maybe_make_one_only (result);
14847     }
14848
14849   /* If EXTERN_P, then this function will not be emitted -- unless
14850      followed by an explicit instantiation, at which point its linkage
14851      will be adjusted.  If !EXTERN_P, then this function will be
14852      emitted here.  In neither circumstance do we want
14853      import_export_decl to adjust the linkage.  */
14854   DECL_INTERFACE_KNOWN (result) = 1;
14855 }
14856
14857 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
14858    important template arguments.  If any are missing, we check whether
14859    they're important by using error_mark_node for substituting into any
14860    args that were used for partial ordering (the ones between ARGS and END)
14861    and seeing if it bubbles up.  */
14862
14863 static bool
14864 check_undeduced_parms (tree targs, tree args, tree end)
14865 {
14866   bool found = false;
14867   int i;
14868   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
14869     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
14870       {
14871         found = true;
14872         TREE_VEC_ELT (targs, i) = error_mark_node;
14873       }
14874   if (found)
14875     {
14876       for (; args != end; args = TREE_CHAIN (args))
14877         {
14878           tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
14879           if (substed == error_mark_node)
14880             return true;
14881         }
14882     }
14883   return false;
14884 }
14885
14886 /* Given two function templates PAT1 and PAT2, return:
14887
14888    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
14889    -1 if PAT2 is more specialized than PAT1.
14890    0 if neither is more specialized.
14891
14892    LEN indicates the number of parameters we should consider
14893    (defaulted parameters should not be considered).
14894
14895    The 1998 std underspecified function template partial ordering, and
14896    DR214 addresses the issue.  We take pairs of arguments, one from
14897    each of the templates, and deduce them against each other.  One of
14898    the templates will be more specialized if all the *other*
14899    template's arguments deduce against its arguments and at least one
14900    of its arguments *does* *not* deduce against the other template's
14901    corresponding argument.  Deduction is done as for class templates.
14902    The arguments used in deduction have reference and top level cv
14903    qualifiers removed.  Iff both arguments were originally reference
14904    types *and* deduction succeeds in both directions, the template
14905    with the more cv-qualified argument wins for that pairing (if
14906    neither is more cv-qualified, they both are equal).  Unlike regular
14907    deduction, after all the arguments have been deduced in this way,
14908    we do *not* verify the deduced template argument values can be
14909    substituted into non-deduced contexts.
14910
14911    The logic can be a bit confusing here, because we look at deduce1 and
14912    targs1 to see if pat2 is at least as specialized, and vice versa; if we
14913    can find template arguments for pat1 to make arg1 look like arg2, that
14914    means that arg2 is at least as specialized as arg1.  */
14915
14916 int
14917 more_specialized_fn (tree pat1, tree pat2, int len)
14918 {
14919   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
14920   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
14921   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
14922   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
14923   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
14924   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
14925   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
14926   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
14927   tree origs1, origs2;
14928   bool lose1 = false;
14929   bool lose2 = false;
14930
14931   /* Remove the this parameter from non-static member functions.  If
14932      one is a non-static member function and the other is not a static
14933      member function, remove the first parameter from that function
14934      also.  This situation occurs for operator functions where we
14935      locate both a member function (with this pointer) and non-member
14936      operator (with explicit first operand).  */
14937   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
14938     {
14939       len--; /* LEN is the number of significant arguments for DECL1 */
14940       args1 = TREE_CHAIN (args1);
14941       if (!DECL_STATIC_FUNCTION_P (decl2))
14942         args2 = TREE_CHAIN (args2);
14943     }
14944   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
14945     {
14946       args2 = TREE_CHAIN (args2);
14947       if (!DECL_STATIC_FUNCTION_P (decl1))
14948         {
14949           len--;
14950           args1 = TREE_CHAIN (args1);
14951         }
14952     }
14953
14954   /* If only one is a conversion operator, they are unordered.  */
14955   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
14956     return 0;
14957
14958   /* Consider the return type for a conversion function */
14959   if (DECL_CONV_FN_P (decl1))
14960     {
14961       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
14962       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
14963       len++;
14964     }
14965
14966   processing_template_decl++;
14967
14968   origs1 = args1;
14969   origs2 = args2;
14970
14971   while (len--
14972          /* Stop when an ellipsis is seen.  */
14973          && args1 != NULL_TREE && args2 != NULL_TREE)
14974     {
14975       tree arg1 = TREE_VALUE (args1);
14976       tree arg2 = TREE_VALUE (args2);
14977       int deduce1, deduce2;
14978       int quals1 = -1;
14979       int quals2 = -1;
14980
14981       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
14982           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
14983         {
14984           /* When both arguments are pack expansions, we need only
14985              unify the patterns themselves.  */
14986           arg1 = PACK_EXPANSION_PATTERN (arg1);
14987           arg2 = PACK_EXPANSION_PATTERN (arg2);
14988
14989           /* This is the last comparison we need to do.  */
14990           len = 0;
14991         }
14992
14993       if (TREE_CODE (arg1) == REFERENCE_TYPE)
14994         {
14995           arg1 = TREE_TYPE (arg1);
14996           quals1 = cp_type_quals (arg1);
14997         }
14998
14999       if (TREE_CODE (arg2) == REFERENCE_TYPE)
15000         {
15001           arg2 = TREE_TYPE (arg2);
15002           quals2 = cp_type_quals (arg2);
15003         }
15004
15005       if ((quals1 < 0) != (quals2 < 0))
15006         {
15007           /* Only of the args is a reference, see if we should apply
15008              array/function pointer decay to it.  This is not part of
15009              DR214, but is, IMHO, consistent with the deduction rules
15010              for the function call itself, and with our earlier
15011              implementation of the underspecified partial ordering
15012              rules.  (nathan).  */
15013           if (quals1 >= 0)
15014             {
15015               switch (TREE_CODE (arg1))
15016                 {
15017                 case ARRAY_TYPE:
15018                   arg1 = TREE_TYPE (arg1);
15019                   /* FALLTHROUGH. */
15020                 case FUNCTION_TYPE:
15021                   arg1 = build_pointer_type (arg1);
15022                   break;
15023
15024                 default:
15025                   break;
15026                 }
15027             }
15028           else
15029             {
15030               switch (TREE_CODE (arg2))
15031                 {
15032                 case ARRAY_TYPE:
15033                   arg2 = TREE_TYPE (arg2);
15034                   /* FALLTHROUGH. */
15035                 case FUNCTION_TYPE:
15036                   arg2 = build_pointer_type (arg2);
15037                   break;
15038
15039                 default:
15040                   break;
15041                 }
15042             }
15043         }
15044
15045       arg1 = TYPE_MAIN_VARIANT (arg1);
15046       arg2 = TYPE_MAIN_VARIANT (arg2);
15047
15048       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
15049         {
15050           int i, len2 = list_length (args2);
15051           tree parmvec = make_tree_vec (1);
15052           tree argvec = make_tree_vec (len2);
15053           tree ta = args2;
15054
15055           /* Setup the parameter vector, which contains only ARG1.  */
15056           TREE_VEC_ELT (parmvec, 0) = arg1;
15057
15058           /* Setup the argument vector, which contains the remaining
15059              arguments.  */
15060           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
15061             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
15062
15063           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
15064                                            argvec, UNIFY_ALLOW_NONE, 
15065                                            /*call_args_p=*/false, 
15066                                            /*subr=*/0);
15067
15068           /* We cannot deduce in the other direction, because ARG1 is
15069              a pack expansion but ARG2 is not.  */
15070           deduce2 = 0;
15071         }
15072       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15073         {
15074           int i, len1 = list_length (args1);
15075           tree parmvec = make_tree_vec (1);
15076           tree argvec = make_tree_vec (len1);
15077           tree ta = args1;
15078
15079           /* Setup the parameter vector, which contains only ARG1.  */
15080           TREE_VEC_ELT (parmvec, 0) = arg2;
15081
15082           /* Setup the argument vector, which contains the remaining
15083              arguments.  */
15084           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
15085             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
15086
15087           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
15088                                            argvec, UNIFY_ALLOW_NONE, 
15089                                            /*call_args_p=*/false, 
15090                                            /*subr=*/0);
15091
15092           /* We cannot deduce in the other direction, because ARG2 is
15093              a pack expansion but ARG1 is not.*/
15094           deduce1 = 0;
15095         }
15096
15097       else
15098         {
15099           /* The normal case, where neither argument is a pack
15100              expansion.  */
15101           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
15102           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
15103         }
15104
15105       /* If we couldn't deduce arguments for tparms1 to make arg1 match
15106          arg2, then arg2 is not as specialized as arg1.  */
15107       if (!deduce1)
15108         lose2 = true;
15109       if (!deduce2)
15110         lose1 = true;
15111
15112       /* "If, for a given type, deduction succeeds in both directions
15113          (i.e., the types are identical after the transformations above)
15114          and if the type from the argument template is more cv-qualified
15115          than the type from the parameter template (as described above)
15116          that type is considered to be more specialized than the other. If
15117          neither type is more cv-qualified than the other then neither type
15118          is more specialized than the other."
15119
15120          We check same_type_p explicitly because deduction can also succeed
15121          in both directions when there is a nondeduced context.  */
15122       if (deduce1 && deduce2
15123           && quals1 != quals2 && quals1 >= 0 && quals2 >= 0
15124           && same_type_p (arg1, arg2))
15125         {
15126           if ((quals1 & quals2) == quals2)
15127             lose2 = true;
15128           if ((quals1 & quals2) == quals1)
15129             lose1 = true;
15130         }
15131
15132       if (lose1 && lose2)
15133         /* We've failed to deduce something in either direction.
15134            These must be unordered.  */
15135         break;
15136
15137       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
15138           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15139         /* We have already processed all of the arguments in our
15140            handing of the pack expansion type.  */
15141         len = 0;
15142
15143       args1 = TREE_CHAIN (args1);
15144       args2 = TREE_CHAIN (args2);
15145     }
15146
15147   /* "In most cases, all template parameters must have values in order for
15148      deduction to succeed, but for partial ordering purposes a template
15149      parameter may remain without a value provided it is not used in the
15150      types being used for partial ordering."
15151
15152      Thus, if we are missing any of the targs1 we need to substitute into
15153      origs1, then pat2 is not as specialized as pat1.  This can happen when
15154      there is a nondeduced context.  */
15155   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
15156     lose2 = true;
15157   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
15158     lose1 = true;
15159
15160   processing_template_decl--;
15161
15162   /* All things being equal, if the next argument is a pack expansion
15163      for one function but not for the other, prefer the
15164      non-variadic function.  FIXME this is bogus; see c++/41958.  */
15165   if (lose1 == lose2
15166       && args1 && TREE_VALUE (args1)
15167       && args2 && TREE_VALUE (args2))
15168     {
15169       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
15170       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
15171     }
15172
15173   if (lose1 == lose2)
15174     return 0;
15175   else if (!lose1)
15176     return 1;
15177   else
15178     return -1;
15179 }
15180
15181 /* Determine which of two partial specializations is more specialized.
15182
15183    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
15184    to the first partial specialization.  The TREE_VALUE is the
15185    innermost set of template parameters for the partial
15186    specialization.  PAT2 is similar, but for the second template.
15187
15188    Return 1 if the first partial specialization is more specialized;
15189    -1 if the second is more specialized; 0 if neither is more
15190    specialized.
15191
15192    See [temp.class.order] for information about determining which of
15193    two templates is more specialized.  */
15194
15195 static int
15196 more_specialized_class (tree pat1, tree pat2)
15197 {
15198   tree targs;
15199   tree tmpl1, tmpl2;
15200   int winner = 0;
15201   bool any_deductions = false;
15202
15203   tmpl1 = TREE_TYPE (pat1);
15204   tmpl2 = TREE_TYPE (pat2);
15205
15206   /* Just like what happens for functions, if we are ordering between
15207      different class template specializations, we may encounter dependent
15208      types in the arguments, and we need our dependency check functions
15209      to behave correctly.  */
15210   ++processing_template_decl;
15211   targs = get_class_bindings (TREE_VALUE (pat1),
15212                               CLASSTYPE_TI_ARGS (tmpl1),
15213                               CLASSTYPE_TI_ARGS (tmpl2));
15214   if (targs)
15215     {
15216       --winner;
15217       any_deductions = true;
15218     }
15219
15220   targs = get_class_bindings (TREE_VALUE (pat2),
15221                               CLASSTYPE_TI_ARGS (tmpl2),
15222                               CLASSTYPE_TI_ARGS (tmpl1));
15223   if (targs)
15224     {
15225       ++winner;
15226       any_deductions = true;
15227     }
15228   --processing_template_decl;
15229
15230   /* In the case of a tie where at least one of the class templates
15231      has a parameter pack at the end, the template with the most
15232      non-packed parameters wins.  */
15233   if (winner == 0
15234       && any_deductions
15235       && (template_args_variadic_p (TREE_PURPOSE (pat1))
15236           || template_args_variadic_p (TREE_PURPOSE (pat2))))
15237     {
15238       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
15239       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
15240       int len1 = TREE_VEC_LENGTH (args1);
15241       int len2 = TREE_VEC_LENGTH (args2);
15242
15243       /* We don't count the pack expansion at the end.  */
15244       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
15245         --len1;
15246       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
15247         --len2;
15248
15249       if (len1 > len2)
15250         return 1;
15251       else if (len1 < len2)
15252         return -1;
15253     }
15254
15255   return winner;
15256 }
15257
15258 /* Return the template arguments that will produce the function signature
15259    DECL from the function template FN, with the explicit template
15260    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
15261    also match.  Return NULL_TREE if no satisfactory arguments could be
15262    found.  */
15263
15264 static tree
15265 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
15266 {
15267   int ntparms = DECL_NTPARMS (fn);
15268   tree targs = make_tree_vec (ntparms);
15269   tree decl_type;
15270   tree decl_arg_types;
15271   tree *args;
15272   unsigned int nargs, ix;
15273   tree arg;
15274
15275   /* Substitute the explicit template arguments into the type of DECL.
15276      The call to fn_type_unification will handle substitution into the
15277      FN.  */
15278   decl_type = TREE_TYPE (decl);
15279   if (explicit_args && uses_template_parms (decl_type))
15280     {
15281       tree tmpl;
15282       tree converted_args;
15283
15284       if (DECL_TEMPLATE_INFO (decl))
15285         tmpl = DECL_TI_TEMPLATE (decl);
15286       else
15287         /* We can get here for some invalid specializations.  */
15288         return NULL_TREE;
15289
15290       converted_args
15291         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
15292                                  explicit_args, NULL_TREE,
15293                                  tf_none,
15294                                  /*require_all_args=*/false,
15295                                  /*use_default_args=*/false);
15296       if (converted_args == error_mark_node)
15297         return NULL_TREE;
15298
15299       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
15300       if (decl_type == error_mark_node)
15301         return NULL_TREE;
15302     }
15303
15304   /* Never do unification on the 'this' parameter.  */
15305   decl_arg_types = skip_artificial_parms_for (decl, 
15306                                               TYPE_ARG_TYPES (decl_type));
15307
15308   nargs = list_length (decl_arg_types);
15309   args = XALLOCAVEC (tree, nargs);
15310   for (arg = decl_arg_types, ix = 0;
15311        arg != NULL_TREE && arg != void_list_node;
15312        arg = TREE_CHAIN (arg), ++ix)
15313     args[ix] = TREE_VALUE (arg);
15314
15315   if (fn_type_unification (fn, explicit_args, targs,
15316                            args, ix,
15317                            (check_rettype || DECL_CONV_FN_P (fn)
15318                             ? TREE_TYPE (decl_type) : NULL_TREE),
15319                            DEDUCE_EXACT, LOOKUP_NORMAL))
15320     return NULL_TREE;
15321
15322   return targs;
15323 }
15324
15325 /* Return the innermost template arguments that, when applied to a
15326    template specialization whose innermost template parameters are
15327    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
15328    ARGS.
15329
15330    For example, suppose we have:
15331
15332      template <class T, class U> struct S {};
15333      template <class T> struct S<T*, int> {};
15334
15335    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
15336    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
15337    int}.  The resulting vector will be {double}, indicating that `T'
15338    is bound to `double'.  */
15339
15340 static tree
15341 get_class_bindings (tree tparms, tree spec_args, tree args)
15342 {
15343   int i, ntparms = TREE_VEC_LENGTH (tparms);
15344   tree deduced_args;
15345   tree innermost_deduced_args;
15346
15347   innermost_deduced_args = make_tree_vec (ntparms);
15348   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
15349     {
15350       deduced_args = copy_node (args);
15351       SET_TMPL_ARGS_LEVEL (deduced_args,
15352                            TMPL_ARGS_DEPTH (deduced_args),
15353                            innermost_deduced_args);
15354     }
15355   else
15356     deduced_args = innermost_deduced_args;
15357
15358   if (unify (tparms, deduced_args,
15359              INNERMOST_TEMPLATE_ARGS (spec_args),
15360              INNERMOST_TEMPLATE_ARGS (args),
15361              UNIFY_ALLOW_NONE))
15362     return NULL_TREE;
15363
15364   for (i =  0; i < ntparms; ++i)
15365     if (! TREE_VEC_ELT (innermost_deduced_args, i))
15366       return NULL_TREE;
15367
15368   /* Verify that nondeduced template arguments agree with the type
15369      obtained from argument deduction.
15370
15371      For example:
15372
15373        struct A { typedef int X; };
15374        template <class T, class U> struct C {};
15375        template <class T> struct C<T, typename T::X> {};
15376
15377      Then with the instantiation `C<A, int>', we can deduce that
15378      `T' is `A' but unify () does not check whether `typename T::X'
15379      is `int'.  */
15380   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
15381   if (spec_args == error_mark_node
15382       /* We only need to check the innermost arguments; the other
15383          arguments will always agree.  */
15384       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
15385                               INNERMOST_TEMPLATE_ARGS (args)))
15386     return NULL_TREE;
15387
15388   /* Now that we have bindings for all of the template arguments,
15389      ensure that the arguments deduced for the template template
15390      parameters have compatible template parameter lists.  See the use
15391      of template_template_parm_bindings_ok_p in fn_type_unification
15392      for more information.  */
15393   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
15394     return NULL_TREE;
15395
15396   return deduced_args;
15397 }
15398
15399 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
15400    Return the TREE_LIST node with the most specialized template, if
15401    any.  If there is no most specialized template, the error_mark_node
15402    is returned.
15403
15404    Note that this function does not look at, or modify, the
15405    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
15406    returned is one of the elements of INSTANTIATIONS, callers may
15407    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
15408    and retrieve it from the value returned.  */
15409
15410 tree
15411 most_specialized_instantiation (tree templates)
15412 {
15413   tree fn, champ;
15414
15415   ++processing_template_decl;
15416
15417   champ = templates;
15418   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
15419     {
15420       int fate = 0;
15421
15422       if (get_bindings (TREE_VALUE (champ),
15423                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
15424                         NULL_TREE, /*check_ret=*/false))
15425         fate--;
15426
15427       if (get_bindings (TREE_VALUE (fn),
15428                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
15429                         NULL_TREE, /*check_ret=*/false))
15430         fate++;
15431
15432       if (fate == -1)
15433         champ = fn;
15434       else if (!fate)
15435         {
15436           /* Equally specialized, move to next function.  If there
15437              is no next function, nothing's most specialized.  */
15438           fn = TREE_CHAIN (fn);
15439           champ = fn;
15440           if (!fn)
15441             break;
15442         }
15443     }
15444
15445   if (champ)
15446     /* Now verify that champ is better than everything earlier in the
15447        instantiation list.  */
15448     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
15449       if (get_bindings (TREE_VALUE (champ),
15450                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
15451                         NULL_TREE, /*check_ret=*/false)
15452           || !get_bindings (TREE_VALUE (fn),
15453                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
15454                             NULL_TREE, /*check_ret=*/false))
15455         {
15456           champ = NULL_TREE;
15457           break;
15458         }
15459
15460   processing_template_decl--;
15461
15462   if (!champ)
15463     return error_mark_node;
15464
15465   return champ;
15466 }
15467
15468 /* If DECL is a specialization of some template, return the most
15469    general such template.  Otherwise, returns NULL_TREE.
15470
15471    For example, given:
15472
15473      template <class T> struct S { template <class U> void f(U); };
15474
15475    if TMPL is `template <class U> void S<int>::f(U)' this will return
15476    the full template.  This function will not trace past partial
15477    specializations, however.  For example, given in addition:
15478
15479      template <class T> struct S<T*> { template <class U> void f(U); };
15480
15481    if TMPL is `template <class U> void S<int*>::f(U)' this will return
15482    `template <class T> template <class U> S<T*>::f(U)'.  */
15483
15484 tree
15485 most_general_template (tree decl)
15486 {
15487   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
15488      an immediate specialization.  */
15489   if (TREE_CODE (decl) == FUNCTION_DECL)
15490     {
15491       if (DECL_TEMPLATE_INFO (decl)) {
15492         decl = DECL_TI_TEMPLATE (decl);
15493
15494         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
15495            template friend.  */
15496         if (TREE_CODE (decl) != TEMPLATE_DECL)
15497           return NULL_TREE;
15498       } else
15499         return NULL_TREE;
15500     }
15501
15502   /* Look for more and more general templates.  */
15503   while (DECL_TEMPLATE_INFO (decl))
15504     {
15505       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
15506          (See cp-tree.h for details.)  */
15507       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
15508         break;
15509
15510       if (CLASS_TYPE_P (TREE_TYPE (decl))
15511           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
15512         break;
15513
15514       /* Stop if we run into an explicitly specialized class template.  */
15515       if (!DECL_NAMESPACE_SCOPE_P (decl)
15516           && DECL_CONTEXT (decl)
15517           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
15518         break;
15519
15520       decl = DECL_TI_TEMPLATE (decl);
15521     }
15522
15523   return decl;
15524 }
15525
15526 /* Return the most specialized of the class template partial
15527    specializations of TMPL which can produce TYPE, a specialization of
15528    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
15529    a _TYPE node corresponding to the partial specialization, while the
15530    TREE_PURPOSE is the set of template arguments that must be
15531    substituted into the TREE_TYPE in order to generate TYPE.
15532
15533    If the choice of partial specialization is ambiguous, a diagnostic
15534    is issued, and the error_mark_node is returned.  If there are no
15535    partial specializations of TMPL matching TYPE, then NULL_TREE is
15536    returned.  */
15537
15538 static tree
15539 most_specialized_class (tree type, tree tmpl)
15540 {
15541   tree list = NULL_TREE;
15542   tree t;
15543   tree champ;
15544   int fate;
15545   bool ambiguous_p;
15546   tree args;
15547   tree outer_args = NULL_TREE;
15548
15549   tmpl = most_general_template (tmpl);
15550   args = CLASSTYPE_TI_ARGS (type);
15551
15552   /* For determining which partial specialization to use, only the
15553      innermost args are interesting.  */
15554   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
15555     {
15556       outer_args = strip_innermost_template_args (args, 1);
15557       args = INNERMOST_TEMPLATE_ARGS (args);
15558     }
15559
15560   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
15561     {
15562       tree partial_spec_args;
15563       tree spec_args;
15564       tree parms = TREE_VALUE (t);
15565
15566       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
15567       if (outer_args)
15568         {
15569           int i;
15570
15571           ++processing_template_decl;
15572
15573           /* Discard the outer levels of args, and then substitute in the
15574              template args from the enclosing class.  */
15575           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
15576           partial_spec_args = tsubst_template_args
15577             (partial_spec_args, outer_args, tf_none, NULL_TREE);
15578
15579           /* PARMS already refers to just the innermost parms, but the
15580              template parms in partial_spec_args had their levels lowered
15581              by tsubst, so we need to do the same for the parm list.  We
15582              can't just tsubst the TREE_VEC itself, as tsubst wants to
15583              treat a TREE_VEC as an argument vector.  */
15584           parms = copy_node (parms);
15585           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
15586             TREE_VEC_ELT (parms, i) =
15587               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
15588
15589           --processing_template_decl;
15590         }
15591       spec_args = get_class_bindings (parms,
15592                                       partial_spec_args,
15593                                       args);
15594       if (spec_args)
15595         {
15596           if (outer_args)
15597             spec_args = add_to_template_args (outer_args, spec_args);
15598           list = tree_cons (spec_args, TREE_VALUE (t), list);
15599           TREE_TYPE (list) = TREE_TYPE (t);
15600         }
15601     }
15602
15603   if (! list)
15604     return NULL_TREE;
15605
15606   ambiguous_p = false;
15607   t = list;
15608   champ = t;
15609   t = TREE_CHAIN (t);
15610   for (; t; t = TREE_CHAIN (t))
15611     {
15612       fate = more_specialized_class (champ, t);
15613       if (fate == 1)
15614         ;
15615       else
15616         {
15617           if (fate == 0)
15618             {
15619               t = TREE_CHAIN (t);
15620               if (! t)
15621                 {
15622                   ambiguous_p = true;
15623                   break;
15624                 }
15625             }
15626           champ = t;
15627         }
15628     }
15629
15630   if (!ambiguous_p)
15631     for (t = list; t && t != champ; t = TREE_CHAIN (t))
15632       {
15633         fate = more_specialized_class (champ, t);
15634         if (fate != 1)
15635           {
15636             ambiguous_p = true;
15637             break;
15638           }
15639       }
15640
15641   if (ambiguous_p)
15642     {
15643       const char *str = "candidates are:";
15644       error ("ambiguous class template instantiation for %q#T", type);
15645       for (t = list; t; t = TREE_CHAIN (t))
15646         {
15647           error ("%s %+#T", str, TREE_TYPE (t));
15648           str = "               ";
15649         }
15650       return error_mark_node;
15651     }
15652
15653   return champ;
15654 }
15655
15656 /* Explicitly instantiate DECL.  */
15657
15658 void
15659 do_decl_instantiation (tree decl, tree storage)
15660 {
15661   tree result = NULL_TREE;
15662   int extern_p = 0;
15663
15664   if (!decl || decl == error_mark_node)
15665     /* An error occurred, for which grokdeclarator has already issued
15666        an appropriate message.  */
15667     return;
15668   else if (! DECL_LANG_SPECIFIC (decl))
15669     {
15670       error ("explicit instantiation of non-template %q#D", decl);
15671       return;
15672     }
15673   else if (TREE_CODE (decl) == VAR_DECL)
15674     {
15675       /* There is an asymmetry here in the way VAR_DECLs and
15676          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
15677          the latter, the DECL we get back will be marked as a
15678          template instantiation, and the appropriate
15679          DECL_TEMPLATE_INFO will be set up.  This does not happen for
15680          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
15681          should handle VAR_DECLs as it currently handles
15682          FUNCTION_DECLs.  */
15683       if (!DECL_CLASS_SCOPE_P (decl))
15684         {
15685           error ("%qD is not a static data member of a class template", decl);
15686           return;
15687         }
15688       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
15689       if (!result || TREE_CODE (result) != VAR_DECL)
15690         {
15691           error ("no matching template for %qD found", decl);
15692           return;
15693         }
15694       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
15695         {
15696           error ("type %qT for explicit instantiation %qD does not match "
15697                  "declared type %qT", TREE_TYPE (result), decl,
15698                  TREE_TYPE (decl));
15699           return;
15700         }
15701     }
15702   else if (TREE_CODE (decl) != FUNCTION_DECL)
15703     {
15704       error ("explicit instantiation of %q#D", decl);
15705       return;
15706     }
15707   else
15708     result = decl;
15709
15710   /* Check for various error cases.  Note that if the explicit
15711      instantiation is valid the RESULT will currently be marked as an
15712      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
15713      until we get here.  */
15714
15715   if (DECL_TEMPLATE_SPECIALIZATION (result))
15716     {
15717       /* DR 259 [temp.spec].
15718
15719          Both an explicit instantiation and a declaration of an explicit
15720          specialization shall not appear in a program unless the explicit
15721          instantiation follows a declaration of the explicit specialization.
15722
15723          For a given set of template parameters, if an explicit
15724          instantiation of a template appears after a declaration of an
15725          explicit specialization for that template, the explicit
15726          instantiation has no effect.  */
15727       return;
15728     }
15729   else if (DECL_EXPLICIT_INSTANTIATION (result))
15730     {
15731       /* [temp.spec]
15732
15733          No program shall explicitly instantiate any template more
15734          than once.
15735
15736          We check DECL_NOT_REALLY_EXTERN so as not to complain when
15737          the first instantiation was `extern' and the second is not,
15738          and EXTERN_P for the opposite case.  */
15739       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
15740         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
15741       /* If an "extern" explicit instantiation follows an ordinary
15742          explicit instantiation, the template is instantiated.  */
15743       if (extern_p)
15744         return;
15745     }
15746   else if (!DECL_IMPLICIT_INSTANTIATION (result))
15747     {
15748       error ("no matching template for %qD found", result);
15749       return;
15750     }
15751   else if (!DECL_TEMPLATE_INFO (result))
15752     {
15753       permerror (input_location, "explicit instantiation of non-template %q#D", result);
15754       return;
15755     }
15756
15757   if (storage == NULL_TREE)
15758     ;
15759   else if (storage == ridpointers[(int) RID_EXTERN])
15760     {
15761       if (!in_system_header && (cxx_dialect == cxx98))
15762         pedwarn (input_location, OPT_pedantic, 
15763                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
15764                  "instantiations");
15765       extern_p = 1;
15766     }
15767   else
15768     error ("storage class %qD applied to template instantiation", storage);
15769
15770   check_explicit_instantiation_namespace (result);
15771   mark_decl_instantiated (result, extern_p);
15772   if (! extern_p)
15773     instantiate_decl (result, /*defer_ok=*/1,
15774                       /*expl_inst_class_mem_p=*/false);
15775 }
15776
15777 static void
15778 mark_class_instantiated (tree t, int extern_p)
15779 {
15780   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
15781   SET_CLASSTYPE_INTERFACE_KNOWN (t);
15782   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
15783   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
15784   if (! extern_p)
15785     {
15786       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
15787       rest_of_type_compilation (t, 1);
15788     }
15789 }
15790
15791 /* Called from do_type_instantiation through binding_table_foreach to
15792    do recursive instantiation for the type bound in ENTRY.  */
15793 static void
15794 bt_instantiate_type_proc (binding_entry entry, void *data)
15795 {
15796   tree storage = *(tree *) data;
15797
15798   if (MAYBE_CLASS_TYPE_P (entry->type)
15799       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
15800     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
15801 }
15802
15803 /* Called from do_type_instantiation to instantiate a member
15804    (a member function or a static member variable) of an
15805    explicitly instantiated class template.  */
15806 static void
15807 instantiate_class_member (tree decl, int extern_p)
15808 {
15809   mark_decl_instantiated (decl, extern_p);
15810   if (! extern_p)
15811     instantiate_decl (decl, /*defer_ok=*/1,
15812                       /*expl_inst_class_mem_p=*/true);
15813 }
15814
15815 /* Perform an explicit instantiation of template class T.  STORAGE, if
15816    non-null, is the RID for extern, inline or static.  COMPLAIN is
15817    nonzero if this is called from the parser, zero if called recursively,
15818    since the standard is unclear (as detailed below).  */
15819
15820 void
15821 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
15822 {
15823   int extern_p = 0;
15824   int nomem_p = 0;
15825   int static_p = 0;
15826   int previous_instantiation_extern_p = 0;
15827
15828   if (TREE_CODE (t) == TYPE_DECL)
15829     t = TREE_TYPE (t);
15830
15831   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
15832     {
15833       error ("explicit instantiation of non-template type %qT", t);
15834       return;
15835     }
15836
15837   complete_type (t);
15838
15839   if (!COMPLETE_TYPE_P (t))
15840     {
15841       if (complain & tf_error)
15842         error ("explicit instantiation of %q#T before definition of template",
15843                t);
15844       return;
15845     }
15846
15847   if (storage != NULL_TREE)
15848     {
15849       if (!in_system_header)
15850         {
15851           if (storage == ridpointers[(int) RID_EXTERN])
15852             {
15853               if (cxx_dialect == cxx98)
15854                 pedwarn (input_location, OPT_pedantic, 
15855                          "ISO C++ 1998 forbids the use of %<extern%> on "
15856                          "explicit instantiations");
15857             }
15858           else
15859             pedwarn (input_location, OPT_pedantic, 
15860                      "ISO C++ forbids the use of %qE"
15861                      " on explicit instantiations", storage);
15862         }
15863
15864       if (storage == ridpointers[(int) RID_INLINE])
15865         nomem_p = 1;
15866       else if (storage == ridpointers[(int) RID_EXTERN])
15867         extern_p = 1;
15868       else if (storage == ridpointers[(int) RID_STATIC])
15869         static_p = 1;
15870       else
15871         {
15872           error ("storage class %qD applied to template instantiation",
15873                  storage);
15874           extern_p = 0;
15875         }
15876     }
15877
15878   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
15879     {
15880       /* DR 259 [temp.spec].
15881
15882          Both an explicit instantiation and a declaration of an explicit
15883          specialization shall not appear in a program unless the explicit
15884          instantiation follows a declaration of the explicit specialization.
15885
15886          For a given set of template parameters, if an explicit
15887          instantiation of a template appears after a declaration of an
15888          explicit specialization for that template, the explicit
15889          instantiation has no effect.  */
15890       return;
15891     }
15892   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
15893     {
15894       /* [temp.spec]
15895
15896          No program shall explicitly instantiate any template more
15897          than once.
15898
15899          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
15900          instantiation was `extern'.  If EXTERN_P then the second is.
15901          These cases are OK.  */
15902       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
15903
15904       if (!previous_instantiation_extern_p && !extern_p
15905           && (complain & tf_error))
15906         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
15907
15908       /* If we've already instantiated the template, just return now.  */
15909       if (!CLASSTYPE_INTERFACE_ONLY (t))
15910         return;
15911     }
15912
15913   check_explicit_instantiation_namespace (TYPE_NAME (t));
15914   mark_class_instantiated (t, extern_p);
15915
15916   if (nomem_p)
15917     return;
15918
15919   {
15920     tree tmp;
15921
15922     /* In contrast to implicit instantiation, where only the
15923        declarations, and not the definitions, of members are
15924        instantiated, we have here:
15925
15926          [temp.explicit]
15927
15928          The explicit instantiation of a class template specialization
15929          implies the instantiation of all of its members not
15930          previously explicitly specialized in the translation unit
15931          containing the explicit instantiation.
15932
15933        Of course, we can't instantiate member template classes, since
15934        we don't have any arguments for them.  Note that the standard
15935        is unclear on whether the instantiation of the members are
15936        *explicit* instantiations or not.  However, the most natural
15937        interpretation is that it should be an explicit instantiation.  */
15938
15939     if (! static_p)
15940       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
15941         if (TREE_CODE (tmp) == FUNCTION_DECL
15942             && DECL_TEMPLATE_INSTANTIATION (tmp))
15943           instantiate_class_member (tmp, extern_p);
15944
15945     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
15946       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
15947         instantiate_class_member (tmp, extern_p);
15948
15949     if (CLASSTYPE_NESTED_UTDS (t))
15950       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
15951                              bt_instantiate_type_proc, &storage);
15952   }
15953 }
15954
15955 /* Given a function DECL, which is a specialization of TMPL, modify
15956    DECL to be a re-instantiation of TMPL with the same template
15957    arguments.  TMPL should be the template into which tsubst'ing
15958    should occur for DECL, not the most general template.
15959
15960    One reason for doing this is a scenario like this:
15961
15962      template <class T>
15963      void f(const T&, int i);
15964
15965      void g() { f(3, 7); }
15966
15967      template <class T>
15968      void f(const T& t, const int i) { }
15969
15970    Note that when the template is first instantiated, with
15971    instantiate_template, the resulting DECL will have no name for the
15972    first parameter, and the wrong type for the second.  So, when we go
15973    to instantiate the DECL, we regenerate it.  */
15974
15975 static void
15976 regenerate_decl_from_template (tree decl, tree tmpl)
15977 {
15978   /* The arguments used to instantiate DECL, from the most general
15979      template.  */
15980   tree args;
15981   tree code_pattern;
15982
15983   args = DECL_TI_ARGS (decl);
15984   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
15985
15986   /* Make sure that we can see identifiers, and compute access
15987      correctly.  */
15988   push_access_scope (decl);
15989
15990   if (TREE_CODE (decl) == FUNCTION_DECL)
15991     {
15992       tree decl_parm;
15993       tree pattern_parm;
15994       tree specs;
15995       int args_depth;
15996       int parms_depth;
15997
15998       args_depth = TMPL_ARGS_DEPTH (args);
15999       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
16000       if (args_depth > parms_depth)
16001         args = get_innermost_template_args (args, parms_depth);
16002
16003       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
16004                                               args, tf_error, NULL_TREE);
16005       if (specs)
16006         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
16007                                                     specs);
16008
16009       /* Merge parameter declarations.  */
16010       decl_parm = skip_artificial_parms_for (decl,
16011                                              DECL_ARGUMENTS (decl));
16012       pattern_parm
16013         = skip_artificial_parms_for (code_pattern,
16014                                      DECL_ARGUMENTS (code_pattern));
16015       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
16016         {
16017           tree parm_type;
16018           tree attributes;
16019           
16020           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
16021             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
16022           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
16023                               NULL_TREE);
16024           parm_type = type_decays_to (parm_type);
16025           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
16026             TREE_TYPE (decl_parm) = parm_type;
16027           attributes = DECL_ATTRIBUTES (pattern_parm);
16028           if (DECL_ATTRIBUTES (decl_parm) != attributes)
16029             {
16030               DECL_ATTRIBUTES (decl_parm) = attributes;
16031               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
16032             }
16033           decl_parm = TREE_CHAIN (decl_parm);
16034           pattern_parm = TREE_CHAIN (pattern_parm);
16035         }
16036       /* Merge any parameters that match with the function parameter
16037          pack.  */
16038       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
16039         {
16040           int i, len;
16041           tree expanded_types;
16042           /* Expand the TYPE_PACK_EXPANSION that provides the types for
16043              the parameters in this function parameter pack.  */
16044           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
16045                                                  args, tf_error, NULL_TREE);
16046           len = TREE_VEC_LENGTH (expanded_types);
16047           for (i = 0; i < len; i++)
16048             {
16049               tree parm_type;
16050               tree attributes;
16051           
16052               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
16053                 /* Rename the parameter to include the index.  */
16054                 DECL_NAME (decl_parm) = 
16055                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
16056               parm_type = TREE_VEC_ELT (expanded_types, i);
16057               parm_type = type_decays_to (parm_type);
16058               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
16059                 TREE_TYPE (decl_parm) = parm_type;
16060               attributes = DECL_ATTRIBUTES (pattern_parm);
16061               if (DECL_ATTRIBUTES (decl_parm) != attributes)
16062                 {
16063                   DECL_ATTRIBUTES (decl_parm) = attributes;
16064                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
16065                 }
16066               decl_parm = TREE_CHAIN (decl_parm);
16067             }
16068         }
16069       /* Merge additional specifiers from the CODE_PATTERN.  */
16070       if (DECL_DECLARED_INLINE_P (code_pattern)
16071           && !DECL_DECLARED_INLINE_P (decl))
16072         DECL_DECLARED_INLINE_P (decl) = 1;
16073     }
16074   else if (TREE_CODE (decl) == VAR_DECL)
16075     DECL_INITIAL (decl) =
16076       tsubst_expr (DECL_INITIAL (code_pattern), args,
16077                    tf_error, DECL_TI_TEMPLATE (decl),
16078                    /*integral_constant_expression_p=*/false);
16079   else
16080     gcc_unreachable ();
16081
16082   pop_access_scope (decl);
16083 }
16084
16085 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
16086    substituted to get DECL.  */
16087
16088 tree
16089 template_for_substitution (tree decl)
16090 {
16091   tree tmpl = DECL_TI_TEMPLATE (decl);
16092
16093   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
16094      for the instantiation.  This is not always the most general
16095      template.  Consider, for example:
16096
16097         template <class T>
16098         struct S { template <class U> void f();
16099                    template <> void f<int>(); };
16100
16101      and an instantiation of S<double>::f<int>.  We want TD to be the
16102      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
16103   while (/* An instantiation cannot have a definition, so we need a
16104             more general template.  */
16105          DECL_TEMPLATE_INSTANTIATION (tmpl)
16106            /* We must also deal with friend templates.  Given:
16107
16108                 template <class T> struct S {
16109                   template <class U> friend void f() {};
16110                 };
16111
16112               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
16113               so far as the language is concerned, but that's still
16114               where we get the pattern for the instantiation from.  On
16115               other hand, if the definition comes outside the class, say:
16116
16117                 template <class T> struct S {
16118                   template <class U> friend void f();
16119                 };
16120                 template <class U> friend void f() {}
16121
16122               we don't need to look any further.  That's what the check for
16123               DECL_INITIAL is for.  */
16124           || (TREE_CODE (decl) == FUNCTION_DECL
16125               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
16126               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
16127     {
16128       /* The present template, TD, should not be a definition.  If it
16129          were a definition, we should be using it!  Note that we
16130          cannot restructure the loop to just keep going until we find
16131          a template with a definition, since that might go too far if
16132          a specialization was declared, but not defined.  */
16133       gcc_assert (TREE_CODE (decl) != VAR_DECL
16134                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
16135
16136       /* Fetch the more general template.  */
16137       tmpl = DECL_TI_TEMPLATE (tmpl);
16138     }
16139
16140   return tmpl;
16141 }
16142
16143 /* Returns true if we need to instantiate this template instance even if we
16144    know we aren't going to emit it..  */
16145
16146 bool
16147 always_instantiate_p (tree decl)
16148 {
16149   /* We always instantiate inline functions so that we can inline them.  An
16150      explicit instantiation declaration prohibits implicit instantiation of
16151      non-inline functions.  With high levels of optimization, we would
16152      normally inline non-inline functions -- but we're not allowed to do
16153      that for "extern template" functions.  Therefore, we check
16154      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
16155   return ((TREE_CODE (decl) == FUNCTION_DECL
16156            && DECL_DECLARED_INLINE_P (decl))
16157           /* And we need to instantiate static data members so that
16158              their initializers are available in integral constant
16159              expressions.  */
16160           || (TREE_CODE (decl) == VAR_DECL
16161               && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl)));
16162 }
16163
16164 /* Produce the definition of D, a _DECL generated from a template.  If
16165    DEFER_OK is nonzero, then we don't have to actually do the
16166    instantiation now; we just have to do it sometime.  Normally it is
16167    an error if this is an explicit instantiation but D is undefined.
16168    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
16169    explicitly instantiated class template.  */
16170
16171 tree
16172 instantiate_decl (tree d, int defer_ok,
16173                   bool expl_inst_class_mem_p)
16174 {
16175   tree tmpl = DECL_TI_TEMPLATE (d);
16176   tree gen_args;
16177   tree args;
16178   tree td;
16179   tree code_pattern;
16180   tree spec;
16181   tree gen_tmpl;
16182   bool pattern_defined;
16183   int need_push;
16184   location_t saved_loc = input_location;
16185   bool external_p;
16186
16187   /* This function should only be used to instantiate templates for
16188      functions and static member variables.  */
16189   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
16190               || TREE_CODE (d) == VAR_DECL);
16191
16192   /* Variables are never deferred; if instantiation is required, they
16193      are instantiated right away.  That allows for better code in the
16194      case that an expression refers to the value of the variable --
16195      if the variable has a constant value the referring expression can
16196      take advantage of that fact.  */
16197   if (TREE_CODE (d) == VAR_DECL)
16198     defer_ok = 0;
16199
16200   /* Don't instantiate cloned functions.  Instead, instantiate the
16201      functions they cloned.  */
16202   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
16203     d = DECL_CLONED_FUNCTION (d);
16204
16205   if (DECL_TEMPLATE_INSTANTIATED (d)
16206       || DECL_TEMPLATE_SPECIALIZATION (d))
16207     /* D has already been instantiated or explicitly specialized, so
16208        there's nothing for us to do here.
16209
16210        It might seem reasonable to check whether or not D is an explicit
16211        instantiation, and, if so, stop here.  But when an explicit
16212        instantiation is deferred until the end of the compilation,
16213        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
16214        the instantiation.  */
16215     return d;
16216
16217   /* Check to see whether we know that this template will be
16218      instantiated in some other file, as with "extern template"
16219      extension.  */
16220   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
16221
16222   /* In general, we do not instantiate such templates.  */
16223   if (external_p && !always_instantiate_p (d))
16224     return d;
16225
16226   gen_tmpl = most_general_template (tmpl);
16227   gen_args = DECL_TI_ARGS (d);
16228
16229   if (tmpl != gen_tmpl)
16230     /* We should already have the extra args.  */
16231     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
16232                 == TMPL_ARGS_DEPTH (gen_args));
16233   /* And what's in the hash table should match D.  */
16234   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
16235               || spec == NULL_TREE);
16236
16237   /* This needs to happen before any tsubsting.  */
16238   if (! push_tinst_level (d))
16239     return d;
16240
16241   timevar_push (TV_PARSE);
16242
16243   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
16244      for the instantiation.  */
16245   td = template_for_substitution (d);
16246   code_pattern = DECL_TEMPLATE_RESULT (td);
16247
16248   /* We should never be trying to instantiate a member of a class
16249      template or partial specialization.  */
16250   gcc_assert (d != code_pattern);
16251
16252   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
16253       || DECL_TEMPLATE_SPECIALIZATION (td))
16254     /* In the case of a friend template whose definition is provided
16255        outside the class, we may have too many arguments.  Drop the
16256        ones we don't need.  The same is true for specializations.  */
16257     args = get_innermost_template_args
16258       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
16259   else
16260     args = gen_args;
16261
16262   if (TREE_CODE (d) == FUNCTION_DECL)
16263     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
16264   else
16265     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
16266
16267   /* We may be in the middle of deferred access check.  Disable it now.  */
16268   push_deferring_access_checks (dk_no_deferred);
16269
16270   /* Unless an explicit instantiation directive has already determined
16271      the linkage of D, remember that a definition is available for
16272      this entity.  */
16273   if (pattern_defined
16274       && !DECL_INTERFACE_KNOWN (d)
16275       && !DECL_NOT_REALLY_EXTERN (d))
16276     mark_definable (d);
16277
16278   input_location = DECL_SOURCE_LOCATION (d);
16279
16280   /* If D is a member of an explicitly instantiated class template,
16281      and no definition is available, treat it like an implicit
16282      instantiation.  */
16283   if (!pattern_defined && expl_inst_class_mem_p
16284       && DECL_EXPLICIT_INSTANTIATION (d))
16285     {
16286       DECL_NOT_REALLY_EXTERN (d) = 0;
16287       DECL_INTERFACE_KNOWN (d) = 0;
16288       SET_DECL_IMPLICIT_INSTANTIATION (d);
16289     }
16290
16291   /* Recheck the substitutions to obtain any warning messages
16292      about ignoring cv qualifiers.  Don't do this for artificial decls,
16293      as it breaks the context-sensitive substitution for lambda op(). */
16294   if (!defer_ok && !DECL_ARTIFICIAL (d))
16295     {
16296       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
16297       tree type = TREE_TYPE (gen);
16298
16299       /* Make sure that we can see identifiers, and compute access
16300          correctly.  D is already the target FUNCTION_DECL with the
16301          right context.  */
16302       push_access_scope (d);
16303
16304       if (TREE_CODE (gen) == FUNCTION_DECL)
16305         {
16306           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
16307           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
16308                                           d);
16309           /* Don't simply tsubst the function type, as that will give
16310              duplicate warnings about poor parameter qualifications.
16311              The function arguments are the same as the decl_arguments
16312              without the top level cv qualifiers.  */
16313           type = TREE_TYPE (type);
16314         }
16315       tsubst (type, gen_args, tf_warning_or_error, d);
16316
16317       pop_access_scope (d);
16318     }
16319
16320   /* Defer all other templates, unless we have been explicitly
16321      forbidden from doing so.  */
16322   if (/* If there is no definition, we cannot instantiate the
16323          template.  */
16324       ! pattern_defined
16325       /* If it's OK to postpone instantiation, do so.  */
16326       || defer_ok
16327       /* If this is a static data member that will be defined
16328          elsewhere, we don't want to instantiate the entire data
16329          member, but we do want to instantiate the initializer so that
16330          we can substitute that elsewhere.  */
16331       || (external_p && TREE_CODE (d) == VAR_DECL))
16332     {
16333       /* The definition of the static data member is now required so
16334          we must substitute the initializer.  */
16335       if (TREE_CODE (d) == VAR_DECL
16336           && !DECL_INITIAL (d)
16337           && DECL_INITIAL (code_pattern))
16338         {
16339           tree ns;
16340           tree init;
16341
16342           ns = decl_namespace_context (d);
16343           push_nested_namespace (ns);
16344           push_nested_class (DECL_CONTEXT (d));
16345           init = tsubst_expr (DECL_INITIAL (code_pattern),
16346                               args,
16347                               tf_warning_or_error, NULL_TREE,
16348                               /*integral_constant_expression_p=*/false);
16349           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
16350                           /*asmspec_tree=*/NULL_TREE,
16351                           LOOKUP_ONLYCONVERTING);
16352           pop_nested_class ();
16353           pop_nested_namespace (ns);
16354         }
16355
16356       /* We restore the source position here because it's used by
16357          add_pending_template.  */
16358       input_location = saved_loc;
16359
16360       if (at_eof && !pattern_defined
16361           && DECL_EXPLICIT_INSTANTIATION (d)
16362           && DECL_NOT_REALLY_EXTERN (d))
16363         /* [temp.explicit]
16364
16365            The definition of a non-exported function template, a
16366            non-exported member function template, or a non-exported
16367            member function or static data member of a class template
16368            shall be present in every translation unit in which it is
16369            explicitly instantiated.  */
16370         permerror (input_location,  "explicit instantiation of %qD "
16371                    "but no definition available", d);
16372
16373       /* ??? Historically, we have instantiated inline functions, even
16374          when marked as "extern template".  */
16375       if (!(external_p && TREE_CODE (d) == VAR_DECL))
16376         add_pending_template (d);
16377       goto out;
16378     }
16379   /* Tell the repository that D is available in this translation unit
16380      -- and see if it is supposed to be instantiated here.  */
16381   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
16382     {
16383       /* In a PCH file, despite the fact that the repository hasn't
16384          requested instantiation in the PCH it is still possible that
16385          an instantiation will be required in a file that includes the
16386          PCH.  */
16387       if (pch_file)
16388         add_pending_template (d);
16389       /* Instantiate inline functions so that the inliner can do its
16390          job, even though we'll not be emitting a copy of this
16391          function.  */
16392       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
16393         goto out;
16394     }
16395
16396   need_push = !cfun || !global_bindings_p ();
16397   if (need_push)
16398     push_to_top_level ();
16399
16400   /* Mark D as instantiated so that recursive calls to
16401      instantiate_decl do not try to instantiate it again.  */
16402   DECL_TEMPLATE_INSTANTIATED (d) = 1;
16403
16404   /* Regenerate the declaration in case the template has been modified
16405      by a subsequent redeclaration.  */
16406   regenerate_decl_from_template (d, td);
16407
16408   /* We already set the file and line above.  Reset them now in case
16409      they changed as a result of calling regenerate_decl_from_template.  */
16410   input_location = DECL_SOURCE_LOCATION (d);
16411
16412   if (TREE_CODE (d) == VAR_DECL)
16413     {
16414       tree init;
16415
16416       /* Clear out DECL_RTL; whatever was there before may not be right
16417          since we've reset the type of the declaration.  */
16418       SET_DECL_RTL (d, NULL_RTX);
16419       DECL_IN_AGGR_P (d) = 0;
16420
16421       /* The initializer is placed in DECL_INITIAL by
16422          regenerate_decl_from_template.  Pull it out so that
16423          cp_finish_decl can process it.  */
16424       init = DECL_INITIAL (d);
16425       DECL_INITIAL (d) = NULL_TREE;
16426       DECL_INITIALIZED_P (d) = 0;
16427
16428       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
16429          initializer.  That function will defer actual emission until
16430          we have a chance to determine linkage.  */
16431       DECL_EXTERNAL (d) = 0;
16432
16433       /* Enter the scope of D so that access-checking works correctly.  */
16434       push_nested_class (DECL_CONTEXT (d));
16435       cp_finish_decl (d, init, false, NULL_TREE, 0);
16436       pop_nested_class ();
16437     }
16438   else if (TREE_CODE (d) == FUNCTION_DECL)
16439     {
16440       htab_t saved_local_specializations;
16441       tree subst_decl;
16442       tree tmpl_parm;
16443       tree spec_parm;
16444
16445       /* Save away the current list, in case we are instantiating one
16446          template from within the body of another.  */
16447       saved_local_specializations = local_specializations;
16448
16449       /* Set up the list of local specializations.  */
16450       local_specializations = htab_create (37,
16451                                            hash_local_specialization,
16452                                            eq_local_specializations,
16453                                            NULL);
16454
16455       /* Set up context.  */
16456       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
16457
16458       /* Create substitution entries for the parameters.  */
16459       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
16460       tmpl_parm = DECL_ARGUMENTS (subst_decl);
16461       spec_parm = DECL_ARGUMENTS (d);
16462       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
16463         {
16464           register_local_specialization (spec_parm, tmpl_parm);
16465           spec_parm = skip_artificial_parms_for (d, spec_parm);
16466           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
16467         }
16468       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
16469         {
16470           register_local_specialization (spec_parm, tmpl_parm);
16471           tmpl_parm = TREE_CHAIN (tmpl_parm);
16472           spec_parm = TREE_CHAIN (spec_parm);
16473         }
16474       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
16475         {
16476           /* Register the (value) argument pack as a specialization of
16477              TMPL_PARM, then move on.  */
16478           tree argpack = make_fnparm_pack (spec_parm);
16479           register_local_specialization (argpack, tmpl_parm);
16480           tmpl_parm = TREE_CHAIN (tmpl_parm);
16481           spec_parm = NULL_TREE;
16482         }
16483       gcc_assert (!spec_parm);
16484
16485       /* Substitute into the body of the function.  */
16486       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
16487                    tf_warning_or_error, tmpl,
16488                    /*integral_constant_expression_p=*/false);
16489
16490       /* Set the current input_location to the end of the function
16491          so that finish_function knows where we are.  */
16492       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
16493
16494       /* We don't need the local specializations any more.  */
16495       htab_delete (local_specializations);
16496       local_specializations = saved_local_specializations;
16497
16498       /* Finish the function.  */
16499       d = finish_function (0);
16500       expand_or_defer_fn (d);
16501     }
16502
16503   /* We're not deferring instantiation any more.  */
16504   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
16505
16506   if (need_push)
16507     pop_from_top_level ();
16508
16509 out:
16510   input_location = saved_loc;
16511   pop_deferring_access_checks ();
16512   pop_tinst_level ();
16513
16514   timevar_pop (TV_PARSE);
16515
16516   return d;
16517 }
16518
16519 /* Run through the list of templates that we wish we could
16520    instantiate, and instantiate any we can.  RETRIES is the
16521    number of times we retry pending template instantiation.  */
16522
16523 void
16524 instantiate_pending_templates (int retries)
16525 {
16526   int reconsider;
16527   location_t saved_loc = input_location;
16528
16529   /* Instantiating templates may trigger vtable generation.  This in turn
16530      may require further template instantiations.  We place a limit here
16531      to avoid infinite loop.  */
16532   if (pending_templates && retries >= max_tinst_depth)
16533     {
16534       tree decl = pending_templates->tinst->decl;
16535
16536       error ("template instantiation depth exceeds maximum of %d"
16537              " instantiating %q+D, possibly from virtual table generation"
16538              " (use -ftemplate-depth-NN to increase the maximum)",
16539              max_tinst_depth, decl);
16540       if (TREE_CODE (decl) == FUNCTION_DECL)
16541         /* Pretend that we defined it.  */
16542         DECL_INITIAL (decl) = error_mark_node;
16543       return;
16544     }
16545
16546   do
16547     {
16548       struct pending_template **t = &pending_templates;
16549       struct pending_template *last = NULL;
16550       reconsider = 0;
16551       while (*t)
16552         {
16553           tree instantiation = reopen_tinst_level ((*t)->tinst);
16554           bool complete = false;
16555
16556           if (TYPE_P (instantiation))
16557             {
16558               tree fn;
16559
16560               if (!COMPLETE_TYPE_P (instantiation))
16561                 {
16562                   instantiate_class_template (instantiation);
16563                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
16564                     for (fn = TYPE_METHODS (instantiation);
16565                          fn;
16566                          fn = TREE_CHAIN (fn))
16567                       if (! DECL_ARTIFICIAL (fn))
16568                         instantiate_decl (fn,
16569                                           /*defer_ok=*/0,
16570                                           /*expl_inst_class_mem_p=*/false);
16571                   if (COMPLETE_TYPE_P (instantiation))
16572                     reconsider = 1;
16573                 }
16574
16575               complete = COMPLETE_TYPE_P (instantiation);
16576             }
16577           else
16578             {
16579               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
16580                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
16581                 {
16582                   instantiation
16583                     = instantiate_decl (instantiation,
16584                                         /*defer_ok=*/0,
16585                                         /*expl_inst_class_mem_p=*/false);
16586                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
16587                     reconsider = 1;
16588                 }
16589
16590               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
16591                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
16592             }
16593
16594           if (complete)
16595             /* If INSTANTIATION has been instantiated, then we don't
16596                need to consider it again in the future.  */
16597             *t = (*t)->next;
16598           else
16599             {
16600               last = *t;
16601               t = &(*t)->next;
16602             }
16603           tinst_depth = 0;
16604           current_tinst_level = NULL;
16605         }
16606       last_pending_template = last;
16607     }
16608   while (reconsider);
16609
16610   input_location = saved_loc;
16611 }
16612
16613 /* Substitute ARGVEC into T, which is a list of initializers for
16614    either base class or a non-static data member.  The TREE_PURPOSEs
16615    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
16616    instantiate_decl.  */
16617
16618 static tree
16619 tsubst_initializer_list (tree t, tree argvec)
16620 {
16621   tree inits = NULL_TREE;
16622
16623   for (; t; t = TREE_CHAIN (t))
16624     {
16625       tree decl;
16626       tree init;
16627       tree expanded_bases = NULL_TREE;
16628       tree expanded_arguments = NULL_TREE;
16629       int i, len = 1;
16630
16631       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
16632         {
16633           tree expr;
16634           tree arg;
16635
16636           /* Expand the base class expansion type into separate base
16637              classes.  */
16638           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
16639                                                  tf_warning_or_error,
16640                                                  NULL_TREE);
16641           if (expanded_bases == error_mark_node)
16642             continue;
16643           
16644           /* We'll be building separate TREE_LISTs of arguments for
16645              each base.  */
16646           len = TREE_VEC_LENGTH (expanded_bases);
16647           expanded_arguments = make_tree_vec (len);
16648           for (i = 0; i < len; i++)
16649             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
16650
16651           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
16652              expand each argument in the TREE_VALUE of t.  */
16653           expr = make_node (EXPR_PACK_EXPANSION);
16654           PACK_EXPANSION_PARAMETER_PACKS (expr) =
16655             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
16656
16657           if (TREE_VALUE (t) == void_type_node)
16658             /* VOID_TYPE_NODE is used to indicate
16659                value-initialization.  */
16660             {
16661               for (i = 0; i < len; i++)
16662                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
16663             }
16664           else
16665             {
16666               /* Substitute parameter packs into each argument in the
16667                  TREE_LIST.  */
16668               in_base_initializer = 1;
16669               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
16670                 {
16671                   tree expanded_exprs;
16672
16673                   /* Expand the argument.  */
16674                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
16675                   expanded_exprs 
16676                     = tsubst_pack_expansion (expr, argvec,
16677                                              tf_warning_or_error,
16678                                              NULL_TREE);
16679                   if (expanded_exprs == error_mark_node)
16680                     continue;
16681
16682                   /* Prepend each of the expanded expressions to the
16683                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
16684                   for (i = 0; i < len; i++)
16685                     {
16686                       TREE_VEC_ELT (expanded_arguments, i) = 
16687                         tree_cons (NULL_TREE, 
16688                                    TREE_VEC_ELT (expanded_exprs, i),
16689                                    TREE_VEC_ELT (expanded_arguments, i));
16690                     }
16691                 }
16692               in_base_initializer = 0;
16693
16694               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
16695                  since we built them backwards.  */
16696               for (i = 0; i < len; i++)
16697                 {
16698                   TREE_VEC_ELT (expanded_arguments, i) = 
16699                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
16700                 }
16701             }
16702         }
16703
16704       for (i = 0; i < len; ++i)
16705         {
16706           if (expanded_bases)
16707             {
16708               decl = TREE_VEC_ELT (expanded_bases, i);
16709               decl = expand_member_init (decl);
16710               init = TREE_VEC_ELT (expanded_arguments, i);
16711             }
16712           else
16713             {
16714               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
16715                                   tf_warning_or_error, NULL_TREE);
16716
16717               decl = expand_member_init (decl);
16718               if (decl && !DECL_P (decl))
16719                 in_base_initializer = 1;
16720
16721               init = tsubst_expr (TREE_VALUE (t), argvec, 
16722                                   tf_warning_or_error, NULL_TREE,
16723                                   /*integral_constant_expression_p=*/false);
16724               in_base_initializer = 0;
16725             }
16726
16727           if (decl)
16728             {
16729               init = build_tree_list (decl, init);
16730               TREE_CHAIN (init) = inits;
16731               inits = init;
16732             }
16733         }
16734     }
16735   return inits;
16736 }
16737
16738 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
16739
16740 static void
16741 set_current_access_from_decl (tree decl)
16742 {
16743   if (TREE_PRIVATE (decl))
16744     current_access_specifier = access_private_node;
16745   else if (TREE_PROTECTED (decl))
16746     current_access_specifier = access_protected_node;
16747   else
16748     current_access_specifier = access_public_node;
16749 }
16750
16751 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
16752    is the instantiation (which should have been created with
16753    start_enum) and ARGS are the template arguments to use.  */
16754
16755 static void
16756 tsubst_enum (tree tag, tree newtag, tree args)
16757 {
16758   tree e;
16759
16760   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
16761     {
16762       tree value;
16763       tree decl;
16764
16765       decl = TREE_VALUE (e);
16766       /* Note that in a template enum, the TREE_VALUE is the
16767          CONST_DECL, not the corresponding INTEGER_CST.  */
16768       value = tsubst_expr (DECL_INITIAL (decl),
16769                            args, tf_warning_or_error, NULL_TREE,
16770                            /*integral_constant_expression_p=*/true);
16771
16772       /* Give this enumeration constant the correct access.  */
16773       set_current_access_from_decl (decl);
16774
16775       /* Actually build the enumerator itself.  */
16776       build_enumerator (DECL_NAME (decl), value, newtag);
16777     }
16778
16779   finish_enum (newtag);
16780   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
16781     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
16782 }
16783
16784 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
16785    its type -- but without substituting the innermost set of template
16786    arguments.  So, innermost set of template parameters will appear in
16787    the type.  */
16788
16789 tree
16790 get_mostly_instantiated_function_type (tree decl)
16791 {
16792   tree fn_type;
16793   tree tmpl;
16794   tree targs;
16795   tree tparms;
16796   int parm_depth;
16797
16798   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
16799   targs = DECL_TI_ARGS (decl);
16800   tparms = DECL_TEMPLATE_PARMS (tmpl);
16801   parm_depth = TMPL_PARMS_DEPTH (tparms);
16802
16803   /* There should be as many levels of arguments as there are levels
16804      of parameters.  */
16805   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
16806
16807   fn_type = TREE_TYPE (tmpl);
16808
16809   if (parm_depth == 1)
16810     /* No substitution is necessary.  */
16811     ;
16812   else
16813     {
16814       int i, save_access_control;
16815       tree partial_args;
16816
16817       /* Replace the innermost level of the TARGS with NULL_TREEs to
16818          let tsubst know not to substitute for those parameters.  */
16819       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
16820       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
16821         SET_TMPL_ARGS_LEVEL (partial_args, i,
16822                              TMPL_ARGS_LEVEL (targs, i));
16823       SET_TMPL_ARGS_LEVEL (partial_args,
16824                            TMPL_ARGS_DEPTH (targs),
16825                            make_tree_vec (DECL_NTPARMS (tmpl)));
16826
16827       /* Disable access control as this function is used only during
16828          name-mangling.  */
16829       save_access_control = flag_access_control;
16830       flag_access_control = 0;
16831
16832       ++processing_template_decl;
16833       /* Now, do the (partial) substitution to figure out the
16834          appropriate function type.  */
16835       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
16836       --processing_template_decl;
16837
16838       /* Substitute into the template parameters to obtain the real
16839          innermost set of parameters.  This step is important if the
16840          innermost set of template parameters contains value
16841          parameters whose types depend on outer template parameters.  */
16842       TREE_VEC_LENGTH (partial_args)--;
16843       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
16844
16845       flag_access_control = save_access_control;
16846     }
16847
16848   return fn_type;
16849 }
16850
16851 /* Return truthvalue if we're processing a template different from
16852    the last one involved in diagnostics.  */
16853 int
16854 problematic_instantiation_changed (void)
16855 {
16856   return last_template_error_tick != tinst_level_tick;
16857 }
16858
16859 /* Remember current template involved in diagnostics.  */
16860 void
16861 record_last_problematic_instantiation (void)
16862 {
16863   last_template_error_tick = tinst_level_tick;
16864 }
16865
16866 struct tinst_level *
16867 current_instantiation (void)
16868 {
16869   return current_tinst_level;
16870 }
16871
16872 /* [temp.param] Check that template non-type parm TYPE is of an allowable
16873    type. Return zero for ok, nonzero for disallowed. Issue error and
16874    warning messages under control of COMPLAIN.  */
16875
16876 static int
16877 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
16878 {
16879   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
16880     return 0;
16881   else if (POINTER_TYPE_P (type))
16882     return 0;
16883   else if (TYPE_PTR_TO_MEMBER_P (type))
16884     return 0;
16885   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
16886     return 0;
16887   else if (TREE_CODE (type) == TYPENAME_TYPE)
16888     return 0;
16889
16890   if (complain & tf_error)
16891     error ("%q#T is not a valid type for a template constant parameter", type);
16892   return 1;
16893 }
16894
16895 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
16896    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
16897
16898 static bool
16899 dependent_type_p_r (tree type)
16900 {
16901   tree scope;
16902
16903   /* [temp.dep.type]
16904
16905      A type is dependent if it is:
16906
16907      -- a template parameter. Template template parameters are types
16908         for us (since TYPE_P holds true for them) so we handle
16909         them here.  */
16910   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
16911       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
16912     return true;
16913   /* -- a qualified-id with a nested-name-specifier which contains a
16914         class-name that names a dependent type or whose unqualified-id
16915         names a dependent type.  */
16916   if (TREE_CODE (type) == TYPENAME_TYPE)
16917     return true;
16918   /* -- a cv-qualified type where the cv-unqualified type is
16919         dependent.  */
16920   type = TYPE_MAIN_VARIANT (type);
16921   /* -- a compound type constructed from any dependent type.  */
16922   if (TYPE_PTR_TO_MEMBER_P (type))
16923     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
16924             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
16925                                            (type)));
16926   else if (TREE_CODE (type) == POINTER_TYPE
16927            || TREE_CODE (type) == REFERENCE_TYPE)
16928     return dependent_type_p (TREE_TYPE (type));
16929   else if (TREE_CODE (type) == FUNCTION_TYPE
16930            || TREE_CODE (type) == METHOD_TYPE)
16931     {
16932       tree arg_type;
16933
16934       if (dependent_type_p (TREE_TYPE (type)))
16935         return true;
16936       for (arg_type = TYPE_ARG_TYPES (type);
16937            arg_type;
16938            arg_type = TREE_CHAIN (arg_type))
16939         if (dependent_type_p (TREE_VALUE (arg_type)))
16940           return true;
16941       return false;
16942     }
16943   /* -- an array type constructed from any dependent type or whose
16944         size is specified by a constant expression that is
16945         value-dependent.  */
16946   if (TREE_CODE (type) == ARRAY_TYPE)
16947     {
16948       if (TYPE_DOMAIN (type)
16949           && dependent_type_p (TYPE_DOMAIN (type)))
16950         return true;
16951       return dependent_type_p (TREE_TYPE (type));
16952     }
16953   else if (TREE_CODE (type) == INTEGER_TYPE
16954            && !TREE_CONSTANT (TYPE_MAX_VALUE (type)))
16955     {
16956       /* If this is the TYPE_DOMAIN of an array type, consider it
16957          dependent.  We already checked for value-dependence in
16958          compute_array_index_type.  */
16959       return type_dependent_expression_p (TYPE_MAX_VALUE (type));
16960     }
16961
16962   /* -- a template-id in which either the template name is a template
16963      parameter ...  */
16964   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
16965     return true;
16966   /* ... or any of the template arguments is a dependent type or
16967         an expression that is type-dependent or value-dependent.  */
16968   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
16969            && (any_dependent_template_arguments_p
16970                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
16971     return true;
16972
16973   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
16974      argument of the `typeof' expression is not type-dependent, then
16975      it should already been have resolved.  */
16976   if (TREE_CODE (type) == TYPEOF_TYPE
16977       || TREE_CODE (type) == DECLTYPE_TYPE)
16978     return true;
16979
16980   /* A template argument pack is dependent if any of its packed
16981      arguments are.  */
16982   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
16983     {
16984       tree args = ARGUMENT_PACK_ARGS (type);
16985       int i, len = TREE_VEC_LENGTH (args);
16986       for (i = 0; i < len; ++i)
16987         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
16988           return true;
16989     }
16990
16991   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
16992      be template parameters.  */
16993   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
16994     return true;
16995
16996   /* The standard does not specifically mention types that are local
16997      to template functions or local classes, but they should be
16998      considered dependent too.  For example:
16999
17000        template <int I> void f() {
17001          enum E { a = I };
17002          S<sizeof (E)> s;
17003        }
17004
17005      The size of `E' cannot be known until the value of `I' has been
17006      determined.  Therefore, `E' must be considered dependent.  */
17007   scope = TYPE_CONTEXT (type);
17008   if (scope && TYPE_P (scope))
17009     return dependent_type_p (scope);
17010   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
17011     return type_dependent_expression_p (scope);
17012
17013   /* Other types are non-dependent.  */
17014   return false;
17015 }
17016
17017 /* Returns TRUE if TYPE is dependent, in the sense of
17018    [temp.dep.type].  */
17019
17020 bool
17021 dependent_type_p (tree type)
17022 {
17023   /* If there are no template parameters in scope, then there can't be
17024      any dependent types.  */
17025   if (!processing_template_decl)
17026     {
17027       /* If we are not processing a template, then nobody should be
17028          providing us with a dependent type.  */
17029       gcc_assert (type);
17030       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
17031       return false;
17032     }
17033
17034   /* If the type is NULL, we have not computed a type for the entity
17035      in question; in that case, the type is dependent.  */
17036   if (!type)
17037     return true;
17038
17039   /* Erroneous types can be considered non-dependent.  */
17040   if (type == error_mark_node)
17041     return false;
17042
17043   /* If we have not already computed the appropriate value for TYPE,
17044      do so now.  */
17045   if (!TYPE_DEPENDENT_P_VALID (type))
17046     {
17047       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
17048       TYPE_DEPENDENT_P_VALID (type) = 1;
17049     }
17050
17051   return TYPE_DEPENDENT_P (type);
17052 }
17053
17054 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
17055    lookup.  In other words, a dependent type that is not the current
17056    instantiation.  */
17057
17058 bool
17059 dependent_scope_p (tree scope)
17060 {
17061   return (scope && TYPE_P (scope) && dependent_type_p (scope)
17062           && !currently_open_class (scope));
17063 }
17064
17065 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
17066
17067 static bool
17068 dependent_scope_ref_p (tree expression, bool criterion (tree))
17069 {
17070   tree scope;
17071   tree name;
17072
17073   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
17074
17075   if (!TYPE_P (TREE_OPERAND (expression, 0)))
17076     return true;
17077
17078   scope = TREE_OPERAND (expression, 0);
17079   name = TREE_OPERAND (expression, 1);
17080
17081   /* [temp.dep.expr]
17082
17083      An id-expression is type-dependent if it contains a
17084      nested-name-specifier that contains a class-name that names a
17085      dependent type.  */
17086   /* The suggested resolution to Core Issue 224 implies that if the
17087      qualifying type is the current class, then we must peek
17088      inside it.  */
17089   if (DECL_P (name)
17090       && currently_open_class (scope)
17091       && !criterion (name))
17092     return false;
17093   if (dependent_type_p (scope))
17094     return true;
17095
17096   return false;
17097 }
17098
17099 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
17100    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
17101    expression.  */
17102
17103 bool
17104 value_dependent_expression_p (tree expression)
17105 {
17106   if (!processing_template_decl)
17107     return false;
17108
17109   /* A name declared with a dependent type.  */
17110   if (DECL_P (expression) && type_dependent_expression_p (expression))
17111     return true;
17112
17113   switch (TREE_CODE (expression))
17114     {
17115     case IDENTIFIER_NODE:
17116       /* A name that has not been looked up -- must be dependent.  */
17117       return true;
17118
17119     case TEMPLATE_PARM_INDEX:
17120       /* A non-type template parm.  */
17121       return true;
17122
17123     case CONST_DECL:
17124       /* A non-type template parm.  */
17125       if (DECL_TEMPLATE_PARM_P (expression))
17126         return true;
17127       return value_dependent_expression_p (DECL_INITIAL (expression));
17128
17129     case VAR_DECL:
17130        /* A constant with integral or enumeration type and is initialized
17131           with an expression that is value-dependent.  */
17132       if (DECL_INITIAL (expression)
17133           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
17134           && value_dependent_expression_p (DECL_INITIAL (expression)))
17135         return true;
17136       return false;
17137
17138     case DYNAMIC_CAST_EXPR:
17139     case STATIC_CAST_EXPR:
17140     case CONST_CAST_EXPR:
17141     case REINTERPRET_CAST_EXPR:
17142     case CAST_EXPR:
17143       /* These expressions are value-dependent if the type to which
17144          the cast occurs is dependent or the expression being casted
17145          is value-dependent.  */
17146       {
17147         tree type = TREE_TYPE (expression);
17148
17149         if (dependent_type_p (type))
17150           return true;
17151
17152         /* A functional cast has a list of operands.  */
17153         expression = TREE_OPERAND (expression, 0);
17154         if (!expression)
17155           {
17156             /* If there are no operands, it must be an expression such
17157                as "int()". This should not happen for aggregate types
17158                because it would form non-constant expressions.  */
17159             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
17160
17161             return false;
17162           }
17163
17164         if (TREE_CODE (expression) == TREE_LIST)
17165           return any_value_dependent_elements_p (expression);
17166
17167         return value_dependent_expression_p (expression);
17168       }
17169
17170     case SIZEOF_EXPR:
17171     case ALIGNOF_EXPR:
17172       /* A `sizeof' expression is value-dependent if the operand is
17173          type-dependent or is a pack expansion.  */
17174       expression = TREE_OPERAND (expression, 0);
17175       if (PACK_EXPANSION_P (expression))
17176         return true;
17177       else if (TYPE_P (expression))
17178         return dependent_type_p (expression);
17179       return type_dependent_expression_p (expression);
17180
17181     case SCOPE_REF:
17182       return dependent_scope_ref_p (expression, value_dependent_expression_p);
17183
17184     case COMPONENT_REF:
17185       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
17186               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
17187
17188     case CALL_EXPR:
17189       /* A CALL_EXPR may appear in a constant expression if it is a
17190          call to a builtin function, e.g., __builtin_constant_p.  All
17191          such calls are value-dependent.  */
17192       return true;
17193
17194     case NONTYPE_ARGUMENT_PACK:
17195       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
17196          is value-dependent.  */
17197       {
17198         tree values = ARGUMENT_PACK_ARGS (expression);
17199         int i, len = TREE_VEC_LENGTH (values);
17200         
17201         for (i = 0; i < len; ++i)
17202           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
17203             return true;
17204         
17205         return false;
17206       }
17207
17208     case TRAIT_EXPR:
17209       {
17210         tree type2 = TRAIT_EXPR_TYPE2 (expression);
17211         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
17212                 || (type2 ? dependent_type_p (type2) : false));
17213       }
17214
17215     case MODOP_EXPR:
17216       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
17217               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
17218
17219     default:
17220       /* A constant expression is value-dependent if any subexpression is
17221          value-dependent.  */
17222       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
17223         {
17224         case tcc_reference:
17225         case tcc_unary:
17226           return (value_dependent_expression_p
17227                   (TREE_OPERAND (expression, 0)));
17228
17229         case tcc_comparison:
17230         case tcc_binary:
17231           return ((value_dependent_expression_p
17232                    (TREE_OPERAND (expression, 0)))
17233                   || (value_dependent_expression_p
17234                       (TREE_OPERAND (expression, 1))));
17235
17236         case tcc_expression:
17237         case tcc_vl_exp:
17238           {
17239             int i;
17240             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
17241               /* In some cases, some of the operands may be missing.
17242                  (For example, in the case of PREDECREMENT_EXPR, the
17243                  amount to increment by may be missing.)  That doesn't
17244                  make the expression dependent.  */
17245               if (TREE_OPERAND (expression, i)
17246                   && (value_dependent_expression_p
17247                       (TREE_OPERAND (expression, i))))
17248                 return true;
17249             return false;
17250           }
17251
17252         default:
17253           break;
17254         }
17255     }
17256
17257   /* The expression is not value-dependent.  */
17258   return false;
17259 }
17260
17261 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
17262    [temp.dep.expr].  */
17263
17264 bool
17265 type_dependent_expression_p (tree expression)
17266 {
17267   if (!processing_template_decl)
17268     return false;
17269
17270   if (expression == error_mark_node)
17271     return false;
17272
17273   /* An unresolved name is always dependent.  */
17274   if (TREE_CODE (expression) == IDENTIFIER_NODE
17275       || TREE_CODE (expression) == USING_DECL)
17276     return true;
17277
17278   /* Some expression forms are never type-dependent.  */
17279   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
17280       || TREE_CODE (expression) == SIZEOF_EXPR
17281       || TREE_CODE (expression) == ALIGNOF_EXPR
17282       || TREE_CODE (expression) == TRAIT_EXPR
17283       || TREE_CODE (expression) == TYPEID_EXPR
17284       || TREE_CODE (expression) == DELETE_EXPR
17285       || TREE_CODE (expression) == VEC_DELETE_EXPR
17286       || TREE_CODE (expression) == THROW_EXPR)
17287     return false;
17288
17289   /* The types of these expressions depends only on the type to which
17290      the cast occurs.  */
17291   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
17292       || TREE_CODE (expression) == STATIC_CAST_EXPR
17293       || TREE_CODE (expression) == CONST_CAST_EXPR
17294       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
17295       || TREE_CODE (expression) == CAST_EXPR)
17296     return dependent_type_p (TREE_TYPE (expression));
17297
17298   /* The types of these expressions depends only on the type created
17299      by the expression.  */
17300   if (TREE_CODE (expression) == NEW_EXPR
17301       || TREE_CODE (expression) == VEC_NEW_EXPR)
17302     {
17303       /* For NEW_EXPR tree nodes created inside a template, either
17304          the object type itself or a TREE_LIST may appear as the
17305          operand 1.  */
17306       tree type = TREE_OPERAND (expression, 1);
17307       if (TREE_CODE (type) == TREE_LIST)
17308         /* This is an array type.  We need to check array dimensions
17309            as well.  */
17310         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
17311                || value_dependent_expression_p
17312                     (TREE_OPERAND (TREE_VALUE (type), 1));
17313       else
17314         return dependent_type_p (type);
17315     }
17316
17317   if (TREE_CODE (expression) == SCOPE_REF
17318       && dependent_scope_ref_p (expression,
17319                                 type_dependent_expression_p))
17320     return true;
17321
17322   if (TREE_CODE (expression) == FUNCTION_DECL
17323       && DECL_LANG_SPECIFIC (expression)
17324       && DECL_TEMPLATE_INFO (expression)
17325       && (any_dependent_template_arguments_p
17326           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
17327     return true;
17328
17329   if (TREE_CODE (expression) == TEMPLATE_DECL
17330       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
17331     return false;
17332
17333   if (TREE_CODE (expression) == STMT_EXPR)
17334     expression = stmt_expr_value_expr (expression);
17335
17336   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
17337     {
17338       tree elt;
17339       unsigned i;
17340
17341       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
17342         {
17343           if (type_dependent_expression_p (elt))
17344             return true;
17345         }
17346       return false;
17347     }
17348
17349   if (TREE_TYPE (expression) == unknown_type_node)
17350     {
17351       if (TREE_CODE (expression) == ADDR_EXPR)
17352         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
17353       if (TREE_CODE (expression) == COMPONENT_REF
17354           || TREE_CODE (expression) == OFFSET_REF)
17355         {
17356           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
17357             return true;
17358           expression = TREE_OPERAND (expression, 1);
17359           if (TREE_CODE (expression) == IDENTIFIER_NODE)
17360             return false;
17361         }
17362       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
17363       if (TREE_CODE (expression) == SCOPE_REF)
17364         return false;
17365
17366       if (TREE_CODE (expression) == BASELINK)
17367         expression = BASELINK_FUNCTIONS (expression);
17368
17369       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
17370         {
17371           if (any_dependent_template_arguments_p
17372               (TREE_OPERAND (expression, 1)))
17373             return true;
17374           expression = TREE_OPERAND (expression, 0);
17375         }
17376       gcc_assert (TREE_CODE (expression) == OVERLOAD
17377                   || TREE_CODE (expression) == FUNCTION_DECL);
17378
17379       while (expression)
17380         {
17381           if (type_dependent_expression_p (OVL_CURRENT (expression)))
17382             return true;
17383           expression = OVL_NEXT (expression);
17384         }
17385       return false;
17386     }
17387
17388   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
17389
17390   return (dependent_type_p (TREE_TYPE (expression)));
17391 }
17392
17393 /* Like type_dependent_expression_p, but it also works while not processing
17394    a template definition, i.e. during substitution or mangling.  */
17395
17396 bool
17397 type_dependent_expression_p_push (tree expr)
17398 {
17399   bool b;
17400   ++processing_template_decl;
17401   b = type_dependent_expression_p (expr);
17402   --processing_template_decl;
17403   return b;
17404 }
17405
17406 /* Returns TRUE if ARGS contains a type-dependent expression.  */
17407
17408 bool
17409 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
17410 {
17411   unsigned int i;
17412   tree arg;
17413
17414   for (i = 0; VEC_iterate (tree, args, i, arg); ++i)
17415     {
17416       if (type_dependent_expression_p (arg))
17417         return true;
17418     }
17419   return false;
17420 }
17421
17422 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
17423    expressions) contains any value-dependent expressions.  */
17424
17425 bool
17426 any_value_dependent_elements_p (const_tree list)
17427 {
17428   for (; list; list = TREE_CHAIN (list))
17429     if (value_dependent_expression_p (TREE_VALUE (list)))
17430       return true;
17431
17432   return false;
17433 }
17434
17435 /* Returns TRUE if the ARG (a template argument) is dependent.  */
17436
17437 bool
17438 dependent_template_arg_p (tree arg)
17439 {
17440   if (!processing_template_decl)
17441     return false;
17442
17443   if (TREE_CODE (arg) == TEMPLATE_DECL
17444       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
17445     return dependent_template_p (arg);
17446   else if (ARGUMENT_PACK_P (arg))
17447     {
17448       tree args = ARGUMENT_PACK_ARGS (arg);
17449       int i, len = TREE_VEC_LENGTH (args);
17450       for (i = 0; i < len; ++i)
17451         {
17452           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
17453             return true;
17454         }
17455
17456       return false;
17457     }
17458   else if (TYPE_P (arg))
17459     return dependent_type_p (arg);
17460   else
17461     return (type_dependent_expression_p (arg)
17462             || value_dependent_expression_p (arg));
17463 }
17464
17465 /* Returns true if ARGS (a collection of template arguments) contains
17466    any types that require structural equality testing.  */
17467
17468 bool
17469 any_template_arguments_need_structural_equality_p (tree args)
17470 {
17471   int i;
17472   int j;
17473
17474   if (!args)
17475     return false;
17476   if (args == error_mark_node)
17477     return true;
17478
17479   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
17480     {
17481       tree level = TMPL_ARGS_LEVEL (args, i + 1);
17482       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
17483         {
17484           tree arg = TREE_VEC_ELT (level, j);
17485           tree packed_args = NULL_TREE;
17486           int k, len = 1;
17487
17488           if (ARGUMENT_PACK_P (arg))
17489             {
17490               /* Look inside the argument pack.  */
17491               packed_args = ARGUMENT_PACK_ARGS (arg);
17492               len = TREE_VEC_LENGTH (packed_args);
17493             }
17494
17495           for (k = 0; k < len; ++k)
17496             {
17497               if (packed_args)
17498                 arg = TREE_VEC_ELT (packed_args, k);
17499
17500               if (error_operand_p (arg))
17501                 return true;
17502               else if (TREE_CODE (arg) == TEMPLATE_DECL
17503                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
17504                 continue;
17505               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
17506                 return true;
17507               else if (!TYPE_P (arg) && TREE_TYPE (arg)
17508                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
17509                 return true;
17510             }
17511         }
17512     }
17513
17514   return false;
17515 }
17516
17517 /* Returns true if ARGS (a collection of template arguments) contains
17518    any dependent arguments.  */
17519
17520 bool
17521 any_dependent_template_arguments_p (const_tree args)
17522 {
17523   int i;
17524   int j;
17525
17526   if (!args)
17527     return false;
17528   if (args == error_mark_node)
17529     return true;
17530
17531   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
17532     {
17533       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
17534       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
17535         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
17536           return true;
17537     }
17538
17539   return false;
17540 }
17541
17542 /* Returns TRUE if the template TMPL is dependent.  */
17543
17544 bool
17545 dependent_template_p (tree tmpl)
17546 {
17547   if (TREE_CODE (tmpl) == OVERLOAD)
17548     {
17549       while (tmpl)
17550         {
17551           if (dependent_template_p (OVL_FUNCTION (tmpl)))
17552             return true;
17553           tmpl = OVL_CHAIN (tmpl);
17554         }
17555       return false;
17556     }
17557
17558   /* Template template parameters are dependent.  */
17559   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
17560       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
17561     return true;
17562   /* So are names that have not been looked up.  */
17563   if (TREE_CODE (tmpl) == SCOPE_REF
17564       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
17565     return true;
17566   /* So are member templates of dependent classes.  */
17567   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
17568     return dependent_type_p (DECL_CONTEXT (tmpl));
17569   return false;
17570 }
17571
17572 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
17573
17574 bool
17575 dependent_template_id_p (tree tmpl, tree args)
17576 {
17577   return (dependent_template_p (tmpl)
17578           || any_dependent_template_arguments_p (args));
17579 }
17580
17581 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
17582    is dependent.  */
17583
17584 bool
17585 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
17586 {
17587   int i;
17588
17589   if (!processing_template_decl)
17590     return false;
17591
17592   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
17593     {
17594       tree decl = TREE_VEC_ELT (declv, i);
17595       tree init = TREE_VEC_ELT (initv, i);
17596       tree cond = TREE_VEC_ELT (condv, i);
17597       tree incr = TREE_VEC_ELT (incrv, i);
17598
17599       if (type_dependent_expression_p (decl))
17600         return true;
17601
17602       if (init && type_dependent_expression_p (init))
17603         return true;
17604
17605       if (type_dependent_expression_p (cond))
17606         return true;
17607
17608       if (COMPARISON_CLASS_P (cond)
17609           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
17610               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
17611         return true;
17612
17613       if (TREE_CODE (incr) == MODOP_EXPR)
17614         {
17615           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
17616               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
17617             return true;
17618         }
17619       else if (type_dependent_expression_p (incr))
17620         return true;
17621       else if (TREE_CODE (incr) == MODIFY_EXPR)
17622         {
17623           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
17624             return true;
17625           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
17626             {
17627               tree t = TREE_OPERAND (incr, 1);
17628               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
17629                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
17630                 return true;
17631             }
17632         }
17633     }
17634
17635   return false;
17636 }
17637
17638 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
17639    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
17640    no such TYPE can be found.  Note that this function peers inside
17641    uninstantiated templates and therefore should be used only in
17642    extremely limited situations.  ONLY_CURRENT_P restricts this
17643    peering to the currently open classes hierarchy (which is required
17644    when comparing types).  */
17645
17646 tree
17647 resolve_typename_type (tree type, bool only_current_p)
17648 {
17649   tree scope;
17650   tree name;
17651   tree decl;
17652   int quals;
17653   tree pushed_scope;
17654   tree result;
17655
17656   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
17657
17658   scope = TYPE_CONTEXT (type);
17659   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
17660      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
17661      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
17662      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
17663      identifier  of the TYPENAME_TYPE anymore.
17664      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
17665      TYPENAME_TYPE instead, we avoid messing up with a possible
17666      typedef variant case.  */
17667   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
17668
17669   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
17670      it first before we can figure out what NAME refers to.  */
17671   if (TREE_CODE (scope) == TYPENAME_TYPE)
17672     scope = resolve_typename_type (scope, only_current_p);
17673   /* If we don't know what SCOPE refers to, then we cannot resolve the
17674      TYPENAME_TYPE.  */
17675   if (TREE_CODE (scope) == TYPENAME_TYPE)
17676     return type;
17677   /* If the SCOPE is a template type parameter, we have no way of
17678      resolving the name.  */
17679   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
17680     return type;
17681   /* If the SCOPE is not the current instantiation, there's no reason
17682      to look inside it.  */
17683   if (only_current_p && !currently_open_class (scope))
17684     return type;
17685   /* If SCOPE isn't the template itself, it will not have a valid
17686      TYPE_FIELDS list.  */
17687   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
17688     /* scope is either the template itself or a compatible instantiation
17689        like X<T>, so look up the name in the original template.  */
17690     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
17691   else
17692     /* scope is a partial instantiation, so we can't do the lookup or we
17693        will lose the template arguments.  */
17694     return type;
17695   /* Enter the SCOPE so that name lookup will be resolved as if we
17696      were in the class definition.  In particular, SCOPE will no
17697      longer be considered a dependent type.  */
17698   pushed_scope = push_scope (scope);
17699   /* Look up the declaration.  */
17700   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
17701
17702   result = NULL_TREE;
17703   
17704   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
17705      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
17706   if (!decl)
17707     /*nop*/;
17708   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
17709            && TREE_CODE (decl) == TYPE_DECL)
17710     {
17711       result = TREE_TYPE (decl);
17712       if (result == error_mark_node)
17713         result = NULL_TREE;
17714     }
17715   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
17716            && DECL_CLASS_TEMPLATE_P (decl))
17717     {
17718       tree tmpl;
17719       tree args;
17720       /* Obtain the template and the arguments.  */
17721       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
17722       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
17723       /* Instantiate the template.  */
17724       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
17725                                       /*entering_scope=*/0,
17726                                       tf_error | tf_user);
17727       if (result == error_mark_node)
17728         result = NULL_TREE;
17729     }
17730   
17731   /* Leave the SCOPE.  */
17732   if (pushed_scope)
17733     pop_scope (pushed_scope);
17734
17735   /* If we failed to resolve it, return the original typename.  */
17736   if (!result)
17737     return type;
17738   
17739   /* If lookup found a typename type, resolve that too.  */
17740   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
17741     {
17742       /* Ill-formed programs can cause infinite recursion here, so we
17743          must catch that.  */
17744       TYPENAME_IS_RESOLVING_P (type) = 1;
17745       result = resolve_typename_type (result, only_current_p);
17746       TYPENAME_IS_RESOLVING_P (type) = 0;
17747     }
17748   
17749   /* Qualify the resulting type.  */
17750   quals = cp_type_quals (type);
17751   if (quals)
17752     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
17753
17754   return result;
17755 }
17756
17757 /* EXPR is an expression which is not type-dependent.  Return a proxy
17758    for EXPR that can be used to compute the types of larger
17759    expressions containing EXPR.  */
17760
17761 tree
17762 build_non_dependent_expr (tree expr)
17763 {
17764   tree inner_expr;
17765
17766   /* Preserve null pointer constants so that the type of things like
17767      "p == 0" where "p" is a pointer can be determined.  */
17768   if (null_ptr_cst_p (expr))
17769     return expr;
17770   /* Preserve OVERLOADs; the functions must be available to resolve
17771      types.  */
17772   inner_expr = expr;
17773   if (TREE_CODE (inner_expr) == STMT_EXPR)
17774     inner_expr = stmt_expr_value_expr (inner_expr);
17775   if (TREE_CODE (inner_expr) == ADDR_EXPR)
17776     inner_expr = TREE_OPERAND (inner_expr, 0);
17777   if (TREE_CODE (inner_expr) == COMPONENT_REF)
17778     inner_expr = TREE_OPERAND (inner_expr, 1);
17779   if (is_overloaded_fn (inner_expr)
17780       || TREE_CODE (inner_expr) == OFFSET_REF)
17781     return expr;
17782   /* There is no need to return a proxy for a variable.  */
17783   if (TREE_CODE (expr) == VAR_DECL)
17784     return expr;
17785   /* Preserve string constants; conversions from string constants to
17786      "char *" are allowed, even though normally a "const char *"
17787      cannot be used to initialize a "char *".  */
17788   if (TREE_CODE (expr) == STRING_CST)
17789     return expr;
17790   /* Preserve arithmetic constants, as an optimization -- there is no
17791      reason to create a new node.  */
17792   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
17793     return expr;
17794   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
17795      There is at least one place where we want to know that a
17796      particular expression is a throw-expression: when checking a ?:
17797      expression, there are special rules if the second or third
17798      argument is a throw-expression.  */
17799   if (TREE_CODE (expr) == THROW_EXPR)
17800     return expr;
17801
17802   if (TREE_CODE (expr) == COND_EXPR)
17803     return build3 (COND_EXPR,
17804                    TREE_TYPE (expr),
17805                    TREE_OPERAND (expr, 0),
17806                    (TREE_OPERAND (expr, 1)
17807                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
17808                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
17809                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
17810   if (TREE_CODE (expr) == COMPOUND_EXPR
17811       && !COMPOUND_EXPR_OVERLOADED (expr))
17812     return build2 (COMPOUND_EXPR,
17813                    TREE_TYPE (expr),
17814                    TREE_OPERAND (expr, 0),
17815                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
17816
17817   /* If the type is unknown, it can't really be non-dependent */
17818   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
17819
17820   /* Otherwise, build a NON_DEPENDENT_EXPR.
17821
17822      REFERENCE_TYPEs are not stripped for expressions in templates
17823      because doing so would play havoc with mangling.  Consider, for
17824      example:
17825
17826        template <typename T> void f<T& g>() { g(); }
17827
17828      In the body of "f", the expression for "g" will have
17829      REFERENCE_TYPE, even though the standard says that it should
17830      not.  The reason is that we must preserve the syntactic form of
17831      the expression so that mangling (say) "f<g>" inside the body of
17832      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
17833      stripped here.  */
17834   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
17835 }
17836
17837 /* ARGS is a vector of expressions as arguments to a function call.
17838    Replace the arguments with equivalent non-dependent expressions.
17839    This modifies ARGS in place.  */
17840
17841 void
17842 make_args_non_dependent (VEC(tree,gc) *args)
17843 {
17844   unsigned int ix;
17845   tree arg;
17846
17847   for (ix = 0; VEC_iterate (tree, args, ix, arg); ++ix)
17848     {
17849       tree newarg = build_non_dependent_expr (arg);
17850       if (newarg != arg)
17851         VEC_replace (tree, args, ix, newarg);
17852     }
17853 }
17854
17855 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
17856    with a level one deeper than the actual template parms.  */
17857
17858 tree
17859 make_auto (void)
17860 {
17861   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
17862   TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
17863                                TYPE_DECL, get_identifier ("auto"), au);
17864   TYPE_STUB_DECL (au) = TYPE_NAME (au);
17865   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
17866     (0, processing_template_decl + 1, processing_template_decl + 1,
17867      TYPE_NAME (au), NULL_TREE);
17868   TYPE_CANONICAL (au) = canonical_type_parameter (au);
17869   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
17870   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
17871
17872   return au;
17873 }
17874
17875 /* Given type ARG, return std::initializer_list<ARG>.  */
17876
17877 static tree
17878 listify (tree arg)
17879 {
17880   tree std_init_list = namespace_binding
17881     (get_identifier ("initializer_list"), std_node);
17882   tree argvec;
17883   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
17884     {    
17885       error ("deducing from brace-enclosed initializer list requires "
17886              "#include <initializer_list>");
17887       return error_mark_node;
17888     }
17889   argvec = make_tree_vec (1);
17890   TREE_VEC_ELT (argvec, 0) = arg;
17891   return lookup_template_class (std_init_list, argvec, NULL_TREE,
17892                                 NULL_TREE, 0, tf_warning_or_error);
17893 }
17894
17895 /* Replace auto in TYPE with std::initializer_list<auto>.  */
17896
17897 static tree
17898 listify_autos (tree type, tree auto_node)
17899 {
17900   tree init_auto = listify (auto_node);
17901   tree argvec = make_tree_vec (1);
17902   TREE_VEC_ELT (argvec, 0) = init_auto;
17903   if (processing_template_decl)
17904     argvec = add_to_template_args (current_template_args (), argvec);
17905   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
17906 }
17907
17908 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
17909    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
17910
17911 tree
17912 do_auto_deduction (tree type, tree init, tree auto_node)
17913 {
17914   tree parms, tparms, targs;
17915   tree args[1];
17916   int val;
17917
17918   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
17919      with either a new invented type template parameter U or, if the
17920      initializer is a braced-init-list (8.5.4), with
17921      std::initializer_list<U>.  */
17922   if (BRACE_ENCLOSED_INITIALIZER_P (init))
17923     type = listify_autos (type, auto_node);
17924
17925   parms = build_tree_list (NULL_TREE, type);
17926   args[0] = init;
17927   tparms = make_tree_vec (1);
17928   targs = make_tree_vec (1);
17929   TREE_VEC_ELT (tparms, 0)
17930     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
17931   val = type_unification_real (tparms, targs, parms, args, 1, 0,
17932                                DEDUCE_CALL, LOOKUP_NORMAL);
17933   if (val > 0)
17934     {
17935       error ("unable to deduce %qT from %qE", type, init);
17936       return error_mark_node;
17937     }
17938
17939   /* If the list of declarators contains more than one declarator, the type
17940      of each declared variable is determined as described above. If the
17941      type deduced for the template parameter U is not the same in each
17942      deduction, the program is ill-formed.  */
17943   if (TREE_TYPE (auto_node)
17944       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
17945     {
17946       error ("inconsistent deduction for %qT: %qT and then %qT",
17947              auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
17948       return error_mark_node;
17949     }
17950   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
17951
17952   if (processing_template_decl)
17953     targs = add_to_template_args (current_template_args (), targs);
17954   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
17955 }
17956
17957 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
17958    result.  */
17959
17960 tree
17961 splice_late_return_type (tree type, tree late_return_type)
17962 {
17963   tree argvec;
17964
17965   if (late_return_type == NULL_TREE)
17966     return type;
17967   argvec = make_tree_vec (1);
17968   TREE_VEC_ELT (argvec, 0) = late_return_type;
17969   if (processing_template_decl)
17970     argvec = add_to_template_args (current_template_args (), argvec);
17971   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
17972 }
17973
17974 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
17975
17976 bool
17977 is_auto (const_tree type)
17978 {
17979   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
17980       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
17981     return true;
17982   else
17983     return false;
17984 }
17985
17986 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
17987    appear as a type-specifier for the declaration in question, we don't
17988    have to look through the whole type.  */
17989
17990 tree
17991 type_uses_auto (tree type)
17992 {
17993   enum tree_code code;
17994   if (is_auto (type))
17995     return type;
17996
17997   code = TREE_CODE (type);
17998
17999   if (code == POINTER_TYPE || code == REFERENCE_TYPE
18000       || code == OFFSET_TYPE || code == FUNCTION_TYPE
18001       || code == METHOD_TYPE || code == ARRAY_TYPE)
18002     return type_uses_auto (TREE_TYPE (type));
18003
18004   if (TYPE_PTRMEMFUNC_P (type))
18005     return type_uses_auto (TREE_TYPE (TREE_TYPE
18006                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
18007
18008   return NULL_TREE;
18009 }
18010
18011 /* For a given template T, return the list of typedefs referenced
18012    in T for which access check is needed at T instantiation time.
18013    T is either  a FUNCTION_DECL or a RECORD_TYPE.
18014    Those typedefs were added to T by the function
18015    append_type_to_template_for_access_check.  */
18016
18017 tree
18018 get_types_needing_access_check (tree t)
18019 {
18020   tree ti, result = NULL_TREE;
18021
18022   if (!t || t == error_mark_node)
18023     return t;
18024
18025   if (!(ti = get_template_info (t)))
18026     return NULL_TREE;
18027
18028   if (CLASS_TYPE_P (t)
18029       || TREE_CODE (t) == FUNCTION_DECL)
18030     {
18031       if (!TI_TEMPLATE (ti))
18032         return NULL_TREE;
18033
18034       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
18035     }
18036
18037   return result;
18038 }
18039
18040 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
18041    tied to T. That list of typedefs will be access checked at
18042    T instantiation time.
18043    T is either a FUNCTION_DECL or a RECORD_TYPE.
18044    TYPE_DECL is a TYPE_DECL node representing a typedef.
18045    SCOPE is the scope through which TYPE_DECL is accessed.
18046
18047    This function is a subroutine of
18048    append_type_to_template_for_access_check.  */
18049
18050 static void
18051 append_type_to_template_for_access_check_1 (tree t,
18052                                             tree type_decl,
18053                                             tree scope)
18054 {
18055   tree ti;
18056
18057   if (!t || t == error_mark_node)
18058     return;
18059
18060   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
18061                || CLASS_TYPE_P (t))
18062               && type_decl
18063               && TREE_CODE (type_decl) == TYPE_DECL
18064               && scope);
18065
18066   if (!(ti = get_template_info (t)))
18067     return;
18068
18069   gcc_assert (TI_TEMPLATE (ti));
18070
18071   TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti) =
18072     tree_cons (type_decl, scope, TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti));
18073 }
18074
18075 /* Append TYPE_DECL to the template TEMPL.
18076    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
18077    At TEMPL instanciation time, TYPE_DECL will be checked to see
18078    if it can be accessed through SCOPE.
18079
18080    e.g. consider the following code snippet:
18081
18082      class C
18083      {
18084        typedef int myint;
18085      };
18086
18087      template<class U> struct S
18088      {
18089        C::myint mi;
18090      };
18091
18092      S<char> s;
18093
18094    At S<char> instantiation time, we need to check the access of C::myint
18095    In other words, we need to check the access of the myint typedef through
18096    the C scope. For that purpose, this function will add the myint typedef
18097    and the scope C through which its being accessed to a list of typedefs
18098    tied to the template S. That list will be walked at template instantiation
18099    time and access check performed on each typedefs it contains.
18100    Note that this particular code snippet should yield an error because
18101    myint is private to C.  */
18102
18103 void
18104 append_type_to_template_for_access_check (tree templ,
18105                                           tree type_decl,
18106                                           tree scope)
18107 {
18108   tree node;
18109
18110   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
18111
18112   /* Make sure we don't append the type to the template twice.  */
18113   for (node = get_types_needing_access_check (templ);
18114        node;
18115        node = TREE_CHAIN (node))
18116     {
18117       tree decl = TREE_PURPOSE (node);
18118       tree type_scope = TREE_VALUE (node);
18119
18120       if (decl == type_decl && type_scope == scope)
18121         return;
18122     }
18123
18124   append_type_to_template_for_access_check_1 (templ, type_decl, scope);
18125 }
18126
18127 /* Set up the hash tables for template instantiations.  */
18128
18129 void
18130 init_template_processing (void)
18131 {
18132   decl_specializations = htab_create_ggc (37,
18133                                           hash_specialization,
18134                                           eq_specializations,
18135                                           ggc_free);
18136   type_specializations = htab_create_ggc (37,
18137                                           hash_specialization,
18138                                           eq_specializations,
18139                                           ggc_free);
18140 }
18141
18142 #include "gt-cp-pt.h"