OSDN Git Service

PR c++/49066
[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, 2010, 2011
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 "tree.h"
34 #include "intl.h"
35 #include "pointer-set.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "c-family/c-common.h"
39 #include "c-family/c-objc.h"
40 #include "cp-objcp-common.h"
41 #include "tree-inline.h"
42 #include "decl.h"
43 #include "output.h"
44 #include "toplev.h"
45 #include "timevar.h"
46 #include "tree-iterator.h"
47 #include "vecprim.h"
48
49 /* The type of functions taking a tree, and some additional data, and
50    returning an int.  */
51 typedef int (*tree_fn_t) (tree, void*);
52
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54    instantiations have been deferred, either because their definitions
55    were not yet available, or because we were putting off doing the work.  */
56 struct GTY ((chain_next ("%h.next"))) pending_template {
57   struct pending_template *next;
58   struct tinst_level *tinst;
59 };
60
61 static GTY(()) struct pending_template *pending_templates;
62 static GTY(()) struct pending_template *last_pending_template;
63
64 int processing_template_parmlist;
65 static int template_header_count;
66
67 static GTY(()) tree saved_trees;
68 static VEC(int,heap) *inline_parm_levels;
69
70 static GTY(()) struct tinst_level *current_tinst_level;
71
72 static GTY(()) tree saved_access_scope;
73
74 /* Live only within one (recursive) call to tsubst_expr.  We use
75    this to pass the statement expression node from the STMT_EXPR
76    to the EXPR_STMT that is its result.  */
77 static tree cur_stmt_expr;
78
79 /* A map from local variable declarations in the body of the template
80    presently being instantiated to the corresponding instantiated
81    local variables.  */
82 static htab_t local_specializations;
83
84 typedef struct GTY(()) spec_entry
85 {
86   tree tmpl;
87   tree args;
88   tree spec;
89 } spec_entry;
90
91 static GTY ((param_is (spec_entry)))
92   htab_t decl_specializations;
93
94 static GTY ((param_is (spec_entry)))
95   htab_t type_specializations;
96
97 /* Contains canonical template parameter types. The vector is indexed by
98    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
99    TREE_LIST, whose TREE_VALUEs contain the canonical template
100    parameters of various types and levels.  */
101 static GTY(()) VEC(tree,gc) *canonical_template_parms;
102
103 #define UNIFY_ALLOW_NONE 0
104 #define UNIFY_ALLOW_MORE_CV_QUAL 1
105 #define UNIFY_ALLOW_LESS_CV_QUAL 2
106 #define UNIFY_ALLOW_DERIVED 4
107 #define UNIFY_ALLOW_INTEGER 8
108 #define UNIFY_ALLOW_OUTER_LEVEL 16
109 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
110 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
111
112 static void push_access_scope (tree);
113 static void pop_access_scope (tree);
114 static bool resolve_overloaded_unification (tree, tree, tree, tree,
115                                             unification_kind_t, int);
116 static int try_one_overload (tree, tree, tree, tree, tree,
117                              unification_kind_t, int, bool);
118 static int unify (tree, tree, tree, tree, int);
119 static void add_pending_template (tree);
120 static tree reopen_tinst_level (struct tinst_level *);
121 static tree tsubst_initializer_list (tree, tree);
122 static tree get_class_bindings (tree, tree, tree);
123 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
124                                    bool, bool);
125 static void tsubst_enum (tree, tree, tree);
126 static tree add_to_template_args (tree, tree);
127 static tree add_outermost_template_args (tree, tree);
128 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
129 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
130                                              tree);
131 static int type_unification_real (tree, tree, tree, const tree *,
132                                   unsigned int, int, unification_kind_t, int);
133 static void note_template_header (int);
134 static tree convert_nontype_argument_function (tree, tree);
135 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
136 static tree convert_template_argument (tree, tree, tree,
137                                        tsubst_flags_t, int, tree);
138 static int for_each_template_parm (tree, tree_fn_t, void*,
139                                    struct pointer_set_t*, bool);
140 static tree expand_template_argument_pack (tree);
141 static tree build_template_parm_index (int, int, int, int, tree, tree);
142 static bool inline_needs_template_parms (tree);
143 static void push_inline_template_parms_recursive (tree, int);
144 static tree retrieve_local_specialization (tree);
145 static void register_local_specialization (tree, tree);
146 static hashval_t hash_specialization (const void *p);
147 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
148 static int mark_template_parm (tree, void *);
149 static int template_parm_this_level_p (tree, void *);
150 static tree tsubst_friend_function (tree, tree);
151 static tree tsubst_friend_class (tree, tree);
152 static int can_complete_type_without_circularity (tree);
153 static tree get_bindings (tree, tree, tree, bool);
154 static int template_decl_level (tree);
155 static int check_cv_quals_for_unify (int, tree, tree);
156 static void template_parm_level_and_index (tree, int*, int*);
157 static int unify_pack_expansion (tree, tree, tree, tree, int, bool, bool);
158 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
159 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
160 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
161 static void regenerate_decl_from_template (tree, tree);
162 static tree most_specialized_class (tree, tree, tsubst_flags_t);
163 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
164 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
165 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
166 static bool check_specialization_scope (void);
167 static tree process_partial_specialization (tree);
168 static void set_current_access_from_decl (tree);
169 static tree get_template_base (tree, tree, tree, tree);
170 static tree try_class_unification (tree, tree, tree, tree);
171 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
172                                            tree, tree);
173 static bool template_template_parm_bindings_ok_p (tree, tree);
174 static int template_args_equal (tree, tree);
175 static void tsubst_default_arguments (tree);
176 static tree for_each_template_parm_r (tree *, int *, void *);
177 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
178 static void copy_default_args_to_explicit_spec (tree);
179 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
180 static int eq_local_specializations (const void *, const void *);
181 static bool dependent_template_arg_p (tree);
182 static bool any_template_arguments_need_structural_equality_p (tree);
183 static bool dependent_type_p_r (tree);
184 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
185 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
186 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
187 static tree tsubst_decl (tree, tree, tsubst_flags_t);
188 static void perform_typedefs_access_check (tree tmpl, tree targs);
189 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
190                                                         location_t);
191 static tree listify (tree);
192 static tree listify_autos (tree, tree);
193 static tree template_parm_to_arg (tree t);
194 static tree current_template_args (void);
195 static tree fixup_template_type_parm_type (tree, int);
196 static tree fixup_template_parm_index (tree, tree, int);
197 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
198
199 /* Make the current scope suitable for access checking when we are
200    processing T.  T can be FUNCTION_DECL for instantiated function
201    template, or VAR_DECL for static member variable (need by
202    instantiate_decl).  */
203
204 static void
205 push_access_scope (tree t)
206 {
207   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
208               || TREE_CODE (t) == VAR_DECL);
209
210   if (DECL_FRIEND_CONTEXT (t))
211     push_nested_class (DECL_FRIEND_CONTEXT (t));
212   else if (DECL_CLASS_SCOPE_P (t))
213     push_nested_class (DECL_CONTEXT (t));
214   else
215     push_to_top_level ();
216
217   if (TREE_CODE (t) == FUNCTION_DECL)
218     {
219       saved_access_scope = tree_cons
220         (NULL_TREE, current_function_decl, saved_access_scope);
221       current_function_decl = t;
222     }
223 }
224
225 /* Restore the scope set up by push_access_scope.  T is the node we
226    are processing.  */
227
228 static void
229 pop_access_scope (tree t)
230 {
231   if (TREE_CODE (t) == FUNCTION_DECL)
232     {
233       current_function_decl = TREE_VALUE (saved_access_scope);
234       saved_access_scope = TREE_CHAIN (saved_access_scope);
235     }
236
237   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
238     pop_nested_class ();
239   else
240     pop_from_top_level ();
241 }
242
243 /* Do any processing required when DECL (a member template
244    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
245    to DECL, unless it is a specialization, in which case the DECL
246    itself is returned.  */
247
248 tree
249 finish_member_template_decl (tree decl)
250 {
251   if (decl == error_mark_node)
252     return error_mark_node;
253
254   gcc_assert (DECL_P (decl));
255
256   if (TREE_CODE (decl) == TYPE_DECL)
257     {
258       tree type;
259
260       type = TREE_TYPE (decl);
261       if (type == error_mark_node)
262         return error_mark_node;
263       if (MAYBE_CLASS_TYPE_P (type)
264           && CLASSTYPE_TEMPLATE_INFO (type)
265           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
266         {
267           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
268           check_member_template (tmpl);
269           return tmpl;
270         }
271       return NULL_TREE;
272     }
273   else if (TREE_CODE (decl) == FIELD_DECL)
274     error ("data member %qD cannot be a member template", decl);
275   else if (DECL_TEMPLATE_INFO (decl))
276     {
277       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
278         {
279           check_member_template (DECL_TI_TEMPLATE (decl));
280           return DECL_TI_TEMPLATE (decl);
281         }
282       else
283         return decl;
284     }
285   else
286     error ("invalid member template declaration %qD", decl);
287
288   return error_mark_node;
289 }
290
291 /* Create a template info node.  */
292
293 tree
294 build_template_info (tree template_decl, tree template_args)
295 {
296   tree result = make_node (TEMPLATE_INFO);
297   TI_TEMPLATE (result) = template_decl;
298   TI_ARGS (result) = template_args;
299   return result;
300 }
301
302 /* Return the template info node corresponding to T, whatever T is.  */
303
304 tree
305 get_template_info (const_tree t)
306 {
307   tree tinfo = NULL_TREE;
308
309   if (!t || t == error_mark_node)
310     return NULL;
311
312   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
313     tinfo = DECL_TEMPLATE_INFO (t);
314
315   if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
316     t = TREE_TYPE (t);
317
318   if (TAGGED_TYPE_P (t))
319     tinfo = TYPE_TEMPLATE_INFO (t);
320   else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
321     tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
322
323   return tinfo;
324 }
325
326 /* Returns the template nesting level of the indicated class TYPE.
327
328    For example, in:
329      template <class T>
330      struct A
331      {
332        template <class U>
333        struct B {};
334      };
335
336    A<T>::B<U> has depth two, while A<T> has depth one.
337    Both A<T>::B<int> and A<int>::B<U> have depth one, if
338    they are instantiations, not specializations.
339
340    This function is guaranteed to return 0 if passed NULL_TREE so
341    that, for example, `template_class_depth (current_class_type)' is
342    always safe.  */
343
344 int
345 template_class_depth (tree type)
346 {
347   int depth;
348
349   for (depth = 0;
350        type && TREE_CODE (type) != NAMESPACE_DECL;
351        type = (TREE_CODE (type) == FUNCTION_DECL)
352          ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
353     {
354       tree tinfo = get_template_info (type);
355
356       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
357           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
358         ++depth;
359     }
360
361   return depth;
362 }
363
364 /* Subroutine of maybe_begin_member_template_processing.
365    Returns true if processing DECL needs us to push template parms.  */
366
367 static bool
368 inline_needs_template_parms (tree decl)
369 {
370   if (! DECL_TEMPLATE_INFO (decl))
371     return false;
372
373   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
374           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
375 }
376
377 /* Subroutine of maybe_begin_member_template_processing.
378    Push the template parms in PARMS, starting from LEVELS steps into the
379    chain, and ending at the beginning, since template parms are listed
380    innermost first.  */
381
382 static void
383 push_inline_template_parms_recursive (tree parmlist, int levels)
384 {
385   tree parms = TREE_VALUE (parmlist);
386   int i;
387
388   if (levels > 1)
389     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
390
391   ++processing_template_decl;
392   current_template_parms
393     = tree_cons (size_int (processing_template_decl),
394                  parms, current_template_parms);
395   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
396
397   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
398                NULL);
399   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
400     {
401       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
402
403       if (parm == error_mark_node)
404         continue;
405
406       gcc_assert (DECL_P (parm));
407
408       switch (TREE_CODE (parm))
409         {
410         case TYPE_DECL:
411         case TEMPLATE_DECL:
412           pushdecl (parm);
413           break;
414
415         case PARM_DECL:
416           {
417             /* Make a CONST_DECL as is done in process_template_parm.
418                It is ugly that we recreate this here; the original
419                version built in process_template_parm is no longer
420                available.  */
421             tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
422                                     CONST_DECL, DECL_NAME (parm),
423                                     TREE_TYPE (parm));
424             DECL_ARTIFICIAL (decl) = 1;
425             TREE_CONSTANT (decl) = 1;
426             TREE_READONLY (decl) = 1;
427             DECL_INITIAL (decl) = DECL_INITIAL (parm);
428             SET_DECL_TEMPLATE_PARM_P (decl);
429             pushdecl (decl);
430           }
431           break;
432
433         default:
434           gcc_unreachable ();
435         }
436     }
437 }
438
439 /* Restore the template parameter context for a member template or
440    a friend template defined in a class definition.  */
441
442 void
443 maybe_begin_member_template_processing (tree decl)
444 {
445   tree parms;
446   int levels = 0;
447
448   if (inline_needs_template_parms (decl))
449     {
450       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
451       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
452
453       if (DECL_TEMPLATE_SPECIALIZATION (decl))
454         {
455           --levels;
456           parms = TREE_CHAIN (parms);
457         }
458
459       push_inline_template_parms_recursive (parms, levels);
460     }
461
462   /* Remember how many levels of template parameters we pushed so that
463      we can pop them later.  */
464   VEC_safe_push (int, heap, inline_parm_levels, levels);
465 }
466
467 /* Undo the effects of maybe_begin_member_template_processing.  */
468
469 void
470 maybe_end_member_template_processing (void)
471 {
472   int i;
473   int last;
474
475   if (VEC_length (int, inline_parm_levels) == 0)
476     return;
477
478   last = VEC_pop (int, inline_parm_levels);
479   for (i = 0; i < last; ++i)
480     {
481       --processing_template_decl;
482       current_template_parms = TREE_CHAIN (current_template_parms);
483       poplevel (0, 0, 0);
484     }
485 }
486
487 /* Return a new template argument vector which contains all of ARGS,
488    but has as its innermost set of arguments the EXTRA_ARGS.  */
489
490 static tree
491 add_to_template_args (tree args, tree extra_args)
492 {
493   tree new_args;
494   int extra_depth;
495   int i;
496   int j;
497
498   if (args == NULL_TREE || extra_args == error_mark_node)
499     return extra_args;
500
501   extra_depth = TMPL_ARGS_DEPTH (extra_args);
502   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
503
504   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
505     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
506
507   for (j = 1; j <= extra_depth; ++j, ++i)
508     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
509
510   return new_args;
511 }
512
513 /* Like add_to_template_args, but only the outermost ARGS are added to
514    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
515    (EXTRA_ARGS) levels are added.  This function is used to combine
516    the template arguments from a partial instantiation with the
517    template arguments used to attain the full instantiation from the
518    partial instantiation.  */
519
520 static tree
521 add_outermost_template_args (tree args, tree extra_args)
522 {
523   tree new_args;
524
525   /* If there are more levels of EXTRA_ARGS than there are ARGS,
526      something very fishy is going on.  */
527   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
528
529   /* If *all* the new arguments will be the EXTRA_ARGS, just return
530      them.  */
531   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
532     return extra_args;
533
534   /* For the moment, we make ARGS look like it contains fewer levels.  */
535   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
536
537   new_args = add_to_template_args (args, extra_args);
538
539   /* Now, we restore ARGS to its full dimensions.  */
540   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
541
542   return new_args;
543 }
544
545 /* Return the N levels of innermost template arguments from the ARGS.  */
546
547 tree
548 get_innermost_template_args (tree args, int n)
549 {
550   tree new_args;
551   int extra_levels;
552   int i;
553
554   gcc_assert (n >= 0);
555
556   /* If N is 1, just return the innermost set of template arguments.  */
557   if (n == 1)
558     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
559
560   /* If we're not removing anything, just return the arguments we were
561      given.  */
562   extra_levels = TMPL_ARGS_DEPTH (args) - n;
563   gcc_assert (extra_levels >= 0);
564   if (extra_levels == 0)
565     return args;
566
567   /* Make a new set of arguments, not containing the outer arguments.  */
568   new_args = make_tree_vec (n);
569   for (i = 1; i <= n; ++i)
570     SET_TMPL_ARGS_LEVEL (new_args, i,
571                          TMPL_ARGS_LEVEL (args, i + extra_levels));
572
573   return new_args;
574 }
575
576 /* The inverse of get_innermost_template_args: Return all but the innermost
577    EXTRA_LEVELS levels of template arguments from the ARGS.  */
578
579 static tree
580 strip_innermost_template_args (tree args, int extra_levels)
581 {
582   tree new_args;
583   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
584   int i;
585
586   gcc_assert (n >= 0);
587
588   /* If N is 1, just return the outermost set of template arguments.  */
589   if (n == 1)
590     return TMPL_ARGS_LEVEL (args, 1);
591
592   /* If we're not removing anything, just return the arguments we were
593      given.  */
594   gcc_assert (extra_levels >= 0);
595   if (extra_levels == 0)
596     return args;
597
598   /* Make a new set of arguments, not containing the inner arguments.  */
599   new_args = make_tree_vec (n);
600   for (i = 1; i <= n; ++i)
601     SET_TMPL_ARGS_LEVEL (new_args, i,
602                          TMPL_ARGS_LEVEL (args, i));
603
604   return new_args;
605 }
606
607 /* We've got a template header coming up; push to a new level for storing
608    the parms.  */
609
610 void
611 begin_template_parm_list (void)
612 {
613   /* We use a non-tag-transparent scope here, which causes pushtag to
614      put tags in this scope, rather than in the enclosing class or
615      namespace scope.  This is the right thing, since we want
616      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
617      global template class, push_template_decl handles putting the
618      TEMPLATE_DECL into top-level scope.  For a nested template class,
619      e.g.:
620
621        template <class T> struct S1 {
622          template <class T> struct S2 {};
623        };
624
625      pushtag contains special code to call pushdecl_with_scope on the
626      TEMPLATE_DECL for S2.  */
627   begin_scope (sk_template_parms, NULL);
628   ++processing_template_decl;
629   ++processing_template_parmlist;
630   note_template_header (0);
631 }
632
633 /* This routine is called when a specialization is declared.  If it is
634    invalid to declare a specialization here, an error is reported and
635    false is returned, otherwise this routine will return true.  */
636
637 static bool
638 check_specialization_scope (void)
639 {
640   tree scope = current_scope ();
641
642   /* [temp.expl.spec]
643
644      An explicit specialization shall be declared in the namespace of
645      which the template is a member, or, for member templates, in the
646      namespace of which the enclosing class or enclosing class
647      template is a member.  An explicit specialization of a member
648      function, member class or static data member of a class template
649      shall be declared in the namespace of which the class template
650      is a member.  */
651   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
652     {
653       error ("explicit specialization in non-namespace scope %qD", scope);
654       return false;
655     }
656
657   /* [temp.expl.spec]
658
659      In an explicit specialization declaration for a member of a class
660      template or a member template that appears in namespace scope,
661      the member template and some of its enclosing class templates may
662      remain unspecialized, except that the declaration shall not
663      explicitly specialize a class member template if its enclosing
664      class templates are not explicitly specialized as well.  */
665   if (current_template_parms)
666     {
667       error ("enclosing class templates are not explicitly specialized");
668       return false;
669     }
670
671   return true;
672 }
673
674 /* We've just seen template <>.  */
675
676 bool
677 begin_specialization (void)
678 {
679   begin_scope (sk_template_spec, NULL);
680   note_template_header (1);
681   return check_specialization_scope ();
682 }
683
684 /* Called at then end of processing a declaration preceded by
685    template<>.  */
686
687 void
688 end_specialization (void)
689 {
690   finish_scope ();
691   reset_specialization ();
692 }
693
694 /* Any template <>'s that we have seen thus far are not referring to a
695    function specialization.  */
696
697 void
698 reset_specialization (void)
699 {
700   processing_specialization = 0;
701   template_header_count = 0;
702 }
703
704 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
705    it was of the form template <>.  */
706
707 static void
708 note_template_header (int specialization)
709 {
710   processing_specialization = specialization;
711   template_header_count++;
712 }
713
714 /* We're beginning an explicit instantiation.  */
715
716 void
717 begin_explicit_instantiation (void)
718 {
719   gcc_assert (!processing_explicit_instantiation);
720   processing_explicit_instantiation = true;
721 }
722
723
724 void
725 end_explicit_instantiation (void)
726 {
727   gcc_assert (processing_explicit_instantiation);
728   processing_explicit_instantiation = false;
729 }
730
731 /* An explicit specialization or partial specialization TMPL is being
732    declared.  Check that the namespace in which the specialization is
733    occurring is permissible.  Returns false iff it is invalid to
734    specialize TMPL in the current namespace.  */
735
736 static bool
737 check_specialization_namespace (tree tmpl)
738 {
739   tree tpl_ns = decl_namespace_context (tmpl);
740
741   /* [tmpl.expl.spec]
742
743      An explicit specialization shall be declared in the namespace of
744      which the template is a member, or, for member templates, in the
745      namespace of which the enclosing class or enclosing class
746      template is a member.  An explicit specialization of a member
747      function, member class or static data member of a class template
748      shall be declared in the namespace of which the class template is
749      a member.  */
750   if (current_scope() != DECL_CONTEXT (tmpl)
751       && !at_namespace_scope_p ())
752     {
753       error ("specialization of %qD must appear at namespace scope", tmpl);
754       return false;
755     }
756   if (is_associated_namespace (current_namespace, tpl_ns))
757     /* Same or super-using namespace.  */
758     return true;
759   else
760     {
761       permerror (input_location, "specialization of %qD in different namespace", tmpl);
762       permerror (input_location, "  from definition of %q+#D", tmpl);
763       return false;
764     }
765 }
766
767 /* SPEC is an explicit instantiation.  Check that it is valid to
768    perform this explicit instantiation in the current namespace.  */
769
770 static void
771 check_explicit_instantiation_namespace (tree spec)
772 {
773   tree ns;
774
775   /* DR 275: An explicit instantiation shall appear in an enclosing
776      namespace of its template.  */
777   ns = decl_namespace_context (spec);
778   if (!is_ancestor (current_namespace, ns))
779     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
780                "(which does not enclose namespace %qD)",
781                spec, current_namespace, ns);
782 }
783
784 /* The TYPE is being declared.  If it is a template type, that means it
785    is a partial specialization.  Do appropriate error-checking.  */
786
787 tree
788 maybe_process_partial_specialization (tree type)
789 {
790   tree context;
791
792   if (type == error_mark_node)
793     return error_mark_node;
794
795   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
796     {
797       error ("name of class shadows template template parameter %qD",
798              TYPE_NAME (type));
799       return error_mark_node;
800     }
801
802   context = TYPE_CONTEXT (type);
803
804   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
805     {
806       /* This is for ordinary explicit specialization and partial
807          specialization of a template class such as:
808
809            template <> class C<int>;
810
811          or:
812
813            template <class T> class C<T*>;
814
815          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
816
817       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
818           && !COMPLETE_TYPE_P (type))
819         {
820           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
821           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
822           if (processing_template_decl)
823             {
824               if (push_template_decl (TYPE_MAIN_DECL (type))
825                   == error_mark_node)
826                 return error_mark_node;
827             }
828         }
829       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
830         error ("specialization of %qT after instantiation", type);
831     }
832   else if (CLASS_TYPE_P (type)
833            && !CLASSTYPE_USE_TEMPLATE (type)
834            && CLASSTYPE_TEMPLATE_INFO (type)
835            && context && CLASS_TYPE_P (context)
836            && CLASSTYPE_TEMPLATE_INFO (context))
837     {
838       /* This is for an explicit specialization of member class
839          template according to [temp.expl.spec/18]:
840
841            template <> template <class U> class C<int>::D;
842
843          The context `C<int>' must be an implicit instantiation.
844          Otherwise this is just a member class template declared
845          earlier like:
846
847            template <> class C<int> { template <class U> class D; };
848            template <> template <class U> class C<int>::D;
849
850          In the first case, `C<int>::D' is a specialization of `C<T>::D'
851          while in the second case, `C<int>::D' is a primary template
852          and `C<T>::D' may not exist.  */
853
854       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
855           && !COMPLETE_TYPE_P (type))
856         {
857           tree t;
858           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
859
860           if (current_namespace
861               != decl_namespace_context (tmpl))
862             {
863               permerror (input_location, "specializing %q#T in different namespace", type);
864               permerror (input_location, "  from definition of %q+#D", tmpl);
865             }
866
867           /* Check for invalid specialization after instantiation:
868
869                template <> template <> class C<int>::D<int>;
870                template <> template <class U> class C<int>::D;  */
871
872           for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
873                t; t = TREE_CHAIN (t))
874             {
875               tree inst = TREE_VALUE (t);
876               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst))
877                 {
878                   /* We already have a full specialization of this partial
879                      instantiation.  Reassign it to the new member
880                      specialization template.  */
881                   spec_entry elt;
882                   spec_entry **slot;
883
884                   elt.tmpl = most_general_template (tmpl);
885                   elt.args = CLASSTYPE_TI_ARGS (inst);
886                   elt.spec = inst;
887
888                   htab_remove_elt (type_specializations, &elt);
889
890                   elt.tmpl = tmpl;
891                   elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
892
893                   slot = (spec_entry **)
894                     htab_find_slot (type_specializations, &elt, INSERT);
895                   *slot = ggc_alloc_spec_entry ();
896                   **slot = elt;
897                 }
898               else if (COMPLETE_OR_OPEN_TYPE_P (inst))
899                 /* But if we've had an implicit instantiation, that's a
900                    problem ([temp.expl.spec]/6).  */
901                 error ("specialization %qT after instantiation %qT",
902                        type, inst);
903             }
904
905           /* Mark TYPE as a specialization.  And as a result, we only
906              have one level of template argument for the innermost
907              class template.  */
908           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
909           CLASSTYPE_TI_ARGS (type)
910             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
911         }
912     }
913   else if (processing_specialization)
914     {
915        /* Someday C++0x may allow for enum template specialization.  */
916       if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
917           && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
918         pedwarn (input_location, OPT_pedantic, "template specialization "
919                  "of %qD not allowed by ISO C++", type);
920       else
921         {
922           error ("explicit specialization of non-template %qT", type);
923           return error_mark_node;
924         }
925     }
926
927   return type;
928 }
929
930 /* Returns nonzero if we can optimize the retrieval of specializations
931    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
932    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
933
934 static inline bool
935 optimize_specialization_lookup_p (tree tmpl)
936 {
937   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
938           && DECL_CLASS_SCOPE_P (tmpl)
939           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
940              parameter.  */
941           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
942           /* The optimized lookup depends on the fact that the
943              template arguments for the member function template apply
944              purely to the containing class, which is not true if the
945              containing class is an explicit or partial
946              specialization.  */
947           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
948           && !DECL_MEMBER_TEMPLATE_P (tmpl)
949           && !DECL_CONV_FN_P (tmpl)
950           /* It is possible to have a template that is not a member
951              template and is not a member of a template class:
952
953              template <typename T>
954              struct S { friend A::f(); };
955
956              Here, the friend function is a template, but the context does
957              not have template information.  The optimized lookup relies
958              on having ARGS be the template arguments for both the class
959              and the function template.  */
960           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
961 }
962
963 /* Retrieve the specialization (in the sense of [temp.spec] - a
964    specialization is either an instantiation or an explicit
965    specialization) of TMPL for the given template ARGS.  If there is
966    no such specialization, return NULL_TREE.  The ARGS are a vector of
967    arguments, or a vector of vectors of arguments, in the case of
968    templates with more than one level of parameters.
969
970    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
971    then we search for a partial specialization matching ARGS.  This
972    parameter is ignored if TMPL is not a class template.  */
973
974 static tree
975 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
976 {
977   if (args == error_mark_node)
978     return NULL_TREE;
979
980   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
981
982   /* There should be as many levels of arguments as there are
983      levels of parameters.  */
984   gcc_assert (TMPL_ARGS_DEPTH (args)
985               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
986
987   if (optimize_specialization_lookup_p (tmpl))
988     {
989       tree class_template;
990       tree class_specialization;
991       VEC(tree,gc) *methods;
992       tree fns;
993       int idx;
994
995       /* The template arguments actually apply to the containing
996          class.  Find the class specialization with those
997          arguments.  */
998       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
999       class_specialization
1000         = retrieve_specialization (class_template, args, 0);
1001       if (!class_specialization)
1002         return NULL_TREE;
1003       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1004          for the specialization.  */
1005       idx = class_method_index_for_fn (class_specialization, tmpl);
1006       if (idx == -1)
1007         return NULL_TREE;
1008       /* Iterate through the methods with the indicated name, looking
1009          for the one that has an instance of TMPL.  */
1010       methods = CLASSTYPE_METHOD_VEC (class_specialization);
1011       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
1012         {
1013           tree fn = OVL_CURRENT (fns);
1014           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1015               /* using-declarations can add base methods to the method vec,
1016                  and we don't want those here.  */
1017               && DECL_CONTEXT (fn) == class_specialization)
1018             return fn;
1019         }
1020       return NULL_TREE;
1021     }
1022   else
1023     {
1024       spec_entry *found;
1025       spec_entry elt;
1026       htab_t specializations;
1027
1028       elt.tmpl = tmpl;
1029       elt.args = args;
1030       elt.spec = NULL_TREE;
1031
1032       if (DECL_CLASS_TEMPLATE_P (tmpl))
1033         specializations = type_specializations;
1034       else
1035         specializations = decl_specializations;
1036
1037       if (hash == 0)
1038         hash = hash_specialization (&elt);
1039       found = (spec_entry *) htab_find_with_hash (specializations, &elt, hash);
1040       if (found)
1041         return found->spec;
1042     }
1043
1044   return NULL_TREE;
1045 }
1046
1047 /* Like retrieve_specialization, but for local declarations.  */
1048
1049 static tree
1050 retrieve_local_specialization (tree tmpl)
1051 {
1052   tree spec;
1053
1054   if (local_specializations == NULL)
1055     return NULL_TREE;
1056
1057   spec = (tree) htab_find_with_hash (local_specializations, tmpl,
1058                                      htab_hash_pointer (tmpl));
1059   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
1060 }
1061
1062 /* Returns nonzero iff DECL is a specialization of TMPL.  */
1063
1064 int
1065 is_specialization_of (tree decl, tree tmpl)
1066 {
1067   tree t;
1068
1069   if (TREE_CODE (decl) == FUNCTION_DECL)
1070     {
1071       for (t = decl;
1072            t != NULL_TREE;
1073            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1074         if (t == tmpl)
1075           return 1;
1076     }
1077   else
1078     {
1079       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1080
1081       for (t = TREE_TYPE (decl);
1082            t != NULL_TREE;
1083            t = CLASSTYPE_USE_TEMPLATE (t)
1084              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1085         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1086           return 1;
1087     }
1088
1089   return 0;
1090 }
1091
1092 /* Returns nonzero iff DECL is a specialization of friend declaration
1093    FRIEND_DECL according to [temp.friend].  */
1094
1095 bool
1096 is_specialization_of_friend (tree decl, tree friend_decl)
1097 {
1098   bool need_template = true;
1099   int template_depth;
1100
1101   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1102               || TREE_CODE (decl) == TYPE_DECL);
1103
1104   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1105      of a template class, we want to check if DECL is a specialization
1106      if this.  */
1107   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1108       && DECL_TEMPLATE_INFO (friend_decl)
1109       && !DECL_USE_TEMPLATE (friend_decl))
1110     {
1111       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1112       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1113       need_template = false;
1114     }
1115   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1116            && !PRIMARY_TEMPLATE_P (friend_decl))
1117     need_template = false;
1118
1119   /* There is nothing to do if this is not a template friend.  */
1120   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1121     return false;
1122
1123   if (is_specialization_of (decl, friend_decl))
1124     return true;
1125
1126   /* [temp.friend/6]
1127      A member of a class template may be declared to be a friend of a
1128      non-template class.  In this case, the corresponding member of
1129      every specialization of the class template is a friend of the
1130      class granting friendship.
1131
1132      For example, given a template friend declaration
1133
1134        template <class T> friend void A<T>::f();
1135
1136      the member function below is considered a friend
1137
1138        template <> struct A<int> {
1139          void f();
1140        };
1141
1142      For this type of template friend, TEMPLATE_DEPTH below will be
1143      nonzero.  To determine if DECL is a friend of FRIEND, we first
1144      check if the enclosing class is a specialization of another.  */
1145
1146   template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1147   if (template_depth
1148       && DECL_CLASS_SCOPE_P (decl)
1149       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1150                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1151     {
1152       /* Next, we check the members themselves.  In order to handle
1153          a few tricky cases, such as when FRIEND_DECL's are
1154
1155            template <class T> friend void A<T>::g(T t);
1156            template <class T> template <T t> friend void A<T>::h();
1157
1158          and DECL's are
1159
1160            void A<int>::g(int);
1161            template <int> void A<int>::h();
1162
1163          we need to figure out ARGS, the template arguments from
1164          the context of DECL.  This is required for template substitution
1165          of `T' in the function parameter of `g' and template parameter
1166          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1167
1168       tree context = DECL_CONTEXT (decl);
1169       tree args = NULL_TREE;
1170       int current_depth = 0;
1171
1172       while (current_depth < template_depth)
1173         {
1174           if (CLASSTYPE_TEMPLATE_INFO (context))
1175             {
1176               if (current_depth == 0)
1177                 args = TYPE_TI_ARGS (context);
1178               else
1179                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1180               current_depth++;
1181             }
1182           context = TYPE_CONTEXT (context);
1183         }
1184
1185       if (TREE_CODE (decl) == FUNCTION_DECL)
1186         {
1187           bool is_template;
1188           tree friend_type;
1189           tree decl_type;
1190           tree friend_args_type;
1191           tree decl_args_type;
1192
1193           /* Make sure that both DECL and FRIEND_DECL are templates or
1194              non-templates.  */
1195           is_template = DECL_TEMPLATE_INFO (decl)
1196                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1197           if (need_template ^ is_template)
1198             return false;
1199           else if (is_template)
1200             {
1201               /* If both are templates, check template parameter list.  */
1202               tree friend_parms
1203                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1204                                          args, tf_none);
1205               if (!comp_template_parms
1206                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1207                       friend_parms))
1208                 return false;
1209
1210               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1211             }
1212           else
1213             decl_type = TREE_TYPE (decl);
1214
1215           friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1216                                               tf_none, NULL_TREE);
1217           if (friend_type == error_mark_node)
1218             return false;
1219
1220           /* Check if return types match.  */
1221           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1222             return false;
1223
1224           /* Check if function parameter types match, ignoring the
1225              `this' parameter.  */
1226           friend_args_type = TYPE_ARG_TYPES (friend_type);
1227           decl_args_type = TYPE_ARG_TYPES (decl_type);
1228           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1229             friend_args_type = TREE_CHAIN (friend_args_type);
1230           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1231             decl_args_type = TREE_CHAIN (decl_args_type);
1232
1233           return compparms (decl_args_type, friend_args_type);
1234         }
1235       else
1236         {
1237           /* DECL is a TYPE_DECL */
1238           bool is_template;
1239           tree decl_type = TREE_TYPE (decl);
1240
1241           /* Make sure that both DECL and FRIEND_DECL are templates or
1242              non-templates.  */
1243           is_template
1244             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1245               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1246
1247           if (need_template ^ is_template)
1248             return false;
1249           else if (is_template)
1250             {
1251               tree friend_parms;
1252               /* If both are templates, check the name of the two
1253                  TEMPLATE_DECL's first because is_friend didn't.  */
1254               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1255                   != DECL_NAME (friend_decl))
1256                 return false;
1257
1258               /* Now check template parameter list.  */
1259               friend_parms
1260                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1261                                          args, tf_none);
1262               return comp_template_parms
1263                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1264                  friend_parms);
1265             }
1266           else
1267             return (DECL_NAME (decl)
1268                     == DECL_NAME (friend_decl));
1269         }
1270     }
1271   return false;
1272 }
1273
1274 /* Register the specialization SPEC as a specialization of TMPL with
1275    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1276    is actually just a friend declaration.  Returns SPEC, or an
1277    equivalent prior declaration, if available.  */
1278
1279 static tree
1280 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1281                          hashval_t hash)
1282 {
1283   tree fn;
1284   spec_entry **slot = NULL;
1285   spec_entry elt;
1286
1287   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec));
1288
1289   if (TREE_CODE (spec) == FUNCTION_DECL
1290       && uses_template_parms (DECL_TI_ARGS (spec)))
1291     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1292        register it; we want the corresponding TEMPLATE_DECL instead.
1293        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1294        the more obvious `uses_template_parms (spec)' to avoid problems
1295        with default function arguments.  In particular, given
1296        something like this:
1297
1298           template <class T> void f(T t1, T t = T())
1299
1300        the default argument expression is not substituted for in an
1301        instantiation unless and until it is actually needed.  */
1302     return spec;
1303
1304   if (optimize_specialization_lookup_p (tmpl))
1305     /* We don't put these specializations in the hash table, but we might
1306        want to give an error about a mismatch.  */
1307     fn = retrieve_specialization (tmpl, args, 0);
1308   else
1309     {
1310       elt.tmpl = tmpl;
1311       elt.args = args;
1312       elt.spec = spec;
1313
1314       if (hash == 0)
1315         hash = hash_specialization (&elt);
1316
1317       slot = (spec_entry **)
1318         htab_find_slot_with_hash (decl_specializations, &elt, hash, INSERT);
1319       if (*slot)
1320         fn = (*slot)->spec;
1321       else
1322         fn = NULL_TREE;
1323     }
1324
1325   /* We can sometimes try to re-register a specialization that we've
1326      already got.  In particular, regenerate_decl_from_template calls
1327      duplicate_decls which will update the specialization list.  But,
1328      we'll still get called again here anyhow.  It's more convenient
1329      to simply allow this than to try to prevent it.  */
1330   if (fn == spec)
1331     return spec;
1332   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1333     {
1334       if (DECL_TEMPLATE_INSTANTIATION (fn))
1335         {
1336           if (DECL_ODR_USED (fn)
1337               || DECL_EXPLICIT_INSTANTIATION (fn))
1338             {
1339               error ("specialization of %qD after instantiation",
1340                      fn);
1341               return error_mark_node;
1342             }
1343           else
1344             {
1345               tree clone;
1346               /* This situation should occur only if the first
1347                  specialization is an implicit instantiation, the
1348                  second is an explicit specialization, and the
1349                  implicit instantiation has not yet been used.  That
1350                  situation can occur if we have implicitly
1351                  instantiated a member function and then specialized
1352                  it later.
1353
1354                  We can also wind up here if a friend declaration that
1355                  looked like an instantiation turns out to be a
1356                  specialization:
1357
1358                    template <class T> void foo(T);
1359                    class S { friend void foo<>(int) };
1360                    template <> void foo(int);
1361
1362                  We transform the existing DECL in place so that any
1363                  pointers to it become pointers to the updated
1364                  declaration.
1365
1366                  If there was a definition for the template, but not
1367                  for the specialization, we want this to look as if
1368                  there were no definition, and vice versa.  */
1369               DECL_INITIAL (fn) = NULL_TREE;
1370               duplicate_decls (spec, fn, is_friend);
1371               /* The call to duplicate_decls will have applied
1372                  [temp.expl.spec]:
1373
1374                    An explicit specialization of a function template
1375                    is inline only if it is explicitly declared to be,
1376                    and independently of whether its function template
1377                    is.
1378
1379                 to the primary function; now copy the inline bits to
1380                 the various clones.  */
1381               FOR_EACH_CLONE (clone, fn)
1382                 {
1383                   DECL_DECLARED_INLINE_P (clone)
1384                     = DECL_DECLARED_INLINE_P (fn);
1385                   DECL_SOURCE_LOCATION (clone)
1386                     = DECL_SOURCE_LOCATION (fn);
1387                 }
1388               check_specialization_namespace (fn);
1389
1390               return fn;
1391             }
1392         }
1393       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1394         {
1395           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1396             /* Dup decl failed, but this is a new definition. Set the
1397                line number so any errors match this new
1398                definition.  */
1399             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1400
1401           return fn;
1402         }
1403     }
1404   else if (fn)
1405     return duplicate_decls (spec, fn, is_friend);
1406
1407   /* A specialization must be declared in the same namespace as the
1408      template it is specializing.  */
1409   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1410       && !check_specialization_namespace (tmpl))
1411     DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1412
1413   if (!optimize_specialization_lookup_p (tmpl))
1414     {
1415       gcc_assert (tmpl && args && spec);
1416       *slot = ggc_alloc_spec_entry ();
1417       **slot = elt;
1418       if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1419           && PRIMARY_TEMPLATE_P (tmpl)
1420           && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1421         /* TMPL is a forward declaration of a template function; keep a list
1422            of all specializations in case we need to reassign them to a friend
1423            template later in tsubst_friend_function.  */
1424         DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1425           = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1426     }
1427
1428   return spec;
1429 }
1430
1431 /* Returns true iff two spec_entry nodes are equivalent.  Only compares the
1432    TMPL and ARGS members, ignores SPEC.  */
1433
1434 static int
1435 eq_specializations (const void *p1, const void *p2)
1436 {
1437   const spec_entry *e1 = (const spec_entry *)p1;
1438   const spec_entry *e2 = (const spec_entry *)p2;
1439
1440   return (e1->tmpl == e2->tmpl
1441           && comp_template_args (e1->args, e2->args));
1442 }
1443
1444 /* Returns a hash for a template TMPL and template arguments ARGS.  */
1445
1446 static hashval_t
1447 hash_tmpl_and_args (tree tmpl, tree args)
1448 {
1449   hashval_t val = DECL_UID (tmpl);
1450   return iterative_hash_template_arg (args, val);
1451 }
1452
1453 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1454    ignoring SPEC.  */
1455
1456 static hashval_t
1457 hash_specialization (const void *p)
1458 {
1459   const spec_entry *e = (const spec_entry *)p;
1460   return hash_tmpl_and_args (e->tmpl, e->args);
1461 }
1462
1463 /* Recursively calculate a hash value for a template argument ARG, for use
1464    in the hash tables of template specializations.  */
1465
1466 hashval_t
1467 iterative_hash_template_arg (tree arg, hashval_t val)
1468 {
1469   unsigned HOST_WIDE_INT i;
1470   enum tree_code code;
1471   char tclass;
1472
1473   if (arg == NULL_TREE)
1474     return iterative_hash_object (arg, val);
1475
1476   if (!TYPE_P (arg))
1477     STRIP_NOPS (arg);
1478
1479   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1480     /* We can get one of these when re-hashing a previous entry in the middle
1481        of substituting into a pack expansion.  Just look through it.  */
1482     arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1483
1484   code = TREE_CODE (arg);
1485   tclass = TREE_CODE_CLASS (code);
1486
1487   val = iterative_hash_object (code, val);
1488
1489   switch (code)
1490     {
1491     case ERROR_MARK:
1492       return val;
1493
1494     case IDENTIFIER_NODE:
1495       return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1496
1497     case TREE_VEC:
1498       {
1499         int i, len = TREE_VEC_LENGTH (arg);
1500         for (i = 0; i < len; ++i)
1501           val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1502         return val;
1503       }
1504
1505     case TYPE_PACK_EXPANSION:
1506     case EXPR_PACK_EXPANSION:
1507       return iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1508
1509     case TYPE_ARGUMENT_PACK:
1510     case NONTYPE_ARGUMENT_PACK:
1511       return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1512
1513     case TREE_LIST:
1514       for (; arg; arg = TREE_CHAIN (arg))
1515         val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1516       return val;
1517
1518     case OVERLOAD:
1519       for (; arg; arg = OVL_NEXT (arg))
1520         val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
1521       return val;
1522
1523     case CONSTRUCTOR:
1524       {
1525         tree field, value;
1526         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1527           {
1528             val = iterative_hash_template_arg (field, val);
1529             val = iterative_hash_template_arg (value, val);
1530           }
1531         return val;
1532       }
1533
1534     case PARM_DECL:
1535       if (!DECL_ARTIFICIAL (arg))
1536         {
1537           val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1538           val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1539         }
1540       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1541
1542     case TARGET_EXPR:
1543       return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1544
1545     case PTRMEM_CST:
1546       val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1547       return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1548
1549     case TEMPLATE_PARM_INDEX:
1550       val = iterative_hash_template_arg
1551         (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1552       val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1553       return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1554
1555     case TRAIT_EXPR:
1556       val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1557       val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1558       return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1559
1560     case BASELINK:
1561       val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1562                                          val);
1563       return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1564                                           val);
1565
1566     case MODOP_EXPR:
1567       val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1568       code = TREE_CODE (TREE_OPERAND (arg, 1));
1569       val = iterative_hash_object (code, val);
1570       return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1571
1572     case LAMBDA_EXPR:
1573       /* A lambda can't appear in a template arg, but don't crash on
1574          erroneous input.  */
1575       gcc_assert (seen_error ());
1576       return val;
1577
1578     case CAST_EXPR:
1579     case STATIC_CAST_EXPR:
1580     case REINTERPRET_CAST_EXPR:
1581     case CONST_CAST_EXPR:
1582     case DYNAMIC_CAST_EXPR:
1583     case NEW_EXPR:
1584       val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1585       /* Now hash operands as usual.  */
1586       break;
1587
1588     default:
1589       break;
1590     }
1591
1592   switch (tclass)
1593     {
1594     case tcc_type:
1595       if (TYPE_CANONICAL (arg))
1596         return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1597                                       val);
1598       else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1599         return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1600       /* Otherwise just compare the types during lookup.  */
1601       return val;
1602
1603     case tcc_declaration:
1604     case tcc_constant:
1605       return iterative_hash_expr (arg, val);
1606
1607     default:
1608       gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1609       {
1610         unsigned n = TREE_OPERAND_LENGTH (arg);
1611         for (i = 0; i < n; ++i)
1612           val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1613         return val;
1614       }
1615     }
1616   gcc_unreachable ();
1617   return 0;
1618 }
1619
1620 /* Unregister the specialization SPEC as a specialization of TMPL.
1621    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1622    if the SPEC was listed as a specialization of TMPL.
1623
1624    Note that SPEC has been ggc_freed, so we can't look inside it.  */
1625
1626 bool
1627 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1628 {
1629   spec_entry **slot;
1630   spec_entry elt;
1631
1632   elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1633   elt.args = TI_ARGS (tinfo);
1634   elt.spec = NULL_TREE;
1635
1636   slot = (spec_entry **) htab_find_slot (decl_specializations, &elt, INSERT);
1637   if (*slot)
1638     {
1639       gcc_assert ((*slot)->spec == spec || (*slot)->spec == new_spec);
1640       gcc_assert (new_spec != NULL_TREE);
1641       (*slot)->spec = new_spec;
1642       return 1;
1643     }
1644
1645   return 0;
1646 }
1647
1648 /* Compare an entry in the local specializations hash table P1 (which
1649    is really a pointer to a TREE_LIST) with P2 (which is really a
1650    DECL).  */
1651
1652 static int
1653 eq_local_specializations (const void *p1, const void *p2)
1654 {
1655   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1656 }
1657
1658 /* Hash P1, an entry in the local specializations table.  */
1659
1660 static hashval_t
1661 hash_local_specialization (const void* p1)
1662 {
1663   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1664 }
1665
1666 /* Like register_specialization, but for local declarations.  We are
1667    registering SPEC, an instantiation of TMPL.  */
1668
1669 static void
1670 register_local_specialization (tree spec, tree tmpl)
1671 {
1672   void **slot;
1673
1674   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1675                                    htab_hash_pointer (tmpl), INSERT);
1676   *slot = build_tree_list (spec, tmpl);
1677 }
1678
1679 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1680    specialized class.  */
1681
1682 bool
1683 explicit_class_specialization_p (tree type)
1684 {
1685   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1686     return false;
1687   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1688 }
1689
1690 /* Print the list of functions at FNS, going through all the overloads
1691    for each element of the list.  Alternatively, FNS can not be a
1692    TREE_LIST, in which case it will be printed together with all the
1693    overloads.
1694
1695    MORE and *STR should respectively be FALSE and NULL when the function
1696    is called from the outside.  They are used internally on recursive
1697    calls.  print_candidates manages the two parameters and leaves NULL
1698    in *STR when it ends.  */
1699
1700 static void
1701 print_candidates_1 (tree fns, bool more, const char **str)
1702 {
1703   tree fn, fn2;
1704   char *spaces = NULL;
1705
1706   for (fn = fns; fn; fn = OVL_NEXT (fn))
1707     if (TREE_CODE (fn) == TREE_LIST)
1708       {
1709         for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1710           print_candidates_1 (TREE_VALUE (fn2),
1711                               TREE_CHAIN (fn2) || more, str);
1712       }
1713     else
1714       {
1715         if (!*str)
1716           {
1717             /* Pick the prefix string.  */
1718             if (!more && !OVL_NEXT (fns))
1719               {
1720                 error ("candidate is: %+#D", OVL_CURRENT (fn));
1721                 continue;
1722               }
1723
1724             *str = _("candidates are:");
1725             spaces = get_spaces (*str);
1726           }
1727         error ("%s %+#D", *str, OVL_CURRENT (fn));
1728         *str = spaces ? spaces : *str;
1729       }
1730
1731   if (!more)
1732     {
1733       free (spaces);
1734       *str = NULL;
1735     }
1736 }
1737
1738 /* Print the list of candidate FNS in an error message.  FNS can also
1739    be a TREE_LIST of non-functions in the case of an ambiguous lookup.  */
1740
1741 void
1742 print_candidates (tree fns)
1743 {
1744   const char *str = NULL;
1745   print_candidates_1 (fns, false, &str);
1746   gcc_assert (str == NULL);
1747 }
1748
1749 /* Returns the template (one of the functions given by TEMPLATE_ID)
1750    which can be specialized to match the indicated DECL with the
1751    explicit template args given in TEMPLATE_ID.  The DECL may be
1752    NULL_TREE if none is available.  In that case, the functions in
1753    TEMPLATE_ID are non-members.
1754
1755    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1756    specialization of a member template.
1757
1758    The TEMPLATE_COUNT is the number of references to qualifying
1759    template classes that appeared in the name of the function. See
1760    check_explicit_specialization for a more accurate description.
1761
1762    TSK indicates what kind of template declaration (if any) is being
1763    declared.  TSK_TEMPLATE indicates that the declaration given by
1764    DECL, though a FUNCTION_DECL, has template parameters, and is
1765    therefore a template function.
1766
1767    The template args (those explicitly specified and those deduced)
1768    are output in a newly created vector *TARGS_OUT.
1769
1770    If it is impossible to determine the result, an error message is
1771    issued.  The error_mark_node is returned to indicate failure.  */
1772
1773 static tree
1774 determine_specialization (tree template_id,
1775                           tree decl,
1776                           tree* targs_out,
1777                           int need_member_template,
1778                           int template_count,
1779                           tmpl_spec_kind tsk)
1780 {
1781   tree fns;
1782   tree targs;
1783   tree explicit_targs;
1784   tree candidates = NULL_TREE;
1785   /* A TREE_LIST of templates of which DECL may be a specialization.
1786      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1787      corresponding TREE_PURPOSE is the set of template arguments that,
1788      when used to instantiate the template, would produce a function
1789      with the signature of DECL.  */
1790   tree templates = NULL_TREE;
1791   int header_count;
1792   struct cp_binding_level *b;
1793
1794   *targs_out = NULL_TREE;
1795
1796   if (template_id == error_mark_node || decl == error_mark_node)
1797     return error_mark_node;
1798
1799   fns = TREE_OPERAND (template_id, 0);
1800   explicit_targs = TREE_OPERAND (template_id, 1);
1801
1802   if (fns == error_mark_node)
1803     return error_mark_node;
1804
1805   /* Check for baselinks.  */
1806   if (BASELINK_P (fns))
1807     fns = BASELINK_FUNCTIONS (fns);
1808
1809   if (!is_overloaded_fn (fns))
1810     {
1811       error ("%qD is not a function template", fns);
1812       return error_mark_node;
1813     }
1814
1815   /* Count the number of template headers specified for this
1816      specialization.  */
1817   header_count = 0;
1818   for (b = current_binding_level;
1819        b->kind == sk_template_parms;
1820        b = b->level_chain)
1821     ++header_count;
1822
1823   for (; fns; fns = OVL_NEXT (fns))
1824     {
1825       tree fn = OVL_CURRENT (fns);
1826
1827       if (TREE_CODE (fn) == TEMPLATE_DECL)
1828         {
1829           tree decl_arg_types;
1830           tree fn_arg_types;
1831
1832           /* In case of explicit specialization, we need to check if
1833              the number of template headers appearing in the specialization
1834              is correct. This is usually done in check_explicit_specialization,
1835              but the check done there cannot be exhaustive when specializing
1836              member functions. Consider the following code:
1837
1838              template <> void A<int>::f(int);
1839              template <> template <> void A<int>::f(int);
1840
1841              Assuming that A<int> is not itself an explicit specialization
1842              already, the first line specializes "f" which is a non-template
1843              member function, whilst the second line specializes "f" which
1844              is a template member function. So both lines are syntactically
1845              correct, and check_explicit_specialization does not reject
1846              them.
1847
1848              Here, we can do better, as we are matching the specialization
1849              against the declarations. We count the number of template
1850              headers, and we check if they match TEMPLATE_COUNT + 1
1851              (TEMPLATE_COUNT is the number of qualifying template classes,
1852              plus there must be another header for the member template
1853              itself).
1854
1855              Notice that if header_count is zero, this is not a
1856              specialization but rather a template instantiation, so there
1857              is no check we can perform here.  */
1858           if (header_count && header_count != template_count + 1)
1859             continue;
1860
1861           /* Check that the number of template arguments at the
1862              innermost level for DECL is the same as for FN.  */
1863           if (current_binding_level->kind == sk_template_parms
1864               && !current_binding_level->explicit_spec_p
1865               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1866                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1867                                       (current_template_parms))))
1868             continue;
1869
1870           /* DECL might be a specialization of FN.  */
1871           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1872           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1873
1874           /* For a non-static member function, we need to make sure
1875              that the const qualification is the same.  Since
1876              get_bindings does not try to merge the "this" parameter,
1877              we must do the comparison explicitly.  */
1878           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1879               && !same_type_p (TREE_VALUE (fn_arg_types),
1880                                TREE_VALUE (decl_arg_types)))
1881             continue;
1882
1883           /* Skip the "this" parameter and, for constructors of
1884              classes with virtual bases, the VTT parameter.  A
1885              full specialization of a constructor will have a VTT
1886              parameter, but a template never will.  */ 
1887           decl_arg_types 
1888             = skip_artificial_parms_for (decl, decl_arg_types);
1889           fn_arg_types 
1890             = skip_artificial_parms_for (fn, fn_arg_types);
1891
1892           /* Check that the number of function parameters matches.
1893              For example,
1894                template <class T> void f(int i = 0);
1895                template <> void f<int>();
1896              The specialization f<int> is invalid but is not caught
1897              by get_bindings below.  */
1898           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1899             continue;
1900
1901           /* Function templates cannot be specializations; there are
1902              no partial specializations of functions.  Therefore, if
1903              the type of DECL does not match FN, there is no
1904              match.  */
1905           if (tsk == tsk_template)
1906             {
1907               if (compparms (fn_arg_types, decl_arg_types))
1908                 candidates = tree_cons (NULL_TREE, fn, candidates);
1909               continue;
1910             }
1911
1912           /* See whether this function might be a specialization of this
1913              template.  */
1914           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1915
1916           if (!targs)
1917             /* We cannot deduce template arguments that when used to
1918                specialize TMPL will produce DECL.  */
1919             continue;
1920
1921           /* Save this template, and the arguments deduced.  */
1922           templates = tree_cons (targs, fn, templates);
1923         }
1924       else if (need_member_template)
1925         /* FN is an ordinary member function, and we need a
1926            specialization of a member template.  */
1927         ;
1928       else if (TREE_CODE (fn) != FUNCTION_DECL)
1929         /* We can get IDENTIFIER_NODEs here in certain erroneous
1930            cases.  */
1931         ;
1932       else if (!DECL_FUNCTION_MEMBER_P (fn))
1933         /* This is just an ordinary non-member function.  Nothing can
1934            be a specialization of that.  */
1935         ;
1936       else if (DECL_ARTIFICIAL (fn))
1937         /* Cannot specialize functions that are created implicitly.  */
1938         ;
1939       else
1940         {
1941           tree decl_arg_types;
1942
1943           /* This is an ordinary member function.  However, since
1944              we're here, we can assume it's enclosing class is a
1945              template class.  For example,
1946
1947                template <typename T> struct S { void f(); };
1948                template <> void S<int>::f() {}
1949
1950              Here, S<int>::f is a non-template, but S<int> is a
1951              template class.  If FN has the same type as DECL, we
1952              might be in business.  */
1953
1954           if (!DECL_TEMPLATE_INFO (fn))
1955             /* Its enclosing class is an explicit specialization
1956                of a template class.  This is not a candidate.  */
1957             continue;
1958
1959           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1960                             TREE_TYPE (TREE_TYPE (fn))))
1961             /* The return types differ.  */
1962             continue;
1963
1964           /* Adjust the type of DECL in case FN is a static member.  */
1965           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1966           if (DECL_STATIC_FUNCTION_P (fn)
1967               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1968             decl_arg_types = TREE_CHAIN (decl_arg_types);
1969
1970           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1971                          decl_arg_types))
1972             /* They match!  */
1973             candidates = tree_cons (NULL_TREE, fn, candidates);
1974         }
1975     }
1976
1977   if (templates && TREE_CHAIN (templates))
1978     {
1979       /* We have:
1980
1981            [temp.expl.spec]
1982
1983            It is possible for a specialization with a given function
1984            signature to be instantiated from more than one function
1985            template.  In such cases, explicit specification of the
1986            template arguments must be used to uniquely identify the
1987            function template specialization being specialized.
1988
1989          Note that here, there's no suggestion that we're supposed to
1990          determine which of the candidate templates is most
1991          specialized.  However, we, also have:
1992
1993            [temp.func.order]
1994
1995            Partial ordering of overloaded function template
1996            declarations is used in the following contexts to select
1997            the function template to which a function template
1998            specialization refers:
1999
2000            -- when an explicit specialization refers to a function
2001               template.
2002
2003          So, we do use the partial ordering rules, at least for now.
2004          This extension can only serve to make invalid programs valid,
2005          so it's safe.  And, there is strong anecdotal evidence that
2006          the committee intended the partial ordering rules to apply;
2007          the EDG front end has that behavior, and John Spicer claims
2008          that the committee simply forgot to delete the wording in
2009          [temp.expl.spec].  */
2010       tree tmpl = most_specialized_instantiation (templates);
2011       if (tmpl != error_mark_node)
2012         {
2013           templates = tmpl;
2014           TREE_CHAIN (templates) = NULL_TREE;
2015         }
2016     }
2017
2018   if (templates == NULL_TREE && candidates == NULL_TREE)
2019     {
2020       error ("template-id %qD for %q+D does not match any template "
2021              "declaration", template_id, decl);
2022       if (header_count && header_count != template_count + 1)
2023         inform (input_location, "saw %d %<template<>%>, need %d for "
2024                 "specializing a member function template",
2025                 header_count, template_count + 1);
2026       return error_mark_node;
2027     }
2028   else if ((templates && TREE_CHAIN (templates))
2029            || (candidates && TREE_CHAIN (candidates))
2030            || (templates && candidates))
2031     {
2032       error ("ambiguous template specialization %qD for %q+D",
2033              template_id, decl);
2034       candidates = chainon (candidates, templates);
2035       print_candidates (candidates);
2036       return error_mark_node;
2037     }
2038
2039   /* We have one, and exactly one, match.  */
2040   if (candidates)
2041     {
2042       tree fn = TREE_VALUE (candidates);
2043       *targs_out = copy_node (DECL_TI_ARGS (fn));
2044       /* DECL is a re-declaration or partial instantiation of a template
2045          function.  */
2046       if (TREE_CODE (fn) == TEMPLATE_DECL)
2047         return fn;
2048       /* It was a specialization of an ordinary member function in a
2049          template class.  */
2050       return DECL_TI_TEMPLATE (fn);
2051     }
2052
2053   /* It was a specialization of a template.  */
2054   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2055   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2056     {
2057       *targs_out = copy_node (targs);
2058       SET_TMPL_ARGS_LEVEL (*targs_out,
2059                            TMPL_ARGS_DEPTH (*targs_out),
2060                            TREE_PURPOSE (templates));
2061     }
2062   else
2063     *targs_out = TREE_PURPOSE (templates);
2064   return TREE_VALUE (templates);
2065 }
2066
2067 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2068    but with the default argument values filled in from those in the
2069    TMPL_TYPES.  */
2070
2071 static tree
2072 copy_default_args_to_explicit_spec_1 (tree spec_types,
2073                                       tree tmpl_types)
2074 {
2075   tree new_spec_types;
2076
2077   if (!spec_types)
2078     return NULL_TREE;
2079
2080   if (spec_types == void_list_node)
2081     return void_list_node;
2082
2083   /* Substitute into the rest of the list.  */
2084   new_spec_types =
2085     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2086                                           TREE_CHAIN (tmpl_types));
2087
2088   /* Add the default argument for this parameter.  */
2089   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2090                          TREE_VALUE (spec_types),
2091                          new_spec_types);
2092 }
2093
2094 /* DECL is an explicit specialization.  Replicate default arguments
2095    from the template it specializes.  (That way, code like:
2096
2097      template <class T> void f(T = 3);
2098      template <> void f(double);
2099      void g () { f (); }
2100
2101    works, as required.)  An alternative approach would be to look up
2102    the correct default arguments at the call-site, but this approach
2103    is consistent with how implicit instantiations are handled.  */
2104
2105 static void
2106 copy_default_args_to_explicit_spec (tree decl)
2107 {
2108   tree tmpl;
2109   tree spec_types;
2110   tree tmpl_types;
2111   tree new_spec_types;
2112   tree old_type;
2113   tree new_type;
2114   tree t;
2115   tree object_type = NULL_TREE;
2116   tree in_charge = NULL_TREE;
2117   tree vtt = NULL_TREE;
2118
2119   /* See if there's anything we need to do.  */
2120   tmpl = DECL_TI_TEMPLATE (decl);
2121   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2122   for (t = tmpl_types; t; t = TREE_CHAIN (t))
2123     if (TREE_PURPOSE (t))
2124       break;
2125   if (!t)
2126     return;
2127
2128   old_type = TREE_TYPE (decl);
2129   spec_types = TYPE_ARG_TYPES (old_type);
2130
2131   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2132     {
2133       /* Remove the this pointer, but remember the object's type for
2134          CV quals.  */
2135       object_type = TREE_TYPE (TREE_VALUE (spec_types));
2136       spec_types = TREE_CHAIN (spec_types);
2137       tmpl_types = TREE_CHAIN (tmpl_types);
2138
2139       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2140         {
2141           /* DECL may contain more parameters than TMPL due to the extra
2142              in-charge parameter in constructors and destructors.  */
2143           in_charge = spec_types;
2144           spec_types = TREE_CHAIN (spec_types);
2145         }
2146       if (DECL_HAS_VTT_PARM_P (decl))
2147         {
2148           vtt = spec_types;
2149           spec_types = TREE_CHAIN (spec_types);
2150         }
2151     }
2152
2153   /* Compute the merged default arguments.  */
2154   new_spec_types =
2155     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2156
2157   /* Compute the new FUNCTION_TYPE.  */
2158   if (object_type)
2159     {
2160       if (vtt)
2161         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2162                                          TREE_VALUE (vtt),
2163                                          new_spec_types);
2164
2165       if (in_charge)
2166         /* Put the in-charge parameter back.  */
2167         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2168                                          TREE_VALUE (in_charge),
2169                                          new_spec_types);
2170
2171       new_type = build_method_type_directly (object_type,
2172                                              TREE_TYPE (old_type),
2173                                              new_spec_types);
2174     }
2175   else
2176     new_type = build_function_type (TREE_TYPE (old_type),
2177                                     new_spec_types);
2178   new_type = cp_build_type_attribute_variant (new_type,
2179                                               TYPE_ATTRIBUTES (old_type));
2180   new_type = build_exception_variant (new_type,
2181                                       TYPE_RAISES_EXCEPTIONS (old_type));
2182   TREE_TYPE (decl) = new_type;
2183 }
2184
2185 /* Check to see if the function just declared, as indicated in
2186    DECLARATOR, and in DECL, is a specialization of a function
2187    template.  We may also discover that the declaration is an explicit
2188    instantiation at this point.
2189
2190    Returns DECL, or an equivalent declaration that should be used
2191    instead if all goes well.  Issues an error message if something is
2192    amiss.  Returns error_mark_node if the error is not easily
2193    recoverable.
2194
2195    FLAGS is a bitmask consisting of the following flags:
2196
2197    2: The function has a definition.
2198    4: The function is a friend.
2199
2200    The TEMPLATE_COUNT is the number of references to qualifying
2201    template classes that appeared in the name of the function.  For
2202    example, in
2203
2204      template <class T> struct S { void f(); };
2205      void S<int>::f();
2206
2207    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
2208    classes are not counted in the TEMPLATE_COUNT, so that in
2209
2210      template <class T> struct S {};
2211      template <> struct S<int> { void f(); }
2212      template <> void S<int>::f();
2213
2214    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
2215    invalid; there should be no template <>.)
2216
2217    If the function is a specialization, it is marked as such via
2218    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
2219    is set up correctly, and it is added to the list of specializations
2220    for that template.  */
2221
2222 tree
2223 check_explicit_specialization (tree declarator,
2224                                tree decl,
2225                                int template_count,
2226                                int flags)
2227 {
2228   int have_def = flags & 2;
2229   int is_friend = flags & 4;
2230   int specialization = 0;
2231   int explicit_instantiation = 0;
2232   int member_specialization = 0;
2233   tree ctype = DECL_CLASS_CONTEXT (decl);
2234   tree dname = DECL_NAME (decl);
2235   tmpl_spec_kind tsk;
2236
2237   if (is_friend)
2238     {
2239       if (!processing_specialization)
2240         tsk = tsk_none;
2241       else
2242         tsk = tsk_excessive_parms;
2243     }
2244   else
2245     tsk = current_tmpl_spec_kind (template_count);
2246
2247   switch (tsk)
2248     {
2249     case tsk_none:
2250       if (processing_specialization)
2251         {
2252           specialization = 1;
2253           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2254         }
2255       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2256         {
2257           if (is_friend)
2258             /* This could be something like:
2259
2260                template <class T> void f(T);
2261                class S { friend void f<>(int); }  */
2262             specialization = 1;
2263           else
2264             {
2265               /* This case handles bogus declarations like template <>
2266                  template <class T> void f<int>(); */
2267
2268               error ("template-id %qD in declaration of primary template",
2269                      declarator);
2270               return decl;
2271             }
2272         }
2273       break;
2274
2275     case tsk_invalid_member_spec:
2276       /* The error has already been reported in
2277          check_specialization_scope.  */
2278       return error_mark_node;
2279
2280     case tsk_invalid_expl_inst:
2281       error ("template parameter list used in explicit instantiation");
2282
2283       /* Fall through.  */
2284
2285     case tsk_expl_inst:
2286       if (have_def)
2287         error ("definition provided for explicit instantiation");
2288
2289       explicit_instantiation = 1;
2290       break;
2291
2292     case tsk_excessive_parms:
2293     case tsk_insufficient_parms:
2294       if (tsk == tsk_excessive_parms)
2295         error ("too many template parameter lists in declaration of %qD",
2296                decl);
2297       else if (template_header_count)
2298         error("too few template parameter lists in declaration of %qD", decl);
2299       else
2300         error("explicit specialization of %qD must be introduced by "
2301               "%<template <>%>", decl);
2302
2303       /* Fall through.  */
2304     case tsk_expl_spec:
2305       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2306       if (ctype)
2307         member_specialization = 1;
2308       else
2309         specialization = 1;
2310       break;
2311
2312     case tsk_template:
2313       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2314         {
2315           /* This case handles bogus declarations like template <>
2316              template <class T> void f<int>(); */
2317
2318           if (uses_template_parms (declarator))
2319             error ("function template partial specialization %qD "
2320                    "is not allowed", declarator);
2321           else
2322             error ("template-id %qD in declaration of primary template",
2323                    declarator);
2324           return decl;
2325         }
2326
2327       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2328         /* This is a specialization of a member template, without
2329            specialization the containing class.  Something like:
2330
2331              template <class T> struct S {
2332                template <class U> void f (U);
2333              };
2334              template <> template <class U> void S<int>::f(U) {}
2335
2336            That's a specialization -- but of the entire template.  */
2337         specialization = 1;
2338       break;
2339
2340     default:
2341       gcc_unreachable ();
2342     }
2343
2344   if (specialization || member_specialization)
2345     {
2346       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2347       for (; t; t = TREE_CHAIN (t))
2348         if (TREE_PURPOSE (t))
2349           {
2350             permerror (input_location, 
2351                        "default argument specified in explicit specialization");
2352             break;
2353           }
2354     }
2355
2356   if (specialization || member_specialization || explicit_instantiation)
2357     {
2358       tree tmpl = NULL_TREE;
2359       tree targs = NULL_TREE;
2360
2361       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2362       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2363         {
2364           tree fns;
2365
2366           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2367           if (ctype)
2368             fns = dname;
2369           else
2370             {
2371               /* If there is no class context, the explicit instantiation
2372                  must be at namespace scope.  */
2373               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2374
2375               /* Find the namespace binding, using the declaration
2376                  context.  */
2377               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2378                                            false, true);
2379               if (fns == error_mark_node || !is_overloaded_fn (fns))
2380                 {
2381                   error ("%qD is not a template function", dname);
2382                   fns = error_mark_node;
2383                 }
2384               else
2385                 {
2386                   tree fn = OVL_CURRENT (fns);
2387                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2388                                                 CP_DECL_CONTEXT (fn)))
2389                     error ("%qD is not declared in %qD",
2390                            decl, current_namespace);
2391                 }
2392             }
2393
2394           declarator = lookup_template_function (fns, NULL_TREE);
2395         }
2396
2397       if (declarator == error_mark_node)
2398         return error_mark_node;
2399
2400       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2401         {
2402           if (!explicit_instantiation)
2403             /* A specialization in class scope.  This is invalid,
2404                but the error will already have been flagged by
2405                check_specialization_scope.  */
2406             return error_mark_node;
2407           else
2408             {
2409               /* It's not valid to write an explicit instantiation in
2410                  class scope, e.g.:
2411
2412                    class C { template void f(); }
2413
2414                    This case is caught by the parser.  However, on
2415                    something like:
2416
2417                    template class C { void f(); };
2418
2419                    (which is invalid) we can get here.  The error will be
2420                    issued later.  */
2421               ;
2422             }
2423
2424           return decl;
2425         }
2426       else if (ctype != NULL_TREE
2427                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2428                    IDENTIFIER_NODE))
2429         {
2430           /* Find the list of functions in ctype that have the same
2431              name as the declared function.  */
2432           tree name = TREE_OPERAND (declarator, 0);
2433           tree fns = NULL_TREE;
2434           int idx;
2435
2436           if (constructor_name_p (name, ctype))
2437             {
2438               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2439
2440               if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2441                   : !CLASSTYPE_DESTRUCTORS (ctype))
2442                 {
2443                   /* From [temp.expl.spec]:
2444
2445                      If such an explicit specialization for the member
2446                      of a class template names an implicitly-declared
2447                      special member function (clause _special_), the
2448                      program is ill-formed.
2449
2450                      Similar language is found in [temp.explicit].  */
2451                   error ("specialization of implicitly-declared special member function");
2452                   return error_mark_node;
2453                 }
2454
2455               name = is_constructor ? ctor_identifier : dtor_identifier;
2456             }
2457
2458           if (!DECL_CONV_FN_P (decl))
2459             {
2460               idx = lookup_fnfields_1 (ctype, name);
2461               if (idx >= 0)
2462                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2463             }
2464           else
2465             {
2466               VEC(tree,gc) *methods;
2467               tree ovl;
2468
2469               /* For a type-conversion operator, we cannot do a
2470                  name-based lookup.  We might be looking for `operator
2471                  int' which will be a specialization of `operator T'.
2472                  So, we find *all* the conversion operators, and then
2473                  select from them.  */
2474               fns = NULL_TREE;
2475
2476               methods = CLASSTYPE_METHOD_VEC (ctype);
2477               if (methods)
2478                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2479                      VEC_iterate (tree, methods, idx, ovl);
2480                      ++idx)
2481                   {
2482                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2483                       /* There are no more conversion functions.  */
2484                       break;
2485
2486                     /* Glue all these conversion functions together
2487                        with those we already have.  */
2488                     for (; ovl; ovl = OVL_NEXT (ovl))
2489                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2490                   }
2491             }
2492
2493           if (fns == NULL_TREE)
2494             {
2495               error ("no member function %qD declared in %qT", name, ctype);
2496               return error_mark_node;
2497             }
2498           else
2499             TREE_OPERAND (declarator, 0) = fns;
2500         }
2501
2502       /* Figure out what exactly is being specialized at this point.
2503          Note that for an explicit instantiation, even one for a
2504          member function, we cannot tell apriori whether the
2505          instantiation is for a member template, or just a member
2506          function of a template class.  Even if a member template is
2507          being instantiated, the member template arguments may be
2508          elided if they can be deduced from the rest of the
2509          declaration.  */
2510       tmpl = determine_specialization (declarator, decl,
2511                                        &targs,
2512                                        member_specialization,
2513                                        template_count,
2514                                        tsk);
2515
2516       if (!tmpl || tmpl == error_mark_node)
2517         /* We couldn't figure out what this declaration was
2518            specializing.  */
2519         return error_mark_node;
2520       else
2521         {
2522           tree gen_tmpl = most_general_template (tmpl);
2523
2524           if (explicit_instantiation)
2525             {
2526               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2527                  is done by do_decl_instantiation later.  */
2528
2529               int arg_depth = TMPL_ARGS_DEPTH (targs);
2530               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2531
2532               if (arg_depth > parm_depth)
2533                 {
2534                   /* If TMPL is not the most general template (for
2535                      example, if TMPL is a friend template that is
2536                      injected into namespace scope), then there will
2537                      be too many levels of TARGS.  Remove some of them
2538                      here.  */
2539                   int i;
2540                   tree new_targs;
2541
2542                   new_targs = make_tree_vec (parm_depth);
2543                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2544                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2545                       = TREE_VEC_ELT (targs, i);
2546                   targs = new_targs;
2547                 }
2548
2549               return instantiate_template (tmpl, targs, tf_error);
2550             }
2551
2552           /* If we thought that the DECL was a member function, but it
2553              turns out to be specializing a static member function,
2554              make DECL a static member function as well.  */
2555           if (DECL_STATIC_FUNCTION_P (tmpl)
2556               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2557             revert_static_member_fn (decl);
2558
2559           /* If this is a specialization of a member template of a
2560              template class, we want to return the TEMPLATE_DECL, not
2561              the specialization of it.  */
2562           if (tsk == tsk_template)
2563             {
2564               tree result = DECL_TEMPLATE_RESULT (tmpl);
2565               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2566               DECL_INITIAL (result) = NULL_TREE;
2567               if (have_def)
2568                 {
2569                   tree parm;
2570                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2571                   DECL_SOURCE_LOCATION (result)
2572                     = DECL_SOURCE_LOCATION (decl);
2573                   /* We want to use the argument list specified in the
2574                      definition, not in the original declaration.  */
2575                   DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2576                   for (parm = DECL_ARGUMENTS (result); parm;
2577                        parm = DECL_CHAIN (parm))
2578                     DECL_CONTEXT (parm) = result;
2579                 }
2580               return register_specialization (tmpl, gen_tmpl, targs,
2581                                               is_friend, 0);
2582             }
2583
2584           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2585           DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2586
2587           /* Inherit default function arguments from the template
2588              DECL is specializing.  */
2589           copy_default_args_to_explicit_spec (decl);
2590
2591           /* This specialization has the same protection as the
2592              template it specializes.  */
2593           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2594           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2595
2596           /* 7.1.1-1 [dcl.stc]
2597
2598              A storage-class-specifier shall not be specified in an
2599              explicit specialization...
2600
2601              The parser rejects these, so unless action is taken here,
2602              explicit function specializations will always appear with
2603              global linkage.
2604
2605              The action recommended by the C++ CWG in response to C++
2606              defect report 605 is to make the storage class and linkage
2607              of the explicit specialization match the templated function:
2608
2609              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2610            */
2611           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2612             {
2613               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2614               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2615
2616               /* This specialization has the same linkage and visibility as
2617                  the function template it specializes.  */
2618               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2619               if (! TREE_PUBLIC (decl))
2620                 {
2621                   DECL_INTERFACE_KNOWN (decl) = 1;
2622                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2623                 }
2624               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2625               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2626                 {
2627                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2628                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2629                 }
2630             }
2631
2632           /* If DECL is a friend declaration, declared using an
2633              unqualified name, the namespace associated with DECL may
2634              have been set incorrectly.  For example, in:
2635
2636                template <typename T> void f(T);
2637                namespace N {
2638                  struct S { friend void f<int>(int); }
2639                }
2640
2641              we will have set the DECL_CONTEXT for the friend
2642              declaration to N, rather than to the global namespace.  */
2643           if (DECL_NAMESPACE_SCOPE_P (decl))
2644             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2645
2646           if (is_friend && !have_def)
2647             /* This is not really a declaration of a specialization.
2648                It's just the name of an instantiation.  But, it's not
2649                a request for an instantiation, either.  */
2650             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2651           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2652             /* This is indeed a specialization.  In case of constructors
2653                and destructors, we need in-charge and not-in-charge
2654                versions in V3 ABI.  */
2655             clone_function_decl (decl, /*update_method_vec_p=*/0);
2656
2657           /* Register this specialization so that we can find it
2658              again.  */
2659           decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2660         }
2661     }
2662
2663   return decl;
2664 }
2665
2666 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2667    parameters.  These are represented in the same format used for
2668    DECL_TEMPLATE_PARMS.  */
2669
2670 int
2671 comp_template_parms (const_tree parms1, const_tree parms2)
2672 {
2673   const_tree p1;
2674   const_tree p2;
2675
2676   if (parms1 == parms2)
2677     return 1;
2678
2679   for (p1 = parms1, p2 = parms2;
2680        p1 != NULL_TREE && p2 != NULL_TREE;
2681        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2682     {
2683       tree t1 = TREE_VALUE (p1);
2684       tree t2 = TREE_VALUE (p2);
2685       int i;
2686
2687       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2688       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2689
2690       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2691         return 0;
2692
2693       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2694         {
2695           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2696           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2697
2698           /* If either of the template parameters are invalid, assume
2699              they match for the sake of error recovery. */
2700           if (parm1 == error_mark_node || parm2 == error_mark_node)
2701             return 1;
2702
2703           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2704             return 0;
2705
2706           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2707               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2708                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2709             continue;
2710           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2711             return 0;
2712         }
2713     }
2714
2715   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2716     /* One set of parameters has more parameters lists than the
2717        other.  */
2718     return 0;
2719
2720   return 1;
2721 }
2722
2723 /* Determine whether PARM is a parameter pack.  */
2724
2725 bool 
2726 template_parameter_pack_p (const_tree parm)
2727 {
2728   /* Determine if we have a non-type template parameter pack.  */
2729   if (TREE_CODE (parm) == PARM_DECL)
2730     return (DECL_TEMPLATE_PARM_P (parm) 
2731             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2732
2733   /* If this is a list of template parameters, we could get a
2734      TYPE_DECL or a TEMPLATE_DECL.  */ 
2735   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2736     parm = TREE_TYPE (parm);
2737
2738   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2739            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2740           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2741 }
2742
2743 /* Determine if T is a function parameter pack.  */
2744
2745 bool
2746 function_parameter_pack_p (const_tree t)
2747 {
2748   if (t && TREE_CODE (t) == PARM_DECL)
2749     return FUNCTION_PARAMETER_PACK_P (t);
2750   return false;
2751 }
2752
2753 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2754    PRIMARY_FUNC_TMPL_INST is a primary function template instantiation.  */
2755
2756 tree
2757 get_function_template_decl (const_tree primary_func_tmpl_inst)
2758 {
2759   if (! primary_func_tmpl_inst
2760       || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2761       || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2762     return NULL;
2763
2764   return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2765 }
2766
2767 /* Return true iff the function parameter PARAM_DECL was expanded
2768    from the function parameter pack PACK.  */
2769
2770 bool
2771 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2772 {
2773   if (DECL_ARTIFICIAL (param_decl)
2774       || !function_parameter_pack_p (pack))
2775     return false;
2776
2777   /* The parameter pack and its pack arguments have the same
2778      DECL_PARM_INDEX.  */
2779   return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2780 }
2781
2782 /* Determine whether ARGS describes a variadic template args list,
2783    i.e., one that is terminated by a template argument pack.  */
2784
2785 static bool 
2786 template_args_variadic_p (tree args)
2787 {
2788   int nargs;
2789   tree last_parm;
2790
2791   if (args == NULL_TREE)
2792     return false;
2793
2794   args = INNERMOST_TEMPLATE_ARGS (args);
2795   nargs = TREE_VEC_LENGTH (args);
2796
2797   if (nargs == 0)
2798     return false;
2799
2800   last_parm = TREE_VEC_ELT (args, nargs - 1);
2801
2802   return ARGUMENT_PACK_P (last_parm);
2803 }
2804
2805 /* Generate a new name for the parameter pack name NAME (an
2806    IDENTIFIER_NODE) that incorporates its */
2807
2808 static tree
2809 make_ith_pack_parameter_name (tree name, int i)
2810 {
2811   /* Munge the name to include the parameter index.  */
2812 #define NUMBUF_LEN 128
2813   char numbuf[NUMBUF_LEN];
2814   char* newname;
2815   int newname_len;
2816
2817   snprintf (numbuf, NUMBUF_LEN, "%i", i);
2818   newname_len = IDENTIFIER_LENGTH (name)
2819                 + strlen (numbuf) + 2;
2820   newname = (char*)alloca (newname_len);
2821   snprintf (newname, newname_len,
2822             "%s#%i", IDENTIFIER_POINTER (name), i);
2823   return get_identifier (newname);
2824 }
2825
2826 /* Return true if T is a primary function
2827    or class template instantiation.  */
2828
2829 bool
2830 primary_template_instantiation_p (const_tree t)
2831 {
2832   if (!t)
2833     return false;
2834
2835   if (TREE_CODE (t) == FUNCTION_DECL)
2836     return DECL_LANG_SPECIFIC (t)
2837            && DECL_TEMPLATE_INSTANTIATION (t)
2838            && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
2839   else if (CLASS_TYPE_P (t))
2840     return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
2841            && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
2842   return false;
2843 }
2844
2845 /* Return true if PARM is a template template parameter.  */
2846
2847 bool
2848 template_template_parameter_p (const_tree parm)
2849 {
2850   return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
2851 }
2852
2853 /* Return the template parameters of T if T is a
2854    primary template instantiation, NULL otherwise.  */
2855
2856 tree
2857 get_primary_template_innermost_parameters (const_tree t)
2858 {
2859   tree parms = NULL, template_info = NULL;
2860
2861   if ((template_info = get_template_info (t))
2862       && primary_template_instantiation_p (t))
2863     parms = INNERMOST_TEMPLATE_PARMS
2864         (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
2865
2866   return parms;
2867 }
2868
2869 /* Return the template parameters of the LEVELth level from the full list
2870    of template parameters PARMS.  */
2871
2872 tree
2873 get_template_parms_at_level (tree parms, int level)
2874 {
2875   tree p;
2876   if (!parms
2877       || TREE_CODE (parms) != TREE_LIST
2878       || level > TMPL_PARMS_DEPTH (parms))
2879     return NULL_TREE;
2880
2881   for (p = parms; p; p = TREE_CHAIN (p))
2882     if (TMPL_PARMS_DEPTH (p) == level)
2883       return p;
2884
2885   return NULL_TREE;
2886 }
2887
2888 /* Returns the template arguments of T if T is a template instantiation,
2889    NULL otherwise.  */
2890
2891 tree
2892 get_template_innermost_arguments (const_tree t)
2893 {
2894   tree args = NULL, template_info = NULL;
2895
2896   if ((template_info = get_template_info (t))
2897       && TI_ARGS (template_info))
2898     args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
2899
2900   return args;
2901 }
2902
2903 /* Return the argument pack elements of T if T is a template argument pack,
2904    NULL otherwise.  */
2905
2906 tree
2907 get_template_argument_pack_elems (const_tree t)
2908 {
2909   if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
2910       && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
2911     return NULL;
2912
2913   return ARGUMENT_PACK_ARGS (t);
2914 }
2915
2916 /* Structure used to track the progress of find_parameter_packs_r.  */
2917 struct find_parameter_pack_data 
2918 {
2919   /* TREE_LIST that will contain all of the parameter packs found by
2920      the traversal.  */
2921   tree* parameter_packs;
2922
2923   /* Set of AST nodes that have been visited by the traversal.  */
2924   struct pointer_set_t *visited;
2925 };
2926
2927 /* Identifies all of the argument packs that occur in a template
2928    argument and appends them to the TREE_LIST inside DATA, which is a
2929    find_parameter_pack_data structure. This is a subroutine of
2930    make_pack_expansion and uses_parameter_packs.  */
2931 static tree
2932 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2933 {
2934   tree t = *tp;
2935   struct find_parameter_pack_data* ppd = 
2936     (struct find_parameter_pack_data*)data;
2937   bool parameter_pack_p = false;
2938
2939   /* Identify whether this is a parameter pack or not.  */
2940   switch (TREE_CODE (t))
2941     {
2942     case TEMPLATE_PARM_INDEX:
2943       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2944         parameter_pack_p = true;
2945       break;
2946
2947     case TEMPLATE_TYPE_PARM:
2948     case TEMPLATE_TEMPLATE_PARM:
2949       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2950         parameter_pack_p = true;
2951       break;
2952
2953     case PARM_DECL:
2954       if (FUNCTION_PARAMETER_PACK_P (t))
2955         {
2956           /* We don't want to walk into the type of a PARM_DECL,
2957              because we don't want to see the type parameter pack.  */
2958           *walk_subtrees = 0;
2959           parameter_pack_p = true;
2960         }
2961       break;
2962
2963     default:
2964       /* Not a parameter pack.  */
2965       break;
2966     }
2967
2968   if (parameter_pack_p)
2969     {
2970       /* Add this parameter pack to the list.  */
2971       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2972     }
2973
2974   if (TYPE_P (t))
2975     cp_walk_tree (&TYPE_CONTEXT (t), 
2976                   &find_parameter_packs_r, ppd, ppd->visited);
2977
2978   /* This switch statement will return immediately if we don't find a
2979      parameter pack.  */
2980   switch (TREE_CODE (t)) 
2981     {
2982     case TEMPLATE_PARM_INDEX:
2983       return NULL_TREE;
2984
2985     case BOUND_TEMPLATE_TEMPLATE_PARM:
2986       /* Check the template itself.  */
2987       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
2988                     &find_parameter_packs_r, ppd, ppd->visited);
2989       /* Check the template arguments.  */
2990       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
2991                     ppd->visited);
2992       *walk_subtrees = 0;
2993       return NULL_TREE;
2994
2995     case TEMPLATE_TYPE_PARM:
2996     case TEMPLATE_TEMPLATE_PARM:
2997       return NULL_TREE;
2998
2999     case PARM_DECL:
3000       return NULL_TREE;
3001
3002     case RECORD_TYPE:
3003       if (TYPE_PTRMEMFUNC_P (t))
3004         return NULL_TREE;
3005       /* Fall through.  */
3006
3007     case UNION_TYPE:
3008     case ENUMERAL_TYPE:
3009       if (TYPE_TEMPLATE_INFO (t))
3010         cp_walk_tree (&TI_ARGS (TYPE_TEMPLATE_INFO (t)),
3011                       &find_parameter_packs_r, ppd, ppd->visited);
3012
3013       *walk_subtrees = 0;
3014       return NULL_TREE;
3015
3016     case TEMPLATE_DECL:
3017       cp_walk_tree (&TREE_TYPE (t),
3018                     &find_parameter_packs_r, ppd, ppd->visited);
3019       return NULL_TREE;
3020  
3021     case TYPENAME_TYPE:
3022       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3023                    ppd, ppd->visited);
3024       *walk_subtrees = 0;
3025       return NULL_TREE;
3026       
3027     case TYPE_PACK_EXPANSION:
3028     case EXPR_PACK_EXPANSION:
3029       *walk_subtrees = 0;
3030       return NULL_TREE;
3031
3032     case INTEGER_TYPE:
3033       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
3034                     ppd, ppd->visited);
3035       *walk_subtrees = 0;
3036       return NULL_TREE;
3037
3038     case IDENTIFIER_NODE:
3039       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
3040                     ppd->visited);
3041       *walk_subtrees = 0;
3042       return NULL_TREE;
3043
3044     default:
3045       return NULL_TREE;
3046     }
3047
3048   return NULL_TREE;
3049 }
3050
3051 /* Determines if the expression or type T uses any parameter packs.  */
3052 bool
3053 uses_parameter_packs (tree t)
3054 {
3055   tree parameter_packs = NULL_TREE;
3056   struct find_parameter_pack_data ppd;
3057   ppd.parameter_packs = &parameter_packs;
3058   ppd.visited = pointer_set_create ();
3059   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3060   pointer_set_destroy (ppd.visited);
3061   return parameter_packs != NULL_TREE;
3062 }
3063
3064 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3065    representation a base-class initializer into a parameter pack
3066    expansion. If all goes well, the resulting node will be an
3067    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3068    respectively.  */
3069 tree 
3070 make_pack_expansion (tree arg)
3071 {
3072   tree result;
3073   tree parameter_packs = NULL_TREE;
3074   bool for_types = false;
3075   struct find_parameter_pack_data ppd;
3076
3077   if (!arg || arg == error_mark_node)
3078     return arg;
3079
3080   if (TREE_CODE (arg) == TREE_LIST)
3081     {
3082       /* The only time we will see a TREE_LIST here is for a base
3083          class initializer.  In this case, the TREE_PURPOSE will be a
3084          _TYPE node (representing the base class expansion we're
3085          initializing) and the TREE_VALUE will be a TREE_LIST
3086          containing the initialization arguments. 
3087
3088          The resulting expansion looks somewhat different from most
3089          expansions. Rather than returning just one _EXPANSION, we
3090          return a TREE_LIST whose TREE_PURPOSE is a
3091          TYPE_PACK_EXPANSION containing the bases that will be
3092          initialized.  The TREE_VALUE will be identical to the
3093          original TREE_VALUE, which is a list of arguments that will
3094          be passed to each base.  We do not introduce any new pack
3095          expansion nodes into the TREE_VALUE (although it is possible
3096          that some already exist), because the TREE_PURPOSE and
3097          TREE_VALUE all need to be expanded together with the same
3098          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
3099          resulting TREE_PURPOSE will mention the parameter packs in
3100          both the bases and the arguments to the bases.  */
3101       tree purpose;
3102       tree value;
3103       tree parameter_packs = NULL_TREE;
3104
3105       /* Determine which parameter packs will be used by the base
3106          class expansion.  */
3107       ppd.visited = pointer_set_create ();
3108       ppd.parameter_packs = &parameter_packs;
3109       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
3110                     &ppd, ppd.visited);
3111
3112       if (parameter_packs == NULL_TREE)
3113         {
3114           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3115           pointer_set_destroy (ppd.visited);
3116           return error_mark_node;
3117         }
3118
3119       if (TREE_VALUE (arg) != void_type_node)
3120         {
3121           /* Collect the sets of parameter packs used in each of the
3122              initialization arguments.  */
3123           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3124             {
3125               /* Determine which parameter packs will be expanded in this
3126                  argument.  */
3127               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
3128                             &ppd, ppd.visited);
3129             }
3130         }
3131
3132       pointer_set_destroy (ppd.visited);
3133
3134       /* Create the pack expansion type for the base type.  */
3135       purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3136       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3137       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3138
3139       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3140          they will rarely be compared to anything.  */
3141       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3142
3143       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3144     }
3145
3146   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3147     for_types = true;
3148
3149   /* Build the PACK_EXPANSION_* node.  */
3150   result = for_types
3151      ? cxx_make_type (TYPE_PACK_EXPANSION)
3152      : make_node (EXPR_PACK_EXPANSION);
3153   SET_PACK_EXPANSION_PATTERN (result, arg);
3154   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3155     {
3156       /* Propagate type and const-expression information.  */
3157       TREE_TYPE (result) = TREE_TYPE (arg);
3158       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3159     }
3160   else
3161     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3162        they will rarely be compared to anything.  */
3163     SET_TYPE_STRUCTURAL_EQUALITY (result);
3164
3165   /* Determine which parameter packs will be expanded.  */
3166   ppd.parameter_packs = &parameter_packs;
3167   ppd.visited = pointer_set_create ();
3168   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3169   pointer_set_destroy (ppd.visited);
3170
3171   /* Make sure we found some parameter packs.  */
3172   if (parameter_packs == NULL_TREE)
3173     {
3174       if (TYPE_P (arg))
3175         error ("expansion pattern %<%T%> contains no argument packs", arg);
3176       else
3177         error ("expansion pattern %<%E%> contains no argument packs", arg);
3178       return error_mark_node;
3179     }
3180   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3181
3182   return result;
3183 }
3184
3185 /* Checks T for any "bare" parameter packs, which have not yet been
3186    expanded, and issues an error if any are found. This operation can
3187    only be done on full expressions or types (e.g., an expression
3188    statement, "if" condition, etc.), because we could have expressions like:
3189
3190      foo(f(g(h(args)))...)
3191
3192    where "args" is a parameter pack. check_for_bare_parameter_packs
3193    should not be called for the subexpressions args, h(args),
3194    g(h(args)), or f(g(h(args))), because we would produce erroneous
3195    error messages. 
3196
3197    Returns TRUE and emits an error if there were bare parameter packs,
3198    returns FALSE otherwise.  */
3199 bool 
3200 check_for_bare_parameter_packs (tree t)
3201 {
3202   tree parameter_packs = NULL_TREE;
3203   struct find_parameter_pack_data ppd;
3204
3205   if (!processing_template_decl || !t || t == error_mark_node)
3206     return false;
3207
3208   if (TREE_CODE (t) == TYPE_DECL)
3209     t = TREE_TYPE (t);
3210
3211   ppd.parameter_packs = &parameter_packs;
3212   ppd.visited = pointer_set_create ();
3213   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3214   pointer_set_destroy (ppd.visited);
3215
3216   if (parameter_packs) 
3217     {
3218       error ("parameter packs not expanded with %<...%>:");
3219       while (parameter_packs)
3220         {
3221           tree pack = TREE_VALUE (parameter_packs);
3222           tree name = NULL_TREE;
3223
3224           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3225               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3226             name = TYPE_NAME (pack);
3227           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3228             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3229           else
3230             name = DECL_NAME (pack);
3231
3232           if (name)
3233             inform (input_location, "        %qD", name);
3234           else
3235             inform (input_location, "        <anonymous>");
3236
3237           parameter_packs = TREE_CHAIN (parameter_packs);
3238         }
3239
3240       return true;
3241     }
3242
3243   return false;
3244 }
3245
3246 /* Expand any parameter packs that occur in the template arguments in
3247    ARGS.  */
3248 tree
3249 expand_template_argument_pack (tree args)
3250 {
3251   tree result_args = NULL_TREE;
3252   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3253   int num_result_args = -1;
3254   int non_default_args_count = -1;
3255
3256   /* First, determine if we need to expand anything, and the number of
3257      slots we'll need.  */
3258   for (in_arg = 0; in_arg < nargs; ++in_arg)
3259     {
3260       tree arg = TREE_VEC_ELT (args, in_arg);
3261       if (arg == NULL_TREE)
3262         return args;
3263       if (ARGUMENT_PACK_P (arg))
3264         {
3265           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3266           if (num_result_args < 0)
3267             num_result_args = in_arg + num_packed;
3268           else
3269             num_result_args += num_packed;
3270         }
3271       else
3272         {
3273           if (num_result_args >= 0)
3274             num_result_args++;
3275         }
3276     }
3277
3278   /* If no expansion is necessary, we're done.  */
3279   if (num_result_args < 0)
3280     return args;
3281
3282   /* Expand arguments.  */
3283   result_args = make_tree_vec (num_result_args);
3284   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3285     non_default_args_count =
3286       GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3287   for (in_arg = 0; in_arg < nargs; ++in_arg)
3288     {
3289       tree arg = TREE_VEC_ELT (args, in_arg);
3290       if (ARGUMENT_PACK_P (arg))
3291         {
3292           tree packed = ARGUMENT_PACK_ARGS (arg);
3293           int i, num_packed = TREE_VEC_LENGTH (packed);
3294           for (i = 0; i < num_packed; ++i, ++out_arg)
3295             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3296           if (non_default_args_count > 0)
3297             non_default_args_count += num_packed;
3298         }
3299       else
3300         {
3301           TREE_VEC_ELT (result_args, out_arg) = arg;
3302           ++out_arg;
3303         }
3304     }
3305   if (non_default_args_count >= 0)
3306     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3307   return result_args;
3308 }
3309
3310 /* Checks if DECL shadows a template parameter.
3311
3312    [temp.local]: A template-parameter shall not be redeclared within its
3313    scope (including nested scopes).
3314
3315    Emits an error and returns TRUE if the DECL shadows a parameter,
3316    returns FALSE otherwise.  */
3317
3318 bool
3319 check_template_shadow (tree decl)
3320 {
3321   tree olddecl;
3322
3323   /* If we're not in a template, we can't possibly shadow a template
3324      parameter.  */
3325   if (!current_template_parms)
3326     return true;
3327
3328   /* Figure out what we're shadowing.  */
3329   if (TREE_CODE (decl) == OVERLOAD)
3330     decl = OVL_CURRENT (decl);
3331   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3332
3333   /* If there's no previous binding for this name, we're not shadowing
3334      anything, let alone a template parameter.  */
3335   if (!olddecl)
3336     return true;
3337
3338   /* If we're not shadowing a template parameter, we're done.  Note
3339      that OLDDECL might be an OVERLOAD (or perhaps even an
3340      ERROR_MARK), so we can't just blithely assume it to be a _DECL
3341      node.  */
3342   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3343     return true;
3344
3345   /* We check for decl != olddecl to avoid bogus errors for using a
3346      name inside a class.  We check TPFI to avoid duplicate errors for
3347      inline member templates.  */
3348   if (decl == olddecl
3349       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
3350     return true;
3351
3352   error ("declaration of %q+#D", decl);
3353   error (" shadows template parm %q+#D", olddecl);
3354   return false;
3355 }
3356
3357 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3358    ORIG_LEVEL, DECL, and TYPE.  NUM_SIBLINGS is the total number of
3359    template parameters.  */
3360
3361 static tree
3362 build_template_parm_index (int index,
3363                            int level,
3364                            int orig_level,
3365                            int num_siblings,
3366                            tree decl,
3367                            tree type)
3368 {
3369   tree t = make_node (TEMPLATE_PARM_INDEX);
3370   TEMPLATE_PARM_IDX (t) = index;
3371   TEMPLATE_PARM_LEVEL (t) = level;
3372   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3373   TEMPLATE_PARM_NUM_SIBLINGS (t) = num_siblings;
3374   TEMPLATE_PARM_DECL (t) = decl;
3375   TREE_TYPE (t) = type;
3376   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3377   TREE_READONLY (t) = TREE_READONLY (decl);
3378
3379   return t;
3380 }
3381
3382 /* Find the canonical type parameter for the given template type
3383    parameter.  Returns the canonical type parameter, which may be TYPE
3384    if no such parameter existed.  */
3385
3386 static tree
3387 canonical_type_parameter (tree type)
3388 {
3389   tree list;
3390   int idx = TEMPLATE_TYPE_IDX (type);
3391   if (!canonical_template_parms)
3392     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
3393
3394   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
3395     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
3396
3397   list = VEC_index (tree, canonical_template_parms, idx);
3398   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3399     list = TREE_CHAIN (list);
3400
3401   if (list)
3402     return TREE_VALUE (list);
3403   else
3404     {
3405       VEC_replace(tree, canonical_template_parms, idx,
3406                   tree_cons (NULL_TREE, type, 
3407                              VEC_index (tree, canonical_template_parms, idx)));
3408       return type;
3409     }
3410 }
3411
3412 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3413    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
3414    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3415    new one is created.  */
3416
3417 static tree
3418 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3419                             tsubst_flags_t complain)
3420 {
3421   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3422       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3423           != TEMPLATE_PARM_LEVEL (index) - levels)
3424       || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3425     {
3426       tree orig_decl = TEMPLATE_PARM_DECL (index);
3427       tree decl, t;
3428
3429       decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3430                          TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3431       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3432       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3433       DECL_ARTIFICIAL (decl) = 1;
3434       SET_DECL_TEMPLATE_PARM_P (decl);
3435
3436       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3437                                      TEMPLATE_PARM_LEVEL (index) - levels,
3438                                      TEMPLATE_PARM_ORIG_LEVEL (index),
3439                                      TEMPLATE_PARM_NUM_SIBLINGS (index),
3440                                      decl, type);
3441       TEMPLATE_PARM_DESCENDANTS (index) = t;
3442       TEMPLATE_PARM_PARAMETER_PACK (t) 
3443         = TEMPLATE_PARM_PARAMETER_PACK (index);
3444
3445         /* Template template parameters need this.  */
3446       if (TREE_CODE (decl) == TEMPLATE_DECL)
3447         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3448           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3449            args, complain);
3450     }
3451
3452   return TEMPLATE_PARM_DESCENDANTS (index);
3453 }
3454
3455 /* Process information from new template parameter PARM and append it
3456    to the LIST being built.  This new parameter is a non-type
3457    parameter iff IS_NON_TYPE is true. This new parameter is a
3458    parameter pack iff IS_PARAMETER_PACK is true.  The location of PARM
3459    is in PARM_LOC. NUM_TEMPLATE_PARMS is the size of the template
3460    parameter list PARM belongs to. This is used used to create a
3461    proper canonical type for the type of PARM that is to be created,
3462    iff PARM is a type.  If the size is not known, this parameter shall
3463    be set to 0.  */
3464
3465 tree
3466 process_template_parm (tree list, location_t parm_loc, tree parm,
3467                        bool is_non_type, bool is_parameter_pack,
3468                        unsigned num_template_parms)
3469 {
3470   tree decl = 0;
3471   tree defval;
3472   tree err_parm_list;
3473   int idx = 0;
3474
3475   gcc_assert (TREE_CODE (parm) == TREE_LIST);
3476   defval = TREE_PURPOSE (parm);
3477
3478   if (list)
3479     {
3480       tree p = tree_last (list);
3481
3482       if (p && TREE_VALUE (p) != error_mark_node)
3483         {
3484           p = TREE_VALUE (p);
3485           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3486             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3487           else
3488             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3489         }
3490
3491       ++idx;
3492     }
3493   else
3494     idx = 0;
3495
3496   if (is_non_type)
3497     {
3498       parm = TREE_VALUE (parm);
3499
3500       SET_DECL_TEMPLATE_PARM_P (parm);
3501
3502       if (TREE_TYPE (parm) == error_mark_node)
3503         {
3504           err_parm_list = build_tree_list (defval, parm);
3505           TREE_VALUE (err_parm_list) = error_mark_node;
3506            return chainon (list, err_parm_list);
3507         }
3508       else
3509       {
3510         /* [temp.param]
3511
3512            The top-level cv-qualifiers on the template-parameter are
3513            ignored when determining its type.  */
3514         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3515         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3516           {
3517             err_parm_list = build_tree_list (defval, parm);
3518             TREE_VALUE (err_parm_list) = error_mark_node;
3519              return chainon (list, err_parm_list);
3520           }
3521
3522         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3523           {
3524             /* This template parameter is not a parameter pack, but it
3525                should be. Complain about "bare" parameter packs.  */
3526             check_for_bare_parameter_packs (TREE_TYPE (parm));
3527             
3528             /* Recover by calling this a parameter pack.  */
3529             is_parameter_pack = true;
3530           }
3531       }
3532
3533       /* A template parameter is not modifiable.  */
3534       TREE_CONSTANT (parm) = 1;
3535       TREE_READONLY (parm) = 1;
3536       decl = build_decl (parm_loc,
3537                          CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3538       TREE_CONSTANT (decl) = 1;
3539       TREE_READONLY (decl) = 1;
3540       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3541         = build_template_parm_index (idx, processing_template_decl,
3542                                      processing_template_decl,
3543                                      num_template_parms,
3544                                      decl, TREE_TYPE (parm));
3545
3546       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3547         = is_parameter_pack;
3548     }
3549   else
3550     {
3551       tree t;
3552       parm = TREE_VALUE (TREE_VALUE (parm));
3553
3554       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3555         {
3556           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3557           /* This is for distinguishing between real templates and template
3558              template parameters */
3559           TREE_TYPE (parm) = t;
3560           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3561           decl = parm;
3562         }
3563       else
3564         {
3565           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3566           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3567           decl = build_decl (parm_loc,
3568                              TYPE_DECL, parm, t);
3569         }
3570
3571       TYPE_NAME (t) = decl;
3572       TYPE_STUB_DECL (t) = decl;
3573       parm = decl;
3574       TEMPLATE_TYPE_PARM_INDEX (t)
3575         = build_template_parm_index (idx, processing_template_decl,
3576                                      processing_template_decl,
3577                                      num_template_parms,
3578                                      decl, TREE_TYPE (parm));
3579       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3580       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3581     }
3582   DECL_ARTIFICIAL (decl) = 1;
3583   SET_DECL_TEMPLATE_PARM_P (decl);
3584   pushdecl (decl);
3585   parm = build_tree_list (defval, parm);
3586   return chainon (list, parm);
3587 }
3588
3589 /* The end of a template parameter list has been reached.  Process the
3590    tree list into a parameter vector, converting each parameter into a more
3591    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3592    as PARM_DECLs.  */
3593
3594 tree
3595 end_template_parm_list (tree parms)
3596 {
3597   int nparms;
3598   tree parm, next;
3599   tree saved_parmlist = make_tree_vec (list_length (parms));
3600
3601   current_template_parms
3602     = tree_cons (size_int (processing_template_decl),
3603                  saved_parmlist, current_template_parms);
3604
3605   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3606     {
3607       next = TREE_CHAIN (parm);
3608       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3609       TREE_CHAIN (parm) = NULL_TREE;
3610     }
3611
3612   --processing_template_parmlist;
3613
3614   return saved_parmlist;
3615 }
3616
3617 /* Create a new type almost identical to TYPE but which has the
3618    following differences:
3619
3620      1/ T has a new TEMPLATE_PARM_INDEX that carries the new number of
3621      template sibling parameters of T.
3622
3623      2/ T has a new canonical type that matches the new number
3624      of sibling parms.
3625
3626      3/ From now on, T is going to be what lookups referring to the
3627      name of TYPE will return. No lookup should return TYPE anymore.
3628
3629    NUM_PARMS is the new number of sibling parms TYPE belongs to.
3630
3631    This is a subroutine of fixup_template_parms.  */
3632
3633 static tree
3634 fixup_template_type_parm_type (tree type, int num_parms)
3635 {
3636   tree orig_idx = TEMPLATE_TYPE_PARM_INDEX (type), idx;
3637   tree t;
3638   /* This is the decl which name is inserted into the symbol table for
3639      the template parm type. So whenever we lookup the type name, this
3640      is the DECL we get.  */
3641   tree decl;
3642
3643   /* Do not fix up the type twice.  */
3644   if (orig_idx && TEMPLATE_PARM_NUM_SIBLINGS (orig_idx) != 0)
3645     return type;
3646
3647   t = copy_type (type);
3648   decl = TYPE_NAME (t);
3649
3650   TYPE_MAIN_VARIANT (t) = t;
3651   TYPE_NEXT_VARIANT (t)= NULL_TREE;
3652   TYPE_POINTER_TO (t) = 0;
3653   TYPE_REFERENCE_TO (t) = 0;
3654
3655   idx = build_template_parm_index (TEMPLATE_PARM_IDX (orig_idx),
3656                                    TEMPLATE_PARM_LEVEL (orig_idx),
3657                                    TEMPLATE_PARM_ORIG_LEVEL (orig_idx),
3658                                    num_parms,
3659                                    decl, t);
3660   TEMPLATE_PARM_DESCENDANTS (idx) = TEMPLATE_PARM_DESCENDANTS (orig_idx);
3661   TEMPLATE_PARM_PARAMETER_PACK (idx) = TEMPLATE_PARM_PARAMETER_PACK (orig_idx);
3662   TEMPLATE_TYPE_PARM_INDEX (t) = idx;
3663
3664   TYPE_STUB_DECL (t) = decl;
3665   TEMPLATE_TYPE_DECL (t) = decl;
3666   if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
3667     TREE_TYPE (DECL_TEMPLATE_RESULT  (decl)) = t;
3668
3669   /* Update the type associated to the type name stored in the symbol
3670      table. Now, whenever the type name is looked up, the resulting
3671      type is properly fixed up.  */
3672   TREE_TYPE (decl) = t;
3673
3674   TYPE_CANONICAL (t) = canonical_type_parameter (t);
3675
3676   return t;
3677 }
3678
3679 /* Create and return a new TEMPLATE_PARM_INDEX that is almost
3680    identical to I, but that is fixed up as to:
3681
3682    1/ carry the number of sibling parms (NUM_PARMS) of the template
3683    parm represented by I.
3684
3685    2/ replace all references to template parm types declared before I
3686    (in the same template parm list as I) by references to template
3687    parm types contained in ARGS. ARGS should contain the list of
3688    template parms that have been fixed up so far, in a form suitable
3689    to be passed to tsubst.
3690
3691    This is a subroutine of fixup_template_parms.  */
3692
3693 static tree
3694 fixup_template_parm_index (tree i, tree args, int num_parms)
3695 {
3696   tree index, decl, type;
3697
3698   if (i == NULL_TREE
3699       || TREE_CODE (i) != TEMPLATE_PARM_INDEX
3700       /* Do not fix up the index twice.  */
3701       || (TEMPLATE_PARM_NUM_SIBLINGS (i) != 0))
3702     return i;
3703
3704   decl = TEMPLATE_PARM_DECL (i);
3705   type = TREE_TYPE (decl);
3706
3707   index = build_template_parm_index (TEMPLATE_PARM_IDX (i),
3708                                      TEMPLATE_PARM_LEVEL (i),
3709                                      TEMPLATE_PARM_ORIG_LEVEL (i),
3710                                      num_parms,
3711                                      decl, type);
3712
3713   TEMPLATE_PARM_DESCENDANTS (index) = TEMPLATE_PARM_DESCENDANTS (i);
3714   TEMPLATE_PARM_PARAMETER_PACK (index) = TEMPLATE_PARM_PARAMETER_PACK (i);
3715
3716   type = tsubst (type, args, tf_none, NULL_TREE);
3717   
3718   TREE_TYPE (decl) = type;
3719   TREE_TYPE (index) = type;
3720
3721   return index;
3722 }
3723
3724 /* 
3725    This is a subroutine of fixup_template_parms.
3726
3727    It computes the canonical type of the type of the template
3728    parameter PARM_DESC and update all references to that type so that
3729    they use the newly computed canonical type. No access check is
3730    performed during the fixup. PARM_DESC is a TREE_LIST which
3731    TREE_VALUE is the template parameter and its TREE_PURPOSE is the
3732    default argument of the template parm if any. IDX is the index of
3733    the template parameter, starting at 0. NUM_PARMS is the number of
3734    template parameters in the set PARM_DESC belongs to. ARGLIST is a
3735    TREE_VEC containing the full set of template parameters in a form
3736    suitable to be passed to substs functions as their ARGS
3737    argument. This is what current_template_args returns for a given
3738    template. The innermost vector of args in ARGLIST is the set of
3739    template parms that have been fixed up so far. This function adds
3740    the fixed up parameter into that vector.  */
3741
3742 static void
3743 fixup_template_parm (tree parm_desc,
3744                      int idx,
3745                      int num_parms,
3746                      tree arglist)
3747 {
3748   tree parm = TREE_VALUE (parm_desc);
3749   tree fixedup_args = INNERMOST_TEMPLATE_ARGS (arglist);
3750
3751   push_deferring_access_checks (dk_no_check);
3752
3753   if (TREE_CODE (parm) == TYPE_DECL)
3754     {
3755       /* PARM is a template type parameter. Fix up its type, add
3756          the fixed-up template parm to the vector of fixed-up
3757          template parms so far, and substitute the fixed-up
3758          template parms into the default argument of this
3759          parameter.  */
3760       tree t =
3761         fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3762       TREE_TYPE (parm) = t;
3763
3764       TREE_VEC_ELT (fixedup_args, idx) = template_parm_to_arg (parm_desc);
3765     }
3766   else if (TREE_CODE (parm) == TEMPLATE_DECL)
3767     {
3768       /* PARM is a template template parameter. This is going to
3769          be interesting.  */
3770       tree tparms, targs, innermost_args, t;
3771       int j;
3772
3773       /* First, fix up the parms of the template template parm
3774          because the parms are involved in defining the new canonical
3775          type of the template template parm.  */
3776
3777       /* So we need to substitute the template parm types that have
3778          been fixed up so far into the template parms of this template
3779          template parm. E.g, consider this:
3780
3781          template<class T, template<T u> class TT> class S;
3782
3783          In this case we want to substitute T into the
3784          template parameters of TT.
3785
3786          So let's walk the template parms of PARM here, and
3787          tsubst ARGLIST into into each of the template
3788          parms.   */
3789
3790       /* For this substitution we need to build the full set of
3791          template parameters and use that as arguments for the
3792          tsubsting function.  */
3793       tparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
3794
3795       /* This will contain the innermost parms of PARM into which
3796          we have substituted so far.  */
3797       innermost_args = make_tree_vec (TREE_VEC_LENGTH (tparms));
3798       targs = add_to_template_args (arglist, innermost_args);
3799       for (j = 0; j < TREE_VEC_LENGTH (tparms); ++j)
3800         {
3801           tree parameter;
3802
3803           parameter = TREE_VEC_ELT (tparms, j);
3804
3805           /* INNERMOST_ARGS needs to have at least the same number
3806              of elements as the index PARAMETER, ortherwise
3807              tsubsting into PARAMETER will result in partially
3808              instantiating it, reducing its tempate parm
3809              level. Let's tactically fill INNERMOST_ARGS for that
3810              purpose.  */
3811           TREE_VEC_ELT (innermost_args, j) =
3812             template_parm_to_arg (parameter);
3813
3814           fixup_template_parm (parameter, j,
3815                                TREE_VEC_LENGTH (tparms),
3816                                targs);
3817         }
3818
3819       /* Now fix up the type of the template template parm.  */
3820
3821       t = fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3822       TREE_TYPE (parm) = t;
3823
3824       TREE_VEC_ELT (fixedup_args, idx) =
3825         template_parm_to_arg (parm_desc);
3826     }
3827   else if (TREE_CODE (parm) == PARM_DECL)
3828     {
3829       /* PARM is a non-type template parameter. We need to:
3830
3831        * Fix up its TEMPLATE_PARM_INDEX to make it carry the
3832        proper number of sibling parameters.
3833
3834        * Make lookups of the template parameter return a reference
3835        to the fixed-up index. No lookup should return references
3836        to the former index anymore.
3837
3838        * Substitute the template parms that got fixed up so far
3839
3840        * into the type of PARM.  */
3841
3842       tree index = DECL_INITIAL (parm);
3843
3844       /* PUSHED_DECL is the decl added to the symbol table with
3845          the name of the parameter. E,g:
3846              
3847          template<class T, T u> //#0
3848          auto my_function(T t) -> decltype(u); //#1
3849
3850          Here, when looking up u at //#1, we get the decl of u
3851          resulting from the declaration in #0. This is what
3852          PUSHED_DECL is. We need to replace the reference to the
3853          old TEMPLATE_PARM_INDEX carried by PUSHED_DECL by the
3854          fixed-up TEMPLATE_PARM_INDEX.  */
3855       tree pushed_decl = TEMPLATE_PARM_DECL (index);
3856
3857       /* Let's fix up the TEMPLATE_PARM_INDEX then. Note that we must
3858          fixup the type of PUSHED_DECL as well and luckily
3859          fixup_template_parm_index does it for us too.  */
3860       tree fixed_up_index =
3861         fixup_template_parm_index (index, arglist, num_parms);
3862
3863       DECL_INITIAL (pushed_decl) = DECL_INITIAL (parm) = fixed_up_index;
3864
3865       /* Add this fixed up PARM to the template parms we've fixed
3866          up so far and use that to substitute the fixed-up
3867          template parms into the type of PARM.  */
3868       TREE_VEC_ELT (fixedup_args, idx) =
3869         template_parm_to_arg (parm_desc);
3870       TREE_TYPE (parm) = tsubst (TREE_TYPE (parm), arglist,
3871                                  tf_none, NULL_TREE);
3872     }
3873
3874   TREE_PURPOSE (parm_desc) =
3875     tsubst_template_arg (TREE_PURPOSE (parm_desc),
3876                          arglist, tf_none, parm);
3877
3878   pop_deferring_access_checks ();
3879 }
3880
3881 /* Walk the current template parms and properly compute the canonical
3882    types of the dependent types created during
3883    cp_parser_template_parameter_list.  */
3884
3885 void
3886 fixup_template_parms (void)
3887 {
3888   tree arglist;
3889   tree parameter_vec;
3890   tree fixedup_args;
3891   int i, num_parms;
3892
3893   parameter_vec = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3894   if (parameter_vec == NULL_TREE)
3895     return;
3896
3897   num_parms = TREE_VEC_LENGTH (parameter_vec);
3898
3899   /* This vector contains the current innermost template parms that
3900      have been fixed up so far.  The form of FIXEDUP_ARGS is suitable
3901      to be passed to tsubst* functions as their ARGS argument.  */
3902   fixedup_args = make_tree_vec (num_parms);
3903
3904   /* This vector contains the full set of template parms in a form
3905      suitable to be passed to substs functions as their ARGS
3906      argument.  */
3907   arglist = current_template_args ();
3908   arglist = add_outermost_template_args (arglist, fixedup_args);
3909
3910   /* Let's do the proper fixup now.  */
3911   for (i = 0; i < num_parms; ++i)
3912     fixup_template_parm (TREE_VEC_ELT (parameter_vec, i),
3913                          i, num_parms, arglist);
3914 }
3915
3916 /* end_template_decl is called after a template declaration is seen.  */
3917
3918 void
3919 end_template_decl (void)
3920 {
3921   reset_specialization ();
3922
3923   if (! processing_template_decl)
3924     return;
3925
3926   /* This matches the pushlevel in begin_template_parm_list.  */
3927   finish_scope ();
3928
3929   --processing_template_decl;
3930   current_template_parms = TREE_CHAIN (current_template_parms);
3931 }
3932
3933 /* Takes a TREE_LIST representing a template parameter and convert it
3934    into an argument suitable to be passed to the type substitution
3935    functions.  Note that If the TREE_LIST contains an error_mark
3936    node, the returned argument is error_mark_node.  */
3937
3938 static tree
3939 template_parm_to_arg (tree t)
3940 {
3941
3942   if (t == NULL_TREE
3943       || TREE_CODE (t) != TREE_LIST)
3944     return t;
3945
3946   if (error_operand_p (TREE_VALUE (t)))
3947     return error_mark_node;
3948
3949   t = TREE_VALUE (t);
3950
3951   if (TREE_CODE (t) == TYPE_DECL
3952       || TREE_CODE (t) == TEMPLATE_DECL)
3953     {
3954       t = TREE_TYPE (t);
3955
3956       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3957         {
3958           /* Turn this argument into a TYPE_ARGUMENT_PACK
3959              with a single element, which expands T.  */
3960           tree vec = make_tree_vec (1);
3961 #ifdef ENABLE_CHECKING
3962           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3963             (vec, TREE_VEC_LENGTH (vec));
3964 #endif
3965           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3966
3967           t = cxx_make_type (TYPE_ARGUMENT_PACK);
3968           SET_ARGUMENT_PACK_ARGS (t, vec);
3969         }
3970     }
3971   else
3972     {
3973       t = DECL_INITIAL (t);
3974
3975       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3976         {
3977           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3978              with a single element, which expands T.  */
3979           tree vec = make_tree_vec (1);
3980           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3981 #ifdef ENABLE_CHECKING
3982           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3983             (vec, TREE_VEC_LENGTH (vec));
3984 #endif
3985           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3986
3987           t  = make_node (NONTYPE_ARGUMENT_PACK);
3988           SET_ARGUMENT_PACK_ARGS (t, vec);
3989           TREE_TYPE (t) = type;
3990         }
3991     }
3992   return t;
3993 }
3994
3995 /* Within the declaration of a template, return all levels of template
3996    parameters that apply.  The template parameters are represented as
3997    a TREE_VEC, in the form documented in cp-tree.h for template
3998    arguments.  */
3999
4000 static tree
4001 current_template_args (void)
4002 {
4003   tree header;
4004   tree args = NULL_TREE;
4005   int length = TMPL_PARMS_DEPTH (current_template_parms);
4006   int l = length;
4007
4008   /* If there is only one level of template parameters, we do not
4009      create a TREE_VEC of TREE_VECs.  Instead, we return a single
4010      TREE_VEC containing the arguments.  */
4011   if (length > 1)
4012     args = make_tree_vec (length);
4013
4014   for (header = current_template_parms; header; header = TREE_CHAIN (header))
4015     {
4016       tree a = copy_node (TREE_VALUE (header));
4017       int i;
4018
4019       TREE_TYPE (a) = NULL_TREE;
4020       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
4021         TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
4022
4023 #ifdef ENABLE_CHECKING
4024       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
4025 #endif
4026
4027       if (length > 1)
4028         TREE_VEC_ELT (args, --l) = a;
4029       else
4030         args = a;
4031     }
4032
4033     if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
4034       /* This can happen for template parms of a template template
4035          parameter, e.g:
4036
4037          template<template<class T, class U> class TT> struct S;
4038
4039          Consider the level of the parms of TT; T and U both have
4040          level 2; TT has no template parm of level 1. So in this case
4041          the first element of full_template_args is NULL_TREE. If we
4042          leave it like this TMPL_ARG_DEPTH on args returns 1 instead
4043          of 2. This will make tsubst wrongly consider that T and U
4044          have level 1. Instead, let's create a dummy vector as the
4045          first element of full_template_args so that TMPL_ARG_DEPTH
4046          returns the correct depth for args.  */
4047       TREE_VEC_ELT (args, 0) = make_tree_vec (1);
4048   return args;
4049 }
4050
4051 /* Update the declared TYPE by doing any lookups which were thought to be
4052    dependent, but are not now that we know the SCOPE of the declarator.  */
4053
4054 tree
4055 maybe_update_decl_type (tree orig_type, tree scope)
4056 {
4057   tree type = orig_type;
4058
4059   if (type == NULL_TREE)
4060     return type;
4061
4062   if (TREE_CODE (orig_type) == TYPE_DECL)
4063     type = TREE_TYPE (type);
4064
4065   if (scope && TYPE_P (scope) && dependent_type_p (scope)
4066       && dependent_type_p (type)
4067       /* Don't bother building up the args in this case.  */
4068       && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4069     {
4070       /* tsubst in the args corresponding to the template parameters,
4071          including auto if present.  Most things will be unchanged, but
4072          make_typename_type and tsubst_qualified_id will resolve
4073          TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
4074       tree args = current_template_args ();
4075       tree auto_node = type_uses_auto (type);
4076       tree pushed;
4077       if (auto_node)
4078         {
4079           tree auto_vec = make_tree_vec (1);
4080           TREE_VEC_ELT (auto_vec, 0) = auto_node;
4081           args = add_to_template_args (args, auto_vec);
4082         }
4083       pushed = push_scope (scope);
4084       type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4085       if (pushed)
4086         pop_scope (scope);
4087     }
4088
4089   if (type == error_mark_node)
4090     return orig_type;
4091
4092   if (TREE_CODE (orig_type) == TYPE_DECL)
4093     {
4094       if (same_type_p (type, TREE_TYPE (orig_type)))
4095         type = orig_type;
4096       else
4097         type = TYPE_NAME (type);
4098     }
4099   return type;
4100 }
4101
4102 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4103    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
4104    a member template.  Used by push_template_decl below.  */
4105
4106 static tree
4107 build_template_decl (tree decl, tree parms, bool member_template_p)
4108 {
4109   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4110   DECL_TEMPLATE_PARMS (tmpl) = parms;
4111   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4112   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4113
4114   return tmpl;
4115 }
4116
4117 struct template_parm_data
4118 {
4119   /* The level of the template parameters we are currently
4120      processing.  */
4121   int level;
4122
4123   /* The index of the specialization argument we are currently
4124      processing.  */
4125   int current_arg;
4126
4127   /* An array whose size is the number of template parameters.  The
4128      elements are nonzero if the parameter has been used in any one
4129      of the arguments processed so far.  */
4130   int* parms;
4131
4132   /* An array whose size is the number of template arguments.  The
4133      elements are nonzero if the argument makes use of template
4134      parameters of this level.  */
4135   int* arg_uses_template_parms;
4136 };
4137
4138 /* Subroutine of push_template_decl used to see if each template
4139    parameter in a partial specialization is used in the explicit
4140    argument list.  If T is of the LEVEL given in DATA (which is
4141    treated as a template_parm_data*), then DATA->PARMS is marked
4142    appropriately.  */
4143
4144 static int
4145 mark_template_parm (tree t, void* data)
4146 {
4147   int level;
4148   int idx;
4149   struct template_parm_data* tpd = (struct template_parm_data*) data;
4150
4151   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4152     {
4153       level = TEMPLATE_PARM_LEVEL (t);
4154       idx = TEMPLATE_PARM_IDX (t);
4155     }
4156   else
4157     {
4158       level = TEMPLATE_TYPE_LEVEL (t);
4159       idx = TEMPLATE_TYPE_IDX (t);
4160     }
4161
4162   if (level == tpd->level)
4163     {
4164       tpd->parms[idx] = 1;
4165       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4166     }
4167
4168   /* Return zero so that for_each_template_parm will continue the
4169      traversal of the tree; we want to mark *every* template parm.  */
4170   return 0;
4171 }
4172
4173 /* Process the partial specialization DECL.  */
4174
4175 static tree
4176 process_partial_specialization (tree decl)
4177 {
4178   tree type = TREE_TYPE (decl);
4179   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
4180   tree specargs = CLASSTYPE_TI_ARGS (type);
4181   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4182   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4183   tree inner_parms;
4184   tree inst;
4185   int nargs = TREE_VEC_LENGTH (inner_args);
4186   int ntparms;
4187   int  i;
4188   bool did_error_intro = false;
4189   struct template_parm_data tpd;
4190   struct template_parm_data tpd2;
4191
4192   gcc_assert (current_template_parms);
4193
4194   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4195   ntparms = TREE_VEC_LENGTH (inner_parms);
4196
4197   /* We check that each of the template parameters given in the
4198      partial specialization is used in the argument list to the
4199      specialization.  For example:
4200
4201        template <class T> struct S;
4202        template <class T> struct S<T*>;
4203
4204      The second declaration is OK because `T*' uses the template
4205      parameter T, whereas
4206
4207        template <class T> struct S<int>;
4208
4209      is no good.  Even trickier is:
4210
4211        template <class T>
4212        struct S1
4213        {
4214           template <class U>
4215           struct S2;
4216           template <class U>
4217           struct S2<T>;
4218        };
4219
4220      The S2<T> declaration is actually invalid; it is a
4221      full-specialization.  Of course,
4222
4223           template <class U>
4224           struct S2<T (*)(U)>;
4225
4226      or some such would have been OK.  */
4227   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4228   tpd.parms = XALLOCAVEC (int, ntparms);
4229   memset (tpd.parms, 0, sizeof (int) * ntparms);
4230
4231   tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4232   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4233   for (i = 0; i < nargs; ++i)
4234     {
4235       tpd.current_arg = i;
4236       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4237                               &mark_template_parm,
4238                               &tpd,
4239                               NULL,
4240                               /*include_nondeduced_p=*/false);
4241     }
4242   for (i = 0; i < ntparms; ++i)
4243     if (tpd.parms[i] == 0)
4244       {
4245         /* One of the template parms was not used in the
4246            specialization.  */
4247         if (!did_error_intro)
4248           {
4249             error ("template parameters not used in partial specialization:");
4250             did_error_intro = true;
4251           }
4252
4253         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4254       }
4255
4256   if (did_error_intro)
4257     return error_mark_node;
4258
4259   /* [temp.class.spec]
4260
4261      The argument list of the specialization shall not be identical to
4262      the implicit argument list of the primary template.  */
4263   if (comp_template_args
4264       (inner_args,
4265        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
4266                                                    (maintmpl)))))
4267     error ("partial specialization %qT does not specialize any template arguments", type);
4268
4269   /* [temp.class.spec]
4270
4271      A partially specialized non-type argument expression shall not
4272      involve template parameters of the partial specialization except
4273      when the argument expression is a simple identifier.
4274
4275      The type of a template parameter corresponding to a specialized
4276      non-type argument shall not be dependent on a parameter of the
4277      specialization. 
4278
4279      Also, we verify that pack expansions only occur at the
4280      end of the argument list.  */
4281   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4282   tpd2.parms = 0;
4283   for (i = 0; i < nargs; ++i)
4284     {
4285       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4286       tree arg = TREE_VEC_ELT (inner_args, i);
4287       tree packed_args = NULL_TREE;
4288       int j, len = 1;
4289
4290       if (ARGUMENT_PACK_P (arg))
4291         {
4292           /* Extract the arguments from the argument pack. We'll be
4293              iterating over these in the following loop.  */
4294           packed_args = ARGUMENT_PACK_ARGS (arg);
4295           len = TREE_VEC_LENGTH (packed_args);
4296         }
4297
4298       for (j = 0; j < len; j++)
4299         {
4300           if (packed_args)
4301             /* Get the Jth argument in the parameter pack.  */
4302             arg = TREE_VEC_ELT (packed_args, j);
4303
4304           if (PACK_EXPANSION_P (arg))
4305             {
4306               /* Pack expansions must come at the end of the
4307                  argument list.  */
4308               if ((packed_args && j < len - 1)
4309                   || (!packed_args && i < nargs - 1))
4310                 {
4311                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4312                     error ("parameter pack argument %qE must be at the "
4313                            "end of the template argument list", arg);
4314                   else
4315                     error ("parameter pack argument %qT must be at the "
4316                            "end of the template argument list", arg);
4317                 }
4318             }
4319
4320           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4321             /* We only care about the pattern.  */
4322             arg = PACK_EXPANSION_PATTERN (arg);
4323
4324           if (/* These first two lines are the `non-type' bit.  */
4325               !TYPE_P (arg)
4326               && TREE_CODE (arg) != TEMPLATE_DECL
4327               /* This next line is the `argument expression is not just a
4328                  simple identifier' condition and also the `specialized
4329                  non-type argument' bit.  */
4330               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
4331             {
4332               if ((!packed_args && tpd.arg_uses_template_parms[i])
4333                   || (packed_args && uses_template_parms (arg)))
4334                 error ("template argument %qE involves template parameter(s)",
4335                        arg);
4336               else 
4337                 {
4338                   /* Look at the corresponding template parameter,
4339                      marking which template parameters its type depends
4340                      upon.  */
4341                   tree type = TREE_TYPE (parm);
4342
4343                   if (!tpd2.parms)
4344                     {
4345                       /* We haven't yet initialized TPD2.  Do so now.  */
4346                       tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4347                       /* The number of parameters here is the number in the
4348                          main template, which, as checked in the assertion
4349                          above, is NARGS.  */
4350                       tpd2.parms = XALLOCAVEC (int, nargs);
4351                       tpd2.level = 
4352                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4353                     }
4354
4355                   /* Mark the template parameters.  But this time, we're
4356                      looking for the template parameters of the main
4357                      template, not in the specialization.  */
4358                   tpd2.current_arg = i;
4359                   tpd2.arg_uses_template_parms[i] = 0;
4360                   memset (tpd2.parms, 0, sizeof (int) * nargs);
4361                   for_each_template_parm (type,
4362                                           &mark_template_parm,
4363                                           &tpd2,
4364                                           NULL,
4365                                           /*include_nondeduced_p=*/false);
4366
4367                   if (tpd2.arg_uses_template_parms [i])
4368                     {
4369                       /* The type depended on some template parameters.
4370                          If they are fully specialized in the
4371                          specialization, that's OK.  */
4372                       int j;
4373                       int count = 0;
4374                       for (j = 0; j < nargs; ++j)
4375                         if (tpd2.parms[j] != 0
4376                             && tpd.arg_uses_template_parms [j])
4377                           ++count;
4378                       if (count != 0)
4379                         error_n (input_location, count,
4380                                  "type %qT of template argument %qE depends "
4381                                  "on a template parameter",
4382                                  "type %qT of template argument %qE depends "
4383                                  "on template parameters",
4384                                  type,
4385                                  arg);
4386                     }
4387                 }
4388             }
4389         }
4390     }
4391
4392   /* We should only get here once.  */
4393   gcc_assert (!COMPLETE_TYPE_P (type));
4394
4395   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4396     = tree_cons (specargs, inner_parms,
4397                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4398   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4399
4400   for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4401        inst = TREE_CHAIN (inst))
4402     {
4403       tree inst_type = TREE_VALUE (inst);
4404       if (COMPLETE_TYPE_P (inst_type)
4405           && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4406         {
4407           tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
4408           if (spec && TREE_TYPE (spec) == type)
4409             permerror (input_location,
4410                        "partial specialization of %qT after instantiation "
4411                        "of %qT", type, inst_type);
4412         }
4413     }
4414
4415   return decl;
4416 }
4417
4418 /* Check that a template declaration's use of default arguments and
4419    parameter packs is not invalid.  Here, PARMS are the template
4420    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
4421    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
4422    specialization.
4423    
4424
4425    IS_FRIEND_DECL is nonzero if DECL is a friend function template
4426    declaration (but not a definition); 1 indicates a declaration, 2
4427    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4428    emitted for extraneous default arguments.
4429
4430    Returns TRUE if there were no errors found, FALSE otherwise. */
4431
4432 bool
4433 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
4434                          int is_partial, int is_friend_decl)
4435 {
4436   const char *msg;
4437   int last_level_to_check;
4438   tree parm_level;
4439   bool no_errors = true;
4440
4441   /* [temp.param]
4442
4443      A default template-argument shall not be specified in a
4444      function template declaration or a function template definition, nor
4445      in the template-parameter-list of the definition of a member of a
4446      class template.  */
4447
4448   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
4449     /* You can't have a function template declaration in a local
4450        scope, nor you can you define a member of a class template in a
4451        local scope.  */
4452     return true;
4453
4454   if (current_class_type
4455       && !TYPE_BEING_DEFINED (current_class_type)
4456       && DECL_LANG_SPECIFIC (decl)
4457       && DECL_DECLARES_FUNCTION_P (decl)
4458       /* If this is either a friend defined in the scope of the class
4459          or a member function.  */
4460       && (DECL_FUNCTION_MEMBER_P (decl)
4461           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4462           : DECL_FRIEND_CONTEXT (decl)
4463           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4464           : false)
4465       /* And, if it was a member function, it really was defined in
4466          the scope of the class.  */
4467       && (!DECL_FUNCTION_MEMBER_P (decl)
4468           || DECL_INITIALIZED_IN_CLASS_P (decl)))
4469     /* We already checked these parameters when the template was
4470        declared, so there's no need to do it again now.  This function
4471        was defined in class scope, but we're processing it's body now
4472        that the class is complete.  */
4473     return true;
4474
4475   /* Core issue 226 (C++0x only): the following only applies to class
4476      templates.  */
4477   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
4478     {
4479       /* [temp.param]
4480
4481          If a template-parameter has a default template-argument, all
4482          subsequent template-parameters shall have a default
4483          template-argument supplied.  */
4484       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4485         {
4486           tree inner_parms = TREE_VALUE (parm_level);
4487           int ntparms = TREE_VEC_LENGTH (inner_parms);
4488           int seen_def_arg_p = 0;
4489           int i;
4490
4491           for (i = 0; i < ntparms; ++i)
4492             {
4493               tree parm = TREE_VEC_ELT (inner_parms, i);
4494
4495               if (parm == error_mark_node)
4496                 continue;
4497
4498               if (TREE_PURPOSE (parm))
4499                 seen_def_arg_p = 1;
4500               else if (seen_def_arg_p
4501                        && !template_parameter_pack_p (TREE_VALUE (parm)))
4502                 {
4503                   error ("no default argument for %qD", TREE_VALUE (parm));
4504                   /* For better subsequent error-recovery, we indicate that
4505                      there should have been a default argument.  */
4506                   TREE_PURPOSE (parm) = error_mark_node;
4507                   no_errors = false;
4508                 }
4509               else if (is_primary
4510                        && !is_partial
4511                        && !is_friend_decl
4512                        /* Don't complain about an enclosing partial
4513                           specialization.  */
4514                        && parm_level == parms
4515                        && TREE_CODE (decl) == TYPE_DECL
4516                        && i < ntparms - 1
4517                        && template_parameter_pack_p (TREE_VALUE (parm)))
4518                 {
4519                   /* A primary class template can only have one
4520                      parameter pack, at the end of the template
4521                      parameter list.  */
4522
4523                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4524                     error ("parameter pack %qE must be at the end of the"
4525                            " template parameter list", TREE_VALUE (parm));
4526                   else
4527                     error ("parameter pack %qT must be at the end of the"
4528                            " template parameter list", 
4529                            TREE_TYPE (TREE_VALUE (parm)));
4530
4531                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
4532                     = error_mark_node;
4533                   no_errors = false;
4534                 }
4535             }
4536         }
4537     }
4538
4539   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4540       || is_partial 
4541       || !is_primary
4542       || is_friend_decl)
4543     /* For an ordinary class template, default template arguments are
4544        allowed at the innermost level, e.g.:
4545          template <class T = int>
4546          struct S {};
4547        but, in a partial specialization, they're not allowed even
4548        there, as we have in [temp.class.spec]:
4549
4550          The template parameter list of a specialization shall not
4551          contain default template argument values.
4552
4553        So, for a partial specialization, or for a function template
4554        (in C++98/C++03), we look at all of them.  */
4555     ;
4556   else
4557     /* But, for a primary class template that is not a partial
4558        specialization we look at all template parameters except the
4559        innermost ones.  */
4560     parms = TREE_CHAIN (parms);
4561
4562   /* Figure out what error message to issue.  */
4563   if (is_friend_decl == 2)
4564     msg = G_("default template arguments may not be used in function template "
4565              "friend re-declaration");
4566   else if (is_friend_decl)
4567     msg = G_("default template arguments may not be used in function template "
4568              "friend declarations");
4569   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4570     msg = G_("default template arguments may not be used in function templates "
4571              "without -std=c++0x or -std=gnu++0x");
4572   else if (is_partial)
4573     msg = G_("default template arguments may not be used in "
4574              "partial specializations");
4575   else
4576     msg = G_("default argument for template parameter for class enclosing %qD");
4577
4578   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4579     /* If we're inside a class definition, there's no need to
4580        examine the parameters to the class itself.  On the one
4581        hand, they will be checked when the class is defined, and,
4582        on the other, default arguments are valid in things like:
4583          template <class T = double>
4584          struct S { template <class U> void f(U); };
4585        Here the default argument for `S' has no bearing on the
4586        declaration of `f'.  */
4587     last_level_to_check = template_class_depth (current_class_type) + 1;
4588   else
4589     /* Check everything.  */
4590     last_level_to_check = 0;
4591
4592   for (parm_level = parms;
4593        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4594        parm_level = TREE_CHAIN (parm_level))
4595     {
4596       tree inner_parms = TREE_VALUE (parm_level);
4597       int i;
4598       int ntparms;
4599
4600       ntparms = TREE_VEC_LENGTH (inner_parms);
4601       for (i = 0; i < ntparms; ++i)
4602         {
4603           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4604             continue;
4605
4606           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4607             {
4608               if (msg)
4609                 {
4610                   no_errors = false;
4611                   if (is_friend_decl == 2)
4612                     return no_errors;
4613
4614                   error (msg, decl);
4615                   msg = 0;
4616                 }
4617
4618               /* Clear out the default argument so that we are not
4619                  confused later.  */
4620               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4621             }
4622         }
4623
4624       /* At this point, if we're still interested in issuing messages,
4625          they must apply to classes surrounding the object declared.  */
4626       if (msg)
4627         msg = G_("default argument for template parameter for class "
4628                  "enclosing %qD");
4629     }
4630
4631   return no_errors;
4632 }
4633
4634 /* Worker for push_template_decl_real, called via
4635    for_each_template_parm.  DATA is really an int, indicating the
4636    level of the parameters we are interested in.  If T is a template
4637    parameter of that level, return nonzero.  */
4638
4639 static int
4640 template_parm_this_level_p (tree t, void* data)
4641 {
4642   int this_level = *(int *)data;
4643   int level;
4644
4645   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4646     level = TEMPLATE_PARM_LEVEL (t);
4647   else
4648     level = TEMPLATE_TYPE_LEVEL (t);
4649   return level == this_level;
4650 }
4651
4652 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4653    parameters given by current_template_args, or reuses a
4654    previously existing one, if appropriate.  Returns the DECL, or an
4655    equivalent one, if it is replaced via a call to duplicate_decls.
4656
4657    If IS_FRIEND is true, DECL is a friend declaration.  */
4658
4659 tree
4660 push_template_decl_real (tree decl, bool is_friend)
4661 {
4662   tree tmpl;
4663   tree args;
4664   tree info;
4665   tree ctx;
4666   int primary;
4667   int is_partial;
4668   int new_template_p = 0;
4669   /* True if the template is a member template, in the sense of
4670      [temp.mem].  */
4671   bool member_template_p = false;
4672
4673   if (decl == error_mark_node || !current_template_parms)
4674     return error_mark_node;
4675
4676   /* See if this is a partial specialization.  */
4677   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4678                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4679                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4680
4681   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4682     is_friend = true;
4683
4684   if (is_friend)
4685     /* For a friend, we want the context of the friend function, not
4686        the type of which it is a friend.  */
4687     ctx = CP_DECL_CONTEXT (decl);
4688   else if (CP_DECL_CONTEXT (decl)
4689            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4690     /* In the case of a virtual function, we want the class in which
4691        it is defined.  */
4692     ctx = CP_DECL_CONTEXT (decl);
4693   else
4694     /* Otherwise, if we're currently defining some class, the DECL
4695        is assumed to be a member of the class.  */
4696     ctx = current_scope ();
4697
4698   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4699     ctx = NULL_TREE;
4700
4701   if (!DECL_CONTEXT (decl))
4702     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4703
4704   /* See if this is a primary template.  */
4705   if (is_friend && ctx)
4706     /* A friend template that specifies a class context, i.e.
4707          template <typename T> friend void A<T>::f();
4708        is not primary.  */
4709     primary = 0;
4710   else
4711     primary = template_parm_scope_p ();
4712
4713   if (primary)
4714     {
4715       if (DECL_CLASS_SCOPE_P (decl))
4716         member_template_p = true;
4717       if (TREE_CODE (decl) == TYPE_DECL
4718           && ANON_AGGRNAME_P (DECL_NAME (decl)))
4719         {
4720           error ("template class without a name");
4721           return error_mark_node;
4722         }
4723       else if (TREE_CODE (decl) == FUNCTION_DECL)
4724         {
4725           if (DECL_DESTRUCTOR_P (decl))
4726             {
4727               /* [temp.mem]
4728
4729                  A destructor shall not be a member template.  */
4730               error ("destructor %qD declared as member template", decl);
4731               return error_mark_node;
4732             }
4733           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4734               && (!prototype_p (TREE_TYPE (decl))
4735                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4736                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4737                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4738                       == void_list_node)))
4739             {
4740               /* [basic.stc.dynamic.allocation]
4741
4742                  An allocation function can be a function
4743                  template. ... Template allocation functions shall
4744                  have two or more parameters.  */
4745               error ("invalid template declaration of %qD", decl);
4746               return error_mark_node;
4747             }
4748         }
4749       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4750                && CLASS_TYPE_P (TREE_TYPE (decl)))
4751         /* OK */;
4752       else
4753         {
4754           error ("template declaration of %q#D", decl);
4755           return error_mark_node;
4756         }
4757     }
4758
4759   /* Check to see that the rules regarding the use of default
4760      arguments are not being violated.  */
4761   check_default_tmpl_args (decl, current_template_parms,
4762                            primary, is_partial, /*is_friend_decl=*/0);
4763
4764   /* Ensure that there are no parameter packs in the type of this
4765      declaration that have not been expanded.  */
4766   if (TREE_CODE (decl) == FUNCTION_DECL)
4767     {
4768       /* Check each of the arguments individually to see if there are
4769          any bare parameter packs.  */
4770       tree type = TREE_TYPE (decl);
4771       tree arg = DECL_ARGUMENTS (decl);
4772       tree argtype = TYPE_ARG_TYPES (type);
4773
4774       while (arg && argtype)
4775         {
4776           if (!FUNCTION_PARAMETER_PACK_P (arg)
4777               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4778             {
4779             /* This is a PARM_DECL that contains unexpanded parameter
4780                packs. We have already complained about this in the
4781                check_for_bare_parameter_packs call, so just replace
4782                these types with ERROR_MARK_NODE.  */
4783               TREE_TYPE (arg) = error_mark_node;
4784               TREE_VALUE (argtype) = error_mark_node;
4785             }
4786
4787           arg = DECL_CHAIN (arg);
4788           argtype = TREE_CHAIN (argtype);
4789         }
4790
4791       /* Check for bare parameter packs in the return type and the
4792          exception specifiers.  */
4793       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4794         /* Errors were already issued, set return type to int
4795            as the frontend doesn't expect error_mark_node as
4796            the return type.  */
4797         TREE_TYPE (type) = integer_type_node;
4798       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4799         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4800     }
4801   else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
4802     {
4803       TREE_TYPE (decl) = error_mark_node;
4804       return error_mark_node;
4805     }
4806
4807   if (is_partial)
4808     return process_partial_specialization (decl);
4809
4810   args = current_template_args ();
4811
4812   if (!ctx
4813       || TREE_CODE (ctx) == FUNCTION_DECL
4814       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4815       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4816     {
4817       if (DECL_LANG_SPECIFIC (decl)
4818           && DECL_TEMPLATE_INFO (decl)
4819           && DECL_TI_TEMPLATE (decl))
4820         tmpl = DECL_TI_TEMPLATE (decl);
4821       /* If DECL is a TYPE_DECL for a class-template, then there won't
4822          be DECL_LANG_SPECIFIC.  The information equivalent to
4823          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4824       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4825                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4826                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4827         {
4828           /* Since a template declaration already existed for this
4829              class-type, we must be redeclaring it here.  Make sure
4830              that the redeclaration is valid.  */
4831           redeclare_class_template (TREE_TYPE (decl),
4832                                     current_template_parms);
4833           /* We don't need to create a new TEMPLATE_DECL; just use the
4834              one we already had.  */
4835           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4836         }
4837       else
4838         {
4839           tmpl = build_template_decl (decl, current_template_parms,
4840                                       member_template_p);
4841           new_template_p = 1;
4842
4843           if (DECL_LANG_SPECIFIC (decl)
4844               && DECL_TEMPLATE_SPECIALIZATION (decl))
4845             {
4846               /* A specialization of a member template of a template
4847                  class.  */
4848               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4849               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4850               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4851             }
4852         }
4853     }
4854   else
4855     {
4856       tree a, t, current, parms;
4857       int i;
4858       tree tinfo = get_template_info (decl);
4859
4860       if (!tinfo)
4861         {
4862           error ("template definition of non-template %q#D", decl);
4863           return error_mark_node;
4864         }
4865
4866       tmpl = TI_TEMPLATE (tinfo);
4867
4868       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4869           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4870           && DECL_TEMPLATE_SPECIALIZATION (decl)
4871           && DECL_MEMBER_TEMPLATE_P (tmpl))
4872         {
4873           tree new_tmpl;
4874
4875           /* The declaration is a specialization of a member
4876              template, declared outside the class.  Therefore, the
4877              innermost template arguments will be NULL, so we
4878              replace them with the arguments determined by the
4879              earlier call to check_explicit_specialization.  */
4880           args = DECL_TI_ARGS (decl);
4881
4882           new_tmpl
4883             = build_template_decl (decl, current_template_parms,
4884                                    member_template_p);
4885           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4886           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4887           DECL_TI_TEMPLATE (decl) = new_tmpl;
4888           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4889           DECL_TEMPLATE_INFO (new_tmpl)
4890             = build_template_info (tmpl, args);
4891
4892           register_specialization (new_tmpl,
4893                                    most_general_template (tmpl),
4894                                    args,
4895                                    is_friend, 0);
4896           return decl;
4897         }
4898
4899       /* Make sure the template headers we got make sense.  */
4900
4901       parms = DECL_TEMPLATE_PARMS (tmpl);
4902       i = TMPL_PARMS_DEPTH (parms);
4903       if (TMPL_ARGS_DEPTH (args) != i)
4904         {
4905           error ("expected %d levels of template parms for %q#D, got %d",
4906                  i, decl, TMPL_ARGS_DEPTH (args));
4907         }
4908       else
4909         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
4910           {
4911             a = TMPL_ARGS_LEVEL (args, i);
4912             t = INNERMOST_TEMPLATE_PARMS (parms);
4913
4914             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
4915               {
4916                 if (current == decl)
4917                   error ("got %d template parameters for %q#D",
4918                          TREE_VEC_LENGTH (a), decl);
4919                 else
4920                   error ("got %d template parameters for %q#T",
4921                          TREE_VEC_LENGTH (a), current);
4922                 error ("  but %d required", TREE_VEC_LENGTH (t));
4923                 return error_mark_node;
4924               }
4925
4926             if (current == decl)
4927               current = ctx;
4928             else if (current == NULL_TREE)
4929               /* Can happen in erroneous input.  */
4930               break;
4931             else
4932               current = (TYPE_P (current)
4933                          ? TYPE_CONTEXT (current)
4934                          : DECL_CONTEXT (current));
4935           }
4936
4937       /* Check that the parms are used in the appropriate qualifying scopes
4938          in the declarator.  */
4939       if (!comp_template_args
4940           (TI_ARGS (tinfo),
4941            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4942         {
4943           error ("\
4944 template arguments to %qD do not match original template %qD",
4945                  decl, DECL_TEMPLATE_RESULT (tmpl));
4946           if (!uses_template_parms (TI_ARGS (tinfo)))
4947             inform (input_location, "use template<> for an explicit specialization");
4948           /* Avoid crash in import_export_decl.  */
4949           DECL_INTERFACE_KNOWN (decl) = 1;
4950           return error_mark_node;
4951         }
4952     }
4953
4954   DECL_TEMPLATE_RESULT (tmpl) = decl;
4955   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4956
4957   /* Push template declarations for global functions and types.  Note
4958      that we do not try to push a global template friend declared in a
4959      template class; such a thing may well depend on the template
4960      parameters of the class.  */
4961   if (new_template_p && !ctx
4962       && !(is_friend && template_class_depth (current_class_type) > 0))
4963     {
4964       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4965       if (tmpl == error_mark_node)
4966         return error_mark_node;
4967
4968       /* Hide template friend classes that haven't been declared yet.  */
4969       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4970         {
4971           DECL_ANTICIPATED (tmpl) = 1;
4972           DECL_FRIEND_P (tmpl) = 1;
4973         }
4974     }
4975
4976   if (primary)
4977     {
4978       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4979       int i;
4980
4981       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4982       if (DECL_CONV_FN_P (tmpl))
4983         {
4984           int depth = TMPL_PARMS_DEPTH (parms);
4985
4986           /* It is a conversion operator. See if the type converted to
4987              depends on innermost template operands.  */
4988
4989           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4990                                          depth))
4991             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4992         }
4993
4994       /* Give template template parms a DECL_CONTEXT of the template
4995          for which they are a parameter.  */
4996       parms = INNERMOST_TEMPLATE_PARMS (parms);
4997       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
4998         {
4999           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5000           if (TREE_CODE (parm) == TEMPLATE_DECL)
5001             DECL_CONTEXT (parm) = tmpl;
5002         }
5003     }
5004
5005   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5006      back to its most general template.  If TMPL is a specialization,
5007      ARGS may only have the innermost set of arguments.  Add the missing
5008      argument levels if necessary.  */
5009   if (DECL_TEMPLATE_INFO (tmpl))
5010     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5011
5012   info = build_template_info (tmpl, args);
5013
5014   if (DECL_IMPLICIT_TYPEDEF_P (decl))
5015     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5016   else if (DECL_LANG_SPECIFIC (decl))
5017     DECL_TEMPLATE_INFO (decl) = info;
5018
5019   return DECL_TEMPLATE_RESULT (tmpl);
5020 }
5021
5022 tree
5023 push_template_decl (tree decl)
5024 {
5025   return push_template_decl_real (decl, false);
5026 }
5027
5028 /* Called when a class template TYPE is redeclared with the indicated
5029    template PARMS, e.g.:
5030
5031      template <class T> struct S;
5032      template <class T> struct S {};  */
5033
5034 bool
5035 redeclare_class_template (tree type, tree parms)
5036 {
5037   tree tmpl;
5038   tree tmpl_parms;
5039   int i;
5040
5041   if (!TYPE_TEMPLATE_INFO (type))
5042     {
5043       error ("%qT is not a template type", type);
5044       return false;
5045     }
5046
5047   tmpl = TYPE_TI_TEMPLATE (type);
5048   if (!PRIMARY_TEMPLATE_P (tmpl))
5049     /* The type is nested in some template class.  Nothing to worry
5050        about here; there are no new template parameters for the nested
5051        type.  */
5052     return true;
5053
5054   if (!parms)
5055     {
5056       error ("template specifiers not specified in declaration of %qD",
5057              tmpl);
5058       return false;
5059     }
5060
5061   parms = INNERMOST_TEMPLATE_PARMS (parms);
5062   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5063
5064   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5065     {
5066       error_n (input_location, TREE_VEC_LENGTH (parms),
5067                "redeclared with %d template parameter",
5068                "redeclared with %d template parameters",
5069                TREE_VEC_LENGTH (parms));
5070       inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5071                 "previous declaration %q+D used %d template parameter",
5072                 "previous declaration %q+D used %d template parameters",
5073                 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5074       return false;
5075     }
5076
5077   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5078     {
5079       tree tmpl_parm;
5080       tree parm;
5081       tree tmpl_default;
5082       tree parm_default;
5083
5084       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5085           || TREE_VEC_ELT (parms, i) == error_mark_node)
5086         continue;
5087
5088       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5089       if (tmpl_parm == error_mark_node)
5090         return false;
5091
5092       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5093       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5094       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5095
5096       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5097          TEMPLATE_DECL.  */
5098       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5099           || (TREE_CODE (tmpl_parm) != TYPE_DECL
5100               && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5101           || (TREE_CODE (tmpl_parm) != PARM_DECL
5102               && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5103                   != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5104           || (TREE_CODE (tmpl_parm) == PARM_DECL
5105               && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5106                   != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5107         {
5108           error ("template parameter %q+#D", tmpl_parm);
5109           error ("redeclared here as %q#D", parm);
5110           return false;
5111         }
5112
5113       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5114         {
5115           /* We have in [temp.param]:
5116
5117              A template-parameter may not be given default arguments
5118              by two different declarations in the same scope.  */
5119           error_at (input_location, "redefinition of default argument for %q#D", parm);
5120           inform (DECL_SOURCE_LOCATION (tmpl_parm),
5121                   "original definition appeared here");
5122           return false;
5123         }
5124
5125       if (parm_default != NULL_TREE)
5126         /* Update the previous template parameters (which are the ones
5127            that will really count) with the new default value.  */
5128         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5129       else if (tmpl_default != NULL_TREE)
5130         /* Update the new parameters, too; they'll be used as the
5131            parameters for any members.  */
5132         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5133     }
5134
5135     return true;
5136 }
5137
5138 /* Simplify EXPR if it is a non-dependent expression.  Returns the
5139    (possibly simplified) expression.  */
5140
5141 static tree
5142 fold_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5143 {
5144   if (expr == NULL_TREE)
5145     return NULL_TREE;
5146
5147   /* If we're in a template, but EXPR isn't value dependent, simplify
5148      it.  We're supposed to treat:
5149
5150        template <typename T> void f(T[1 + 1]);
5151        template <typename T> void f(T[2]);
5152
5153      as two declarations of the same function, for example.  */
5154   if (processing_template_decl
5155       && !type_dependent_expression_p (expr)
5156       && potential_constant_expression (expr)
5157       && !value_dependent_expression_p (expr))
5158     {
5159       HOST_WIDE_INT saved_processing_template_decl;
5160
5161       saved_processing_template_decl = processing_template_decl;
5162       processing_template_decl = 0;
5163       expr = tsubst_copy_and_build (expr,
5164                                     /*args=*/NULL_TREE,
5165                                     complain,
5166                                     /*in_decl=*/NULL_TREE,
5167                                     /*function_p=*/false,
5168                                     /*integral_constant_expression_p=*/true);
5169       processing_template_decl = saved_processing_template_decl;
5170     }
5171   return expr;
5172 }
5173
5174 tree
5175 fold_non_dependent_expr (tree expr)
5176 {
5177   return fold_non_dependent_expr_sfinae (expr, tf_error);
5178 }
5179
5180 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5181    must be a function or a pointer-to-function type, as specified
5182    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5183    and check that the resulting function has external linkage.  */
5184
5185 static tree
5186 convert_nontype_argument_function (tree type, tree expr)
5187 {
5188   tree fns = expr;
5189   tree fn, fn_no_ptr;
5190
5191   fn = instantiate_type (type, fns, tf_none);
5192   if (fn == error_mark_node)
5193     return error_mark_node;
5194
5195   fn_no_ptr = fn;
5196   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5197     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5198   if (TREE_CODE (fn_no_ptr) == BASELINK)
5199     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5200  
5201   /* [temp.arg.nontype]/1
5202
5203      A template-argument for a non-type, non-template template-parameter
5204      shall be one of:
5205      [...]
5206      -- the address of an object or function with external linkage.  */
5207   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
5208     {
5209       error ("%qE is not a valid template argument for type %qT "
5210              "because function %qD has not external linkage",
5211              expr, type, fn_no_ptr);
5212       return NULL_TREE;
5213     }
5214
5215   return fn;
5216 }
5217
5218 /* Subroutine of convert_nontype_argument.
5219    Check if EXPR of type TYPE is a valid pointer-to-member constant.
5220    Emit an error otherwise.  */
5221
5222 static bool
5223 check_valid_ptrmem_cst_expr (tree type, tree expr,
5224                              tsubst_flags_t complain)
5225 {
5226   STRIP_NOPS (expr);
5227   if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5228     return true;
5229   if (complain & tf_error)
5230     {
5231       error ("%qE is not a valid template argument for type %qT",
5232              expr, type);
5233       error ("it must be a pointer-to-member of the form %<&X::Y%>");
5234     }
5235   return false;
5236 }
5237
5238 /* Returns TRUE iff the address of OP is value-dependent.
5239
5240    14.6.2.4 [temp.dep.temp]:
5241    A non-integral non-type template-argument is dependent if its type is
5242    dependent or it has either of the following forms
5243      qualified-id
5244      & qualified-id
5245    and contains a nested-name-specifier which specifies a class-name that
5246    names a dependent type.
5247
5248    We generalize this to just say that the address of a member of a
5249    dependent class is value-dependent; the above doesn't cover the
5250    address of a static data member named with an unqualified-id.  */
5251
5252 static bool
5253 has_value_dependent_address (tree op)
5254 {
5255   /* We could use get_inner_reference here, but there's no need;
5256      this is only relevant for template non-type arguments, which
5257      can only be expressed as &id-expression.  */
5258   if (DECL_P (op))
5259     {
5260       tree ctx = CP_DECL_CONTEXT (op);
5261       if (TYPE_P (ctx) && dependent_type_p (ctx))
5262         return true;
5263     }
5264
5265   return false;
5266 }
5267
5268 /* Attempt to convert the non-type template parameter EXPR to the
5269    indicated TYPE.  If the conversion is successful, return the
5270    converted value.  If the conversion is unsuccessful, return
5271    NULL_TREE if we issued an error message, or error_mark_node if we
5272    did not.  We issue error messages for out-and-out bad template
5273    parameters, but not simply because the conversion failed, since we
5274    might be just trying to do argument deduction.  Both TYPE and EXPR
5275    must be non-dependent.
5276
5277    The conversion follows the special rules described in
5278    [temp.arg.nontype], and it is much more strict than an implicit
5279    conversion.
5280
5281    This function is called twice for each template argument (see
5282    lookup_template_class for a more accurate description of this
5283    problem). This means that we need to handle expressions which
5284    are not valid in a C++ source, but can be created from the
5285    first call (for instance, casts to perform conversions). These
5286    hacks can go away after we fix the double coercion problem.  */
5287
5288 static tree
5289 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5290 {
5291   tree expr_type;
5292
5293   /* Detect immediately string literals as invalid non-type argument.
5294      This special-case is not needed for correctness (we would easily
5295      catch this later), but only to provide better diagnostic for this
5296      common user mistake. As suggested by DR 100, we do not mention
5297      linkage issues in the diagnostic as this is not the point.  */
5298   /* FIXME we're making this OK.  */
5299   if (TREE_CODE (expr) == STRING_CST)
5300     {
5301       if (complain & tf_error)
5302         error ("%qE is not a valid template argument for type %qT "
5303                "because string literals can never be used in this context",
5304                expr, type);
5305       return NULL_TREE;
5306     }
5307
5308   /* Add the ADDR_EXPR now for the benefit of
5309      value_dependent_expression_p.  */
5310   if (TYPE_PTROBV_P (type)
5311       && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
5312     expr = decay_conversion (expr);
5313
5314   /* If we are in a template, EXPR may be non-dependent, but still
5315      have a syntactic, rather than semantic, form.  For example, EXPR
5316      might be a SCOPE_REF, rather than the VAR_DECL to which the
5317      SCOPE_REF refers.  Preserving the qualifying scope is necessary
5318      so that access checking can be performed when the template is
5319      instantiated -- but here we need the resolved form so that we can
5320      convert the argument.  */
5321   if (TYPE_REF_OBJ_P (type)
5322       && has_value_dependent_address (expr))
5323     /* If we want the address and it's value-dependent, don't fold.  */;
5324   else if (!type_unknown_p (expr))
5325     expr = fold_non_dependent_expr_sfinae (expr, complain);
5326   if (error_operand_p (expr))
5327     return error_mark_node;
5328   expr_type = TREE_TYPE (expr);
5329   if (TREE_CODE (type) == REFERENCE_TYPE)
5330     expr = mark_lvalue_use (expr);
5331   else
5332     expr = mark_rvalue_use (expr);
5333
5334   /* HACK: Due to double coercion, we can get a
5335      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5336      which is the tree that we built on the first call (see
5337      below when coercing to reference to object or to reference to
5338      function). We just strip everything and get to the arg.
5339      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5340      for examples.  */
5341   if (TREE_CODE (expr) == NOP_EXPR)
5342     {
5343       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5344         {
5345           /* ??? Maybe we could use convert_from_reference here, but we
5346              would need to relax its constraints because the NOP_EXPR
5347              could actually change the type to something more cv-qualified,
5348              and this is not folded by convert_from_reference.  */
5349           tree addr = TREE_OPERAND (expr, 0);
5350           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
5351           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
5352           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
5353           gcc_assert (same_type_ignoring_top_level_qualifiers_p
5354                       (TREE_TYPE (expr_type),
5355                        TREE_TYPE (TREE_TYPE (addr))));
5356
5357           expr = TREE_OPERAND (addr, 0);
5358           expr_type = TREE_TYPE (expr);
5359         }
5360
5361       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5362          parameter is a pointer to object, through decay and
5363          qualification conversion. Let's strip everything.  */
5364       else if (TYPE_PTROBV_P (type))
5365         {
5366           STRIP_NOPS (expr);
5367           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
5368           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
5369           /* Skip the ADDR_EXPR only if it is part of the decay for
5370              an array. Otherwise, it is part of the original argument
5371              in the source code.  */
5372           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
5373             expr = TREE_OPERAND (expr, 0);
5374           expr_type = TREE_TYPE (expr);
5375         }
5376     }
5377
5378   /* [temp.arg.nontype]/5, bullet 1
5379
5380      For a non-type template-parameter of integral or enumeration type,
5381      integral promotions (_conv.prom_) and integral conversions
5382      (_conv.integral_) are applied.  */
5383   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5384     {
5385       tree t = build_integral_nontype_arg_conv (type, expr, complain);
5386       t = maybe_constant_value (t);
5387       if (t != error_mark_node)
5388         expr = t;
5389
5390       if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5391         return error_mark_node;
5392
5393       /* Notice that there are constant expressions like '4 % 0' which
5394          do not fold into integer constants.  */
5395       if (TREE_CODE (expr) != INTEGER_CST)
5396         {
5397           if (complain & tf_error)
5398             {
5399               int errs = errorcount, warns = warningcount;
5400               expr = cxx_constant_value (expr);
5401               if (errorcount > errs || warningcount > warns)
5402                 inform (EXPR_LOC_OR_HERE (expr),
5403                         "in template argument for type %qT ", type);
5404               if (expr == error_mark_node)
5405                 return NULL_TREE;
5406               /* else cxx_constant_value complained but gave us
5407                  a real constant, so go ahead.  */
5408               gcc_assert (TREE_CODE (expr) == INTEGER_CST);
5409             }
5410           else
5411             return NULL_TREE;
5412         }
5413     }
5414   /* [temp.arg.nontype]/5, bullet 2
5415
5416      For a non-type template-parameter of type pointer to object,
5417      qualification conversions (_conv.qual_) and the array-to-pointer
5418      conversion (_conv.array_) are applied.  */
5419   else if (TYPE_PTROBV_P (type))
5420     {
5421       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
5422
5423          A template-argument for a non-type, non-template template-parameter
5424          shall be one of: [...]
5425
5426          -- the name of a non-type template-parameter;
5427          -- the address of an object or function with external linkage, [...]
5428             expressed as "& id-expression" where the & is optional if the name
5429             refers to a function or array, or if the corresponding
5430             template-parameter is a reference.
5431
5432         Here, we do not care about functions, as they are invalid anyway
5433         for a parameter of type pointer-to-object.  */
5434
5435       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5436         /* Non-type template parameters are OK.  */
5437         ;
5438       else if (TREE_CODE (expr) != ADDR_EXPR
5439                && TREE_CODE (expr_type) != ARRAY_TYPE)
5440         {
5441           if (TREE_CODE (expr) == VAR_DECL)
5442             {
5443               error ("%qD is not a valid template argument "
5444                      "because %qD is a variable, not the address of "
5445                      "a variable",
5446                      expr, expr);
5447               return NULL_TREE;
5448             }
5449           /* Other values, like integer constants, might be valid
5450              non-type arguments of some other type.  */
5451           return error_mark_node;
5452         }
5453       else
5454         {
5455           tree decl;
5456
5457           decl = ((TREE_CODE (expr) == ADDR_EXPR)
5458                   ? TREE_OPERAND (expr, 0) : expr);
5459           if (TREE_CODE (decl) != VAR_DECL)
5460             {
5461               error ("%qE is not a valid template argument of type %qT "
5462                      "because %qE is not a variable",
5463                      expr, type, decl);
5464               return NULL_TREE;
5465             }
5466           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
5467             {
5468               error ("%qE is not a valid template argument of type %qT "
5469                      "because %qD does not have external linkage",
5470                      expr, type, decl);
5471               return NULL_TREE;
5472             }
5473         }
5474
5475       expr = decay_conversion (expr);
5476       if (expr == error_mark_node)
5477         return error_mark_node;
5478
5479       expr = perform_qualification_conversions (type, expr);
5480       if (expr == error_mark_node)
5481         return error_mark_node;
5482     }
5483   /* [temp.arg.nontype]/5, bullet 3
5484
5485      For a non-type template-parameter of type reference to object, no
5486      conversions apply. The type referred to by the reference may be more
5487      cv-qualified than the (otherwise identical) type of the
5488      template-argument. The template-parameter is bound directly to the
5489      template-argument, which must be an lvalue.  */
5490   else if (TYPE_REF_OBJ_P (type))
5491     {
5492       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5493                                                       expr_type))
5494         return error_mark_node;
5495
5496       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5497         {
5498           error ("%qE is not a valid template argument for type %qT "
5499                  "because of conflicts in cv-qualification", expr, type);
5500           return NULL_TREE;
5501         }
5502
5503       if (!real_lvalue_p (expr))
5504         {
5505           error ("%qE is not a valid template argument for type %qT "
5506                  "because it is not an lvalue", expr, type);
5507           return NULL_TREE;
5508         }
5509
5510       /* [temp.arg.nontype]/1
5511
5512          A template-argument for a non-type, non-template template-parameter
5513          shall be one of: [...]
5514
5515          -- the address of an object or function with external linkage.  */
5516       if (TREE_CODE (expr) == INDIRECT_REF
5517           && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5518         {
5519           expr = TREE_OPERAND (expr, 0);
5520           if (DECL_P (expr))
5521             {
5522               error ("%q#D is not a valid template argument for type %qT "
5523                      "because a reference variable does not have a constant "
5524                      "address", expr, type);
5525               return NULL_TREE;
5526             }
5527         }
5528
5529       if (!DECL_P (expr))
5530         {
5531           error ("%qE is not a valid template argument for type %qT "
5532                  "because it is not an object with external linkage",
5533                  expr, type);
5534           return NULL_TREE;
5535         }
5536
5537       if (!DECL_EXTERNAL_LINKAGE_P (expr))
5538         {
5539           error ("%qE is not a valid template argument for type %qT "
5540                  "because object %qD has not external linkage",
5541                  expr, type, expr);
5542           return NULL_TREE;
5543         }
5544
5545       expr = build_nop (type, build_address (expr));
5546     }
5547   /* [temp.arg.nontype]/5, bullet 4
5548
5549      For a non-type template-parameter of type pointer to function, only
5550      the function-to-pointer conversion (_conv.func_) is applied. If the
5551      template-argument represents a set of overloaded functions (or a
5552      pointer to such), the matching function is selected from the set
5553      (_over.over_).  */
5554   else if (TYPE_PTRFN_P (type))
5555     {
5556       /* If the argument is a template-id, we might not have enough
5557          context information to decay the pointer.  */
5558       if (!type_unknown_p (expr_type))
5559         {
5560           expr = decay_conversion (expr);
5561           if (expr == error_mark_node)
5562             return error_mark_node;
5563         }
5564
5565       expr = convert_nontype_argument_function (type, expr);
5566       if (!expr || expr == error_mark_node)
5567         return expr;
5568
5569       if (TREE_CODE (expr) != ADDR_EXPR)
5570         {
5571           error ("%qE is not a valid template argument for type %qT", expr, type);
5572           error ("it must be the address of a function with external linkage");
5573           return NULL_TREE;
5574         }
5575     }
5576   /* [temp.arg.nontype]/5, bullet 5
5577
5578      For a non-type template-parameter of type reference to function, no
5579      conversions apply. If the template-argument represents a set of
5580      overloaded functions, the matching function is selected from the set
5581      (_over.over_).  */
5582   else if (TYPE_REFFN_P (type))
5583     {
5584       if (TREE_CODE (expr) == ADDR_EXPR)
5585         {
5586           error ("%qE is not a valid template argument for type %qT "
5587                  "because it is a pointer", expr, type);
5588           inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
5589           return NULL_TREE;
5590         }
5591
5592       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
5593       if (!expr || expr == error_mark_node)
5594         return expr;
5595
5596       expr = build_nop (type, build_address (expr));
5597     }
5598   /* [temp.arg.nontype]/5, bullet 6
5599
5600      For a non-type template-parameter of type pointer to member function,
5601      no conversions apply. If the template-argument represents a set of
5602      overloaded member functions, the matching member function is selected
5603      from the set (_over.over_).  */
5604   else if (TYPE_PTRMEMFUNC_P (type))
5605     {
5606       expr = instantiate_type (type, expr, tf_none);
5607       if (expr == error_mark_node)
5608         return error_mark_node;
5609
5610       /* [temp.arg.nontype] bullet 1 says the pointer to member
5611          expression must be a pointer-to-member constant.  */
5612       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
5613         return error_mark_node;
5614
5615       /* There is no way to disable standard conversions in
5616          resolve_address_of_overloaded_function (called by
5617          instantiate_type). It is possible that the call succeeded by
5618          converting &B::I to &D::I (where B is a base of D), so we need
5619          to reject this conversion here.
5620
5621          Actually, even if there was a way to disable standard conversions,
5622          it would still be better to reject them here so that we can
5623          provide a superior diagnostic.  */
5624       if (!same_type_p (TREE_TYPE (expr), type))
5625         {
5626           error ("%qE is not a valid template argument for type %qT "
5627                  "because it is of type %qT", expr, type,
5628                  TREE_TYPE (expr));
5629           /* If we are just one standard conversion off, explain.  */
5630           if (can_convert (type, TREE_TYPE (expr)))
5631             inform (input_location,
5632                     "standard conversions are not allowed in this context");
5633           return NULL_TREE;
5634         }
5635     }
5636   /* [temp.arg.nontype]/5, bullet 7
5637
5638      For a non-type template-parameter of type pointer to data member,
5639      qualification conversions (_conv.qual_) are applied.  */
5640   else if (TYPE_PTRMEM_P (type))
5641     {
5642       /* [temp.arg.nontype] bullet 1 says the pointer to member
5643          expression must be a pointer-to-member constant.  */
5644       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
5645         return error_mark_node;
5646
5647       expr = perform_qualification_conversions (type, expr);
5648       if (expr == error_mark_node)
5649         return expr;
5650     }
5651   /* A template non-type parameter must be one of the above.  */
5652   else
5653     gcc_unreachable ();
5654
5655   /* Sanity check: did we actually convert the argument to the
5656      right type?  */
5657   gcc_assert (same_type_ignoring_top_level_qualifiers_p
5658               (type, TREE_TYPE (expr)));
5659   return expr;
5660 }
5661
5662 /* Subroutine of coerce_template_template_parms, which returns 1 if
5663    PARM_PARM and ARG_PARM match using the rule for the template
5664    parameters of template template parameters. Both PARM and ARG are
5665    template parameters; the rest of the arguments are the same as for
5666    coerce_template_template_parms.
5667  */
5668 static int
5669 coerce_template_template_parm (tree parm,
5670                               tree arg,
5671                               tsubst_flags_t complain,
5672                               tree in_decl,
5673                               tree outer_args)
5674 {
5675   if (arg == NULL_TREE || arg == error_mark_node
5676       || parm == NULL_TREE || parm == error_mark_node)
5677     return 0;
5678   
5679   if (TREE_CODE (arg) != TREE_CODE (parm))
5680     return 0;
5681   
5682   switch (TREE_CODE (parm))
5683     {
5684     case TEMPLATE_DECL:
5685       /* We encounter instantiations of templates like
5686          template <template <template <class> class> class TT>
5687          class C;  */
5688       {
5689         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5690         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5691         
5692         if (!coerce_template_template_parms
5693             (parmparm, argparm, complain, in_decl, outer_args))
5694           return 0;
5695       }
5696       /* Fall through.  */
5697       
5698     case TYPE_DECL:
5699       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
5700           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
5701         /* Argument is a parameter pack but parameter is not.  */
5702         return 0;
5703       break;
5704       
5705     case PARM_DECL:
5706       /* The tsubst call is used to handle cases such as
5707          
5708            template <int> class C {};
5709            template <class T, template <T> class TT> class D {};
5710            D<int, C> d;
5711
5712          i.e. the parameter list of TT depends on earlier parameters.  */
5713       if (!uses_template_parms (TREE_TYPE (arg))
5714           && !same_type_p
5715                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
5716                  TREE_TYPE (arg)))
5717         return 0;
5718       
5719       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
5720           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
5721         /* Argument is a parameter pack but parameter is not.  */
5722         return 0;
5723       
5724       break;
5725
5726     default:
5727       gcc_unreachable ();
5728     }
5729
5730   return 1;
5731 }
5732
5733
5734 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
5735    template template parameters.  Both PARM_PARMS and ARG_PARMS are
5736    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
5737    or PARM_DECL.
5738
5739    Consider the example:
5740      template <class T> class A;
5741      template<template <class U> class TT> class B;
5742
5743    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
5744    the parameters to A, and OUTER_ARGS contains A.  */
5745
5746 static int
5747 coerce_template_template_parms (tree parm_parms,
5748                                 tree arg_parms,
5749                                 tsubst_flags_t complain,
5750                                 tree in_decl,
5751                                 tree outer_args)
5752 {
5753   int nparms, nargs, i;
5754   tree parm, arg;
5755   int variadic_p = 0;
5756
5757   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
5758   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
5759
5760   nparms = TREE_VEC_LENGTH (parm_parms);
5761   nargs = TREE_VEC_LENGTH (arg_parms);
5762
5763   /* Determine whether we have a parameter pack at the end of the
5764      template template parameter's template parameter list.  */
5765   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
5766     {
5767       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
5768       
5769       if (parm == error_mark_node)
5770         return 0;
5771
5772       switch (TREE_CODE (parm))
5773         {
5774         case TEMPLATE_DECL:
5775         case TYPE_DECL:
5776           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
5777             variadic_p = 1;
5778           break;
5779           
5780         case PARM_DECL:
5781           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
5782             variadic_p = 1;
5783           break;
5784           
5785         default:
5786           gcc_unreachable ();
5787         }
5788     }
5789  
5790   if (nargs != nparms
5791       && !(variadic_p && nargs >= nparms - 1))
5792     return 0;
5793
5794   /* Check all of the template parameters except the parameter pack at
5795      the end (if any).  */
5796   for (i = 0; i < nparms - variadic_p; ++i)
5797     {
5798       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
5799           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
5800         continue;
5801
5802       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
5803       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
5804
5805       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
5806                                           outer_args))
5807         return 0;
5808
5809     }
5810
5811   if (variadic_p)
5812     {
5813       /* Check each of the template parameters in the template
5814          argument against the template parameter pack at the end of
5815          the template template parameter.  */
5816       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
5817         return 0;
5818
5819       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
5820
5821       for (; i < nargs; ++i)
5822         {
5823           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
5824             continue;
5825  
5826           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
5827  
5828           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
5829                                               outer_args))
5830             return 0;
5831         }
5832     }
5833
5834   return 1;
5835 }
5836
5837 /* Verifies that the deduced template arguments (in TARGS) for the
5838    template template parameters (in TPARMS) represent valid bindings,
5839    by comparing the template parameter list of each template argument
5840    to the template parameter list of its corresponding template
5841    template parameter, in accordance with DR150. This
5842    routine can only be called after all template arguments have been
5843    deduced. It will return TRUE if all of the template template
5844    parameter bindings are okay, FALSE otherwise.  */
5845 bool 
5846 template_template_parm_bindings_ok_p (tree tparms, tree targs)
5847 {
5848   int i, ntparms = TREE_VEC_LENGTH (tparms);
5849   bool ret = true;
5850
5851   /* We're dealing with template parms in this process.  */
5852   ++processing_template_decl;
5853
5854   targs = INNERMOST_TEMPLATE_ARGS (targs);
5855
5856   for (i = 0; i < ntparms; ++i)
5857     {
5858       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
5859       tree targ = TREE_VEC_ELT (targs, i);
5860
5861       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
5862         {
5863           tree packed_args = NULL_TREE;
5864           int idx, len = 1;
5865
5866           if (ARGUMENT_PACK_P (targ))
5867             {
5868               /* Look inside the argument pack.  */
5869               packed_args = ARGUMENT_PACK_ARGS (targ);
5870               len = TREE_VEC_LENGTH (packed_args);
5871             }
5872
5873           for (idx = 0; idx < len; ++idx)
5874             {
5875               tree targ_parms = NULL_TREE;
5876
5877               if (packed_args)
5878                 /* Extract the next argument from the argument
5879                    pack.  */
5880                 targ = TREE_VEC_ELT (packed_args, idx);
5881
5882               if (PACK_EXPANSION_P (targ))
5883                 /* Look at the pattern of the pack expansion.  */
5884                 targ = PACK_EXPANSION_PATTERN (targ);
5885
5886               /* Extract the template parameters from the template
5887                  argument.  */
5888               if (TREE_CODE (targ) == TEMPLATE_DECL)
5889                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
5890               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
5891                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
5892
5893               /* Verify that we can coerce the template template
5894                  parameters from the template argument to the template
5895                  parameter.  This requires an exact match.  */
5896               if (targ_parms
5897                   && !coerce_template_template_parms
5898                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
5899                         targ_parms,
5900                         tf_none,
5901                         tparm,
5902                         targs))
5903                 {
5904                   ret = false;
5905                   goto out;
5906                 }
5907             }
5908         }
5909     }
5910
5911  out:
5912
5913   --processing_template_decl;
5914   return ret;
5915 }
5916
5917 /* Convert the indicated template ARG as necessary to match the
5918    indicated template PARM.  Returns the converted ARG, or
5919    error_mark_node if the conversion was unsuccessful.  Error and
5920    warning messages are issued under control of COMPLAIN.  This
5921    conversion is for the Ith parameter in the parameter list.  ARGS is
5922    the full set of template arguments deduced so far.  */
5923
5924 static tree
5925 convert_template_argument (tree parm,
5926                            tree arg,
5927                            tree args,
5928                            tsubst_flags_t complain,
5929                            int i,
5930                            tree in_decl)
5931 {
5932   tree orig_arg;
5933   tree val;
5934   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
5935
5936   if (TREE_CODE (arg) == TREE_LIST
5937       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
5938     {
5939       /* The template argument was the name of some
5940          member function.  That's usually
5941          invalid, but static members are OK.  In any
5942          case, grab the underlying fields/functions
5943          and issue an error later if required.  */
5944       orig_arg = TREE_VALUE (arg);
5945       TREE_TYPE (arg) = unknown_type_node;
5946     }
5947
5948   orig_arg = arg;
5949
5950   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
5951   requires_type = (TREE_CODE (parm) == TYPE_DECL
5952                    || requires_tmpl_type);
5953
5954   /* When determining whether an argument pack expansion is a template,
5955      look at the pattern.  */
5956   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
5957     arg = PACK_EXPANSION_PATTERN (arg);
5958
5959   /* Deal with an injected-class-name used as a template template arg.  */
5960   if (requires_tmpl_type && CLASS_TYPE_P (arg))
5961     {
5962       tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
5963       if (TREE_CODE (t) == TEMPLATE_DECL)
5964         {
5965           if (complain & tf_warning_or_error)
5966             pedwarn (input_location, OPT_pedantic, "injected-class-name %qD"
5967                      " used as template template argument", TYPE_NAME (arg));
5968           else if (flag_pedantic_errors)
5969             t = arg;
5970
5971           arg = t;
5972         }
5973     }
5974
5975   is_tmpl_type = 
5976     ((TREE_CODE (arg) == TEMPLATE_DECL
5977       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
5978      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
5979      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
5980
5981   if (is_tmpl_type
5982       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
5983           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
5984     arg = TYPE_STUB_DECL (arg);
5985
5986   is_type = TYPE_P (arg) || is_tmpl_type;
5987
5988   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
5989       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
5990     {
5991       permerror (input_location, "to refer to a type member of a template parameter, "
5992                  "use %<typename %E%>", orig_arg);
5993
5994       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
5995                                      TREE_OPERAND (arg, 1),
5996                                      typename_type,
5997                                      complain & tf_error);
5998       arg = orig_arg;
5999       is_type = 1;
6000     }
6001   if (is_type != requires_type)
6002     {
6003       if (in_decl)
6004         {
6005           if (complain & tf_error)
6006             {
6007               error ("type/value mismatch at argument %d in template "
6008                      "parameter list for %qD",
6009                      i + 1, in_decl);
6010               if (is_type)
6011                 error ("  expected a constant of type %qT, got %qT",
6012                        TREE_TYPE (parm),
6013                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6014               else if (requires_tmpl_type)
6015                 error ("  expected a class template, got %qE", orig_arg);
6016               else
6017                 error ("  expected a type, got %qE", orig_arg);
6018             }
6019         }
6020       return error_mark_node;
6021     }
6022   if (is_tmpl_type ^ requires_tmpl_type)
6023     {
6024       if (in_decl && (complain & tf_error))
6025         {
6026           error ("type/value mismatch at argument %d in template "
6027                  "parameter list for %qD",
6028                  i + 1, in_decl);
6029           if (is_tmpl_type)
6030             error ("  expected a type, got %qT", DECL_NAME (arg));
6031           else
6032             error ("  expected a class template, got %qT", orig_arg);
6033         }
6034       return error_mark_node;
6035     }
6036
6037   if (is_type)
6038     {
6039       if (requires_tmpl_type)
6040         {
6041           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6042             /* The number of argument required is not known yet.
6043                Just accept it for now.  */
6044             val = TREE_TYPE (arg);
6045           else
6046             {
6047               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6048               tree argparm;
6049
6050               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6051
6052               if (coerce_template_template_parms (parmparm, argparm,
6053                                                   complain, in_decl,
6054                                                   args))
6055                 {
6056                   val = arg;
6057
6058                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
6059                      TEMPLATE_DECL.  */
6060                   if (val != error_mark_node)
6061                     {
6062                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6063                         val = TREE_TYPE (val);
6064                       if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6065                         val = make_pack_expansion (val);
6066                     }
6067                 }
6068               else
6069                 {
6070                   if (in_decl && (complain & tf_error))
6071                     {
6072                       error ("type/value mismatch at argument %d in "
6073                              "template parameter list for %qD",
6074                              i + 1, in_decl);
6075                       error ("  expected a template of type %qD, got %qT",
6076                              parm, orig_arg);
6077                     }
6078
6079                   val = error_mark_node;
6080                 }
6081             }
6082         }
6083       else
6084         val = orig_arg;
6085       /* We only form one instance of each template specialization.
6086          Therefore, if we use a non-canonical variant (i.e., a
6087          typedef), any future messages referring to the type will use
6088          the typedef, which is confusing if those future uses do not
6089          themselves also use the typedef.  */
6090       if (TYPE_P (val))
6091         val = strip_typedefs (val);
6092     }
6093   else
6094     {
6095       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6096
6097       if (invalid_nontype_parm_type_p (t, complain))
6098         return error_mark_node;
6099
6100       if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6101         {
6102           if (same_type_p (t, TREE_TYPE (orig_arg)))
6103             val = orig_arg;
6104           else
6105             {
6106               /* Not sure if this is reachable, but it doesn't hurt
6107                  to be robust.  */
6108               error ("type mismatch in nontype parameter pack");
6109               val = error_mark_node;
6110             }
6111         }
6112       else if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
6113         /* We used to call digest_init here.  However, digest_init
6114            will report errors, which we don't want when complain
6115            is zero.  More importantly, digest_init will try too
6116            hard to convert things: for example, `0' should not be
6117            converted to pointer type at this point according to
6118            the standard.  Accepting this is not merely an
6119            extension, since deciding whether or not these
6120            conversions can occur is part of determining which
6121            function template to call, or whether a given explicit
6122            argument specification is valid.  */
6123         val = convert_nontype_argument (t, orig_arg, complain);
6124       else
6125         val = orig_arg;
6126
6127       if (val == NULL_TREE)
6128         val = error_mark_node;
6129       else if (val == error_mark_node && (complain & tf_error))
6130         error ("could not convert template argument %qE to %qT",  orig_arg, t);
6131
6132       if (TREE_CODE (val) == SCOPE_REF)
6133         {
6134           /* Strip typedefs from the SCOPE_REF.  */
6135           tree type = strip_typedefs (TREE_TYPE (val));
6136           tree scope = strip_typedefs (TREE_OPERAND (val, 0));
6137           val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6138                                       QUALIFIED_NAME_IS_TEMPLATE (val));
6139         }
6140     }
6141
6142   return val;
6143 }
6144
6145 /* Coerces the remaining template arguments in INNER_ARGS (from
6146    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6147    Returns the coerced argument pack. PARM_IDX is the position of this
6148    parameter in the template parameter list. ARGS is the original
6149    template argument list.  */
6150 static tree
6151 coerce_template_parameter_pack (tree parms,
6152                                 int parm_idx,
6153                                 tree args,
6154                                 tree inner_args,
6155                                 int arg_idx,
6156                                 tree new_args,
6157                                 int* lost,
6158                                 tree in_decl,
6159                                 tsubst_flags_t complain)
6160 {
6161   tree parm = TREE_VEC_ELT (parms, parm_idx);
6162   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6163   tree packed_args;
6164   tree argument_pack;
6165   tree packed_types = NULL_TREE;
6166
6167   if (arg_idx > nargs)
6168     arg_idx = nargs;
6169
6170   packed_args = make_tree_vec (nargs - arg_idx);
6171
6172   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
6173       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
6174     {
6175       /* When the template parameter is a non-type template
6176          parameter pack whose type uses parameter packs, we need
6177          to look at each of the template arguments
6178          separately. Build a vector of the types for these
6179          non-type template parameters in PACKED_TYPES.  */
6180       tree expansion 
6181         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
6182       packed_types = tsubst_pack_expansion (expansion, args,
6183                                             complain, in_decl);
6184
6185       if (packed_types == error_mark_node)
6186         return error_mark_node;
6187
6188       /* Check that we have the right number of arguments.  */
6189       if (arg_idx < nargs
6190           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
6191           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
6192         {
6193           int needed_parms 
6194             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
6195           error ("wrong number of template arguments (%d, should be %d)",
6196                  nargs, needed_parms);
6197           return error_mark_node;
6198         }
6199
6200       /* If we aren't able to check the actual arguments now
6201          (because they haven't been expanded yet), we can at least
6202          verify that all of the types used for the non-type
6203          template parameter pack are, in fact, valid for non-type
6204          template parameters.  */
6205       if (arg_idx < nargs 
6206           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6207         {
6208           int j, len = TREE_VEC_LENGTH (packed_types);
6209           for (j = 0; j < len; ++j)
6210             {
6211               tree t = TREE_VEC_ELT (packed_types, j);
6212               if (invalid_nontype_parm_type_p (t, complain))
6213                 return error_mark_node;
6214             }
6215         }
6216     }
6217
6218   /* Convert the remaining arguments, which will be a part of the
6219      parameter pack "parm".  */
6220   for (; arg_idx < nargs; ++arg_idx)
6221     {
6222       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6223       tree actual_parm = TREE_VALUE (parm);
6224
6225       if (packed_types && !PACK_EXPANSION_P (arg))
6226         {
6227           /* When we have a vector of types (corresponding to the
6228              non-type template parameter pack that uses parameter
6229              packs in its type, as mention above), and the
6230              argument is not an expansion (which expands to a
6231              currently unknown number of arguments), clone the
6232              parm and give it the next type in PACKED_TYPES.  */
6233           actual_parm = copy_node (actual_parm);
6234           TREE_TYPE (actual_parm) = 
6235             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
6236         }
6237
6238       if (arg != error_mark_node)
6239         arg = convert_template_argument (actual_parm, 
6240                                          arg, new_args, complain, parm_idx,
6241                                          in_decl);
6242       if (arg == error_mark_node)
6243         (*lost)++;
6244       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
6245     }
6246
6247   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6248       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6249     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6250   else
6251     {
6252       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6253       TREE_TYPE (argument_pack) 
6254         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6255       TREE_CONSTANT (argument_pack) = 1;
6256     }
6257
6258   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6259 #ifdef ENABLE_CHECKING
6260   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6261                                        TREE_VEC_LENGTH (packed_args));
6262 #endif
6263   return argument_pack;
6264 }
6265
6266 /* Convert all template arguments to their appropriate types, and
6267    return a vector containing the innermost resulting template
6268    arguments.  If any error occurs, return error_mark_node. Error and
6269    warning messages are issued under control of COMPLAIN.
6270
6271    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6272    for arguments not specified in ARGS.  Otherwise, if
6273    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6274    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
6275    USE_DEFAULT_ARGS is false, then all arguments must be specified in
6276    ARGS.  */
6277
6278 static tree
6279 coerce_template_parms (tree parms,
6280                        tree args,
6281                        tree in_decl,
6282                        tsubst_flags_t complain,
6283                        bool require_all_args,
6284                        bool use_default_args)
6285 {
6286   int nparms, nargs, parm_idx, arg_idx, lost = 0;
6287   tree inner_args;
6288   tree new_args;
6289   tree new_inner_args;
6290   int saved_unevaluated_operand;
6291   int saved_inhibit_evaluation_warnings;
6292
6293   /* When used as a boolean value, indicates whether this is a
6294      variadic template parameter list. Since it's an int, we can also
6295      subtract it from nparms to get the number of non-variadic
6296      parameters.  */
6297   int variadic_p = 0;
6298
6299   if (args == error_mark_node)
6300     return error_mark_node;
6301
6302   nparms = TREE_VEC_LENGTH (parms);
6303
6304   /* Determine if there are any parameter packs.  */
6305   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6306     {
6307       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
6308       if (template_parameter_pack_p (tparm))
6309         ++variadic_p;
6310     }
6311
6312   inner_args = INNERMOST_TEMPLATE_ARGS (args);
6313   /* If there are 0 or 1 parameter packs, we need to expand any argument
6314      packs so that we can deduce a parameter pack from some non-packed args
6315      followed by an argument pack, as in variadic85.C.  If there are more
6316      than that, we need to leave argument packs intact so the arguments are
6317      assigned to the right parameter packs.  This should only happen when
6318      dealing with a nested class inside a partial specialization of a class
6319      template, as in variadic92.C.  */
6320   if (variadic_p <= 1)
6321     inner_args = expand_template_argument_pack (inner_args);
6322
6323   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6324   if ((nargs > nparms && !variadic_p)
6325       || (nargs < nparms - variadic_p
6326           && require_all_args
6327           && (!use_default_args
6328               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6329                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6330     {
6331       if (complain & tf_error)
6332         {
6333           if (variadic_p)
6334             {
6335               --nparms;
6336               error ("wrong number of template arguments "
6337                      "(%d, should be %d or more)", nargs, nparms);
6338             }
6339           else
6340              error ("wrong number of template arguments "
6341                     "(%d, should be %d)", nargs, nparms);
6342
6343           if (in_decl)
6344             error ("provided for %q+D", in_decl);
6345         }
6346
6347       return error_mark_node;
6348     }
6349
6350   /* We need to evaluate the template arguments, even though this
6351      template-id may be nested within a "sizeof".  */
6352   saved_unevaluated_operand = cp_unevaluated_operand;
6353   cp_unevaluated_operand = 0;
6354   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6355   c_inhibit_evaluation_warnings = 0;
6356   new_inner_args = make_tree_vec (nparms);
6357   new_args = add_outermost_template_args (args, new_inner_args);
6358   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6359     {
6360       tree arg;
6361       tree parm;
6362
6363       /* Get the Ith template parameter.  */
6364       parm = TREE_VEC_ELT (parms, parm_idx);
6365  
6366       if (parm == error_mark_node)
6367       {
6368         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6369         continue;
6370       }
6371
6372       /* Calculate the next argument.  */
6373       if (arg_idx < nargs)
6374         arg = TREE_VEC_ELT (inner_args, arg_idx);
6375       else
6376         arg = NULL_TREE;
6377
6378       if (template_parameter_pack_p (TREE_VALUE (parm))
6379           && !(arg && ARGUMENT_PACK_P (arg)))
6380         {
6381           /* All remaining arguments will be placed in the
6382              template parameter pack PARM.  */
6383           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
6384                                                 inner_args, arg_idx,
6385                                                 new_args, &lost,
6386                                                 in_decl, complain);
6387
6388           /* Store this argument.  */
6389           if (arg == error_mark_node)
6390             lost++;
6391           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
6392
6393           /* We are done with all of the arguments.  */
6394           arg_idx = nargs;
6395           
6396           continue;
6397         }
6398       else if (arg)
6399         {
6400           if (PACK_EXPANSION_P (arg))
6401             {
6402               if (complain & tf_error)
6403                 {
6404                   /* FIXME this restriction was removed by N2555; see
6405                      bug 35722.  */
6406                   /* If ARG is a pack expansion, but PARM is not a
6407                      template parameter pack (if it were, we would have
6408                      handled it above), we're trying to expand into a
6409                      fixed-length argument list.  */
6410                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
6411                     sorry ("cannot expand %<%E%> into a fixed-length "
6412                            "argument list", arg);
6413                   else
6414                     sorry ("cannot expand %<%T%> into a fixed-length "
6415                            "argument list", arg);
6416                 }
6417               ++lost;
6418             }
6419         }
6420       else if (require_all_args)
6421         {
6422           /* There must be a default arg in this case.  */
6423           arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
6424                                      complain, in_decl);
6425           /* The position of the first default template argument,
6426              is also the number of non-defaulted arguments in NEW_INNER_ARGS.
6427              Record that.  */
6428           if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6429             SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args, arg_idx);
6430         }
6431       else
6432         break;
6433
6434       if (arg == error_mark_node)
6435         {
6436           if (complain & tf_error)
6437             error ("template argument %d is invalid", arg_idx + 1);
6438         }
6439       else if (!arg)
6440         /* This only occurs if there was an error in the template
6441            parameter list itself (which we would already have
6442            reported) that we are trying to recover from, e.g., a class
6443            template with a parameter list such as
6444            template<typename..., typename>.  */
6445         ++lost;
6446       else
6447         arg = convert_template_argument (TREE_VALUE (parm),
6448                                          arg, new_args, complain, 
6449                                          parm_idx, in_decl);
6450
6451       if (arg == error_mark_node)
6452         lost++;
6453       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
6454     }
6455   cp_unevaluated_operand = saved_unevaluated_operand;
6456   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
6457
6458   if (lost)
6459     return error_mark_node;
6460
6461 #ifdef ENABLE_CHECKING
6462   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6463     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
6464                                          TREE_VEC_LENGTH (new_inner_args));
6465 #endif
6466
6467   return new_inner_args;
6468 }
6469
6470 /* Returns 1 if template args OT and NT are equivalent.  */
6471
6472 static int
6473 template_args_equal (tree ot, tree nt)
6474 {
6475   if (nt == ot)
6476     return 1;
6477
6478   if (TREE_CODE (nt) == TREE_VEC)
6479     /* For member templates */
6480     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
6481   else if (PACK_EXPANSION_P (ot))
6482     return PACK_EXPANSION_P (nt) 
6483       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
6484                               PACK_EXPANSION_PATTERN (nt));
6485   else if (ARGUMENT_PACK_P (ot))
6486     {
6487       int i, len;
6488       tree opack, npack;
6489
6490       if (!ARGUMENT_PACK_P (nt))
6491         return 0;
6492
6493       opack = ARGUMENT_PACK_ARGS (ot);
6494       npack = ARGUMENT_PACK_ARGS (nt);
6495       len = TREE_VEC_LENGTH (opack);
6496       if (TREE_VEC_LENGTH (npack) != len)
6497         return 0;
6498       for (i = 0; i < len; ++i)
6499         if (!template_args_equal (TREE_VEC_ELT (opack, i),
6500                                   TREE_VEC_ELT (npack, i)))
6501           return 0;
6502       return 1;
6503     }
6504   else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
6505     {
6506       /* We get here probably because we are in the middle of substituting
6507          into the pattern of a pack expansion. In that case the
6508          ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
6509          interested in. So we want to use the initial pack argument for
6510          the comparison.  */
6511       ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
6512       if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
6513         nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
6514       return template_args_equal (ot, nt);
6515     }
6516   else if (TYPE_P (nt))
6517     return TYPE_P (ot) && same_type_p (ot, nt);
6518   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
6519     return 0;
6520   else
6521     return cp_tree_equal (ot, nt);
6522 }
6523
6524 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
6525    of template arguments.  Returns 0 otherwise.  */
6526
6527 int
6528 comp_template_args (tree oldargs, tree newargs)
6529 {
6530   int i;
6531
6532   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
6533     return 0;
6534
6535   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
6536     {
6537       tree nt = TREE_VEC_ELT (newargs, i);
6538       tree ot = TREE_VEC_ELT (oldargs, i);
6539
6540       if (! template_args_equal (ot, nt))
6541         return 0;
6542     }
6543   return 1;
6544 }
6545
6546 static void
6547 add_pending_template (tree d)
6548 {
6549   tree ti = (TYPE_P (d)
6550              ? CLASSTYPE_TEMPLATE_INFO (d)
6551              : DECL_TEMPLATE_INFO (d));
6552   struct pending_template *pt;
6553   int level;
6554
6555   if (TI_PENDING_TEMPLATE_FLAG (ti))
6556     return;
6557
6558   /* We are called both from instantiate_decl, where we've already had a
6559      tinst_level pushed, and instantiate_template, where we haven't.
6560      Compensate.  */
6561   level = !current_tinst_level || current_tinst_level->decl != d;
6562
6563   if (level)
6564     push_tinst_level (d);
6565
6566   pt = ggc_alloc_pending_template ();
6567   pt->next = NULL;
6568   pt->tinst = current_tinst_level;
6569   if (last_pending_template)
6570     last_pending_template->next = pt;
6571   else
6572     pending_templates = pt;
6573
6574   last_pending_template = pt;
6575
6576   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
6577
6578   if (level)
6579     pop_tinst_level ();
6580 }
6581
6582
6583 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
6584    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
6585    documentation for TEMPLATE_ID_EXPR.  */
6586
6587 tree
6588 lookup_template_function (tree fns, tree arglist)
6589 {
6590   tree type;
6591
6592   if (fns == error_mark_node || arglist == error_mark_node)
6593     return error_mark_node;
6594
6595   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
6596   gcc_assert (fns && (is_overloaded_fn (fns)
6597                       || TREE_CODE (fns) == IDENTIFIER_NODE));
6598
6599   if (BASELINK_P (fns))
6600     {
6601       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
6602                                          unknown_type_node,
6603                                          BASELINK_FUNCTIONS (fns),
6604                                          arglist);
6605       return fns;
6606     }
6607
6608   type = TREE_TYPE (fns);
6609   if (TREE_CODE (fns) == OVERLOAD || !type)
6610     type = unknown_type_node;
6611
6612   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
6613 }
6614
6615 /* Within the scope of a template class S<T>, the name S gets bound
6616    (in build_self_reference) to a TYPE_DECL for the class, not a
6617    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
6618    or one of its enclosing classes, and that type is a template,
6619    return the associated TEMPLATE_DECL.  Otherwise, the original
6620    DECL is returned.
6621
6622    Also handle the case when DECL is a TREE_LIST of ambiguous
6623    injected-class-names from different bases.  */
6624
6625 tree
6626 maybe_get_template_decl_from_type_decl (tree decl)
6627 {
6628   if (decl == NULL_TREE)
6629     return decl;
6630
6631   /* DR 176: A lookup that finds an injected-class-name (10.2
6632      [class.member.lookup]) can result in an ambiguity in certain cases
6633      (for example, if it is found in more than one base class). If all of
6634      the injected-class-names that are found refer to specializations of
6635      the same class template, and if the name is followed by a
6636      template-argument-list, the reference refers to the class template
6637      itself and not a specialization thereof, and is not ambiguous.  */
6638   if (TREE_CODE (decl) == TREE_LIST)
6639     {
6640       tree t, tmpl = NULL_TREE;
6641       for (t = decl; t; t = TREE_CHAIN (t))
6642         {
6643           tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
6644           if (!tmpl)
6645             tmpl = elt;
6646           else if (tmpl != elt)
6647             break;
6648         }
6649       if (tmpl && t == NULL_TREE)
6650         return tmpl;
6651       else
6652         return decl;
6653     }
6654
6655   return (decl != NULL_TREE
6656           && DECL_SELF_REFERENCE_P (decl)
6657           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
6658     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
6659 }
6660
6661 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
6662    parameters, find the desired type.
6663
6664    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
6665
6666    IN_DECL, if non-NULL, is the template declaration we are trying to
6667    instantiate.
6668
6669    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
6670    the class we are looking up.
6671
6672    Issue error and warning messages under control of COMPLAIN.
6673
6674    If the template class is really a local class in a template
6675    function, then the FUNCTION_CONTEXT is the function in which it is
6676    being instantiated.
6677
6678    ??? Note that this function is currently called *twice* for each
6679    template-id: the first time from the parser, while creating the
6680    incomplete type (finish_template_type), and the second type during the
6681    real instantiation (instantiate_template_class). This is surely something
6682    that we want to avoid. It also causes some problems with argument
6683    coercion (see convert_nontype_argument for more information on this).  */
6684
6685 static tree
6686 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
6687                          int entering_scope, tsubst_flags_t complain)
6688 {
6689   tree templ = NULL_TREE, parmlist;
6690   tree t;
6691   spec_entry **slot;
6692   spec_entry *entry;
6693   spec_entry elt;
6694   hashval_t hash;
6695
6696   if (TREE_CODE (d1) == IDENTIFIER_NODE)
6697     {
6698       tree value = innermost_non_namespace_value (d1);
6699       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
6700         templ = value;
6701       else
6702         {
6703           if (context)
6704             push_decl_namespace (context);
6705           templ = lookup_name (d1);
6706           templ = maybe_get_template_decl_from_type_decl (templ);
6707           if (context)
6708             pop_decl_namespace ();
6709         }
6710       if (templ)
6711         context = DECL_CONTEXT (templ);
6712     }
6713   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
6714     {
6715       tree type = TREE_TYPE (d1);
6716
6717       /* If we are declaring a constructor, say A<T>::A<T>, we will get
6718          an implicit typename for the second A.  Deal with it.  */
6719       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
6720         type = TREE_TYPE (type);
6721
6722       if (CLASSTYPE_TEMPLATE_INFO (type))
6723         {
6724           templ = CLASSTYPE_TI_TEMPLATE (type);
6725           d1 = DECL_NAME (templ);
6726         }
6727     }
6728   else if (TREE_CODE (d1) == ENUMERAL_TYPE
6729            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
6730     {
6731       templ = TYPE_TI_TEMPLATE (d1);
6732       d1 = DECL_NAME (templ);
6733     }
6734   else if (TREE_CODE (d1) == TEMPLATE_DECL
6735            && DECL_TEMPLATE_RESULT (d1)
6736            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
6737     {
6738       templ = d1;
6739       d1 = DECL_NAME (templ);
6740       context = DECL_CONTEXT (templ);
6741     }
6742
6743   /* Issue an error message if we didn't find a template.  */
6744   if (! templ)
6745     {
6746       if (complain & tf_error)
6747         error ("%qT is not a template", d1);
6748       return error_mark_node;
6749     }
6750
6751   if (TREE_CODE (templ) != TEMPLATE_DECL
6752          /* Make sure it's a user visible template, if it was named by
6753             the user.  */
6754       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
6755           && !PRIMARY_TEMPLATE_P (templ)))
6756     {
6757       if (complain & tf_error)
6758         {
6759           error ("non-template type %qT used as a template", d1);
6760           if (in_decl)
6761             error ("for template declaration %q+D", in_decl);
6762         }
6763       return error_mark_node;
6764     }
6765
6766   complain &= ~tf_user;
6767
6768   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
6769     {
6770       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
6771          template arguments */
6772
6773       tree parm;
6774       tree arglist2;
6775       tree outer;
6776
6777       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
6778
6779       /* Consider an example where a template template parameter declared as
6780
6781            template <class T, class U = std::allocator<T> > class TT
6782
6783          The template parameter level of T and U are one level larger than
6784          of TT.  To proper process the default argument of U, say when an
6785          instantiation `TT<int>' is seen, we need to build the full
6786          arguments containing {int} as the innermost level.  Outer levels,
6787          available when not appearing as default template argument, can be
6788          obtained from the arguments of the enclosing template.
6789
6790          Suppose that TT is later substituted with std::vector.  The above
6791          instantiation is `TT<int, std::allocator<T> >' with TT at
6792          level 1, and T at level 2, while the template arguments at level 1
6793          becomes {std::vector} and the inner level 2 is {int}.  */
6794
6795       outer = DECL_CONTEXT (templ);
6796       if (outer)
6797         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
6798       else if (current_template_parms)
6799         /* This is an argument of the current template, so we haven't set
6800            DECL_CONTEXT yet.  */
6801         outer = current_template_args ();
6802
6803       if (outer)
6804         arglist = add_to_template_args (outer, arglist);
6805
6806       arglist2 = coerce_template_parms (parmlist, arglist, templ,
6807                                         complain,
6808                                         /*require_all_args=*/true,
6809                                         /*use_default_args=*/true);
6810       if (arglist2 == error_mark_node
6811           || (!uses_template_parms (arglist2)
6812               && check_instantiated_args (templ, arglist2, complain)))
6813         return error_mark_node;
6814
6815       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
6816       return parm;
6817     }
6818   else
6819     {
6820       tree template_type = TREE_TYPE (templ);
6821       tree gen_tmpl;
6822       tree type_decl;
6823       tree found = NULL_TREE;
6824       int arg_depth;
6825       int parm_depth;
6826       int is_dependent_type;
6827       int use_partial_inst_tmpl = false;
6828
6829       gen_tmpl = most_general_template (templ);
6830       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
6831       parm_depth = TMPL_PARMS_DEPTH (parmlist);
6832       arg_depth = TMPL_ARGS_DEPTH (arglist);
6833
6834       if (arg_depth == 1 && parm_depth > 1)
6835         {
6836           /* We've been given an incomplete set of template arguments.
6837              For example, given:
6838
6839                template <class T> struct S1 {
6840                  template <class U> struct S2 {};
6841                  template <class U> struct S2<U*> {};
6842                 };
6843
6844              we will be called with an ARGLIST of `U*', but the
6845              TEMPLATE will be `template <class T> template
6846              <class U> struct S1<T>::S2'.  We must fill in the missing
6847              arguments.  */
6848           arglist
6849             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
6850                                            arglist);
6851           arg_depth = TMPL_ARGS_DEPTH (arglist);
6852         }
6853
6854       /* Now we should have enough arguments.  */
6855       gcc_assert (parm_depth == arg_depth);
6856
6857       /* From here on, we're only interested in the most general
6858          template.  */
6859
6860       /* Calculate the BOUND_ARGS.  These will be the args that are
6861          actually tsubst'd into the definition to create the
6862          instantiation.  */
6863       if (parm_depth > 1)
6864         {
6865           /* We have multiple levels of arguments to coerce, at once.  */
6866           int i;
6867           int saved_depth = TMPL_ARGS_DEPTH (arglist);
6868
6869           tree bound_args = make_tree_vec (parm_depth);
6870
6871           for (i = saved_depth,
6872                  t = DECL_TEMPLATE_PARMS (gen_tmpl);
6873                i > 0 && t != NULL_TREE;
6874                --i, t = TREE_CHAIN (t))
6875             {
6876               tree a;
6877               if (i == saved_depth)
6878                 a = coerce_template_parms (TREE_VALUE (t),
6879                                            arglist, gen_tmpl,
6880                                            complain,
6881                                            /*require_all_args=*/true,
6882                                            /*use_default_args=*/true);
6883               else
6884                 /* Outer levels should have already been coerced.  */
6885                 a = TMPL_ARGS_LEVEL (arglist, i);
6886
6887               /* Don't process further if one of the levels fails.  */
6888               if (a == error_mark_node)
6889                 {
6890                   /* Restore the ARGLIST to its full size.  */
6891                   TREE_VEC_LENGTH (arglist) = saved_depth;
6892                   return error_mark_node;
6893                 }
6894
6895               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
6896
6897               /* We temporarily reduce the length of the ARGLIST so
6898                  that coerce_template_parms will see only the arguments
6899                  corresponding to the template parameters it is
6900                  examining.  */
6901               TREE_VEC_LENGTH (arglist)--;
6902             }
6903
6904           /* Restore the ARGLIST to its full size.  */
6905           TREE_VEC_LENGTH (arglist) = saved_depth;
6906
6907           arglist = bound_args;
6908         }
6909       else
6910         arglist
6911           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
6912                                    INNERMOST_TEMPLATE_ARGS (arglist),
6913                                    gen_tmpl,
6914                                    complain,
6915                                    /*require_all_args=*/true,
6916                                    /*use_default_args=*/true);
6917
6918       if (arglist == error_mark_node)
6919         /* We were unable to bind the arguments.  */
6920         return error_mark_node;
6921
6922       /* In the scope of a template class, explicit references to the
6923          template class refer to the type of the template, not any
6924          instantiation of it.  For example, in:
6925
6926            template <class T> class C { void f(C<T>); }
6927
6928          the `C<T>' is just the same as `C'.  Outside of the
6929          class, however, such a reference is an instantiation.  */
6930       if ((entering_scope
6931            || !PRIMARY_TEMPLATE_P (gen_tmpl)
6932            || currently_open_class (template_type))
6933           /* comp_template_args is expensive, check it last.  */
6934           && comp_template_args (TYPE_TI_ARGS (template_type),
6935                                  arglist))
6936         return template_type;
6937
6938       /* If we already have this specialization, return it.  */
6939       elt.tmpl = gen_tmpl;
6940       elt.args = arglist;
6941       hash = hash_specialization (&elt);
6942       entry = (spec_entry *) htab_find_with_hash (type_specializations,
6943                                                   &elt, hash);
6944
6945       if (entry)
6946         return entry->spec;
6947
6948       is_dependent_type = uses_template_parms (arglist);
6949
6950       /* If the deduced arguments are invalid, then the binding
6951          failed.  */
6952       if (!is_dependent_type
6953           && check_instantiated_args (gen_tmpl,
6954                                       INNERMOST_TEMPLATE_ARGS (arglist),
6955                                       complain))
6956         return error_mark_node;
6957
6958       if (!is_dependent_type
6959           && !PRIMARY_TEMPLATE_P (gen_tmpl)
6960           && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
6961           && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
6962         {
6963           found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
6964                                       DECL_NAME (gen_tmpl),
6965                                       /*tag_scope=*/ts_global);
6966           return found;
6967         }
6968
6969       context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
6970                         complain, in_decl);
6971       if (!context)
6972         context = global_namespace;
6973
6974       /* Create the type.  */
6975       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
6976         {
6977           if (!is_dependent_type)
6978             {
6979               set_current_access_from_decl (TYPE_NAME (template_type));
6980               t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
6981                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
6982                                       arglist, complain, in_decl),
6983                               SCOPED_ENUM_P (template_type), NULL);
6984             }
6985           else
6986             {
6987               /* We don't want to call start_enum for this type, since
6988                  the values for the enumeration constants may involve
6989                  template parameters.  And, no one should be interested
6990                  in the enumeration constants for such a type.  */
6991               t = cxx_make_type (ENUMERAL_TYPE);
6992               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
6993             }
6994           SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
6995           ENUM_FIXED_UNDERLYING_TYPE_P (t)
6996             = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
6997         }
6998       else
6999         {
7000           t = make_class_type (TREE_CODE (template_type));
7001           CLASSTYPE_DECLARED_CLASS (t)
7002             = CLASSTYPE_DECLARED_CLASS (template_type);
7003           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7004           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7005
7006           /* A local class.  Make sure the decl gets registered properly.  */
7007           if (context == current_function_decl)
7008             pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7009
7010           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7011             /* This instantiation is another name for the primary
7012                template type. Set the TYPE_CANONICAL field
7013                appropriately. */
7014             TYPE_CANONICAL (t) = template_type;
7015           else if (any_template_arguments_need_structural_equality_p (arglist))
7016             /* Some of the template arguments require structural
7017                equality testing, so this template class requires
7018                structural equality testing. */
7019             SET_TYPE_STRUCTURAL_EQUALITY (t);
7020         }
7021
7022       /* If we called start_enum or pushtag above, this information
7023          will already be set up.  */
7024       if (!TYPE_NAME (t))
7025         {
7026           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7027
7028           type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7029           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7030           DECL_SOURCE_LOCATION (type_decl)
7031             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7032         }
7033       else
7034         type_decl = TYPE_NAME (t);
7035
7036       TREE_PRIVATE (type_decl)
7037         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
7038       TREE_PROTECTED (type_decl)
7039         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
7040       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7041         {
7042           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7043           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7044         }
7045
7046       /* Let's consider the explicit specialization of a member
7047          of a class template specialization that is implicitely instantiated,
7048          e.g.:
7049              template<class T>
7050              struct S
7051              {
7052                template<class U> struct M {}; //#0
7053              };
7054
7055              template<>
7056              template<>
7057              struct S<int>::M<char> //#1
7058              {
7059                int i;
7060              };
7061         [temp.expl.spec]/4 says this is valid.
7062
7063         In this case, when we write:
7064         S<int>::M<char> m;
7065
7066         M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7067         the one of #0.
7068
7069         When we encounter #1, we want to store the partial instantiation
7070         of M (template<class T> S<int>::M<T>) in it's CLASSTYPE_TI_TEMPLATE.
7071
7072         For all cases other than this "explicit specialization of member of a
7073         class template", we just want to store the most general template into
7074         the CLASSTYPE_TI_TEMPLATE of M.
7075
7076         This case of "explicit specialization of member of a class template"
7077         only happens when:
7078         1/ the enclosing class is an instantiation of, and therefore not
7079         the same as, the context of the most general template, and
7080         2/ we aren't looking at the partial instantiation itself, i.e.
7081         the innermost arguments are not the same as the innermost parms of
7082         the most general template.
7083
7084         So it's only when 1/ and 2/ happens that we want to use the partial
7085         instantiation of the member template in lieu of its most general
7086         template.  */
7087
7088       if (PRIMARY_TEMPLATE_P (gen_tmpl)
7089           && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7090           /* the enclosing class must be an instantiation...  */
7091           && CLASS_TYPE_P (context)
7092           && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7093         {
7094           tree partial_inst_args;
7095           TREE_VEC_LENGTH (arglist)--;
7096           ++processing_template_decl;
7097           partial_inst_args =
7098             tsubst (INNERMOST_TEMPLATE_ARGS
7099                         (CLASSTYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7100                     arglist, complain, NULL_TREE);
7101           --processing_template_decl;
7102           TREE_VEC_LENGTH (arglist)++;
7103           use_partial_inst_tmpl =
7104             /*...and we must not be looking at the partial instantiation
7105              itself. */
7106             !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7107                                  partial_inst_args);
7108         }
7109
7110       if (!use_partial_inst_tmpl)
7111         /* This case is easy; there are no member templates involved.  */
7112         found = gen_tmpl;
7113       else
7114         {
7115           /* This is a full instantiation of a member template.  Find
7116              the partial instantiation of which this is an instance.  */
7117
7118           /* Temporarily reduce by one the number of levels in the ARGLIST
7119              so as to avoid comparing the last set of arguments.  */
7120           TREE_VEC_LENGTH (arglist)--;
7121           found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7122           TREE_VEC_LENGTH (arglist)++;
7123           found = CLASSTYPE_TI_TEMPLATE (found);
7124         }
7125
7126       SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7127
7128       elt.spec = t;
7129       slot = (spec_entry **) htab_find_slot_with_hash (type_specializations,
7130                                                        &elt, hash, INSERT);
7131       *slot = ggc_alloc_spec_entry ();
7132       **slot = elt;
7133
7134       /* Note this use of the partial instantiation so we can check it
7135          later in maybe_process_partial_specialization.  */
7136       DECL_TEMPLATE_INSTANTIATIONS (templ)
7137         = tree_cons (arglist, t,
7138                      DECL_TEMPLATE_INSTANTIATIONS (templ));
7139
7140       if (TREE_CODE (t) == ENUMERAL_TYPE && !is_dependent_type)
7141         /* Now that the type has been registered on the instantiations
7142            list, we set up the enumerators.  Because the enumeration
7143            constants may involve the enumeration type itself, we make
7144            sure to register the type first, and then create the
7145            constants.  That way, doing tsubst_expr for the enumeration
7146            constants won't result in recursive calls here; we'll find
7147            the instantiation and exit above.  */
7148         tsubst_enum (template_type, t, arglist);
7149
7150       if (is_dependent_type)
7151         /* If the type makes use of template parameters, the
7152            code that generates debugging information will crash.  */
7153         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
7154
7155       /* Possibly limit visibility based on template args.  */
7156       TREE_PUBLIC (type_decl) = 1;
7157       determine_visibility (type_decl);
7158
7159       return t;
7160     }
7161 }
7162
7163 /* Wrapper for lookup_template_class_1.  */
7164
7165 tree
7166 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
7167                        int entering_scope, tsubst_flags_t complain)
7168 {
7169   tree ret;
7170   timevar_push (TV_TEMPLATE_INST);
7171   ret = lookup_template_class_1 (d1, arglist, in_decl, context,
7172                                  entering_scope, complain);
7173   timevar_pop (TV_TEMPLATE_INST);
7174   return ret;
7175 }
7176 \f
7177 struct pair_fn_data
7178 {
7179   tree_fn_t fn;
7180   void *data;
7181   /* True when we should also visit template parameters that occur in
7182      non-deduced contexts.  */
7183   bool include_nondeduced_p;
7184   struct pointer_set_t *visited;
7185 };
7186
7187 /* Called from for_each_template_parm via walk_tree.  */
7188
7189 static tree
7190 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
7191 {
7192   tree t = *tp;
7193   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
7194   tree_fn_t fn = pfd->fn;
7195   void *data = pfd->data;
7196
7197   if (TYPE_P (t)
7198       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
7199       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
7200                                  pfd->include_nondeduced_p))
7201     return error_mark_node;
7202
7203   switch (TREE_CODE (t))
7204     {
7205     case RECORD_TYPE:
7206       if (TYPE_PTRMEMFUNC_P (t))
7207         break;
7208       /* Fall through.  */
7209
7210     case UNION_TYPE:
7211     case ENUMERAL_TYPE:
7212       if (!TYPE_TEMPLATE_INFO (t))
7213         *walk_subtrees = 0;
7214       else if (for_each_template_parm (TI_ARGS (TYPE_TEMPLATE_INFO (t)),
7215                                        fn, data, pfd->visited, 
7216                                        pfd->include_nondeduced_p))
7217         return error_mark_node;
7218       break;
7219
7220     case INTEGER_TYPE:
7221       if (for_each_template_parm (TYPE_MIN_VALUE (t),
7222                                   fn, data, pfd->visited, 
7223                                   pfd->include_nondeduced_p)
7224           || for_each_template_parm (TYPE_MAX_VALUE (t),
7225                                      fn, data, pfd->visited,
7226                                      pfd->include_nondeduced_p))
7227         return error_mark_node;
7228       break;
7229
7230     case METHOD_TYPE:
7231       /* Since we're not going to walk subtrees, we have to do this
7232          explicitly here.  */
7233       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
7234                                   pfd->visited, pfd->include_nondeduced_p))
7235         return error_mark_node;
7236       /* Fall through.  */
7237
7238     case FUNCTION_TYPE:
7239       /* Check the return type.  */
7240       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7241                                   pfd->include_nondeduced_p))
7242         return error_mark_node;
7243
7244       /* Check the parameter types.  Since default arguments are not
7245          instantiated until they are needed, the TYPE_ARG_TYPES may
7246          contain expressions that involve template parameters.  But,
7247          no-one should be looking at them yet.  And, once they're
7248          instantiated, they don't contain template parameters, so
7249          there's no point in looking at them then, either.  */
7250       {
7251         tree parm;
7252
7253         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
7254           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
7255                                       pfd->visited, pfd->include_nondeduced_p))
7256             return error_mark_node;
7257
7258         /* Since we've already handled the TYPE_ARG_TYPES, we don't
7259            want walk_tree walking into them itself.  */
7260         *walk_subtrees = 0;
7261       }
7262       break;
7263
7264     case TYPEOF_TYPE:
7265     case UNDERLYING_TYPE:
7266       if (pfd->include_nondeduced_p
7267           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
7268                                      pfd->visited, 
7269                                      pfd->include_nondeduced_p))
7270         return error_mark_node;
7271       break;
7272
7273     case FUNCTION_DECL:
7274     case VAR_DECL:
7275       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
7276           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
7277                                      pfd->visited, pfd->include_nondeduced_p))
7278         return error_mark_node;
7279       /* Fall through.  */
7280
7281     case PARM_DECL:
7282     case CONST_DECL:
7283       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
7284           && for_each_template_parm (DECL_INITIAL (t), fn, data,
7285                                      pfd->visited, pfd->include_nondeduced_p))
7286         return error_mark_node;
7287       if (DECL_CONTEXT (t)
7288           && pfd->include_nondeduced_p
7289           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
7290                                      pfd->visited, pfd->include_nondeduced_p))
7291         return error_mark_node;
7292       break;
7293
7294     case BOUND_TEMPLATE_TEMPLATE_PARM:
7295       /* Record template parameters such as `T' inside `TT<T>'.  */
7296       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
7297                                   pfd->include_nondeduced_p))
7298         return error_mark_node;
7299       /* Fall through.  */
7300
7301     case TEMPLATE_TEMPLATE_PARM:
7302     case TEMPLATE_TYPE_PARM:
7303     case TEMPLATE_PARM_INDEX:
7304       if (fn && (*fn)(t, data))
7305         return error_mark_node;
7306       else if (!fn)
7307         return error_mark_node;
7308       break;
7309
7310     case TEMPLATE_DECL:
7311       /* A template template parameter is encountered.  */
7312       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
7313           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7314                                      pfd->include_nondeduced_p))
7315         return error_mark_node;
7316
7317       /* Already substituted template template parameter */
7318       *walk_subtrees = 0;
7319       break;
7320
7321     case TYPENAME_TYPE:
7322       if (!fn
7323           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
7324                                      data, pfd->visited, 
7325                                      pfd->include_nondeduced_p))
7326         return error_mark_node;
7327       break;
7328
7329     case CONSTRUCTOR:
7330       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
7331           && pfd->include_nondeduced_p
7332           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
7333                                      (TREE_TYPE (t)), fn, data,
7334                                      pfd->visited, pfd->include_nondeduced_p))
7335         return error_mark_node;
7336       break;
7337
7338     case INDIRECT_REF:
7339     case COMPONENT_REF:
7340       /* If there's no type, then this thing must be some expression
7341          involving template parameters.  */
7342       if (!fn && !TREE_TYPE (t))
7343         return error_mark_node;
7344       break;
7345
7346     case MODOP_EXPR:
7347     case CAST_EXPR:
7348     case REINTERPRET_CAST_EXPR:
7349     case CONST_CAST_EXPR:
7350     case STATIC_CAST_EXPR:
7351     case DYNAMIC_CAST_EXPR:
7352     case ARROW_EXPR:
7353     case DOTSTAR_EXPR:
7354     case TYPEID_EXPR:
7355     case PSEUDO_DTOR_EXPR:
7356       if (!fn)
7357         return error_mark_node;
7358       break;
7359
7360     default:
7361       break;
7362     }
7363
7364   /* We didn't find any template parameters we liked.  */
7365   return NULL_TREE;
7366 }
7367
7368 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
7369    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
7370    call FN with the parameter and the DATA.
7371    If FN returns nonzero, the iteration is terminated, and
7372    for_each_template_parm returns 1.  Otherwise, the iteration
7373    continues.  If FN never returns a nonzero value, the value
7374    returned by for_each_template_parm is 0.  If FN is NULL, it is
7375    considered to be the function which always returns 1.
7376
7377    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
7378    parameters that occur in non-deduced contexts.  When false, only
7379    visits those template parameters that can be deduced.  */
7380
7381 static int
7382 for_each_template_parm (tree t, tree_fn_t fn, void* data,
7383                         struct pointer_set_t *visited,
7384                         bool include_nondeduced_p)
7385 {
7386   struct pair_fn_data pfd;
7387   int result;
7388
7389   /* Set up.  */
7390   pfd.fn = fn;
7391   pfd.data = data;
7392   pfd.include_nondeduced_p = include_nondeduced_p;
7393
7394   /* Walk the tree.  (Conceptually, we would like to walk without
7395      duplicates, but for_each_template_parm_r recursively calls
7396      for_each_template_parm, so we would need to reorganize a fair
7397      bit to use walk_tree_without_duplicates, so we keep our own
7398      visited list.)  */
7399   if (visited)
7400     pfd.visited = visited;
7401   else
7402     pfd.visited = pointer_set_create ();
7403   result = cp_walk_tree (&t,
7404                          for_each_template_parm_r,
7405                          &pfd,
7406                          pfd.visited) != NULL_TREE;
7407
7408   /* Clean up.  */
7409   if (!visited)
7410     {
7411       pointer_set_destroy (pfd.visited);
7412       pfd.visited = 0;
7413     }
7414
7415   return result;
7416 }
7417
7418 /* Returns true if T depends on any template parameter.  */
7419
7420 int
7421 uses_template_parms (tree t)
7422 {
7423   bool dependent_p;
7424   int saved_processing_template_decl;
7425
7426   saved_processing_template_decl = processing_template_decl;
7427   if (!saved_processing_template_decl)
7428     processing_template_decl = 1;
7429   if (TYPE_P (t))
7430     dependent_p = dependent_type_p (t);
7431   else if (TREE_CODE (t) == TREE_VEC)
7432     dependent_p = any_dependent_template_arguments_p (t);
7433   else if (TREE_CODE (t) == TREE_LIST)
7434     dependent_p = (uses_template_parms (TREE_VALUE (t))
7435                    || uses_template_parms (TREE_CHAIN (t)));
7436   else if (TREE_CODE (t) == TYPE_DECL)
7437     dependent_p = dependent_type_p (TREE_TYPE (t));
7438   else if (DECL_P (t)
7439            || EXPR_P (t)
7440            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
7441            || TREE_CODE (t) == OVERLOAD
7442            || TREE_CODE (t) == BASELINK
7443            || TREE_CODE (t) == IDENTIFIER_NODE
7444            || TREE_CODE (t) == TRAIT_EXPR
7445            || TREE_CODE (t) == CONSTRUCTOR
7446            || CONSTANT_CLASS_P (t))
7447     dependent_p = (type_dependent_expression_p (t)
7448                    || value_dependent_expression_p (t));
7449   else
7450     {
7451       gcc_assert (t == error_mark_node);
7452       dependent_p = false;
7453     }
7454
7455   processing_template_decl = saved_processing_template_decl;
7456
7457   return dependent_p;
7458 }
7459
7460 /* Returns true if T depends on any template parameter with level LEVEL.  */
7461
7462 int
7463 uses_template_parms_level (tree t, int level)
7464 {
7465   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
7466                                  /*include_nondeduced_p=*/true);
7467 }
7468
7469 static int tinst_depth;
7470 extern int max_tinst_depth;
7471 #ifdef GATHER_STATISTICS
7472 int depth_reached;
7473 #endif
7474 static int tinst_level_tick;
7475 static int last_template_error_tick;
7476
7477 /* We're starting to instantiate D; record the template instantiation context
7478    for diagnostics and to restore it later.  */
7479
7480 int
7481 push_tinst_level (tree d)
7482 {
7483   struct tinst_level *new_level;
7484
7485   if (tinst_depth >= max_tinst_depth)
7486     {
7487       /* If the instantiation in question still has unbound template parms,
7488          we don't really care if we can't instantiate it, so just return.
7489          This happens with base instantiation for implicit `typename'.  */
7490       if (uses_template_parms (d))
7491         return 0;
7492
7493       last_template_error_tick = tinst_level_tick;
7494       error ("template instantiation depth exceeds maximum of %d (use "
7495              "-ftemplate-depth= to increase the maximum) instantiating %qD",
7496              max_tinst_depth, d);
7497
7498       print_instantiation_context ();
7499
7500       return 0;
7501     }
7502
7503   new_level = ggc_alloc_tinst_level ();
7504   new_level->decl = d;
7505   new_level->locus = input_location;
7506   new_level->in_system_header_p = in_system_header;
7507   new_level->next = current_tinst_level;
7508   current_tinst_level = new_level;
7509
7510   ++tinst_depth;
7511 #ifdef GATHER_STATISTICS
7512   if (tinst_depth > depth_reached)
7513     depth_reached = tinst_depth;
7514 #endif
7515
7516   ++tinst_level_tick;
7517   return 1;
7518 }
7519
7520 /* We're done instantiating this template; return to the instantiation
7521    context.  */
7522
7523 void
7524 pop_tinst_level (void)
7525 {
7526   /* Restore the filename and line number stashed away when we started
7527      this instantiation.  */
7528   input_location = current_tinst_level->locus;
7529   current_tinst_level = current_tinst_level->next;
7530   --tinst_depth;
7531   ++tinst_level_tick;
7532 }
7533
7534 /* We're instantiating a deferred template; restore the template
7535    instantiation context in which the instantiation was requested, which
7536    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
7537
7538 static tree
7539 reopen_tinst_level (struct tinst_level *level)
7540 {
7541   struct tinst_level *t;
7542
7543   tinst_depth = 0;
7544   for (t = level; t; t = t->next)
7545     ++tinst_depth;
7546
7547   current_tinst_level = level;
7548   pop_tinst_level ();
7549   return level->decl;
7550 }
7551
7552 /* Returns the TINST_LEVEL which gives the original instantiation
7553    context.  */
7554
7555 struct tinst_level *
7556 outermost_tinst_level (void)
7557 {
7558   struct tinst_level *level = current_tinst_level;
7559   if (level)
7560     while (level->next)
7561       level = level->next;
7562   return level;
7563 }
7564
7565 /* Returns TRUE if PARM is a parameter of the template TEMPL.  */
7566
7567 bool
7568 parameter_of_template_p (tree parm, tree templ)
7569 {
7570   tree parms;
7571   int i;
7572
7573   if (!parm || !templ)
7574     return false;
7575
7576   gcc_assert (DECL_TEMPLATE_PARM_P (parm));
7577   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
7578
7579   parms = DECL_TEMPLATE_PARMS (templ);
7580   parms = INNERMOST_TEMPLATE_PARMS (parms);
7581
7582   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
7583     if (parm == TREE_VALUE (TREE_VEC_ELT (parms, i)))
7584       return true;
7585
7586   return false;
7587 }
7588
7589 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
7590    vector of template arguments, as for tsubst.
7591
7592    Returns an appropriate tsubst'd friend declaration.  */
7593
7594 static tree
7595 tsubst_friend_function (tree decl, tree args)
7596 {
7597   tree new_friend;
7598
7599   if (TREE_CODE (decl) == FUNCTION_DECL
7600       && DECL_TEMPLATE_INSTANTIATION (decl)
7601       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
7602     /* This was a friend declared with an explicit template
7603        argument list, e.g.:
7604
7605        friend void f<>(T);
7606
7607        to indicate that f was a template instantiation, not a new
7608        function declaration.  Now, we have to figure out what
7609        instantiation of what template.  */
7610     {
7611       tree template_id, arglist, fns;
7612       tree new_args;
7613       tree tmpl;
7614       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
7615
7616       /* Friend functions are looked up in the containing namespace scope.
7617          We must enter that scope, to avoid finding member functions of the
7618          current class with same name.  */
7619       push_nested_namespace (ns);
7620       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
7621                          tf_warning_or_error, NULL_TREE,
7622                          /*integral_constant_expression_p=*/false);
7623       pop_nested_namespace (ns);
7624       arglist = tsubst (DECL_TI_ARGS (decl), args,
7625                         tf_warning_or_error, NULL_TREE);
7626       template_id = lookup_template_function (fns, arglist);
7627
7628       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
7629       tmpl = determine_specialization (template_id, new_friend,
7630                                        &new_args,
7631                                        /*need_member_template=*/0,
7632                                        TREE_VEC_LENGTH (args),
7633                                        tsk_none);
7634       return instantiate_template (tmpl, new_args, tf_error);
7635     }
7636
7637   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
7638
7639   /* The NEW_FRIEND will look like an instantiation, to the
7640      compiler, but is not an instantiation from the point of view of
7641      the language.  For example, we might have had:
7642
7643      template <class T> struct S {
7644        template <class U> friend void f(T, U);
7645      };
7646
7647      Then, in S<int>, template <class U> void f(int, U) is not an
7648      instantiation of anything.  */
7649   if (new_friend == error_mark_node)
7650     return error_mark_node;
7651
7652   DECL_USE_TEMPLATE (new_friend) = 0;
7653   if (TREE_CODE (decl) == TEMPLATE_DECL)
7654     {
7655       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
7656       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
7657         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
7658     }
7659
7660   /* The mangled name for the NEW_FRIEND is incorrect.  The function
7661      is not a template instantiation and should not be mangled like
7662      one.  Therefore, we forget the mangling here; we'll recompute it
7663      later if we need it.  */
7664   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
7665     {
7666       SET_DECL_RTL (new_friend, NULL);
7667       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
7668     }
7669
7670   if (DECL_NAMESPACE_SCOPE_P (new_friend))
7671     {
7672       tree old_decl;
7673       tree new_friend_template_info;
7674       tree new_friend_result_template_info;
7675       tree ns;
7676       int  new_friend_is_defn;
7677
7678       /* We must save some information from NEW_FRIEND before calling
7679          duplicate decls since that function will free NEW_FRIEND if
7680          possible.  */
7681       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
7682       new_friend_is_defn =
7683             (DECL_INITIAL (DECL_TEMPLATE_RESULT
7684                            (template_for_substitution (new_friend)))
7685              != NULL_TREE);
7686       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
7687         {
7688           /* This declaration is a `primary' template.  */
7689           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
7690
7691           new_friend_result_template_info
7692             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
7693         }
7694       else
7695         new_friend_result_template_info = NULL_TREE;
7696
7697       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
7698       if (new_friend_is_defn)
7699         DECL_INITIAL (new_friend) = error_mark_node;
7700
7701       /* Inside pushdecl_namespace_level, we will push into the
7702          current namespace. However, the friend function should go
7703          into the namespace of the template.  */
7704       ns = decl_namespace_context (new_friend);
7705       push_nested_namespace (ns);
7706       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
7707       pop_nested_namespace (ns);
7708
7709       if (old_decl == error_mark_node)
7710         return error_mark_node;
7711
7712       if (old_decl != new_friend)
7713         {
7714           /* This new friend declaration matched an existing
7715              declaration.  For example, given:
7716
7717                template <class T> void f(T);
7718                template <class U> class C {
7719                  template <class T> friend void f(T) {}
7720                };
7721
7722              the friend declaration actually provides the definition
7723              of `f', once C has been instantiated for some type.  So,
7724              old_decl will be the out-of-class template declaration,
7725              while new_friend is the in-class definition.
7726
7727              But, if `f' was called before this point, the
7728              instantiation of `f' will have DECL_TI_ARGS corresponding
7729              to `T' but not to `U', references to which might appear
7730              in the definition of `f'.  Previously, the most general
7731              template for an instantiation of `f' was the out-of-class
7732              version; now it is the in-class version.  Therefore, we
7733              run through all specialization of `f', adding to their
7734              DECL_TI_ARGS appropriately.  In particular, they need a
7735              new set of outer arguments, corresponding to the
7736              arguments for this class instantiation.
7737
7738              The same situation can arise with something like this:
7739
7740                friend void f(int);
7741                template <class T> class C {
7742                  friend void f(T) {}
7743                };
7744
7745              when `C<int>' is instantiated.  Now, `f(int)' is defined
7746              in the class.  */
7747
7748           if (!new_friend_is_defn)
7749             /* On the other hand, if the in-class declaration does
7750                *not* provide a definition, then we don't want to alter
7751                existing definitions.  We can just leave everything
7752                alone.  */
7753             ;
7754           else
7755             {
7756               tree new_template = TI_TEMPLATE (new_friend_template_info);
7757               tree new_args = TI_ARGS (new_friend_template_info);
7758
7759               /* Overwrite whatever template info was there before, if
7760                  any, with the new template information pertaining to
7761                  the declaration.  */
7762               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
7763
7764               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
7765                 {
7766                   /* We should have called reregister_specialization in
7767                      duplicate_decls.  */
7768                   gcc_assert (retrieve_specialization (new_template,
7769                                                        new_args, 0)
7770                               == old_decl);
7771
7772                   /* Instantiate it if the global has already been used.  */
7773                   if (DECL_ODR_USED (old_decl))
7774                     instantiate_decl (old_decl, /*defer_ok=*/true,
7775                                       /*expl_inst_class_mem_p=*/false);
7776                 }
7777               else
7778                 {
7779                   tree t;
7780
7781                   /* Indicate that the old function template is a partial
7782                      instantiation.  */
7783                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
7784                     = new_friend_result_template_info;
7785
7786                   gcc_assert (new_template
7787                               == most_general_template (new_template));
7788                   gcc_assert (new_template != old_decl);
7789
7790                   /* Reassign any specializations already in the hash table
7791                      to the new more general template, and add the
7792                      additional template args.  */
7793                   for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
7794                        t != NULL_TREE;
7795                        t = TREE_CHAIN (t))
7796                     {
7797                       tree spec = TREE_VALUE (t);
7798                       spec_entry elt;
7799
7800                       elt.tmpl = old_decl;
7801                       elt.args = DECL_TI_ARGS (spec);
7802                       elt.spec = NULL_TREE;
7803
7804                       htab_remove_elt (decl_specializations, &elt);
7805
7806                       DECL_TI_ARGS (spec)
7807                         = add_outermost_template_args (new_args,
7808                                                        DECL_TI_ARGS (spec));
7809
7810                       register_specialization
7811                         (spec, new_template, DECL_TI_ARGS (spec), true, 0);
7812
7813                     }
7814                   DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
7815                 }
7816             }
7817
7818           /* The information from NEW_FRIEND has been merged into OLD_DECL
7819              by duplicate_decls.  */
7820           new_friend = old_decl;
7821         }
7822     }
7823   else
7824     {
7825       tree context = DECL_CONTEXT (new_friend);
7826       bool dependent_p;
7827
7828       /* In the code
7829            template <class T> class C {
7830              template <class U> friend void C1<U>::f (); // case 1
7831              friend void C2<T>::f ();                    // case 2
7832            };
7833          we only need to make sure CONTEXT is a complete type for
7834          case 2.  To distinguish between the two cases, we note that
7835          CONTEXT of case 1 remains dependent type after tsubst while
7836          this isn't true for case 2.  */
7837       ++processing_template_decl;
7838       dependent_p = dependent_type_p (context);
7839       --processing_template_decl;
7840
7841       if (!dependent_p
7842           && !complete_type_or_else (context, NULL_TREE))
7843         return error_mark_node;
7844
7845       if (COMPLETE_TYPE_P (context))
7846         {
7847           /* Check to see that the declaration is really present, and,
7848              possibly obtain an improved declaration.  */
7849           tree fn = check_classfn (context,
7850                                    new_friend, NULL_TREE);
7851
7852           if (fn)
7853             new_friend = fn;
7854         }
7855     }
7856
7857   return new_friend;
7858 }
7859
7860 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
7861    template arguments, as for tsubst.
7862
7863    Returns an appropriate tsubst'd friend type or error_mark_node on
7864    failure.  */
7865
7866 static tree
7867 tsubst_friend_class (tree friend_tmpl, tree args)
7868 {
7869   tree friend_type;
7870   tree tmpl;
7871   tree context;
7872
7873   context = CP_DECL_CONTEXT (friend_tmpl);
7874
7875   if (context != global_namespace)
7876     {
7877       if (TREE_CODE (context) == NAMESPACE_DECL)
7878         push_nested_namespace (context);
7879       else
7880         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
7881     }
7882
7883   /* Look for a class template declaration.  We look for hidden names
7884      because two friend declarations of the same template are the
7885      same.  For example, in:
7886
7887        struct A { 
7888          template <typename> friend class F;
7889        };
7890        template <typename> struct B { 
7891          template <typename> friend class F;
7892        };
7893
7894      both F templates are the same.  */
7895   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
7896                            /*block_p=*/true, 0, 
7897                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
7898
7899   /* But, if we don't find one, it might be because we're in a
7900      situation like this:
7901
7902        template <class T>
7903        struct S {
7904          template <class U>
7905          friend struct S;
7906        };
7907
7908      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
7909      for `S<int>', not the TEMPLATE_DECL.  */
7910   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
7911     {
7912       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
7913       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
7914     }
7915
7916   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
7917     {
7918       /* The friend template has already been declared.  Just
7919          check to see that the declarations match, and install any new
7920          default parameters.  We must tsubst the default parameters,
7921          of course.  We only need the innermost template parameters
7922          because that is all that redeclare_class_template will look
7923          at.  */
7924       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
7925           > TMPL_ARGS_DEPTH (args))
7926         {
7927           tree parms;
7928           location_t saved_input_location;
7929           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
7930                                          args, tf_warning_or_error);
7931
7932           saved_input_location = input_location;
7933           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
7934           redeclare_class_template (TREE_TYPE (tmpl), parms);
7935           input_location = saved_input_location;
7936           
7937         }
7938
7939       friend_type = TREE_TYPE (tmpl);
7940     }
7941   else
7942     {
7943       /* The friend template has not already been declared.  In this
7944          case, the instantiation of the template class will cause the
7945          injection of this template into the global scope.  */
7946       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
7947       if (tmpl == error_mark_node)
7948         return error_mark_node;
7949
7950       /* The new TMPL is not an instantiation of anything, so we
7951          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
7952          the new type because that is supposed to be the corresponding
7953          template decl, i.e., TMPL.  */
7954       DECL_USE_TEMPLATE (tmpl) = 0;
7955       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
7956       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
7957       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
7958         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
7959
7960       /* Inject this template into the global scope.  */
7961       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
7962     }
7963
7964   if (context != global_namespace)
7965     {
7966       if (TREE_CODE (context) == NAMESPACE_DECL)
7967         pop_nested_namespace (context);
7968       else
7969         pop_nested_class ();
7970     }
7971
7972   return friend_type;
7973 }
7974
7975 /* Returns zero if TYPE cannot be completed later due to circularity.
7976    Otherwise returns one.  */
7977
7978 static int
7979 can_complete_type_without_circularity (tree type)
7980 {
7981   if (type == NULL_TREE || type == error_mark_node)
7982     return 0;
7983   else if (COMPLETE_TYPE_P (type))
7984     return 1;
7985   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
7986     return can_complete_type_without_circularity (TREE_TYPE (type));
7987   else if (CLASS_TYPE_P (type)
7988            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
7989     return 0;
7990   else
7991     return 1;
7992 }
7993
7994 /* Apply any attributes which had to be deferred until instantiation
7995    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
7996    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
7997
7998 static void
7999 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
8000                                 tree args, tsubst_flags_t complain, tree in_decl)
8001 {
8002   tree last_dep = NULL_TREE;
8003   tree t;
8004   tree *p;
8005
8006   for (t = attributes; t; t = TREE_CHAIN (t))
8007     if (ATTR_IS_DEPENDENT (t))
8008       {
8009         last_dep = t;
8010         attributes = copy_list (attributes);
8011         break;
8012       }
8013
8014   if (DECL_P (*decl_p))
8015     {
8016       if (TREE_TYPE (*decl_p) == error_mark_node)
8017         return;
8018       p = &DECL_ATTRIBUTES (*decl_p);
8019     }
8020   else
8021     p = &TYPE_ATTRIBUTES (*decl_p);
8022
8023   if (last_dep)
8024     {
8025       tree late_attrs = NULL_TREE;
8026       tree *q = &late_attrs;
8027
8028       for (*p = attributes; *p; )
8029         {
8030           t = *p;
8031           if (ATTR_IS_DEPENDENT (t))
8032             {
8033               *p = TREE_CHAIN (t);
8034               TREE_CHAIN (t) = NULL_TREE;
8035               /* If the first attribute argument is an identifier, don't
8036                  pass it through tsubst.  Attributes like mode, format,
8037                  cleanup and several target specific attributes expect it
8038                  unmodified.  */
8039               if (TREE_VALUE (t)
8040                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
8041                   && TREE_VALUE (TREE_VALUE (t))
8042                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
8043                       == IDENTIFIER_NODE))
8044                 {
8045                   tree chain
8046                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
8047                                    in_decl,
8048                                    /*integral_constant_expression_p=*/false);
8049                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
8050                     TREE_VALUE (t)
8051                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
8052                                    chain);
8053                 }
8054               else
8055                 TREE_VALUE (t)
8056                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
8057                                  /*integral_constant_expression_p=*/false);
8058               *q = t;
8059               q = &TREE_CHAIN (t);
8060             }
8061           else
8062             p = &TREE_CHAIN (t);
8063         }
8064
8065       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
8066     }
8067 }
8068
8069 /* Perform (or defer) access check for typedefs that were referenced
8070    from within the template TMPL code.
8071    This is a subroutine of instantiate_template and instantiate_class_template.
8072    TMPL is the template to consider and TARGS is the list of arguments of
8073    that template.  */
8074
8075 static void
8076 perform_typedefs_access_check (tree tmpl, tree targs)
8077 {
8078   location_t saved_location;
8079   int i;
8080   qualified_typedef_usage_t *iter;
8081
8082   if (!tmpl
8083       || (!CLASS_TYPE_P (tmpl)
8084           && TREE_CODE (tmpl) != FUNCTION_DECL))
8085     return;
8086
8087   saved_location = input_location;
8088   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
8089                     get_types_needing_access_check (tmpl),
8090                     i, iter)
8091     {
8092       tree type_decl = iter->typedef_decl;
8093       tree type_scope = iter->context;
8094
8095       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
8096         continue;
8097
8098       if (uses_template_parms (type_decl))
8099         type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
8100       if (uses_template_parms (type_scope))
8101         type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
8102
8103       /* Make access check error messages point to the location
8104          of the use of the typedef.  */
8105       input_location = iter->locus;
8106       perform_or_defer_access_check (TYPE_BINFO (type_scope),
8107                                      type_decl, type_decl);
8108     }
8109     input_location = saved_location;
8110 }
8111
8112 static tree
8113 instantiate_class_template_1 (tree type)
8114 {
8115   tree templ, args, pattern, t, member;
8116   tree typedecl;
8117   tree pbinfo;
8118   tree base_list;
8119   unsigned int saved_maximum_field_alignment;
8120
8121   if (type == error_mark_node)
8122     return error_mark_node;
8123
8124   if (COMPLETE_OR_OPEN_TYPE_P (type)
8125       || uses_template_parms (type))
8126     return type;
8127
8128   /* Figure out which template is being instantiated.  */
8129   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
8130   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8131
8132   /* Determine what specialization of the original template to
8133      instantiate.  */
8134   t = most_specialized_class (type, templ, tf_warning_or_error);
8135   if (t == error_mark_node)
8136     {
8137       TYPE_BEING_DEFINED (type) = 1;
8138       return error_mark_node;
8139     }
8140   else if (t)
8141     {
8142       /* This TYPE is actually an instantiation of a partial
8143          specialization.  We replace the innermost set of ARGS with
8144          the arguments appropriate for substitution.  For example,
8145          given:
8146
8147            template <class T> struct S {};
8148            template <class T> struct S<T*> {};
8149
8150          and supposing that we are instantiating S<int*>, ARGS will
8151          presently be {int*} -- but we need {int}.  */
8152       pattern = TREE_TYPE (t);
8153       args = TREE_PURPOSE (t);
8154     }
8155   else
8156     {
8157       pattern = TREE_TYPE (templ);
8158       args = CLASSTYPE_TI_ARGS (type);
8159     }
8160
8161   /* If the template we're instantiating is incomplete, then clearly
8162      there's nothing we can do.  */
8163   if (!COMPLETE_TYPE_P (pattern))
8164     return type;
8165
8166   /* If we've recursively instantiated too many templates, stop.  */
8167   if (! push_tinst_level (type))
8168     return type;
8169
8170   /* Now we're really doing the instantiation.  Mark the type as in
8171      the process of being defined.  */
8172   TYPE_BEING_DEFINED (type) = 1;
8173
8174   /* We may be in the middle of deferred access check.  Disable
8175      it now.  */
8176   push_deferring_access_checks (dk_no_deferred);
8177
8178   push_to_top_level ();
8179   /* Use #pragma pack from the template context.  */
8180   saved_maximum_field_alignment = maximum_field_alignment;
8181   maximum_field_alignment = TYPE_PRECISION (pattern);
8182
8183   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8184
8185   /* Set the input location to the most specialized template definition.
8186      This is needed if tsubsting causes an error.  */
8187   typedecl = TYPE_MAIN_DECL (pattern);
8188   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
8189     DECL_SOURCE_LOCATION (typedecl);
8190
8191   TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern);
8192   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
8193   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
8194   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
8195   TYPE_HAS_COPY_ASSIGN (type) = TYPE_HAS_COPY_ASSIGN (pattern);
8196   TYPE_HAS_CONST_COPY_ASSIGN (type) = TYPE_HAS_CONST_COPY_ASSIGN (pattern);
8197   TYPE_HAS_COPY_CTOR (type) = TYPE_HAS_COPY_CTOR (pattern);
8198   TYPE_HAS_CONST_COPY_CTOR (type) = TYPE_HAS_CONST_COPY_CTOR (pattern);
8199   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
8200   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
8201   TYPE_PACKED (type) = TYPE_PACKED (pattern);
8202   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
8203   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
8204   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
8205   if (ANON_AGGR_TYPE_P (pattern))
8206     SET_ANON_AGGR_TYPE_P (type);
8207   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
8208     {
8209       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
8210       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
8211     }
8212   CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
8213
8214   pbinfo = TYPE_BINFO (pattern);
8215
8216   /* We should never instantiate a nested class before its enclosing
8217      class; we need to look up the nested class by name before we can
8218      instantiate it, and that lookup should instantiate the enclosing
8219      class.  */
8220   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
8221               || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
8222
8223   base_list = NULL_TREE;
8224   if (BINFO_N_BASE_BINFOS (pbinfo))
8225     {
8226       tree pbase_binfo;
8227       tree pushed_scope;
8228       int i;
8229
8230       /* We must enter the scope containing the type, as that is where
8231          the accessibility of types named in dependent bases are
8232          looked up from.  */
8233       pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
8234
8235       /* Substitute into each of the bases to determine the actual
8236          basetypes.  */
8237       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
8238         {
8239           tree base;
8240           tree access = BINFO_BASE_ACCESS (pbinfo, i);
8241           tree expanded_bases = NULL_TREE;
8242           int idx, len = 1;
8243
8244           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
8245             {
8246               expanded_bases = 
8247                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
8248                                        args, tf_error, NULL_TREE);
8249               if (expanded_bases == error_mark_node)
8250                 continue;
8251
8252               len = TREE_VEC_LENGTH (expanded_bases);
8253             }
8254
8255           for (idx = 0; idx < len; idx++)
8256             {
8257               if (expanded_bases)
8258                 /* Extract the already-expanded base class.  */
8259                 base = TREE_VEC_ELT (expanded_bases, idx);
8260               else
8261                 /* Substitute to figure out the base class.  */
8262                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
8263                                NULL_TREE);
8264
8265               if (base == error_mark_node)
8266                 continue;
8267
8268               base_list = tree_cons (access, base, base_list);
8269               if (BINFO_VIRTUAL_P (pbase_binfo))
8270                 TREE_TYPE (base_list) = integer_type_node;
8271             }
8272         }
8273
8274       /* The list is now in reverse order; correct that.  */
8275       base_list = nreverse (base_list);
8276
8277       if (pushed_scope)
8278         pop_scope (pushed_scope);
8279     }
8280   /* Now call xref_basetypes to set up all the base-class
8281      information.  */
8282   xref_basetypes (type, base_list);
8283
8284   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
8285                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
8286                                   args, tf_error, NULL_TREE);
8287   fixup_attribute_variants (type);
8288
8289   /* Now that our base classes are set up, enter the scope of the
8290      class, so that name lookups into base classes, etc. will work
8291      correctly.  This is precisely analogous to what we do in
8292      begin_class_definition when defining an ordinary non-template
8293      class, except we also need to push the enclosing classes.  */
8294   push_nested_class (type);
8295
8296   /* Now members are processed in the order of declaration.  */
8297   for (member = CLASSTYPE_DECL_LIST (pattern);
8298        member; member = TREE_CHAIN (member))
8299     {
8300       tree t = TREE_VALUE (member);
8301
8302       if (TREE_PURPOSE (member))
8303         {
8304           if (TYPE_P (t))
8305             {
8306               /* Build new CLASSTYPE_NESTED_UTDS.  */
8307
8308               tree newtag;
8309               bool class_template_p;
8310
8311               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
8312                                   && TYPE_LANG_SPECIFIC (t)
8313                                   && CLASSTYPE_IS_TEMPLATE (t));
8314               /* If the member is a class template, then -- even after
8315                  substitution -- there may be dependent types in the
8316                  template argument list for the class.  We increment
8317                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
8318                  that function will assume that no types are dependent
8319                  when outside of a template.  */
8320               if (class_template_p)
8321                 ++processing_template_decl;
8322               newtag = tsubst (t, args, tf_error, NULL_TREE);
8323               if (class_template_p)
8324                 --processing_template_decl;
8325               if (newtag == error_mark_node)
8326                 continue;
8327
8328               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
8329                 {
8330                   tree name = TYPE_IDENTIFIER (t);
8331
8332                   if (class_template_p)
8333                     /* Unfortunately, lookup_template_class sets
8334                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
8335                        instantiation (i.e., for the type of a member
8336                        template class nested within a template class.)
8337                        This behavior is required for
8338                        maybe_process_partial_specialization to work
8339                        correctly, but is not accurate in this case;
8340                        the TAG is not an instantiation of anything.
8341                        (The corresponding TEMPLATE_DECL is an
8342                        instantiation, but the TYPE is not.) */
8343                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
8344
8345                   /* Now, we call pushtag to put this NEWTAG into the scope of
8346                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
8347                      pushtag calling push_template_decl.  We don't have to do
8348                      this for enums because it will already have been done in
8349                      tsubst_enum.  */
8350                   if (name)
8351                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
8352                   pushtag (name, newtag, /*tag_scope=*/ts_current);
8353                 }
8354             }
8355           else if (TREE_CODE (t) == FUNCTION_DECL
8356                    || DECL_FUNCTION_TEMPLATE_P (t))
8357             {
8358               /* Build new TYPE_METHODS.  */
8359               tree r;
8360
8361               if (TREE_CODE (t) == TEMPLATE_DECL)
8362                 ++processing_template_decl;
8363               r = tsubst (t, args, tf_error, NULL_TREE);
8364               if (TREE_CODE (t) == TEMPLATE_DECL)
8365                 --processing_template_decl;
8366               set_current_access_from_decl (r);
8367               finish_member_declaration (r);
8368             }
8369           else
8370             {
8371               /* Build new TYPE_FIELDS.  */
8372               if (TREE_CODE (t) == STATIC_ASSERT)
8373                 {
8374                   tree condition = 
8375                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
8376                                  tf_warning_or_error, NULL_TREE,
8377                                  /*integral_constant_expression_p=*/true);
8378                   finish_static_assert (condition,
8379                                         STATIC_ASSERT_MESSAGE (t), 
8380                                         STATIC_ASSERT_SOURCE_LOCATION (t),
8381                                         /*member_p=*/true);
8382                 }
8383               else if (TREE_CODE (t) != CONST_DECL)
8384                 {
8385                   tree r;
8386
8387                   /* The file and line for this declaration, to
8388                      assist in error message reporting.  Since we
8389                      called push_tinst_level above, we don't need to
8390                      restore these.  */
8391                   input_location = DECL_SOURCE_LOCATION (t);
8392
8393                   if (TREE_CODE (t) == TEMPLATE_DECL)
8394                     ++processing_template_decl;
8395                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
8396                   if (TREE_CODE (t) == TEMPLATE_DECL)
8397                     --processing_template_decl;
8398                   if (TREE_CODE (r) == VAR_DECL)
8399                     {
8400                       /* In [temp.inst]:
8401
8402                            [t]he initialization (and any associated
8403                            side-effects) of a static data member does
8404                            not occur unless the static data member is
8405                            itself used in a way that requires the
8406                            definition of the static data member to
8407                            exist.
8408
8409                          Therefore, we do not substitute into the
8410                          initialized for the static data member here.  */
8411                       finish_static_data_member_decl
8412                         (r,
8413                          /*init=*/NULL_TREE,
8414                          /*init_const_expr_p=*/false,
8415                          /*asmspec_tree=*/NULL_TREE,
8416                          /*flags=*/0);
8417                       if (DECL_INITIALIZED_IN_CLASS_P (r))
8418                         check_static_variable_definition (r, TREE_TYPE (r));
8419                     }
8420                   else if (TREE_CODE (r) == FIELD_DECL)
8421                     {
8422                       /* Determine whether R has a valid type and can be
8423                          completed later.  If R is invalid, then it is
8424                          replaced by error_mark_node so that it will not be
8425                          added to TYPE_FIELDS.  */
8426                       tree rtype = TREE_TYPE (r);
8427                       if (can_complete_type_without_circularity (rtype))
8428                         complete_type (rtype);
8429
8430                       if (!COMPLETE_TYPE_P (rtype))
8431                         {
8432                           cxx_incomplete_type_error (r, rtype);
8433                           r = error_mark_node;
8434                         }
8435                     }
8436
8437                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
8438                      such a thing will already have been added to the field
8439                      list by tsubst_enum in finish_member_declaration in the
8440                      CLASSTYPE_NESTED_UTDS case above.  */
8441                   if (!(TREE_CODE (r) == TYPE_DECL
8442                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
8443                         && DECL_ARTIFICIAL (r)))
8444                     {
8445                       set_current_access_from_decl (r);
8446                       finish_member_declaration (r);
8447                     }
8448                 }
8449             }
8450         }
8451       else
8452         {
8453           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
8454             {
8455               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
8456
8457               tree friend_type = t;
8458               bool adjust_processing_template_decl = false;
8459
8460               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8461                 {
8462                   /* template <class T> friend class C;  */
8463                   friend_type = tsubst_friend_class (friend_type, args);
8464                   adjust_processing_template_decl = true;
8465                 }
8466               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
8467                 {
8468                   /* template <class T> friend class C::D;  */
8469                   friend_type = tsubst (friend_type, args,
8470                                         tf_warning_or_error, NULL_TREE);
8471                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8472                     friend_type = TREE_TYPE (friend_type);
8473                   adjust_processing_template_decl = true;
8474                 }
8475               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
8476                 {
8477                   /* This could be either
8478
8479                        friend class T::C;
8480
8481                      when dependent_type_p is false or
8482
8483                        template <class U> friend class T::C;
8484
8485                      otherwise.  */
8486                   friend_type = tsubst (friend_type, args,
8487                                         tf_warning_or_error, NULL_TREE);
8488                   /* Bump processing_template_decl for correct
8489                      dependent_type_p calculation.  */
8490                   ++processing_template_decl;
8491                   if (dependent_type_p (friend_type))
8492                     adjust_processing_template_decl = true;
8493                   --processing_template_decl;
8494                 }
8495               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
8496                        && hidden_name_p (TYPE_NAME (friend_type)))
8497                 {
8498                   /* friend class C;
8499
8500                      where C hasn't been declared yet.  Let's lookup name
8501                      from namespace scope directly, bypassing any name that
8502                      come from dependent base class.  */
8503                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
8504
8505                   /* The call to xref_tag_from_type does injection for friend
8506                      classes.  */
8507                   push_nested_namespace (ns);
8508                   friend_type =
8509                     xref_tag_from_type (friend_type, NULL_TREE,
8510                                         /*tag_scope=*/ts_current);
8511                   pop_nested_namespace (ns);
8512                 }
8513               else if (uses_template_parms (friend_type))
8514                 /* friend class C<T>;  */
8515                 friend_type = tsubst (friend_type, args,
8516                                       tf_warning_or_error, NULL_TREE);
8517               /* Otherwise it's
8518
8519                    friend class C;
8520
8521                  where C is already declared or
8522
8523                    friend class C<int>;
8524
8525                  We don't have to do anything in these cases.  */
8526
8527               if (adjust_processing_template_decl)
8528                 /* Trick make_friend_class into realizing that the friend
8529                    we're adding is a template, not an ordinary class.  It's
8530                    important that we use make_friend_class since it will
8531                    perform some error-checking and output cross-reference
8532                    information.  */
8533                 ++processing_template_decl;
8534
8535               if (friend_type != error_mark_node)
8536                 make_friend_class (type, friend_type, /*complain=*/false);
8537
8538               if (adjust_processing_template_decl)
8539                 --processing_template_decl;
8540             }
8541           else
8542             {
8543               /* Build new DECL_FRIENDLIST.  */
8544               tree r;
8545
8546               /* The file and line for this declaration, to
8547                  assist in error message reporting.  Since we
8548                  called push_tinst_level above, we don't need to
8549                  restore these.  */
8550               input_location = DECL_SOURCE_LOCATION (t);
8551
8552               if (TREE_CODE (t) == TEMPLATE_DECL)
8553                 {
8554                   ++processing_template_decl;
8555                   push_deferring_access_checks (dk_no_check);
8556                 }
8557
8558               r = tsubst_friend_function (t, args);
8559               add_friend (type, r, /*complain=*/false);
8560               if (TREE_CODE (t) == TEMPLATE_DECL)
8561                 {
8562                   pop_deferring_access_checks ();
8563                   --processing_template_decl;
8564                 }
8565             }
8566         }
8567     }
8568
8569   /* Set the file and line number information to whatever is given for
8570      the class itself.  This puts error messages involving generated
8571      implicit functions at a predictable point, and the same point
8572      that would be used for non-template classes.  */
8573   input_location = DECL_SOURCE_LOCATION (typedecl);
8574
8575   unreverse_member_declarations (type);
8576   finish_struct_1 (type);
8577   TYPE_BEING_DEFINED (type) = 0;
8578
8579   /* We don't instantiate default arguments for member functions.  14.7.1:
8580
8581      The implicit instantiation of a class template specialization causes
8582      the implicit instantiation of the declarations, but not of the
8583      definitions or default arguments, of the class member functions,
8584      member classes, static data members and member templates....  */
8585
8586   /* Some typedefs referenced from within the template code need to be access
8587      checked at template instantiation time, i.e now. These types were
8588      added to the template at parsing time. Let's get those and perform
8589      the access checks then.  */
8590   perform_typedefs_access_check (pattern, args);
8591   perform_deferred_access_checks ();
8592   pop_nested_class ();
8593   maximum_field_alignment = saved_maximum_field_alignment;
8594   pop_from_top_level ();
8595   pop_deferring_access_checks ();
8596   pop_tinst_level ();
8597
8598   /* The vtable for a template class can be emitted in any translation
8599      unit in which the class is instantiated.  When there is no key
8600      method, however, finish_struct_1 will already have added TYPE to
8601      the keyed_classes list.  */
8602   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
8603     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
8604
8605   return type;
8606 }
8607
8608 /* Wrapper for instantiate_class_template_1.  */
8609
8610 tree
8611 instantiate_class_template (tree type)
8612 {
8613   tree ret;
8614   timevar_push (TV_TEMPLATE_INST);
8615   ret = instantiate_class_template_1 (type);
8616   timevar_pop (TV_TEMPLATE_INST);
8617   return ret;
8618 }
8619
8620 static tree
8621 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8622 {
8623   tree r;
8624
8625   if (!t)
8626     r = t;
8627   else if (TYPE_P (t))
8628     r = tsubst (t, args, complain, in_decl);
8629   else
8630     {
8631       if (!(complain & tf_warning))
8632         ++c_inhibit_evaluation_warnings;
8633       r = tsubst_expr (t, args, complain, in_decl,
8634                        /*integral_constant_expression_p=*/true);
8635       if (!(complain & tf_warning))
8636         --c_inhibit_evaluation_warnings;
8637     }
8638   return r;
8639 }
8640
8641 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
8642    NONTYPE_ARGUMENT_PACK.  */
8643
8644 static tree
8645 make_fnparm_pack (tree spec_parm)
8646 {
8647   /* Collect all of the extra "packed" parameters into an
8648      argument pack.  */
8649   tree parmvec;
8650   tree parmtypevec;
8651   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
8652   tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
8653   int i, len = list_length (spec_parm);
8654
8655   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
8656   parmvec = make_tree_vec (len);
8657   parmtypevec = make_tree_vec (len);
8658   for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
8659     {
8660       TREE_VEC_ELT (parmvec, i) = spec_parm;
8661       TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
8662     }
8663
8664   /* Build the argument packs.  */
8665   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
8666   SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
8667   TREE_TYPE (argpack) = argtypepack;
8668
8669   return argpack;
8670 }        
8671
8672 /* Substitute ARGS into T, which is an pack expansion
8673    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
8674    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
8675    (if only a partial substitution could be performed) or
8676    ERROR_MARK_NODE if there was an error.  */
8677 tree
8678 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
8679                        tree in_decl)
8680 {
8681   tree pattern;
8682   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
8683   int i, len = -1;
8684   tree result;
8685   int incomplete = 0;
8686   htab_t saved_local_specializations = NULL;
8687
8688   gcc_assert (PACK_EXPANSION_P (t));
8689   pattern = PACK_EXPANSION_PATTERN (t);
8690
8691   /* Determine the argument packs that will instantiate the parameter
8692      packs used in the expansion expression. While we're at it,
8693      compute the number of arguments to be expanded and make sure it
8694      is consistent.  */
8695   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
8696        pack = TREE_CHAIN (pack))
8697     {
8698       tree parm_pack = TREE_VALUE (pack);
8699       tree arg_pack = NULL_TREE;
8700       tree orig_arg = NULL_TREE;
8701
8702       if (TREE_CODE (parm_pack) == PARM_DECL)
8703         {
8704           if (!cp_unevaluated_operand)
8705             arg_pack = retrieve_local_specialization (parm_pack);
8706           else
8707             {
8708               /* We can't rely on local_specializations for a parameter
8709                  name used later in a function declaration (such as in a
8710                  late-specified return type).  Even if it exists, it might
8711                  have the wrong value for a recursive call.  Just make a
8712                  dummy decl, since it's only used for its type.  */
8713               arg_pack = tsubst_decl (parm_pack, args, complain);
8714               arg_pack = make_fnparm_pack (arg_pack);
8715             }
8716         }
8717       else
8718         {
8719           int level, idx, levels;
8720           template_parm_level_and_index (parm_pack, &level, &idx);
8721
8722           levels = TMPL_ARGS_DEPTH (args);
8723           if (level <= levels)
8724             arg_pack = TMPL_ARG (args, level, idx);
8725         }
8726
8727       orig_arg = arg_pack;
8728       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
8729         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
8730       
8731       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
8732         /* This can only happen if we forget to expand an argument
8733            pack somewhere else. Just return an error, silently.  */
8734         {
8735           result = make_tree_vec (1);
8736           TREE_VEC_ELT (result, 0) = error_mark_node;
8737           return result;
8738         }
8739
8740       /* For clarity in the comments below let's use the
8741          representation 'argument_pack<elements>' to denote an
8742          argument pack and its elements.
8743
8744          In the 'if' block below, we want to detect cases where
8745          ARG_PACK is argument_pack<PARM_PACK...>.  I.e, we want to
8746          check if ARG_PACK is an argument pack which sole element is
8747          the expansion of PARM_PACK.  That argument pack is typically
8748          created by template_parm_to_arg when passed a parameter
8749          pack.  */
8750       if (arg_pack
8751           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
8752           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
8753         {
8754           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
8755           tree pattern = PACK_EXPANSION_PATTERN (expansion);
8756           /* So we have an argument_pack<P...>.  We want to test if P
8757              is actually PARM_PACK.  We will not use cp_tree_equal to
8758              test P and PARM_PACK because during type fixup (by
8759              fixup_template_parm) P can be a pre-fixup version of a
8760              type and PARM_PACK be its post-fixup version.
8761              cp_tree_equal would consider them as different even
8762              though we would want to consider them compatible for our
8763              precise purpose here.
8764
8765              Thus we are going to consider that P and PARM_PACK are
8766              compatible if they have the same DECL.  */
8767           if ((/* If ARG_PACK is a type parameter pack named by the
8768                   same DECL as parm_pack ...  */
8769                (TYPE_P (pattern)
8770                 && TYPE_P (parm_pack)
8771                 && TYPE_NAME (pattern) == TYPE_NAME (parm_pack))
8772                /* ... or if ARG_PACK is a non-type parameter
8773                   named by the same DECL as parm_pack ...  */
8774                || (TREE_CODE (pattern) == TEMPLATE_PARM_INDEX
8775                    && TREE_CODE (parm_pack) == PARM_DECL
8776                    && TEMPLATE_PARM_DECL (pattern)
8777                    == TEMPLATE_PARM_DECL (DECL_INITIAL (parm_pack))))
8778               && template_parameter_pack_p (pattern))
8779             /* ... then the argument pack that the parameter maps to
8780                is just an expansion of the parameter itself, such as
8781                one would find in the implicit typedef of a class
8782                inside the class itself.  Consider this parameter
8783                "unsubstituted", so that we will maintain the outer
8784                pack expansion.  */
8785             arg_pack = NULL_TREE;
8786         }
8787           
8788       if (arg_pack)
8789         {
8790           int my_len = 
8791             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
8792
8793           /* It's all-or-nothing with incomplete argument packs.  */
8794           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
8795             return error_mark_node;
8796           
8797           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
8798             incomplete = 1;
8799
8800           if (len < 0)
8801             len = my_len;
8802           else if (len != my_len)
8803             {
8804               if (incomplete)
8805                 /* We got explicit args for some packs but not others;
8806                    do nothing now and try again after deduction.  */
8807                 return t;
8808               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
8809                 error ("mismatched argument pack lengths while expanding "
8810                        "%<%T%>",
8811                        pattern);
8812               else
8813                 error ("mismatched argument pack lengths while expanding "
8814                        "%<%E%>",
8815                        pattern);
8816               return error_mark_node;
8817             }
8818
8819           /* Keep track of the parameter packs and their corresponding
8820              argument packs.  */
8821           packs = tree_cons (parm_pack, arg_pack, packs);
8822           TREE_TYPE (packs) = orig_arg;
8823         }
8824       else
8825         /* We can't substitute for this parameter pack.  */
8826         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
8827                                          TREE_VALUE (pack),
8828                                          unsubstituted_packs);
8829     }
8830
8831   /* We cannot expand this expansion expression, because we don't have
8832      all of the argument packs we need. Substitute into the pattern
8833      and return a PACK_EXPANSION_*. The caller will need to deal with
8834      that.  */
8835   if (unsubstituted_packs)
8836     {
8837       tree new_pat;
8838       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
8839         new_pat = tsubst_expr (pattern, args, complain, in_decl,
8840                                /*integral_constant_expression_p=*/false);
8841       else
8842         new_pat = tsubst (pattern, args, complain, in_decl);
8843       return make_pack_expansion (new_pat);
8844     }
8845
8846   /* We could not find any argument packs that work.  */
8847   if (len < 0)
8848     return error_mark_node;
8849
8850   if (cp_unevaluated_operand)
8851     {
8852       /* We're in a late-specified return type, so create our own local
8853          specializations table; the current table is either NULL or (in the
8854          case of recursive unification) might have bindings that we don't
8855          want to use or alter.  */
8856       saved_local_specializations = local_specializations;
8857       local_specializations = htab_create (37,
8858                                            hash_local_specialization,
8859                                            eq_local_specializations,
8860                                            NULL);
8861     }
8862
8863   /* For each argument in each argument pack, substitute into the
8864      pattern.  */
8865   result = make_tree_vec (len + incomplete);
8866   for (i = 0; i < len + incomplete; ++i)
8867     {
8868       /* For parameter pack, change the substitution of the parameter
8869          pack to the ith argument in its argument pack, then expand
8870          the pattern.  */
8871       for (pack = packs; pack; pack = TREE_CHAIN (pack))
8872         {
8873           tree parm = TREE_PURPOSE (pack);
8874
8875           if (TREE_CODE (parm) == PARM_DECL)
8876             {
8877               /* Select the Ith argument from the pack.  */
8878               tree arg = make_node (ARGUMENT_PACK_SELECT);
8879               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
8880               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
8881               mark_used (parm);
8882               register_local_specialization (arg, parm);
8883             }
8884           else
8885             {
8886               tree value = parm;
8887               int idx, level;
8888               template_parm_level_and_index (parm, &level, &idx);
8889               
8890               if (i < len) 
8891                 {
8892                   /* Select the Ith argument from the pack. */
8893                   value = make_node (ARGUMENT_PACK_SELECT);
8894                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
8895                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
8896                 }
8897
8898               /* Update the corresponding argument.  */
8899               TMPL_ARG (args, level, idx) = value;
8900             }
8901         }
8902
8903       /* Substitute into the PATTERN with the altered arguments.  */
8904       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
8905         TREE_VEC_ELT (result, i) = 
8906           tsubst_expr (pattern, args, complain, in_decl,
8907                        /*integral_constant_expression_p=*/false);
8908       else
8909         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
8910
8911       if (i == len)
8912         /* When we have incomplete argument packs, the last "expanded"
8913            result is itself a pack expansion, which allows us
8914            to deduce more arguments.  */
8915         TREE_VEC_ELT (result, i) = 
8916           make_pack_expansion (TREE_VEC_ELT (result, i));
8917
8918       if (TREE_VEC_ELT (result, i) == error_mark_node)
8919         {
8920           result = error_mark_node;
8921           break;
8922         }
8923     }
8924
8925   /* Update ARGS to restore the substitution from parameter packs to
8926      their argument packs.  */
8927   for (pack = packs; pack; pack = TREE_CHAIN (pack))
8928     {
8929       tree parm = TREE_PURPOSE (pack);
8930
8931       if (TREE_CODE (parm) == PARM_DECL)
8932         register_local_specialization (TREE_TYPE (pack), parm);
8933       else
8934         {
8935           int idx, level;
8936           template_parm_level_and_index (parm, &level, &idx);
8937           
8938           /* Update the corresponding argument.  */
8939           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
8940             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
8941               TREE_TYPE (pack);
8942           else
8943             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
8944         }
8945     }
8946
8947   if (saved_local_specializations)
8948     {
8949       htab_delete (local_specializations);
8950       local_specializations = saved_local_specializations;
8951     }
8952   
8953   return result;
8954 }
8955
8956 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
8957    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
8958    parameter packs; all parms generated from a function parameter pack will
8959    have the same DECL_PARM_INDEX.  */
8960
8961 tree
8962 get_pattern_parm (tree parm, tree tmpl)
8963 {
8964   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
8965   tree patparm;
8966
8967   if (DECL_ARTIFICIAL (parm))
8968     {
8969       for (patparm = DECL_ARGUMENTS (pattern);
8970            patparm; patparm = DECL_CHAIN (patparm))
8971         if (DECL_ARTIFICIAL (patparm)
8972             && DECL_NAME (parm) == DECL_NAME (patparm))
8973           break;
8974     }
8975   else
8976     {
8977       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
8978       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
8979       gcc_assert (DECL_PARM_INDEX (patparm)
8980                   == DECL_PARM_INDEX (parm));
8981     }
8982
8983   return patparm;
8984 }
8985
8986 /* Substitute ARGS into the vector or list of template arguments T.  */
8987
8988 static tree
8989 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8990 {
8991   tree orig_t = t;
8992   int len, need_new = 0, i, expanded_len_adjust = 0, out;
8993   tree *elts;
8994
8995   if (t == error_mark_node)
8996     return error_mark_node;
8997
8998   len = TREE_VEC_LENGTH (t);
8999   elts = XALLOCAVEC (tree, len);
9000
9001   for (i = 0; i < len; i++)
9002     {
9003       tree orig_arg = TREE_VEC_ELT (t, i);
9004       tree new_arg;
9005
9006       if (TREE_CODE (orig_arg) == TREE_VEC)
9007         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
9008       else if (PACK_EXPANSION_P (orig_arg))
9009         {
9010           /* Substitute into an expansion expression.  */
9011           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
9012
9013           if (TREE_CODE (new_arg) == TREE_VEC)
9014             /* Add to the expanded length adjustment the number of
9015                expanded arguments. We subtract one from this
9016                measurement, because the argument pack expression
9017                itself is already counted as 1 in
9018                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
9019                the argument pack is empty.  */
9020             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
9021         }
9022       else if (ARGUMENT_PACK_P (orig_arg))
9023         {
9024           /* Substitute into each of the arguments.  */
9025           new_arg = TYPE_P (orig_arg)
9026             ? cxx_make_type (TREE_CODE (orig_arg))
9027             : make_node (TREE_CODE (orig_arg));
9028           
9029           SET_ARGUMENT_PACK_ARGS (
9030             new_arg,
9031             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
9032                                   args, complain, in_decl));
9033
9034           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
9035             new_arg = error_mark_node;
9036
9037           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
9038             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
9039                                           complain, in_decl);
9040             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
9041
9042             if (TREE_TYPE (new_arg) == error_mark_node)
9043               new_arg = error_mark_node;
9044           }
9045         }
9046       else
9047         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
9048
9049       if (new_arg == error_mark_node)
9050         return error_mark_node;
9051
9052       elts[i] = new_arg;
9053       if (new_arg != orig_arg)
9054         need_new = 1;
9055     }
9056
9057   if (!need_new)
9058     return t;
9059
9060   /* Make space for the expanded arguments coming from template
9061      argument packs.  */
9062   t = make_tree_vec (len + expanded_len_adjust);
9063   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
9064      arguments for a member template.
9065      In that case each TREE_VEC in ORIG_T represents a level of template
9066      arguments, and ORIG_T won't carry any non defaulted argument count.
9067      It will rather be the nested TREE_VECs that will carry one.
9068      In other words, ORIG_T carries a non defaulted argument count only
9069      if it doesn't contain any nested TREE_VEC.  */
9070   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
9071     {
9072       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
9073       count += expanded_len_adjust;
9074       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
9075     }
9076   for (i = 0, out = 0; i < len; i++)
9077     {
9078       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
9079            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
9080           && TREE_CODE (elts[i]) == TREE_VEC)
9081         {
9082           int idx;
9083
9084           /* Now expand the template argument pack "in place".  */
9085           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
9086             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
9087         }
9088       else
9089         {
9090           TREE_VEC_ELT (t, out) = elts[i];
9091           out++;
9092         }
9093     }
9094
9095   return t;
9096 }
9097
9098 /* Return the result of substituting ARGS into the template parameters
9099    given by PARMS.  If there are m levels of ARGS and m + n levels of
9100    PARMS, then the result will contain n levels of PARMS.  For
9101    example, if PARMS is `template <class T> template <class U>
9102    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
9103    result will be `template <int*, double, class V>'.  */
9104
9105 static tree
9106 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
9107 {
9108   tree r = NULL_TREE;
9109   tree* new_parms;
9110
9111   /* When substituting into a template, we must set
9112      PROCESSING_TEMPLATE_DECL as the template parameters may be
9113      dependent if they are based on one-another, and the dependency
9114      predicates are short-circuit outside of templates.  */
9115   ++processing_template_decl;
9116
9117   for (new_parms = &r;
9118        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
9119        new_parms = &(TREE_CHAIN (*new_parms)),
9120          parms = TREE_CHAIN (parms))
9121     {
9122       tree new_vec =
9123         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
9124       int i;
9125
9126       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
9127         {
9128           tree tuple;
9129
9130           if (parms == error_mark_node)
9131             continue;
9132
9133           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
9134
9135           if (tuple == error_mark_node)
9136             continue;
9137
9138           TREE_VEC_ELT (new_vec, i) =
9139             tsubst_template_parm (tuple, args, complain);
9140         }
9141
9142       *new_parms =
9143         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
9144                              - TMPL_ARGS_DEPTH (args)),
9145                    new_vec, NULL_TREE);
9146     }
9147
9148   --processing_template_decl;
9149
9150   return r;
9151 }
9152
9153 /* Return the result of substituting ARGS into one template parameter
9154    given by T. T Must be a TREE_LIST which TREE_VALUE is the template
9155    parameter and which TREE_PURPOSE is the default argument of the
9156    template parameter.  */
9157
9158 static tree
9159 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
9160 {
9161   tree default_value, parm_decl;
9162
9163   if (args == NULL_TREE
9164       || t == NULL_TREE
9165       || t == error_mark_node)
9166     return t;
9167
9168   gcc_assert (TREE_CODE (t) == TREE_LIST);
9169
9170   default_value = TREE_PURPOSE (t);
9171   parm_decl = TREE_VALUE (t);
9172
9173   parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
9174   if (TREE_CODE (parm_decl) == PARM_DECL
9175       && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
9176     parm_decl = error_mark_node;
9177   default_value = tsubst_template_arg (default_value, args,
9178                                        complain, NULL_TREE);
9179
9180   return build_tree_list (default_value, parm_decl);
9181 }
9182
9183 /* Substitute the ARGS into the indicated aggregate (or enumeration)
9184    type T.  If T is not an aggregate or enumeration type, it is
9185    handled as if by tsubst.  IN_DECL is as for tsubst.  If
9186    ENTERING_SCOPE is nonzero, T is the context for a template which
9187    we are presently tsubst'ing.  Return the substituted value.  */
9188
9189 static tree
9190 tsubst_aggr_type (tree t,
9191                   tree args,
9192                   tsubst_flags_t complain,
9193                   tree in_decl,
9194                   int entering_scope)
9195 {
9196   if (t == NULL_TREE)
9197     return NULL_TREE;
9198
9199   switch (TREE_CODE (t))
9200     {
9201     case RECORD_TYPE:
9202       if (TYPE_PTRMEMFUNC_P (t))
9203         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
9204
9205       /* Else fall through.  */
9206     case ENUMERAL_TYPE:
9207     case UNION_TYPE:
9208       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
9209         {
9210           tree argvec;
9211           tree context;
9212           tree r;
9213           int saved_unevaluated_operand;
9214           int saved_inhibit_evaluation_warnings;
9215
9216           /* In "sizeof(X<I>)" we need to evaluate "I".  */
9217           saved_unevaluated_operand = cp_unevaluated_operand;
9218           cp_unevaluated_operand = 0;
9219           saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
9220           c_inhibit_evaluation_warnings = 0;
9221
9222           /* First, determine the context for the type we are looking
9223              up.  */
9224           context = TYPE_CONTEXT (t);
9225           if (context)
9226             {
9227               context = tsubst_aggr_type (context, args, complain,
9228                                           in_decl, /*entering_scope=*/1);
9229               /* If context is a nested class inside a class template,
9230                  it may still need to be instantiated (c++/33959).  */
9231               if (TYPE_P (context))
9232                 context = complete_type (context);
9233             }
9234
9235           /* Then, figure out what arguments are appropriate for the
9236              type we are trying to find.  For example, given:
9237
9238                template <class T> struct S;
9239                template <class T, class U> void f(T, U) { S<U> su; }
9240
9241              and supposing that we are instantiating f<int, double>,
9242              then our ARGS will be {int, double}, but, when looking up
9243              S we only want {double}.  */
9244           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
9245                                          complain, in_decl);
9246           if (argvec == error_mark_node)
9247             r = error_mark_node;
9248           else
9249             {
9250               r = lookup_template_class (t, argvec, in_decl, context,
9251                                          entering_scope, complain);
9252               r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
9253             }
9254
9255           cp_unevaluated_operand = saved_unevaluated_operand;
9256           c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
9257
9258           return r;
9259         }
9260       else
9261         /* This is not a template type, so there's nothing to do.  */
9262         return t;
9263
9264     default:
9265       return tsubst (t, args, complain, in_decl);
9266     }
9267 }
9268
9269 /* Substitute into the default argument ARG (a default argument for
9270    FN), which has the indicated TYPE.  */
9271
9272 tree
9273 tsubst_default_argument (tree fn, tree type, tree arg)
9274 {
9275   tree saved_class_ptr = NULL_TREE;
9276   tree saved_class_ref = NULL_TREE;
9277
9278   /* This can happen in invalid code.  */
9279   if (TREE_CODE (arg) == DEFAULT_ARG)
9280     return arg;
9281
9282   /* This default argument came from a template.  Instantiate the
9283      default argument here, not in tsubst.  In the case of
9284      something like:
9285
9286        template <class T>
9287        struct S {
9288          static T t();
9289          void f(T = t());
9290        };
9291
9292      we must be careful to do name lookup in the scope of S<T>,
9293      rather than in the current class.  */
9294   push_access_scope (fn);
9295   /* The "this" pointer is not valid in a default argument.  */
9296   if (cfun)
9297     {
9298       saved_class_ptr = current_class_ptr;
9299       cp_function_chain->x_current_class_ptr = NULL_TREE;
9300       saved_class_ref = current_class_ref;
9301       cp_function_chain->x_current_class_ref = NULL_TREE;
9302     }
9303
9304   push_deferring_access_checks(dk_no_deferred);
9305   /* The default argument expression may cause implicitly defined
9306      member functions to be synthesized, which will result in garbage
9307      collection.  We must treat this situation as if we were within
9308      the body of function so as to avoid collecting live data on the
9309      stack.  */
9310   ++function_depth;
9311   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
9312                      tf_warning_or_error, NULL_TREE,
9313                      /*integral_constant_expression_p=*/false);
9314   --function_depth;
9315   pop_deferring_access_checks();
9316
9317   /* Restore the "this" pointer.  */
9318   if (cfun)
9319     {
9320       cp_function_chain->x_current_class_ptr = saved_class_ptr;
9321       cp_function_chain->x_current_class_ref = saved_class_ref;
9322     }
9323
9324   /* Make sure the default argument is reasonable.  */
9325   arg = check_default_argument (type, arg);
9326
9327   pop_access_scope (fn);
9328
9329   return arg;
9330 }
9331
9332 /* Substitute into all the default arguments for FN.  */
9333
9334 static void
9335 tsubst_default_arguments (tree fn)
9336 {
9337   tree arg;
9338   tree tmpl_args;
9339
9340   tmpl_args = DECL_TI_ARGS (fn);
9341
9342   /* If this function is not yet instantiated, we certainly don't need
9343      its default arguments.  */
9344   if (uses_template_parms (tmpl_args))
9345     return;
9346   /* Don't do this again for clones.  */
9347   if (DECL_CLONED_FUNCTION_P (fn))
9348     return;
9349
9350   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
9351        arg;
9352        arg = TREE_CHAIN (arg))
9353     if (TREE_PURPOSE (arg))
9354       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
9355                                                     TREE_VALUE (arg),
9356                                                     TREE_PURPOSE (arg));
9357 }
9358
9359 /* Substitute the ARGS into the T, which is a _DECL.  Return the
9360    result of the substitution.  Issue error and warning messages under
9361    control of COMPLAIN.  */
9362
9363 static tree
9364 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
9365 {
9366 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
9367   location_t saved_loc;
9368   tree r = NULL_TREE;
9369   tree in_decl = t;
9370   hashval_t hash = 0;
9371
9372   /* Set the filename and linenumber to improve error-reporting.  */
9373   saved_loc = input_location;
9374   input_location = DECL_SOURCE_LOCATION (t);
9375
9376   switch (TREE_CODE (t))
9377     {
9378     case TEMPLATE_DECL:
9379       {
9380         /* We can get here when processing a member function template,
9381            member class template, or template template parameter.  */
9382         tree decl = DECL_TEMPLATE_RESULT (t);
9383         tree spec;
9384         tree tmpl_args;
9385         tree full_args;
9386
9387         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9388           {
9389             /* Template template parameter is treated here.  */
9390             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9391             if (new_type == error_mark_node)
9392               RETURN (error_mark_node);
9393
9394             r = copy_decl (t);
9395             DECL_CHAIN (r) = NULL_TREE;
9396             TREE_TYPE (r) = new_type;
9397             DECL_TEMPLATE_RESULT (r)
9398               = build_decl (DECL_SOURCE_LOCATION (decl),
9399                             TYPE_DECL, DECL_NAME (decl), new_type);
9400             DECL_TEMPLATE_PARMS (r)
9401               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
9402                                        complain);
9403             TYPE_NAME (new_type) = r;
9404             break;
9405           }
9406
9407         /* We might already have an instance of this template.
9408            The ARGS are for the surrounding class type, so the
9409            full args contain the tsubst'd args for the context,
9410            plus the innermost args from the template decl.  */
9411         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
9412           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
9413           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
9414         /* Because this is a template, the arguments will still be
9415            dependent, even after substitution.  If
9416            PROCESSING_TEMPLATE_DECL is not set, the dependency
9417            predicates will short-circuit.  */
9418         ++processing_template_decl;
9419         full_args = tsubst_template_args (tmpl_args, args,
9420                                           complain, in_decl);
9421         --processing_template_decl;
9422         if (full_args == error_mark_node)
9423           RETURN (error_mark_node);
9424
9425         /* If this is a default template template argument,
9426            tsubst might not have changed anything.  */
9427         if (full_args == tmpl_args)
9428           RETURN (t);
9429
9430         hash = hash_tmpl_and_args (t, full_args);
9431         spec = retrieve_specialization (t, full_args, hash);
9432         if (spec != NULL_TREE)
9433           {
9434             r = spec;
9435             break;
9436           }
9437
9438         /* Make a new template decl.  It will be similar to the
9439            original, but will record the current template arguments.
9440            We also create a new function declaration, which is just
9441            like the old one, but points to this new template, rather
9442            than the old one.  */
9443         r = copy_decl (t);
9444         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
9445         DECL_CHAIN (r) = NULL_TREE;
9446
9447         DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
9448
9449         if (TREE_CODE (decl) == TYPE_DECL)
9450           {
9451             tree new_type;
9452             ++processing_template_decl;
9453             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9454             --processing_template_decl;
9455             if (new_type == error_mark_node)
9456               RETURN (error_mark_node);
9457
9458             TREE_TYPE (r) = new_type;
9459             CLASSTYPE_TI_TEMPLATE (new_type) = r;
9460             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
9461             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
9462             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
9463           }
9464         else
9465           {
9466             tree new_decl;
9467             ++processing_template_decl;
9468             new_decl = tsubst (decl, args, complain, in_decl);
9469             --processing_template_decl;
9470             if (new_decl == error_mark_node)
9471               RETURN (error_mark_node);
9472
9473             DECL_TEMPLATE_RESULT (r) = new_decl;
9474             DECL_TI_TEMPLATE (new_decl) = r;
9475             TREE_TYPE (r) = TREE_TYPE (new_decl);
9476             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
9477             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
9478           }
9479
9480         SET_DECL_IMPLICIT_INSTANTIATION (r);
9481         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
9482         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
9483
9484         /* The template parameters for this new template are all the
9485            template parameters for the old template, except the
9486            outermost level of parameters.  */
9487         DECL_TEMPLATE_PARMS (r)
9488           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
9489                                    complain);
9490
9491         if (PRIMARY_TEMPLATE_P (t))
9492           DECL_PRIMARY_TEMPLATE (r) = r;
9493
9494         if (TREE_CODE (decl) != TYPE_DECL)
9495           /* Record this non-type partial instantiation.  */
9496           register_specialization (r, t,
9497                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
9498                                    false, hash);
9499       }
9500       break;
9501
9502     case FUNCTION_DECL:
9503       {
9504         tree ctx;
9505         tree argvec = NULL_TREE;
9506         tree *friends;
9507         tree gen_tmpl;
9508         tree type;
9509         int member;
9510         int args_depth;
9511         int parms_depth;
9512
9513         /* Nobody should be tsubst'ing into non-template functions.  */
9514         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
9515
9516         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
9517           {
9518             tree spec;
9519             bool dependent_p;
9520
9521             /* If T is not dependent, just return it.  We have to
9522                increment PROCESSING_TEMPLATE_DECL because
9523                value_dependent_expression_p assumes that nothing is
9524                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
9525             ++processing_template_decl;
9526             dependent_p = value_dependent_expression_p (t);
9527             --processing_template_decl;
9528             if (!dependent_p)
9529               RETURN (t);
9530
9531             /* Calculate the most general template of which R is a
9532                specialization, and the complete set of arguments used to
9533                specialize R.  */
9534             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
9535             argvec = tsubst_template_args (DECL_TI_ARGS
9536                                           (DECL_TEMPLATE_RESULT
9537                                                  (DECL_TI_TEMPLATE (t))),
9538                                            args, complain, in_decl);
9539
9540             /* Check to see if we already have this specialization.  */
9541             hash = hash_tmpl_and_args (gen_tmpl, argvec);
9542             spec = retrieve_specialization (gen_tmpl, argvec, hash);
9543
9544             if (spec)
9545               {
9546                 r = spec;
9547                 break;
9548               }
9549
9550             /* We can see more levels of arguments than parameters if
9551                there was a specialization of a member template, like
9552                this:
9553
9554                  template <class T> struct S { template <class U> void f(); }
9555                  template <> template <class U> void S<int>::f(U);
9556
9557                Here, we'll be substituting into the specialization,
9558                because that's where we can find the code we actually
9559                want to generate, but we'll have enough arguments for
9560                the most general template.
9561
9562                We also deal with the peculiar case:
9563
9564                  template <class T> struct S {
9565                    template <class U> friend void f();
9566                  };
9567                  template <class U> void f() {}
9568                  template S<int>;
9569                  template void f<double>();
9570
9571                Here, the ARGS for the instantiation of will be {int,
9572                double}.  But, we only need as many ARGS as there are
9573                levels of template parameters in CODE_PATTERN.  We are
9574                careful not to get fooled into reducing the ARGS in
9575                situations like:
9576
9577                  template <class T> struct S { template <class U> void f(U); }
9578                  template <class T> template <> void S<T>::f(int) {}
9579
9580                which we can spot because the pattern will be a
9581                specialization in this case.  */
9582             args_depth = TMPL_ARGS_DEPTH (args);
9583             parms_depth =
9584               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
9585             if (args_depth > parms_depth
9586                 && !DECL_TEMPLATE_SPECIALIZATION (t))
9587               args = get_innermost_template_args (args, parms_depth);
9588           }
9589         else
9590           {
9591             /* This special case arises when we have something like this:
9592
9593                  template <class T> struct S {
9594                    friend void f<int>(int, double);
9595                  };
9596
9597                Here, the DECL_TI_TEMPLATE for the friend declaration
9598                will be an IDENTIFIER_NODE.  We are being called from
9599                tsubst_friend_function, and we want only to create a
9600                new decl (R) with appropriate types so that we can call
9601                determine_specialization.  */
9602             gen_tmpl = NULL_TREE;
9603           }
9604
9605         if (DECL_CLASS_SCOPE_P (t))
9606           {
9607             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
9608               member = 2;
9609             else
9610               member = 1;
9611             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
9612                                     complain, t, /*entering_scope=*/1);
9613           }
9614         else
9615           {
9616             member = 0;
9617             ctx = DECL_CONTEXT (t);
9618           }
9619         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9620         if (type == error_mark_node)
9621           RETURN (error_mark_node);
9622
9623         /* We do NOT check for matching decls pushed separately at this
9624            point, as they may not represent instantiations of this
9625            template, and in any case are considered separate under the
9626            discrete model.  */
9627         r = copy_decl (t);
9628         DECL_USE_TEMPLATE (r) = 0;
9629         TREE_TYPE (r) = type;
9630         /* Clear out the mangled name and RTL for the instantiation.  */
9631         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
9632         SET_DECL_RTL (r, NULL);
9633         /* Leave DECL_INITIAL set on deleted instantiations.  */
9634         if (!DECL_DELETED_FN (r))
9635           DECL_INITIAL (r) = NULL_TREE;
9636         DECL_CONTEXT (r) = ctx;
9637
9638         if (member && DECL_CONV_FN_P (r))
9639           /* Type-conversion operator.  Reconstruct the name, in
9640              case it's the name of one of the template's parameters.  */
9641           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
9642
9643         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
9644                                      complain, t);
9645         DECL_RESULT (r) = NULL_TREE;
9646
9647         TREE_STATIC (r) = 0;
9648         TREE_PUBLIC (r) = TREE_PUBLIC (t);
9649         DECL_EXTERNAL (r) = 1;
9650         /* If this is an instantiation of a function with internal
9651            linkage, we already know what object file linkage will be
9652            assigned to the instantiation.  */
9653         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
9654         DECL_DEFER_OUTPUT (r) = 0;
9655         DECL_CHAIN (r) = NULL_TREE;
9656         DECL_PENDING_INLINE_INFO (r) = 0;
9657         DECL_PENDING_INLINE_P (r) = 0;
9658         DECL_SAVED_TREE (r) = NULL_TREE;
9659         DECL_STRUCT_FUNCTION (r) = NULL;
9660         TREE_USED (r) = 0;
9661         /* We'll re-clone as appropriate in instantiate_template.  */
9662         DECL_CLONED_FUNCTION (r) = NULL_TREE;
9663
9664         /* If we aren't complaining now, return on error before we register
9665            the specialization so that we'll complain eventually.  */
9666         if ((complain & tf_error) == 0
9667             && IDENTIFIER_OPNAME_P (DECL_NAME (r))
9668             && !grok_op_properties (r, /*complain=*/false))
9669           RETURN (error_mark_node);
9670
9671         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
9672            this in the special friend case mentioned above where
9673            GEN_TMPL is NULL.  */
9674         if (gen_tmpl)
9675           {
9676             DECL_TEMPLATE_INFO (r)
9677               = build_template_info (gen_tmpl, argvec);
9678             SET_DECL_IMPLICIT_INSTANTIATION (r);
9679             register_specialization (r, gen_tmpl, argvec, false, hash);
9680
9681             /* We're not supposed to instantiate default arguments
9682                until they are called, for a template.  But, for a
9683                declaration like:
9684
9685                  template <class T> void f ()
9686                  { extern void g(int i = T()); }
9687
9688                we should do the substitution when the template is
9689                instantiated.  We handle the member function case in
9690                instantiate_class_template since the default arguments
9691                might refer to other members of the class.  */
9692             if (!member
9693                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
9694                 && !uses_template_parms (argvec))
9695               tsubst_default_arguments (r);
9696           }
9697         else
9698           DECL_TEMPLATE_INFO (r) = NULL_TREE;
9699
9700         /* Copy the list of befriending classes.  */
9701         for (friends = &DECL_BEFRIENDING_CLASSES (r);
9702              *friends;
9703              friends = &TREE_CHAIN (*friends))
9704           {
9705             *friends = copy_node (*friends);
9706             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
9707                                             args, complain,
9708                                             in_decl);
9709           }
9710
9711         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
9712           {
9713             maybe_retrofit_in_chrg (r);
9714             if (DECL_CONSTRUCTOR_P (r))
9715               grok_ctor_properties (ctx, r);
9716             /* If this is an instantiation of a member template, clone it.
9717                If it isn't, that'll be handled by
9718                clone_constructors_and_destructors.  */
9719             if (PRIMARY_TEMPLATE_P (gen_tmpl))
9720               clone_function_decl (r, /*update_method_vec_p=*/0);
9721           }
9722         else if ((complain & tf_error) != 0
9723                  && IDENTIFIER_OPNAME_P (DECL_NAME (r))
9724                  && !grok_op_properties (r, /*complain=*/true))
9725           RETURN (error_mark_node);
9726
9727         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
9728           SET_DECL_FRIEND_CONTEXT (r,
9729                                    tsubst (DECL_FRIEND_CONTEXT (t),
9730                                             args, complain, in_decl));
9731
9732         /* Possibly limit visibility based on template args.  */
9733         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
9734         if (DECL_VISIBILITY_SPECIFIED (t))
9735           {
9736             DECL_VISIBILITY_SPECIFIED (r) = 0;
9737             DECL_ATTRIBUTES (r)
9738               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
9739           }
9740         determine_visibility (r);
9741         if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
9742             && !processing_template_decl)
9743           defaulted_late_check (r);
9744
9745         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9746                                         args, complain, in_decl);
9747       }
9748       break;
9749
9750     case PARM_DECL:
9751       {
9752         tree type = NULL_TREE;
9753         int i, len = 1;
9754         tree expanded_types = NULL_TREE;
9755         tree prev_r = NULL_TREE;
9756         tree first_r = NULL_TREE;
9757
9758         if (FUNCTION_PARAMETER_PACK_P (t))
9759           {
9760             /* If there is a local specialization that isn't a
9761                parameter pack, it means that we're doing a "simple"
9762                substitution from inside tsubst_pack_expansion. Just
9763                return the local specialization (which will be a single
9764                parm).  */
9765             tree spec = retrieve_local_specialization (t);
9766             if (spec 
9767                 && TREE_CODE (spec) == PARM_DECL
9768                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
9769               RETURN (spec);
9770
9771             /* Expand the TYPE_PACK_EXPANSION that provides the types for
9772                the parameters in this function parameter pack.  */
9773             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
9774                                                     complain, in_decl);
9775             if (TREE_CODE (expanded_types) == TREE_VEC)
9776               {
9777                 len = TREE_VEC_LENGTH (expanded_types);
9778
9779                 /* Zero-length parameter packs are boring. Just substitute
9780                    into the chain.  */
9781                 if (len == 0)
9782                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
9783                                   TREE_CHAIN (t)));
9784               }
9785             else
9786               {
9787                 /* All we did was update the type. Make a note of that.  */
9788                 type = expanded_types;
9789                 expanded_types = NULL_TREE;
9790               }
9791           }
9792
9793         /* Loop through all of the parameter's we'll build. When T is
9794            a function parameter pack, LEN is the number of expanded
9795            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
9796         r = NULL_TREE;
9797         for (i = 0; i < len; ++i)
9798           {
9799             prev_r = r;
9800             r = copy_node (t);
9801             if (DECL_TEMPLATE_PARM_P (t))
9802               SET_DECL_TEMPLATE_PARM_P (r);
9803
9804             /* An argument of a function parameter pack is not a parameter
9805                pack.  */
9806             FUNCTION_PARAMETER_PACK_P (r) = false;
9807
9808             if (expanded_types)
9809               /* We're on the Ith parameter of the function parameter
9810                  pack.  */
9811               {
9812                 /* Get the Ith type.  */
9813                 type = TREE_VEC_ELT (expanded_types, i);
9814
9815                 if (DECL_NAME (r))
9816                   /* Rename the parameter to include the index.  */
9817                   DECL_NAME (r) =
9818                     make_ith_pack_parameter_name (DECL_NAME (r), i);
9819               }
9820             else if (!type)
9821               /* We're dealing with a normal parameter.  */
9822               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9823
9824             type = type_decays_to (type);
9825             TREE_TYPE (r) = type;
9826             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9827
9828             if (DECL_INITIAL (r))
9829               {
9830                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
9831                   DECL_INITIAL (r) = TREE_TYPE (r);
9832                 else
9833                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
9834                                              complain, in_decl);
9835               }
9836
9837             DECL_CONTEXT (r) = NULL_TREE;
9838
9839             if (!DECL_TEMPLATE_PARM_P (r))
9840               DECL_ARG_TYPE (r) = type_passed_as (type);
9841
9842             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9843                                             args, complain, in_decl);
9844
9845             /* Keep track of the first new parameter we
9846                generate. That's what will be returned to the
9847                caller.  */
9848             if (!first_r)
9849               first_r = r;
9850
9851             /* Build a proper chain of parameters when substituting
9852                into a function parameter pack.  */
9853             if (prev_r)
9854               DECL_CHAIN (prev_r) = r;
9855           }
9856
9857         if (DECL_CHAIN (t))
9858           DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
9859                                    complain, DECL_CHAIN (t));
9860
9861         /* FIRST_R contains the start of the chain we've built.  */
9862         r = first_r;
9863       }
9864       break;
9865
9866     case FIELD_DECL:
9867       {
9868         tree type;
9869
9870         r = copy_decl (t);
9871         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9872         if (type == error_mark_node)
9873           RETURN (error_mark_node);
9874         TREE_TYPE (r) = type;
9875         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9876
9877         /* DECL_INITIAL gives the number of bits in a bit-field.  */
9878         DECL_INITIAL (r)
9879           = tsubst_expr (DECL_INITIAL (t), args,
9880                          complain, in_decl,
9881                          /*integral_constant_expression_p=*/true);
9882         /* We don't have to set DECL_CONTEXT here; it is set by
9883            finish_member_declaration.  */
9884         DECL_CHAIN (r) = NULL_TREE;
9885         if (VOID_TYPE_P (type))
9886           error ("instantiation of %q+D as type %qT", r, type);
9887
9888         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9889                                         args, complain, in_decl);
9890       }
9891       break;
9892
9893     case USING_DECL:
9894       /* We reach here only for member using decls.  */
9895       if (DECL_DEPENDENT_P (t))
9896         {
9897           r = do_class_using_decl
9898             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
9899              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
9900           if (!r)
9901             r = error_mark_node;
9902           else
9903             {
9904               TREE_PROTECTED (r) = TREE_PROTECTED (t);
9905               TREE_PRIVATE (r) = TREE_PRIVATE (t);
9906             }
9907         }
9908       else
9909         {
9910           r = copy_node (t);
9911           DECL_CHAIN (r) = NULL_TREE;
9912         }
9913       break;
9914
9915     case TYPE_DECL:
9916     case VAR_DECL:
9917       {
9918         tree argvec = NULL_TREE;
9919         tree gen_tmpl = NULL_TREE;
9920         tree spec;
9921         tree tmpl = NULL_TREE;
9922         tree ctx;
9923         tree type = NULL_TREE;
9924         bool local_p;
9925
9926         if (TREE_CODE (t) == TYPE_DECL
9927             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
9928           {
9929             /* If this is the canonical decl, we don't have to
9930                mess with instantiations, and often we can't (for
9931                typename, template type parms and such).  Note that
9932                TYPE_NAME is not correct for the above test if
9933                we've copied the type for a typedef.  */
9934             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9935             if (type == error_mark_node)
9936               RETURN (error_mark_node);
9937             r = TYPE_NAME (type);
9938             break;
9939           }
9940
9941         /* Check to see if we already have the specialization we
9942            need.  */
9943         spec = NULL_TREE;
9944         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
9945           {
9946             /* T is a static data member or namespace-scope entity.
9947                We have to substitute into namespace-scope variables
9948                (even though such entities are never templates) because
9949                of cases like:
9950                
9951                  template <class T> void f() { extern T t; }
9952
9953                where the entity referenced is not known until
9954                instantiation time.  */
9955             local_p = false;
9956             ctx = DECL_CONTEXT (t);
9957             if (DECL_CLASS_SCOPE_P (t))
9958               {
9959                 ctx = tsubst_aggr_type (ctx, args,
9960                                         complain,
9961                                         in_decl, /*entering_scope=*/1);
9962                 /* If CTX is unchanged, then T is in fact the
9963                    specialization we want.  That situation occurs when
9964                    referencing a static data member within in its own
9965                    class.  We can use pointer equality, rather than
9966                    same_type_p, because DECL_CONTEXT is always
9967                    canonical.  */
9968                 if (ctx == DECL_CONTEXT (t))
9969                   spec = t;
9970               }
9971
9972             if (!spec)
9973               {
9974                 tmpl = DECL_TI_TEMPLATE (t);
9975                 gen_tmpl = most_general_template (tmpl);
9976                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
9977                 hash = hash_tmpl_and_args (gen_tmpl, argvec);
9978                 spec = retrieve_specialization (gen_tmpl, argvec, hash);
9979               }
9980           }
9981         else
9982           {
9983             /* A local variable.  */
9984             local_p = true;
9985             /* Subsequent calls to pushdecl will fill this in.  */
9986             ctx = NULL_TREE;
9987             spec = retrieve_local_specialization (t);
9988           }
9989         /* If we already have the specialization we need, there is
9990            nothing more to do.  */ 
9991         if (spec)
9992           {
9993             r = spec;
9994             break;
9995           }
9996
9997         /* Create a new node for the specialization we need.  */
9998         r = copy_decl (t);
9999         if (type == NULL_TREE)
10000           {
10001             if (is_typedef_decl (t))
10002               type = DECL_ORIGINAL_TYPE (t);
10003             else
10004               type = TREE_TYPE (t);
10005             if (TREE_CODE (t) == VAR_DECL && VAR_HAD_UNKNOWN_BOUND (t))
10006               type = strip_array_domain (type);
10007             type = tsubst (type, args, complain, in_decl);
10008           }
10009         if (TREE_CODE (r) == VAR_DECL)
10010           {
10011             /* Even if the original location is out of scope, the
10012                newly substituted one is not.  */
10013             DECL_DEAD_FOR_LOCAL (r) = 0;
10014             DECL_INITIALIZED_P (r) = 0;
10015             DECL_TEMPLATE_INSTANTIATED (r) = 0;
10016             if (type == error_mark_node)
10017               RETURN (error_mark_node);
10018             if (TREE_CODE (type) == FUNCTION_TYPE)
10019               {
10020                 /* It may seem that this case cannot occur, since:
10021
10022                      typedef void f();
10023                      void g() { f x; }
10024
10025                    declares a function, not a variable.  However:
10026       
10027                      typedef void f();
10028                      template <typename T> void g() { T t; }
10029                      template void g<f>();
10030
10031                    is an attempt to declare a variable with function
10032                    type.  */
10033                 error ("variable %qD has function type",
10034                        /* R is not yet sufficiently initialized, so we
10035                           just use its name.  */
10036                        DECL_NAME (r));
10037                 RETURN (error_mark_node);
10038               }
10039             type = complete_type (type);
10040             /* Wait until cp_finish_decl to set this again, to handle
10041                circular dependency (template/instantiate6.C). */
10042             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
10043             type = check_var_type (DECL_NAME (r), type);
10044
10045             if (DECL_HAS_VALUE_EXPR_P (t))
10046               {
10047                 tree ve = DECL_VALUE_EXPR (t);
10048                 ve = tsubst_expr (ve, args, complain, in_decl,
10049                                   /*constant_expression_p=*/false);
10050                 SET_DECL_VALUE_EXPR (r, ve);
10051               }
10052           }
10053         else if (DECL_SELF_REFERENCE_P (t))
10054           SET_DECL_SELF_REFERENCE_P (r);
10055         TREE_TYPE (r) = type;
10056         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10057         DECL_CONTEXT (r) = ctx;
10058         /* Clear out the mangled name and RTL for the instantiation.  */
10059         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10060         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10061           SET_DECL_RTL (r, NULL);
10062         /* The initializer must not be expanded until it is required;
10063            see [temp.inst].  */
10064         DECL_INITIAL (r) = NULL_TREE;
10065         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10066           SET_DECL_RTL (r, NULL);
10067         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
10068         if (TREE_CODE (r) == VAR_DECL)
10069           {
10070             /* Possibly limit visibility based on template args.  */
10071             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10072             if (DECL_VISIBILITY_SPECIFIED (t))
10073               {
10074                 DECL_VISIBILITY_SPECIFIED (r) = 0;
10075                 DECL_ATTRIBUTES (r)
10076                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10077               }
10078             determine_visibility (r);
10079           }
10080
10081         if (!local_p)
10082           {
10083             /* A static data member declaration is always marked
10084                external when it is declared in-class, even if an
10085                initializer is present.  We mimic the non-template
10086                processing here.  */
10087             DECL_EXTERNAL (r) = 1;
10088
10089             register_specialization (r, gen_tmpl, argvec, false, hash);
10090             DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
10091             SET_DECL_IMPLICIT_INSTANTIATION (r);
10092           }
10093         else if (cp_unevaluated_operand)
10094           {
10095             /* We're substituting this var in a decltype outside of its
10096                scope, such as for a lambda return type.  Don't add it to
10097                local_specializations, do perform auto deduction.  */
10098             tree auto_node = type_uses_auto (type);
10099             tree init
10100               = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
10101                              /*constant_expression_p=*/false);
10102
10103             if (auto_node && init)
10104               {
10105                 init = resolve_nondeduced_context (init);
10106                 if (describable_type (init))
10107                   {
10108                     type = do_auto_deduction (type, init, auto_node);
10109                     TREE_TYPE (r) = type;
10110                   }
10111               }
10112           }
10113         else
10114           register_local_specialization (r, t);
10115
10116         DECL_CHAIN (r) = NULL_TREE;
10117
10118         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
10119                                         /*flags=*/0,
10120                                         args, complain, in_decl);
10121
10122         /* Preserve a typedef that names a type.  */
10123         if (is_typedef_decl (r))
10124           {
10125             DECL_ORIGINAL_TYPE (r) = NULL_TREE;
10126             set_underlying_type (r);
10127           }
10128
10129         layout_decl (r, 0);
10130       }
10131       break;
10132
10133     default:
10134       gcc_unreachable ();
10135     }
10136 #undef RETURN
10137
10138  out:
10139   /* Restore the file and line information.  */
10140   input_location = saved_loc;
10141
10142   return r;
10143 }
10144
10145 /* Substitute into the ARG_TYPES of a function type.  */
10146
10147 static tree
10148 tsubst_arg_types (tree arg_types,
10149                   tree args,
10150                   tsubst_flags_t complain,
10151                   tree in_decl)
10152 {
10153   tree remaining_arg_types;
10154   tree type = NULL_TREE;
10155   int i = 1;
10156   tree expanded_args = NULL_TREE;
10157   tree default_arg;
10158
10159   if (!arg_types || arg_types == void_list_node)
10160     return arg_types;
10161
10162   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
10163                                           args, complain, in_decl);
10164   if (remaining_arg_types == error_mark_node)
10165     return error_mark_node;
10166
10167   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
10168     {
10169       /* For a pack expansion, perform substitution on the
10170          entire expression. Later on, we'll handle the arguments
10171          one-by-one.  */
10172       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
10173                                             args, complain, in_decl);
10174
10175       if (TREE_CODE (expanded_args) == TREE_VEC)
10176         /* So that we'll spin through the parameters, one by one.  */
10177         i = TREE_VEC_LENGTH (expanded_args);
10178       else
10179         {
10180           /* We only partially substituted into the parameter
10181              pack. Our type is TYPE_PACK_EXPANSION.  */
10182           type = expanded_args;
10183           expanded_args = NULL_TREE;
10184         }
10185     }
10186
10187   while (i > 0) {
10188     --i;
10189     
10190     if (expanded_args)
10191       type = TREE_VEC_ELT (expanded_args, i);
10192     else if (!type)
10193       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
10194
10195     if (type == error_mark_node)
10196       return error_mark_node;
10197     if (VOID_TYPE_P (type))
10198       {
10199         if (complain & tf_error)
10200           {
10201             error ("invalid parameter type %qT", type);
10202             if (in_decl)
10203               error ("in declaration %q+D", in_decl);
10204           }
10205         return error_mark_node;
10206     }
10207     
10208     /* Do array-to-pointer, function-to-pointer conversion, and ignore
10209        top-level qualifiers as required.  */
10210     type = TYPE_MAIN_VARIANT (type_decays_to (type));
10211
10212     /* We do not substitute into default arguments here.  The standard
10213        mandates that they be instantiated only when needed, which is
10214        done in build_over_call.  */
10215     default_arg = TREE_PURPOSE (arg_types);
10216
10217     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
10218       {
10219         /* We've instantiated a template before its default arguments
10220            have been parsed.  This can happen for a nested template
10221            class, and is not an error unless we require the default
10222            argument in a call of this function.  */
10223         remaining_arg_types = 
10224           tree_cons (default_arg, type, remaining_arg_types);
10225         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
10226                        remaining_arg_types);
10227       }
10228     else
10229       remaining_arg_types = 
10230         hash_tree_cons (default_arg, type, remaining_arg_types);
10231   }
10232         
10233   return remaining_arg_types;
10234 }
10235
10236 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
10237    *not* handle the exception-specification for FNTYPE, because the
10238    initial substitution of explicitly provided template parameters
10239    during argument deduction forbids substitution into the
10240    exception-specification:
10241
10242      [temp.deduct]
10243
10244      All references in the function type of the function template to  the
10245      corresponding template parameters are replaced by the specified tem-
10246      plate argument values.  If a substitution in a template parameter or
10247      in  the function type of the function template results in an invalid
10248      type, type deduction fails.  [Note: The equivalent  substitution  in
10249      exception specifications is done only when the function is instanti-
10250      ated, at which point a program is  ill-formed  if  the  substitution
10251      results in an invalid type.]  */
10252
10253 static tree
10254 tsubst_function_type (tree t,
10255                       tree args,
10256                       tsubst_flags_t complain,
10257                       tree in_decl)
10258 {
10259   tree return_type;
10260   tree arg_types;
10261   tree fntype;
10262
10263   /* The TYPE_CONTEXT is not used for function/method types.  */
10264   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
10265
10266   /* Substitute the return type.  */
10267   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10268   if (return_type == error_mark_node)
10269     return error_mark_node;
10270   /* The standard does not presently indicate that creation of a
10271      function type with an invalid return type is a deduction failure.
10272      However, that is clearly analogous to creating an array of "void"
10273      or a reference to a reference.  This is core issue #486.  */
10274   if (TREE_CODE (return_type) == ARRAY_TYPE
10275       || TREE_CODE (return_type) == FUNCTION_TYPE)
10276     {
10277       if (complain & tf_error)
10278         {
10279           if (TREE_CODE (return_type) == ARRAY_TYPE)
10280             error ("function returning an array");
10281           else
10282             error ("function returning a function");
10283         }
10284       return error_mark_node;
10285     }
10286
10287   /* Substitute the argument types.  */
10288   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
10289                                 complain, in_decl);
10290   if (arg_types == error_mark_node)
10291     return error_mark_node;
10292
10293   /* Construct a new type node and return it.  */
10294   if (TREE_CODE (t) == FUNCTION_TYPE)
10295     {
10296       fntype = build_function_type (return_type, arg_types);
10297       fntype = apply_memfn_quals (fntype, type_memfn_quals (t));
10298     }
10299   else
10300     {
10301       tree r = TREE_TYPE (TREE_VALUE (arg_types));
10302       if (! MAYBE_CLASS_TYPE_P (r))
10303         {
10304           /* [temp.deduct]
10305
10306              Type deduction may fail for any of the following
10307              reasons:
10308
10309              -- Attempting to create "pointer to member of T" when T
10310              is not a class type.  */
10311           if (complain & tf_error)
10312             error ("creating pointer to member function of non-class type %qT",
10313                       r);
10314           return error_mark_node;
10315         }
10316
10317       fntype = build_method_type_directly (r, return_type,
10318                                            TREE_CHAIN (arg_types));
10319     }
10320   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
10321
10322   return fntype;
10323 }
10324
10325 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
10326    ARGS into that specification, and return the substituted
10327    specification.  If there is no specification, return NULL_TREE.  */
10328
10329 static tree
10330 tsubst_exception_specification (tree fntype,
10331                                 tree args,
10332                                 tsubst_flags_t complain,
10333                                 tree in_decl)
10334 {
10335   tree specs;
10336   tree new_specs;
10337
10338   specs = TYPE_RAISES_EXCEPTIONS (fntype);
10339   new_specs = NULL_TREE;
10340   if (specs && TREE_PURPOSE (specs))
10341     {
10342       /* A noexcept-specifier.  */
10343       new_specs = tsubst_copy_and_build
10344         (TREE_PURPOSE (specs), args, complain, in_decl, /*function_p=*/false,
10345          /*integral_constant_expression_p=*/true);
10346       new_specs = build_noexcept_spec (new_specs, complain);
10347     }
10348   else if (specs)
10349     {
10350       if (! TREE_VALUE (specs))
10351         new_specs = specs;
10352       else
10353         while (specs)
10354           {
10355             tree spec;
10356             int i, len = 1;
10357             tree expanded_specs = NULL_TREE;
10358
10359             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
10360               {
10361                 /* Expand the pack expansion type.  */
10362                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
10363                                                        args, complain,
10364                                                        in_decl);
10365
10366                 if (expanded_specs == error_mark_node)
10367                   return error_mark_node;
10368                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
10369                   len = TREE_VEC_LENGTH (expanded_specs);
10370                 else
10371                   {
10372                     /* We're substituting into a member template, so
10373                        we got a TYPE_PACK_EXPANSION back.  Add that
10374                        expansion and move on.  */
10375                     gcc_assert (TREE_CODE (expanded_specs) 
10376                                 == TYPE_PACK_EXPANSION);
10377                     new_specs = add_exception_specifier (new_specs,
10378                                                          expanded_specs,
10379                                                          complain);
10380                     specs = TREE_CHAIN (specs);
10381                     continue;
10382                   }
10383               }
10384
10385             for (i = 0; i < len; ++i)
10386               {
10387                 if (expanded_specs)
10388                   spec = TREE_VEC_ELT (expanded_specs, i);
10389                 else
10390                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
10391                 if (spec == error_mark_node)
10392                   return spec;
10393                 new_specs = add_exception_specifier (new_specs, spec, 
10394                                                      complain);
10395               }
10396
10397             specs = TREE_CHAIN (specs);
10398           }
10399     }
10400   return new_specs;
10401 }
10402
10403 /* Take the tree structure T and replace template parameters used
10404    therein with the argument vector ARGS.  IN_DECL is an associated
10405    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
10406    Issue error and warning messages under control of COMPLAIN.  Note
10407    that we must be relatively non-tolerant of extensions here, in
10408    order to preserve conformance; if we allow substitutions that
10409    should not be allowed, we may allow argument deductions that should
10410    not succeed, and therefore report ambiguous overload situations
10411    where there are none.  In theory, we could allow the substitution,
10412    but indicate that it should have failed, and allow our caller to
10413    make sure that the right thing happens, but we don't try to do this
10414    yet.
10415
10416    This function is used for dealing with types, decls and the like;
10417    for expressions, use tsubst_expr or tsubst_copy.  */
10418
10419 tree
10420 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10421 {
10422   enum tree_code code;
10423   tree type, r;
10424
10425   if (t == NULL_TREE || t == error_mark_node
10426       || t == integer_type_node
10427       || t == void_type_node
10428       || t == char_type_node
10429       || t == unknown_type_node
10430       || TREE_CODE (t) == NAMESPACE_DECL
10431       || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
10432     return t;
10433
10434   if (DECL_P (t))
10435     return tsubst_decl (t, args, complain);
10436
10437   if (args == NULL_TREE)
10438     return t;
10439
10440   code = TREE_CODE (t);
10441
10442   if (code == IDENTIFIER_NODE)
10443     type = IDENTIFIER_TYPE_VALUE (t);
10444   else
10445     type = TREE_TYPE (t);
10446
10447   gcc_assert (type != unknown_type_node);
10448
10449   /* Reuse typedefs.  We need to do this to handle dependent attributes,
10450      such as attribute aligned.  */
10451   if (TYPE_P (t)
10452       && typedef_variant_p (t))
10453     {
10454       tree decl = TYPE_NAME (t);
10455       
10456       if (DECL_CLASS_SCOPE_P (decl)
10457           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
10458           && uses_template_parms (DECL_CONTEXT (decl)))
10459         {
10460           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
10461           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
10462           r = retrieve_specialization (tmpl, gen_args, 0);
10463         }
10464       else if (DECL_FUNCTION_SCOPE_P (decl)
10465                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
10466                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
10467         r = retrieve_local_specialization (decl);
10468       else
10469         /* The typedef is from a non-template context.  */
10470         return t;
10471
10472       if (r)
10473         {
10474           r = TREE_TYPE (r);
10475           r = cp_build_qualified_type_real
10476             (r, cp_type_quals (t) | cp_type_quals (r),
10477              complain | tf_ignore_bad_quals);
10478           return r;
10479         }
10480       /* Else we must be instantiating the typedef, so fall through.  */
10481     }
10482
10483   if (type
10484       && code != TYPENAME_TYPE
10485       && code != TEMPLATE_TYPE_PARM
10486       && code != IDENTIFIER_NODE
10487       && code != FUNCTION_TYPE
10488       && code != METHOD_TYPE)
10489     type = tsubst (type, args, complain, in_decl);
10490   if (type == error_mark_node)
10491     return error_mark_node;
10492
10493   switch (code)
10494     {
10495     case RECORD_TYPE:
10496     case UNION_TYPE:
10497     case ENUMERAL_TYPE:
10498       return tsubst_aggr_type (t, args, complain, in_decl,
10499                                /*entering_scope=*/0);
10500
10501     case ERROR_MARK:
10502     case IDENTIFIER_NODE:
10503     case VOID_TYPE:
10504     case REAL_TYPE:
10505     case COMPLEX_TYPE:
10506     case VECTOR_TYPE:
10507     case BOOLEAN_TYPE:
10508     case NULLPTR_TYPE:
10509     case LANG_TYPE:
10510       return t;
10511
10512     case INTEGER_TYPE:
10513       if (t == integer_type_node)
10514         return t;
10515
10516       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
10517           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
10518         return t;
10519
10520       {
10521         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
10522
10523         max = tsubst_expr (omax, args, complain, in_decl,
10524                            /*integral_constant_expression_p=*/false);
10525
10526         /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
10527            needed.  */
10528         if (TREE_CODE (max) == NOP_EXPR
10529             && TREE_SIDE_EFFECTS (omax)
10530             && !TREE_TYPE (max))
10531           TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
10532
10533         /* If we're in a partial instantiation, preserve the magic NOP_EXPR
10534            with TREE_SIDE_EFFECTS that indicates this is not an integral
10535            constant expression.  */
10536         if (processing_template_decl
10537             && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
10538           {
10539             gcc_assert (TREE_CODE (max) == NOP_EXPR);
10540             TREE_SIDE_EFFECTS (max) = 1;
10541           }
10542
10543         return compute_array_index_type (NULL_TREE, max, complain);
10544       }
10545
10546     case TEMPLATE_TYPE_PARM:
10547     case TEMPLATE_TEMPLATE_PARM:
10548     case BOUND_TEMPLATE_TEMPLATE_PARM:
10549     case TEMPLATE_PARM_INDEX:
10550       {
10551         int idx;
10552         int level;
10553         int levels;
10554         tree arg = NULL_TREE;
10555
10556         r = NULL_TREE;
10557
10558         gcc_assert (TREE_VEC_LENGTH (args) > 0);
10559         template_parm_level_and_index (t, &level, &idx); 
10560
10561         levels = TMPL_ARGS_DEPTH (args);
10562         if (level <= levels)
10563           {
10564             arg = TMPL_ARG (args, level, idx);
10565
10566             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
10567               /* See through ARGUMENT_PACK_SELECT arguments. */
10568               arg = ARGUMENT_PACK_SELECT_ARG (arg);
10569           }
10570
10571         if (arg == error_mark_node)
10572           return error_mark_node;
10573         else if (arg != NULL_TREE)
10574           {
10575             if (ARGUMENT_PACK_P (arg))
10576               /* If ARG is an argument pack, we don't actually want to
10577                  perform a substitution here, because substitutions
10578                  for argument packs are only done
10579                  element-by-element. We can get to this point when
10580                  substituting the type of a non-type template
10581                  parameter pack, when that type actually contains
10582                  template parameter packs from an outer template, e.g.,
10583
10584                  template<typename... Types> struct A {
10585                    template<Types... Values> struct B { };
10586                  };  */
10587               return t;
10588
10589             if (code == TEMPLATE_TYPE_PARM)
10590               {
10591                 int quals;
10592                 gcc_assert (TYPE_P (arg));
10593
10594                 quals = cp_type_quals (arg) | cp_type_quals (t);
10595                   
10596                 return cp_build_qualified_type_real
10597                   (arg, quals, complain | tf_ignore_bad_quals);
10598               }
10599             else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
10600               {
10601                 /* We are processing a type constructed from a
10602                    template template parameter.  */
10603                 tree argvec = tsubst (TYPE_TI_ARGS (t),
10604                                       args, complain, in_decl);
10605                 if (argvec == error_mark_node)
10606                   return error_mark_node;
10607
10608                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
10609                    are resolving nested-types in the signature of a
10610                    member function templates.  Otherwise ARG is a
10611                    TEMPLATE_DECL and is the real template to be
10612                    instantiated.  */
10613                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
10614                   arg = TYPE_NAME (arg);
10615
10616                 r = lookup_template_class (arg,
10617                                            argvec, in_decl,
10618                                            DECL_CONTEXT (arg),
10619                                             /*entering_scope=*/0,
10620                                            complain);
10621                 return cp_build_qualified_type_real
10622                   (r, cp_type_quals (t), complain);
10623               }
10624             else
10625               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
10626               return unshare_expr (arg);
10627           }
10628
10629         if (level == 1)
10630           /* This can happen during the attempted tsubst'ing in
10631              unify.  This means that we don't yet have any information
10632              about the template parameter in question.  */
10633           return t;
10634
10635         /* If we get here, we must have been looking at a parm for a
10636            more deeply nested template.  Make a new version of this
10637            template parameter, but with a lower level.  */
10638         switch (code)
10639           {
10640           case TEMPLATE_TYPE_PARM:
10641           case TEMPLATE_TEMPLATE_PARM:
10642           case BOUND_TEMPLATE_TEMPLATE_PARM:
10643             if (cp_type_quals (t))
10644               {
10645                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
10646                 r = cp_build_qualified_type_real
10647                   (r, cp_type_quals (t),
10648                    complain | (code == TEMPLATE_TYPE_PARM
10649                                ? tf_ignore_bad_quals : 0));
10650               }
10651             else
10652               {
10653                 r = copy_type (t);
10654                 TEMPLATE_TYPE_PARM_INDEX (r)
10655                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
10656                                                 r, levels, args, complain);
10657                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
10658                 TYPE_MAIN_VARIANT (r) = r;
10659                 TYPE_POINTER_TO (r) = NULL_TREE;
10660                 TYPE_REFERENCE_TO (r) = NULL_TREE;
10661
10662                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
10663                   /* We have reduced the level of the template
10664                      template parameter, but not the levels of its
10665                      template parameters, so canonical_type_parameter
10666                      will not be able to find the canonical template
10667                      template parameter for this level. Thus, we
10668                      require structural equality checking to compare
10669                      TEMPLATE_TEMPLATE_PARMs. */
10670                   SET_TYPE_STRUCTURAL_EQUALITY (r);
10671                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
10672                   SET_TYPE_STRUCTURAL_EQUALITY (r);
10673                 else
10674                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
10675
10676                 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
10677                   {
10678                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
10679                                           complain, in_decl);
10680                     if (argvec == error_mark_node)
10681                       return error_mark_node;
10682
10683                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
10684                       = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
10685                   }
10686               }
10687             break;
10688
10689           case TEMPLATE_PARM_INDEX:
10690             r = reduce_template_parm_level (t, type, levels, args, complain);
10691             break;
10692
10693           default:
10694             gcc_unreachable ();
10695           }
10696
10697         return r;
10698       }
10699
10700     case TREE_LIST:
10701       {
10702         tree purpose, value, chain;
10703
10704         if (t == void_list_node)
10705           return t;
10706
10707         purpose = TREE_PURPOSE (t);
10708         if (purpose)
10709           {
10710             purpose = tsubst (purpose, args, complain, in_decl);
10711             if (purpose == error_mark_node)
10712               return error_mark_node;
10713           }
10714         value = TREE_VALUE (t);
10715         if (value)
10716           {
10717             value = tsubst (value, args, complain, in_decl);
10718             if (value == error_mark_node)
10719               return error_mark_node;
10720           }
10721         chain = TREE_CHAIN (t);
10722         if (chain && chain != void_type_node)
10723           {
10724             chain = tsubst (chain, args, complain, in_decl);
10725             if (chain == error_mark_node)
10726               return error_mark_node;
10727           }
10728         if (purpose == TREE_PURPOSE (t)
10729             && value == TREE_VALUE (t)
10730             && chain == TREE_CHAIN (t))
10731           return t;
10732         return hash_tree_cons (purpose, value, chain);
10733       }
10734
10735     case TREE_BINFO:
10736       /* We should never be tsubsting a binfo.  */
10737       gcc_unreachable ();
10738
10739     case TREE_VEC:
10740       /* A vector of template arguments.  */
10741       gcc_assert (!type);
10742       return tsubst_template_args (t, args, complain, in_decl);
10743
10744     case POINTER_TYPE:
10745     case REFERENCE_TYPE:
10746       {
10747         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
10748           return t;
10749
10750         /* [temp.deduct]
10751
10752            Type deduction may fail for any of the following
10753            reasons:
10754
10755            -- Attempting to create a pointer to reference type.
10756            -- Attempting to create a reference to a reference type or
10757               a reference to void.
10758
10759           Core issue 106 says that creating a reference to a reference
10760           during instantiation is no longer a cause for failure. We
10761           only enforce this check in strict C++98 mode.  */
10762         if ((TREE_CODE (type) == REFERENCE_TYPE
10763              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
10764             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
10765           {
10766             static location_t last_loc;
10767
10768             /* We keep track of the last time we issued this error
10769                message to avoid spewing a ton of messages during a
10770                single bad template instantiation.  */
10771             if (complain & tf_error
10772                 && last_loc != input_location)
10773               {
10774                 if (TREE_CODE (type) == VOID_TYPE)
10775                   error ("forming reference to void");
10776                else if (code == POINTER_TYPE)
10777                  error ("forming pointer to reference type %qT", type);
10778                else
10779                   error ("forming reference to reference type %qT", type);
10780                 last_loc = input_location;
10781               }
10782
10783             return error_mark_node;
10784           }
10785         else if (code == POINTER_TYPE)
10786           {
10787             r = build_pointer_type (type);
10788             if (TREE_CODE (type) == METHOD_TYPE)
10789               r = build_ptrmemfunc_type (r);
10790           }
10791         else if (TREE_CODE (type) == REFERENCE_TYPE)
10792           /* In C++0x, during template argument substitution, when there is an
10793              attempt to create a reference to a reference type, reference
10794              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
10795
10796              "If a template-argument for a template-parameter T names a type
10797              that is a reference to a type A, an attempt to create the type
10798              'lvalue reference to cv T' creates the type 'lvalue reference to
10799              A,' while an attempt to create the type type rvalue reference to
10800              cv T' creates the type T"
10801           */
10802           r = cp_build_reference_type
10803               (TREE_TYPE (type),
10804                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
10805         else
10806           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
10807         r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
10808
10809         if (r != error_mark_node)
10810           /* Will this ever be needed for TYPE_..._TO values?  */
10811           layout_type (r);
10812
10813         return r;
10814       }
10815     case OFFSET_TYPE:
10816       {
10817         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
10818         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
10819           {
10820             /* [temp.deduct]
10821
10822                Type deduction may fail for any of the following
10823                reasons:
10824
10825                -- Attempting to create "pointer to member of T" when T
10826                   is not a class type.  */
10827             if (complain & tf_error)
10828               error ("creating pointer to member of non-class type %qT", r);
10829             return error_mark_node;
10830           }
10831         if (TREE_CODE (type) == REFERENCE_TYPE)
10832           {
10833             if (complain & tf_error)
10834               error ("creating pointer to member reference type %qT", type);
10835             return error_mark_node;
10836           }
10837         if (TREE_CODE (type) == VOID_TYPE)
10838           {
10839             if (complain & tf_error)
10840               error ("creating pointer to member of type void");
10841             return error_mark_node;
10842           }
10843         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
10844         if (TREE_CODE (type) == FUNCTION_TYPE)
10845           {
10846             /* The type of the implicit object parameter gets its
10847                cv-qualifiers from the FUNCTION_TYPE. */
10848             tree memptr;
10849             tree method_type = build_memfn_type (type, r, type_memfn_quals (type));
10850             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
10851             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
10852                                                  complain);
10853           }
10854         else
10855           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
10856                                                cp_type_quals (t),
10857                                                complain);
10858       }
10859     case FUNCTION_TYPE:
10860     case METHOD_TYPE:
10861       {
10862         tree fntype;
10863         tree specs;
10864         fntype = tsubst_function_type (t, args, complain, in_decl);
10865         if (fntype == error_mark_node)
10866           return error_mark_node;
10867
10868         /* Substitute the exception specification.  */
10869         specs = tsubst_exception_specification (t, args, complain,
10870                                                 in_decl);
10871         if (specs == error_mark_node)
10872           return error_mark_node;
10873         if (specs)
10874           fntype = build_exception_variant (fntype, specs);
10875         return fntype;
10876       }
10877     case ARRAY_TYPE:
10878       {
10879         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
10880         if (domain == error_mark_node)
10881           return error_mark_node;
10882
10883         /* As an optimization, we avoid regenerating the array type if
10884            it will obviously be the same as T.  */
10885         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
10886           return t;
10887
10888         /* These checks should match the ones in grokdeclarator.
10889
10890            [temp.deduct]
10891
10892            The deduction may fail for any of the following reasons:
10893
10894            -- Attempting to create an array with an element type that
10895               is void, a function type, or a reference type, or [DR337]
10896               an abstract class type.  */
10897         if (TREE_CODE (type) == VOID_TYPE
10898             || TREE_CODE (type) == FUNCTION_TYPE
10899             || TREE_CODE (type) == REFERENCE_TYPE)
10900           {
10901             if (complain & tf_error)
10902               error ("creating array of %qT", type);
10903             return error_mark_node;
10904           }
10905         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
10906           {
10907             if (complain & tf_error)
10908               error ("creating array of %qT, which is an abstract class type",
10909                      type);
10910             return error_mark_node;
10911           }
10912
10913         r = build_cplus_array_type (type, domain);
10914
10915         if (TYPE_USER_ALIGN (t))
10916           {
10917             TYPE_ALIGN (r) = TYPE_ALIGN (t);
10918             TYPE_USER_ALIGN (r) = 1;
10919           }
10920
10921         return r;
10922       }
10923
10924     case TYPENAME_TYPE:
10925       {
10926         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
10927                                      in_decl, /*entering_scope=*/1);
10928         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
10929                               complain, in_decl);
10930
10931         if (ctx == error_mark_node || f == error_mark_node)
10932           return error_mark_node;
10933
10934         if (!MAYBE_CLASS_TYPE_P (ctx))
10935           {
10936             if (complain & tf_error)
10937               error ("%qT is not a class, struct, or union type", ctx);
10938             return error_mark_node;
10939           }
10940         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
10941           {
10942             /* Normally, make_typename_type does not require that the CTX
10943                have complete type in order to allow things like:
10944
10945                  template <class T> struct S { typename S<T>::X Y; };
10946
10947                But, such constructs have already been resolved by this
10948                point, so here CTX really should have complete type, unless
10949                it's a partial instantiation.  */
10950             ctx = complete_type (ctx);
10951             if (!COMPLETE_TYPE_P (ctx))
10952               {
10953                 if (complain & tf_error)
10954                   cxx_incomplete_type_error (NULL_TREE, ctx);
10955                 return error_mark_node;
10956               }
10957           }
10958
10959         f = make_typename_type (ctx, f, typename_type,
10960                                 (complain & tf_error) | tf_keep_type_decl);
10961         if (f == error_mark_node)
10962           return f;
10963         if (TREE_CODE (f) == TYPE_DECL)
10964           {
10965             complain |= tf_ignore_bad_quals;
10966             f = TREE_TYPE (f);
10967           }
10968
10969         if (TREE_CODE (f) != TYPENAME_TYPE)
10970           {
10971             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
10972               {
10973                 if (complain & tf_error)
10974                   error ("%qT resolves to %qT, which is not an enumeration type",
10975                          t, f);
10976                 else
10977                   return error_mark_node;
10978               }
10979             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
10980               {
10981                 if (complain & tf_error)
10982                   error ("%qT resolves to %qT, which is is not a class type",
10983                          t, f);
10984                 else
10985                   return error_mark_node;
10986               }
10987           }
10988
10989         return cp_build_qualified_type_real
10990           (f, cp_type_quals (f) | cp_type_quals (t), complain);
10991       }
10992
10993     case UNBOUND_CLASS_TEMPLATE:
10994       {
10995         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
10996                                      in_decl, /*entering_scope=*/1);
10997         tree name = TYPE_IDENTIFIER (t);
10998         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
10999
11000         if (ctx == error_mark_node || name == error_mark_node)
11001           return error_mark_node;
11002
11003         if (parm_list)
11004           parm_list = tsubst_template_parms (parm_list, args, complain);
11005         return make_unbound_class_template (ctx, name, parm_list, complain);
11006       }
11007
11008     case TYPEOF_TYPE:
11009       {
11010         tree type;
11011
11012         ++cp_unevaluated_operand;
11013         ++c_inhibit_evaluation_warnings;
11014
11015         type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
11016                             complain, in_decl,
11017                             /*integral_constant_expression_p=*/false);
11018
11019         --cp_unevaluated_operand;
11020         --c_inhibit_evaluation_warnings;
11021
11022         type = finish_typeof (type);
11023         return cp_build_qualified_type_real (type,
11024                                              cp_type_quals (t)
11025                                              | cp_type_quals (type),
11026                                              complain);
11027       }
11028
11029     case DECLTYPE_TYPE:
11030       {
11031         tree type;
11032
11033         ++cp_unevaluated_operand;
11034         ++c_inhibit_evaluation_warnings;
11035
11036         type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
11037                             complain, in_decl,
11038                             /*integral_constant_expression_p=*/false);
11039
11040         --cp_unevaluated_operand;
11041         --c_inhibit_evaluation_warnings;
11042
11043         if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
11044           type = lambda_capture_field_type (type);
11045         else if (DECLTYPE_FOR_LAMBDA_RETURN (t))
11046           type = lambda_return_type (type);
11047         else
11048           type = finish_decltype_type
11049             (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t), complain);
11050         return cp_build_qualified_type_real (type,
11051                                              cp_type_quals (t)
11052                                              | cp_type_quals (type),
11053                                              complain);
11054       }
11055
11056     case UNDERLYING_TYPE:
11057       {
11058         tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
11059                             complain, in_decl);
11060         return finish_underlying_type (type);
11061       }
11062
11063     case TYPE_ARGUMENT_PACK:
11064     case NONTYPE_ARGUMENT_PACK:
11065       {
11066         tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
11067         tree packed_out = 
11068           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
11069                                 args,
11070                                 complain,
11071                                 in_decl);
11072         SET_ARGUMENT_PACK_ARGS (r, packed_out);
11073
11074         /* For template nontype argument packs, also substitute into
11075            the type.  */
11076         if (code == NONTYPE_ARGUMENT_PACK)
11077           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
11078
11079         return r;
11080       }
11081       break;
11082
11083     case INTEGER_CST:
11084     case REAL_CST:
11085     case STRING_CST:
11086     case PLUS_EXPR:
11087     case MINUS_EXPR:
11088     case NEGATE_EXPR:
11089     case NOP_EXPR:
11090     case INDIRECT_REF:
11091     case ADDR_EXPR:
11092     case CALL_EXPR:
11093     case ARRAY_REF:
11094     case SCOPE_REF:
11095       /* We should use one of the expression tsubsts for these codes.  */
11096       gcc_unreachable ();
11097
11098     default:
11099       sorry ("use of %qs in template", tree_code_name [(int) code]);
11100       return error_mark_node;
11101     }
11102 }
11103
11104 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
11105    type of the expression on the left-hand side of the "." or "->"
11106    operator.  */
11107
11108 static tree
11109 tsubst_baselink (tree baselink, tree object_type,
11110                  tree args, tsubst_flags_t complain, tree in_decl)
11111 {
11112     tree name;
11113     tree qualifying_scope;
11114     tree fns;
11115     tree optype;
11116     tree template_args = 0;
11117     bool template_id_p = false;
11118
11119     /* A baselink indicates a function from a base class.  Both the
11120        BASELINK_ACCESS_BINFO and the base class referenced may
11121        indicate bases of the template class, rather than the
11122        instantiated class.  In addition, lookups that were not
11123        ambiguous before may be ambiguous now.  Therefore, we perform
11124        the lookup again.  */
11125     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
11126     qualifying_scope = tsubst (qualifying_scope, args,
11127                                complain, in_decl);
11128     fns = BASELINK_FUNCTIONS (baselink);
11129     optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
11130     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
11131       {
11132         template_id_p = true;
11133         template_args = TREE_OPERAND (fns, 1);
11134         fns = TREE_OPERAND (fns, 0);
11135         if (template_args)
11136           template_args = tsubst_template_args (template_args, args,
11137                                                 complain, in_decl);
11138       }
11139     name = DECL_NAME (get_first_fn (fns));
11140     if (IDENTIFIER_TYPENAME_P (name))
11141       name = mangle_conv_op_name_for_type (optype);
11142     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
11143     if (!baselink)
11144       return error_mark_node;
11145
11146     /* If lookup found a single function, mark it as used at this
11147        point.  (If it lookup found multiple functions the one selected
11148        later by overload resolution will be marked as used at that
11149        point.)  */
11150     if (BASELINK_P (baselink))
11151       fns = BASELINK_FUNCTIONS (baselink);
11152     if (!template_id_p && !really_overloaded_fn (fns))
11153       mark_used (OVL_CURRENT (fns));
11154
11155     /* Add back the template arguments, if present.  */
11156     if (BASELINK_P (baselink) && template_id_p)
11157       BASELINK_FUNCTIONS (baselink)
11158         = build_nt (TEMPLATE_ID_EXPR,
11159                     BASELINK_FUNCTIONS (baselink),
11160                     template_args);
11161     /* Update the conversion operator type.  */
11162     BASELINK_OPTYPE (baselink) = optype;
11163
11164     if (!object_type)
11165       object_type = current_class_type;
11166     return adjust_result_of_qualified_name_lookup (baselink,
11167                                                    qualifying_scope,
11168                                                    object_type);
11169 }
11170
11171 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
11172    true if the qualified-id will be a postfix-expression in-and-of
11173    itself; false if more of the postfix-expression follows the
11174    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
11175    of "&".  */
11176
11177 static tree
11178 tsubst_qualified_id (tree qualified_id, tree args,
11179                      tsubst_flags_t complain, tree in_decl,
11180                      bool done, bool address_p)
11181 {
11182   tree expr;
11183   tree scope;
11184   tree name;
11185   bool is_template;
11186   tree template_args;
11187
11188   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
11189
11190   /* Figure out what name to look up.  */
11191   name = TREE_OPERAND (qualified_id, 1);
11192   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11193     {
11194       is_template = true;
11195       template_args = TREE_OPERAND (name, 1);
11196       if (template_args)
11197         template_args = tsubst_template_args (template_args, args,
11198                                               complain, in_decl);
11199       name = TREE_OPERAND (name, 0);
11200     }
11201   else
11202     {
11203       is_template = false;
11204       template_args = NULL_TREE;
11205     }
11206
11207   /* Substitute into the qualifying scope.  When there are no ARGS, we
11208      are just trying to simplify a non-dependent expression.  In that
11209      case the qualifying scope may be dependent, and, in any case,
11210      substituting will not help.  */
11211   scope = TREE_OPERAND (qualified_id, 0);
11212   if (args)
11213     {
11214       scope = tsubst (scope, args, complain, in_decl);
11215       expr = tsubst_copy (name, args, complain, in_decl);
11216     }
11217   else
11218     expr = name;
11219
11220   if (dependent_scope_p (scope))
11221     return build_qualified_name (NULL_TREE, scope, expr,
11222                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
11223
11224   if (!BASELINK_P (name) && !DECL_P (expr))
11225     {
11226       if (TREE_CODE (expr) == BIT_NOT_EXPR)
11227         {
11228           /* A BIT_NOT_EXPR is used to represent a destructor.  */
11229           if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
11230             {
11231               error ("qualifying type %qT does not match destructor name ~%qT",
11232                      scope, TREE_OPERAND (expr, 0));
11233               expr = error_mark_node;
11234             }
11235           else
11236             expr = lookup_qualified_name (scope, complete_dtor_identifier,
11237                                           /*is_type_p=*/0, false);
11238         }
11239       else
11240         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
11241       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
11242                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
11243         {
11244           if (complain & tf_error)
11245             {
11246               error ("dependent-name %qE is parsed as a non-type, but "
11247                      "instantiation yields a type", qualified_id);
11248               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
11249             }
11250           return error_mark_node;
11251         }
11252     }
11253
11254   if (DECL_P (expr))
11255     {
11256       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
11257                                            scope);
11258       /* Remember that there was a reference to this entity.  */
11259       mark_used (expr);
11260     }
11261
11262   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
11263     {
11264       if (complain & tf_error)
11265         qualified_name_lookup_error (scope,
11266                                      TREE_OPERAND (qualified_id, 1),
11267                                      expr, input_location);
11268       return error_mark_node;
11269     }
11270
11271   if (is_template)
11272     expr = lookup_template_function (expr, template_args);
11273
11274   if (expr == error_mark_node && complain & tf_error)
11275     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
11276                                  expr, input_location);
11277   else if (TYPE_P (scope))
11278     {
11279       expr = (adjust_result_of_qualified_name_lookup
11280               (expr, scope, current_class_type));
11281       expr = (finish_qualified_id_expr
11282               (scope, expr, done, address_p,
11283                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
11284                /*template_arg_p=*/false));
11285     }
11286
11287   /* Expressions do not generally have reference type.  */
11288   if (TREE_CODE (expr) != SCOPE_REF
11289       /* However, if we're about to form a pointer-to-member, we just
11290          want the referenced member referenced.  */
11291       && TREE_CODE (expr) != OFFSET_REF)
11292     expr = convert_from_reference (expr);
11293
11294   return expr;
11295 }
11296
11297 /* Like tsubst, but deals with expressions.  This function just replaces
11298    template parms; to finish processing the resultant expression, use
11299    tsubst_expr.  */
11300
11301 static tree
11302 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11303 {
11304   enum tree_code code;
11305   tree r;
11306
11307   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
11308     return t;
11309
11310   code = TREE_CODE (t);
11311
11312   switch (code)
11313     {
11314     case PARM_DECL:
11315       r = retrieve_local_specialization (t);
11316
11317       if (r == NULL)
11318         {
11319           tree c;
11320           /* This can happen for a parameter name used later in a function
11321              declaration (such as in a late-specified return type).  Just
11322              make a dummy decl, since it's only used for its type.  */
11323           gcc_assert (cp_unevaluated_operand != 0);
11324           /* We copy T because want to tsubst the PARM_DECL only,
11325              not the following PARM_DECLs that are chained to T.  */
11326           c = copy_node (t);
11327           r = tsubst_decl (c, args, complain);
11328           /* Give it the template pattern as its context; its true context
11329              hasn't been instantiated yet and this is good enough for
11330              mangling.  */
11331           DECL_CONTEXT (r) = DECL_CONTEXT (t);
11332         }
11333       
11334       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
11335         r = ARGUMENT_PACK_SELECT_ARG (r);
11336       mark_used (r);
11337       return r;
11338
11339     case CONST_DECL:
11340       {
11341         tree enum_type;
11342         tree v;
11343
11344         if (DECL_TEMPLATE_PARM_P (t))
11345           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
11346         /* There is no need to substitute into namespace-scope
11347            enumerators.  */
11348         if (DECL_NAMESPACE_SCOPE_P (t))
11349           return t;
11350         /* If ARGS is NULL, then T is known to be non-dependent.  */
11351         if (args == NULL_TREE)
11352           return integral_constant_value (t);
11353
11354         /* Unfortunately, we cannot just call lookup_name here.
11355            Consider:
11356
11357              template <int I> int f() {
11358              enum E { a = I };
11359              struct S { void g() { E e = a; } };
11360              };
11361
11362            When we instantiate f<7>::S::g(), say, lookup_name is not
11363            clever enough to find f<7>::a.  */
11364         enum_type
11365           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
11366                               /*entering_scope=*/0);
11367
11368         for (v = TYPE_VALUES (enum_type);
11369              v != NULL_TREE;
11370              v = TREE_CHAIN (v))
11371           if (TREE_PURPOSE (v) == DECL_NAME (t))
11372             return TREE_VALUE (v);
11373
11374           /* We didn't find the name.  That should never happen; if
11375              name-lookup found it during preliminary parsing, we
11376              should find it again here during instantiation.  */
11377         gcc_unreachable ();
11378       }
11379       return t;
11380
11381     case FIELD_DECL:
11382       if (DECL_CONTEXT (t))
11383         {
11384           tree ctx;
11385
11386           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
11387                                   /*entering_scope=*/1);
11388           if (ctx != DECL_CONTEXT (t))
11389             {
11390               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
11391               if (!r)
11392                 {
11393                   if (complain & tf_error)
11394                     error ("using invalid field %qD", t);
11395                   return error_mark_node;
11396                 }
11397               return r;
11398             }
11399         }
11400
11401       return t;
11402
11403     case VAR_DECL:
11404     case FUNCTION_DECL:
11405       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
11406           || local_variable_p (t))
11407         t = tsubst (t, args, complain, in_decl);
11408       mark_used (t);
11409       return t;
11410
11411     case OVERLOAD:
11412       /* An OVERLOAD will always be a non-dependent overload set; an
11413          overload set from function scope will just be represented with an
11414          IDENTIFIER_NODE, and from class scope with a BASELINK.  */
11415       gcc_assert (!uses_template_parms (t));
11416       return t;
11417
11418     case BASELINK:
11419       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
11420
11421     case TEMPLATE_DECL:
11422       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
11423         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
11424                        args, complain, in_decl);
11425       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
11426         return tsubst (t, args, complain, in_decl);
11427       else if (DECL_CLASS_SCOPE_P (t)
11428                && uses_template_parms (DECL_CONTEXT (t)))
11429         {
11430           /* Template template argument like the following example need
11431              special treatment:
11432
11433                template <template <class> class TT> struct C {};
11434                template <class T> struct D {
11435                  template <class U> struct E {};
11436                  C<E> c;                                // #1
11437                };
11438                D<int> d;                                // #2
11439
11440              We are processing the template argument `E' in #1 for
11441              the template instantiation #2.  Originally, `E' is a
11442              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
11443              have to substitute this with one having context `D<int>'.  */
11444
11445           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
11446           return lookup_field (context, DECL_NAME(t), 0, false);
11447         }
11448       else
11449         /* Ordinary template template argument.  */
11450         return t;
11451
11452     case CAST_EXPR:
11453     case REINTERPRET_CAST_EXPR:
11454     case CONST_CAST_EXPR:
11455     case STATIC_CAST_EXPR:
11456     case DYNAMIC_CAST_EXPR:
11457     case NOP_EXPR:
11458       return build1
11459         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11460          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
11461
11462     case SIZEOF_EXPR:
11463       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
11464         {
11465
11466           tree expanded;
11467           int len = 0;
11468
11469           ++cp_unevaluated_operand;
11470           ++c_inhibit_evaluation_warnings;
11471           /* We only want to compute the number of arguments.  */
11472           expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
11473                                             complain, in_decl);
11474           --cp_unevaluated_operand;
11475           --c_inhibit_evaluation_warnings;
11476
11477           if (TREE_CODE (expanded) == TREE_VEC)
11478             len = TREE_VEC_LENGTH (expanded);
11479
11480           if (expanded == error_mark_node)
11481             return error_mark_node;
11482           else if (PACK_EXPANSION_P (expanded)
11483                    || (TREE_CODE (expanded) == TREE_VEC
11484                        && len > 0
11485                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
11486             {
11487               if (TREE_CODE (expanded) == TREE_VEC)
11488                 expanded = TREE_VEC_ELT (expanded, len - 1);
11489
11490               if (TYPE_P (expanded))
11491                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
11492                                                    complain & tf_error);
11493               else
11494                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
11495                                                    complain & tf_error);
11496             }
11497           else
11498             return build_int_cst (size_type_node, len);
11499         }
11500       /* Fall through */
11501
11502     case INDIRECT_REF:
11503     case NEGATE_EXPR:
11504     case TRUTH_NOT_EXPR:
11505     case BIT_NOT_EXPR:
11506     case ADDR_EXPR:
11507     case UNARY_PLUS_EXPR:      /* Unary + */
11508     case ALIGNOF_EXPR:
11509     case AT_ENCODE_EXPR:
11510     case ARROW_EXPR:
11511     case THROW_EXPR:
11512     case TYPEID_EXPR:
11513     case REALPART_EXPR:
11514     case IMAGPART_EXPR:
11515       return build1
11516         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11517          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
11518
11519     case COMPONENT_REF:
11520       {
11521         tree object;
11522         tree name;
11523
11524         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
11525         name = TREE_OPERAND (t, 1);
11526         if (TREE_CODE (name) == BIT_NOT_EXPR)
11527           {
11528             name = tsubst_copy (TREE_OPERAND (name, 0), args,
11529                                 complain, in_decl);
11530             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
11531           }
11532         else if (TREE_CODE (name) == SCOPE_REF
11533                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
11534           {
11535             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
11536                                      complain, in_decl);
11537             name = TREE_OPERAND (name, 1);
11538             name = tsubst_copy (TREE_OPERAND (name, 0), args,
11539                                 complain, in_decl);
11540             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
11541             name = build_qualified_name (/*type=*/NULL_TREE,
11542                                          base, name,
11543                                          /*template_p=*/false);
11544           }
11545         else if (TREE_CODE (name) == BASELINK)
11546           name = tsubst_baselink (name,
11547                                   non_reference (TREE_TYPE (object)),
11548                                   args, complain,
11549                                   in_decl);
11550         else
11551           name = tsubst_copy (name, args, complain, in_decl);
11552         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
11553       }
11554
11555     case PLUS_EXPR:
11556     case MINUS_EXPR:
11557     case MULT_EXPR:
11558     case TRUNC_DIV_EXPR:
11559     case CEIL_DIV_EXPR:
11560     case FLOOR_DIV_EXPR:
11561     case ROUND_DIV_EXPR:
11562     case EXACT_DIV_EXPR:
11563     case BIT_AND_EXPR:
11564     case BIT_IOR_EXPR:
11565     case BIT_XOR_EXPR:
11566     case TRUNC_MOD_EXPR:
11567     case FLOOR_MOD_EXPR:
11568     case TRUTH_ANDIF_EXPR:
11569     case TRUTH_ORIF_EXPR:
11570     case TRUTH_AND_EXPR:
11571     case TRUTH_OR_EXPR:
11572     case RSHIFT_EXPR:
11573     case LSHIFT_EXPR:
11574     case RROTATE_EXPR:
11575     case LROTATE_EXPR:
11576     case EQ_EXPR:
11577     case NE_EXPR:
11578     case MAX_EXPR:
11579     case MIN_EXPR:
11580     case LE_EXPR:
11581     case GE_EXPR:
11582     case LT_EXPR:
11583     case GT_EXPR:
11584     case COMPOUND_EXPR:
11585     case DOTSTAR_EXPR:
11586     case MEMBER_REF:
11587     case PREDECREMENT_EXPR:
11588     case PREINCREMENT_EXPR:
11589     case POSTDECREMENT_EXPR:
11590     case POSTINCREMENT_EXPR:
11591       return build_nt
11592         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11593          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11594
11595     case SCOPE_REF:
11596       return build_qualified_name (/*type=*/NULL_TREE,
11597                                    tsubst_copy (TREE_OPERAND (t, 0),
11598                                                 args, complain, in_decl),
11599                                    tsubst_copy (TREE_OPERAND (t, 1),
11600                                                 args, complain, in_decl),
11601                                    QUALIFIED_NAME_IS_TEMPLATE (t));
11602
11603     case ARRAY_REF:
11604       return build_nt
11605         (ARRAY_REF,
11606          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11607          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11608          NULL_TREE, NULL_TREE);
11609
11610     case CALL_EXPR:
11611       {
11612         int n = VL_EXP_OPERAND_LENGTH (t);
11613         tree result = build_vl_exp (CALL_EXPR, n);
11614         int i;
11615         for (i = 0; i < n; i++)
11616           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
11617                                              complain, in_decl);
11618         return result;
11619       }
11620
11621     case COND_EXPR:
11622     case MODOP_EXPR:
11623     case PSEUDO_DTOR_EXPR:
11624       {
11625         r = build_nt
11626           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11627            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11628            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
11629         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
11630         return r;
11631       }
11632
11633     case NEW_EXPR:
11634       {
11635         r = build_nt
11636         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11637          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11638          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
11639         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
11640         return r;
11641       }
11642
11643     case DELETE_EXPR:
11644       {
11645         r = build_nt
11646         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11647          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11648         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
11649         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
11650         return r;
11651       }
11652
11653     case TEMPLATE_ID_EXPR:
11654       {
11655         /* Substituted template arguments */
11656         tree fn = TREE_OPERAND (t, 0);
11657         tree targs = TREE_OPERAND (t, 1);
11658
11659         fn = tsubst_copy (fn, args, complain, in_decl);
11660         if (targs)
11661           targs = tsubst_template_args (targs, args, complain, in_decl);
11662
11663         return lookup_template_function (fn, targs);
11664       }
11665
11666     case TREE_LIST:
11667       {
11668         tree purpose, value, chain;
11669
11670         if (t == void_list_node)
11671           return t;
11672
11673         purpose = TREE_PURPOSE (t);
11674         if (purpose)
11675           purpose = tsubst_copy (purpose, args, complain, in_decl);
11676         value = TREE_VALUE (t);
11677         if (value)
11678           value = tsubst_copy (value, args, complain, in_decl);
11679         chain = TREE_CHAIN (t);
11680         if (chain && chain != void_type_node)
11681           chain = tsubst_copy (chain, args, complain, in_decl);
11682         if (purpose == TREE_PURPOSE (t)
11683             && value == TREE_VALUE (t)
11684             && chain == TREE_CHAIN (t))
11685           return t;
11686         return tree_cons (purpose, value, chain);
11687       }
11688
11689     case RECORD_TYPE:
11690     case UNION_TYPE:
11691     case ENUMERAL_TYPE:
11692     case INTEGER_TYPE:
11693     case TEMPLATE_TYPE_PARM:
11694     case TEMPLATE_TEMPLATE_PARM:
11695     case BOUND_TEMPLATE_TEMPLATE_PARM:
11696     case TEMPLATE_PARM_INDEX:
11697     case POINTER_TYPE:
11698     case REFERENCE_TYPE:
11699     case OFFSET_TYPE:
11700     case FUNCTION_TYPE:
11701     case METHOD_TYPE:
11702     case ARRAY_TYPE:
11703     case TYPENAME_TYPE:
11704     case UNBOUND_CLASS_TEMPLATE:
11705     case TYPEOF_TYPE:
11706     case DECLTYPE_TYPE:
11707     case TYPE_DECL:
11708       return tsubst (t, args, complain, in_decl);
11709
11710     case IDENTIFIER_NODE:
11711       if (IDENTIFIER_TYPENAME_P (t))
11712         {
11713           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11714           return mangle_conv_op_name_for_type (new_type);
11715         }
11716       else
11717         return t;
11718
11719     case CONSTRUCTOR:
11720       /* This is handled by tsubst_copy_and_build.  */
11721       gcc_unreachable ();
11722
11723     case VA_ARG_EXPR:
11724       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
11725                                           in_decl),
11726                              tsubst (TREE_TYPE (t), args, complain, in_decl));
11727
11728     case CLEANUP_POINT_EXPR:
11729       /* We shouldn't have built any of these during initial template
11730          generation.  Instead, they should be built during instantiation
11731          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
11732       gcc_unreachable ();
11733
11734     case OFFSET_REF:
11735       r = build2
11736         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11737          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11738          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11739       PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
11740       mark_used (TREE_OPERAND (r, 1));
11741       return r;
11742
11743     case EXPR_PACK_EXPANSION:
11744       error ("invalid use of pack expansion expression");
11745       return error_mark_node;
11746
11747     case NONTYPE_ARGUMENT_PACK:
11748       error ("use %<...%> to expand argument pack");
11749       return error_mark_node;
11750
11751     case INTEGER_CST:
11752     case REAL_CST:
11753     case STRING_CST:
11754     case COMPLEX_CST:
11755       {
11756         /* Instantiate any typedefs in the type.  */
11757         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11758         r = fold_convert (type, t);
11759         gcc_assert (TREE_CODE (r) == code);
11760         return r;
11761       }
11762
11763     case PTRMEM_CST:
11764       /* These can sometimes show up in a partial instantiation, but never
11765          involve template parms.  */
11766       gcc_assert (!uses_template_parms (t));
11767       return t;
11768
11769     default:
11770       /* We shouldn't get here, but keep going if !ENABLE_CHECKING.  */
11771       gcc_checking_assert (false);
11772       return t;
11773     }
11774 }
11775
11776 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
11777
11778 static tree
11779 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
11780                     tree in_decl)
11781 {
11782   tree new_clauses = NULL, nc, oc;
11783
11784   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
11785     {
11786       nc = copy_node (oc);
11787       OMP_CLAUSE_CHAIN (nc) = new_clauses;
11788       new_clauses = nc;
11789
11790       switch (OMP_CLAUSE_CODE (nc))
11791         {
11792         case OMP_CLAUSE_LASTPRIVATE:
11793           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
11794             {
11795               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
11796               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
11797                            in_decl, /*integral_constant_expression_p=*/false);
11798               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
11799                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
11800             }
11801           /* FALLTHRU */
11802         case OMP_CLAUSE_PRIVATE:
11803         case OMP_CLAUSE_SHARED:
11804         case OMP_CLAUSE_FIRSTPRIVATE:
11805         case OMP_CLAUSE_REDUCTION:
11806         case OMP_CLAUSE_COPYIN:
11807         case OMP_CLAUSE_COPYPRIVATE:
11808         case OMP_CLAUSE_IF:
11809         case OMP_CLAUSE_NUM_THREADS:
11810         case OMP_CLAUSE_SCHEDULE:
11811         case OMP_CLAUSE_COLLAPSE:
11812           OMP_CLAUSE_OPERAND (nc, 0)
11813             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
11814                            in_decl, /*integral_constant_expression_p=*/false);
11815           break;
11816         case OMP_CLAUSE_NOWAIT:
11817         case OMP_CLAUSE_ORDERED:
11818         case OMP_CLAUSE_DEFAULT:
11819         case OMP_CLAUSE_UNTIED:
11820           break;
11821         default:
11822           gcc_unreachable ();
11823         }
11824     }
11825
11826   return finish_omp_clauses (nreverse (new_clauses));
11827 }
11828
11829 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
11830
11831 static tree
11832 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
11833                           tree in_decl)
11834 {
11835 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
11836
11837   tree purpose, value, chain;
11838
11839   if (t == NULL)
11840     return t;
11841
11842   if (TREE_CODE (t) != TREE_LIST)
11843     return tsubst_copy_and_build (t, args, complain, in_decl,
11844                                   /*function_p=*/false,
11845                                   /*integral_constant_expression_p=*/false);
11846
11847   if (t == void_list_node)
11848     return t;
11849
11850   purpose = TREE_PURPOSE (t);
11851   if (purpose)
11852     purpose = RECUR (purpose);
11853   value = TREE_VALUE (t);
11854   if (value && TREE_CODE (value) != LABEL_DECL)
11855     value = RECUR (value);
11856   chain = TREE_CHAIN (t);
11857   if (chain && chain != void_type_node)
11858     chain = RECUR (chain);
11859   return tree_cons (purpose, value, chain);
11860 #undef RECUR
11861 }
11862
11863 /* Substitute one OMP_FOR iterator.  */
11864
11865 static void
11866 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
11867                          tree condv, tree incrv, tree *clauses,
11868                          tree args, tsubst_flags_t complain, tree in_decl,
11869                          bool integral_constant_expression_p)
11870 {
11871 #define RECUR(NODE)                             \
11872   tsubst_expr ((NODE), args, complain, in_decl, \
11873                integral_constant_expression_p)
11874   tree decl, init, cond, incr, auto_node;
11875
11876   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
11877   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
11878   decl = RECUR (TREE_OPERAND (init, 0));
11879   init = TREE_OPERAND (init, 1);
11880   auto_node = type_uses_auto (TREE_TYPE (decl));
11881   if (auto_node && init)
11882     {
11883       tree init_expr = init;
11884       if (TREE_CODE (init_expr) == DECL_EXPR)
11885         init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
11886       init_expr = RECUR (init_expr);
11887       TREE_TYPE (decl)
11888         = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
11889     }
11890   gcc_assert (!type_dependent_expression_p (decl));
11891
11892   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
11893     {
11894       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
11895       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
11896       if (TREE_CODE (incr) == MODIFY_EXPR)
11897         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
11898                                     RECUR (TREE_OPERAND (incr, 1)),
11899                                     complain);
11900       else
11901         incr = RECUR (incr);
11902       TREE_VEC_ELT (declv, i) = decl;
11903       TREE_VEC_ELT (initv, i) = init;
11904       TREE_VEC_ELT (condv, i) = cond;
11905       TREE_VEC_ELT (incrv, i) = incr;
11906       return;
11907     }
11908
11909   if (init && TREE_CODE (init) != DECL_EXPR)
11910     {
11911       tree c;
11912       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
11913         {
11914           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
11915                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
11916               && OMP_CLAUSE_DECL (c) == decl)
11917             break;
11918           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
11919                    && OMP_CLAUSE_DECL (c) == decl)
11920             error ("iteration variable %qD should not be firstprivate", decl);
11921           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
11922                    && OMP_CLAUSE_DECL (c) == decl)
11923             error ("iteration variable %qD should not be reduction", decl);
11924         }
11925       if (c == NULL)
11926         {
11927           c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
11928           OMP_CLAUSE_DECL (c) = decl;
11929           c = finish_omp_clauses (c);
11930           if (c)
11931             {
11932               OMP_CLAUSE_CHAIN (c) = *clauses;
11933               *clauses = c;
11934             }
11935         }
11936     }
11937   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
11938   if (COMPARISON_CLASS_P (cond))
11939     cond = build2 (TREE_CODE (cond), boolean_type_node,
11940                    RECUR (TREE_OPERAND (cond, 0)),
11941                    RECUR (TREE_OPERAND (cond, 1)));
11942   else
11943     cond = RECUR (cond);
11944   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
11945   switch (TREE_CODE (incr))
11946     {
11947     case PREINCREMENT_EXPR:
11948     case PREDECREMENT_EXPR:
11949     case POSTINCREMENT_EXPR:
11950     case POSTDECREMENT_EXPR:
11951       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
11952                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
11953       break;
11954     case MODIFY_EXPR:
11955       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
11956           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
11957         {
11958           tree rhs = TREE_OPERAND (incr, 1);
11959           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
11960                          RECUR (TREE_OPERAND (incr, 0)),
11961                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
11962                                  RECUR (TREE_OPERAND (rhs, 0)),
11963                                  RECUR (TREE_OPERAND (rhs, 1))));
11964         }
11965       else
11966         incr = RECUR (incr);
11967       break;
11968     case MODOP_EXPR:
11969       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
11970           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
11971         {
11972           tree lhs = RECUR (TREE_OPERAND (incr, 0));
11973           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
11974                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
11975                                  TREE_TYPE (decl), lhs,
11976                                  RECUR (TREE_OPERAND (incr, 2))));
11977         }
11978       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
11979                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
11980                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
11981         {
11982           tree rhs = TREE_OPERAND (incr, 2);
11983           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
11984                          RECUR (TREE_OPERAND (incr, 0)),
11985                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
11986                                  RECUR (TREE_OPERAND (rhs, 0)),
11987                                  RECUR (TREE_OPERAND (rhs, 1))));
11988         }
11989       else
11990         incr = RECUR (incr);
11991       break;
11992     default:
11993       incr = RECUR (incr);
11994       break;
11995     }
11996
11997   TREE_VEC_ELT (declv, i) = decl;
11998   TREE_VEC_ELT (initv, i) = init;
11999   TREE_VEC_ELT (condv, i) = cond;
12000   TREE_VEC_ELT (incrv, i) = incr;
12001 #undef RECUR
12002 }
12003
12004 /* Like tsubst_copy for expressions, etc. but also does semantic
12005    processing.  */
12006
12007 static tree
12008 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
12009              bool integral_constant_expression_p)
12010 {
12011 #define RECUR(NODE)                             \
12012   tsubst_expr ((NODE), args, complain, in_decl, \
12013                integral_constant_expression_p)
12014
12015   tree stmt, tmp;
12016
12017   if (t == NULL_TREE || t == error_mark_node)
12018     return t;
12019
12020   if (EXPR_HAS_LOCATION (t))
12021     input_location = EXPR_LOCATION (t);
12022   if (STATEMENT_CODE_P (TREE_CODE (t)))
12023     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
12024
12025   switch (TREE_CODE (t))
12026     {
12027     case STATEMENT_LIST:
12028       {
12029         tree_stmt_iterator i;
12030         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
12031           RECUR (tsi_stmt (i));
12032         break;
12033       }
12034
12035     case CTOR_INITIALIZER:
12036       finish_mem_initializers (tsubst_initializer_list
12037                                (TREE_OPERAND (t, 0), args));
12038       break;
12039
12040     case RETURN_EXPR:
12041       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
12042       break;
12043
12044     case EXPR_STMT:
12045       tmp = RECUR (EXPR_STMT_EXPR (t));
12046       if (EXPR_STMT_STMT_EXPR_RESULT (t))
12047         finish_stmt_expr_expr (tmp, cur_stmt_expr);
12048       else
12049         finish_expr_stmt (tmp);
12050       break;
12051
12052     case USING_STMT:
12053       do_using_directive (USING_STMT_NAMESPACE (t));
12054       break;
12055
12056     case DECL_EXPR:
12057       {
12058         tree decl, pattern_decl;
12059         tree init;
12060
12061         pattern_decl = decl = DECL_EXPR_DECL (t);
12062         if (TREE_CODE (decl) == LABEL_DECL)
12063           finish_label_decl (DECL_NAME (decl));
12064         else if (TREE_CODE (decl) == USING_DECL)
12065           {
12066             tree scope = USING_DECL_SCOPE (decl);
12067             tree name = DECL_NAME (decl);
12068             tree decl;
12069
12070             scope = tsubst (scope, args, complain, in_decl);
12071             decl = lookup_qualified_name (scope, name,
12072                                           /*is_type_p=*/false,
12073                                           /*complain=*/false);
12074             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
12075               qualified_name_lookup_error (scope, name, decl, input_location);
12076             else
12077               do_local_using_decl (decl, scope, name);
12078           }
12079         else
12080           {
12081             init = DECL_INITIAL (decl);
12082             decl = tsubst (decl, args, complain, in_decl);
12083             if (decl != error_mark_node)
12084               {
12085                 /* By marking the declaration as instantiated, we avoid
12086                    trying to instantiate it.  Since instantiate_decl can't
12087                    handle local variables, and since we've already done
12088                    all that needs to be done, that's the right thing to
12089                    do.  */
12090                 if (TREE_CODE (decl) == VAR_DECL)
12091                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12092                 if (TREE_CODE (decl) == VAR_DECL
12093                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
12094                   /* Anonymous aggregates are a special case.  */
12095                   finish_anon_union (decl);
12096                 else
12097                   {
12098                     int const_init = false;
12099                     maybe_push_decl (decl);
12100                     if (TREE_CODE (decl) == VAR_DECL
12101                         && DECL_PRETTY_FUNCTION_P (decl))
12102                       {
12103                         /* For __PRETTY_FUNCTION__ we have to adjust the
12104                            initializer.  */
12105                         const char *const name
12106                           = cxx_printable_name (current_function_decl, 2);
12107                         init = cp_fname_init (name, &TREE_TYPE (decl));
12108                       }
12109                     else
12110                       {
12111                         tree t = RECUR (init);
12112
12113                         if (init && !t)
12114                           {
12115                             /* If we had an initializer but it
12116                                instantiated to nothing,
12117                                value-initialize the object.  This will
12118                                only occur when the initializer was a
12119                                pack expansion where the parameter packs
12120                                used in that expansion were of length
12121                                zero.  */
12122                             init = build_value_init (TREE_TYPE (decl),
12123                                                      complain);
12124                             if (TREE_CODE (init) == AGGR_INIT_EXPR)
12125                               init = get_target_expr_sfinae (init, complain);
12126                           }
12127                         else
12128                           init = t;
12129                       }
12130
12131                     if (TREE_CODE (decl) == VAR_DECL)
12132                       const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
12133                                     (pattern_decl));
12134                     cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
12135                   }
12136               }
12137           }
12138
12139         /* A DECL_EXPR can also be used as an expression, in the condition
12140            clause of an if/for/while construct.  */
12141         return decl;
12142       }
12143
12144     case FOR_STMT:
12145       stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12146       RECUR (FOR_INIT_STMT (t));
12147       finish_for_init_stmt (stmt);
12148       tmp = RECUR (FOR_COND (t));
12149       finish_for_cond (tmp, stmt);
12150       tmp = RECUR (FOR_EXPR (t));
12151       finish_for_expr (tmp, stmt);
12152       RECUR (FOR_BODY (t));
12153       finish_for_stmt (stmt);
12154       break;
12155
12156     case RANGE_FOR_STMT:
12157       {
12158         tree decl, expr;
12159         stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12160         decl = RANGE_FOR_DECL (t);
12161         decl = tsubst (decl, args, complain, in_decl);
12162         maybe_push_decl (decl);
12163         expr = RECUR (RANGE_FOR_EXPR (t));
12164         stmt = cp_convert_range_for (stmt, decl, expr);
12165         RECUR (RANGE_FOR_BODY (t));
12166         finish_for_stmt (stmt);
12167       }
12168       break;
12169
12170     case WHILE_STMT:
12171       stmt = begin_while_stmt ();
12172       tmp = RECUR (WHILE_COND (t));
12173       finish_while_stmt_cond (tmp, stmt);
12174       RECUR (WHILE_BODY (t));
12175       finish_while_stmt (stmt);
12176       break;
12177
12178     case DO_STMT:
12179       stmt = begin_do_stmt ();
12180       RECUR (DO_BODY (t));
12181       finish_do_body (stmt);
12182       tmp = RECUR (DO_COND (t));
12183       finish_do_stmt (tmp, stmt);
12184       break;
12185
12186     case IF_STMT:
12187       stmt = begin_if_stmt ();
12188       tmp = RECUR (IF_COND (t));
12189       finish_if_stmt_cond (tmp, stmt);
12190       RECUR (THEN_CLAUSE (t));
12191       finish_then_clause (stmt);
12192
12193       if (ELSE_CLAUSE (t))
12194         {
12195           begin_else_clause (stmt);
12196           RECUR (ELSE_CLAUSE (t));
12197           finish_else_clause (stmt);
12198         }
12199
12200       finish_if_stmt (stmt);
12201       break;
12202
12203     case BIND_EXPR:
12204       if (BIND_EXPR_BODY_BLOCK (t))
12205         stmt = begin_function_body ();
12206       else
12207         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
12208                                     ? BCS_TRY_BLOCK : 0);
12209
12210       RECUR (BIND_EXPR_BODY (t));
12211
12212       if (BIND_EXPR_BODY_BLOCK (t))
12213         finish_function_body (stmt);
12214       else
12215         finish_compound_stmt (stmt);
12216       break;
12217
12218     case BREAK_STMT:
12219       finish_break_stmt ();
12220       break;
12221
12222     case CONTINUE_STMT:
12223       finish_continue_stmt ();
12224       break;
12225
12226     case SWITCH_STMT:
12227       stmt = begin_switch_stmt ();
12228       tmp = RECUR (SWITCH_STMT_COND (t));
12229       finish_switch_cond (tmp, stmt);
12230       RECUR (SWITCH_STMT_BODY (t));
12231       finish_switch_stmt (stmt);
12232       break;
12233
12234     case CASE_LABEL_EXPR:
12235       finish_case_label (EXPR_LOCATION (t),
12236                          RECUR (CASE_LOW (t)),
12237                          RECUR (CASE_HIGH (t)));
12238       break;
12239
12240     case LABEL_EXPR:
12241       {
12242         tree decl = LABEL_EXPR_LABEL (t);
12243         tree label;
12244
12245         label = finish_label_stmt (DECL_NAME (decl));
12246         if (DECL_ATTRIBUTES (decl) != NULL_TREE)
12247           cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
12248       }
12249       break;
12250
12251     case GOTO_EXPR:
12252       tmp = GOTO_DESTINATION (t);
12253       if (TREE_CODE (tmp) != LABEL_DECL)
12254         /* Computed goto's must be tsubst'd into.  On the other hand,
12255            non-computed gotos must not be; the identifier in question
12256            will have no binding.  */
12257         tmp = RECUR (tmp);
12258       else
12259         tmp = DECL_NAME (tmp);
12260       finish_goto_stmt (tmp);
12261       break;
12262
12263     case ASM_EXPR:
12264       tmp = finish_asm_stmt
12265         (ASM_VOLATILE_P (t),
12266          RECUR (ASM_STRING (t)),
12267          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
12268          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
12269          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
12270          tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
12271       {
12272         tree asm_expr = tmp;
12273         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
12274           asm_expr = TREE_OPERAND (asm_expr, 0);
12275         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
12276       }
12277       break;
12278
12279     case TRY_BLOCK:
12280       if (CLEANUP_P (t))
12281         {
12282           stmt = begin_try_block ();
12283           RECUR (TRY_STMTS (t));
12284           finish_cleanup_try_block (stmt);
12285           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
12286         }
12287       else
12288         {
12289           tree compound_stmt = NULL_TREE;
12290
12291           if (FN_TRY_BLOCK_P (t))
12292             stmt = begin_function_try_block (&compound_stmt);
12293           else
12294             stmt = begin_try_block ();
12295
12296           RECUR (TRY_STMTS (t));
12297
12298           if (FN_TRY_BLOCK_P (t))
12299             finish_function_try_block (stmt);
12300           else
12301             finish_try_block (stmt);
12302
12303           RECUR (TRY_HANDLERS (t));
12304           if (FN_TRY_BLOCK_P (t))
12305             finish_function_handler_sequence (stmt, compound_stmt);
12306           else
12307             finish_handler_sequence (stmt);
12308         }
12309       break;
12310
12311     case HANDLER:
12312       {
12313         tree decl = HANDLER_PARMS (t);
12314
12315         if (decl)
12316           {
12317             decl = tsubst (decl, args, complain, in_decl);
12318             /* Prevent instantiate_decl from trying to instantiate
12319                this variable.  We've already done all that needs to be
12320                done.  */
12321             if (decl != error_mark_node)
12322               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12323           }
12324         stmt = begin_handler ();
12325         finish_handler_parms (decl, stmt);
12326         RECUR (HANDLER_BODY (t));
12327         finish_handler (stmt);
12328       }
12329       break;
12330
12331     case TAG_DEFN:
12332       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
12333       break;
12334
12335     case STATIC_ASSERT:
12336       {
12337         tree condition = 
12338           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
12339                        args,
12340                        complain, in_decl,
12341                        /*integral_constant_expression_p=*/true);
12342         finish_static_assert (condition,
12343                               STATIC_ASSERT_MESSAGE (t),
12344                               STATIC_ASSERT_SOURCE_LOCATION (t),
12345                               /*member_p=*/false);
12346       }
12347       break;
12348
12349     case OMP_PARALLEL:
12350       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
12351                                 args, complain, in_decl);
12352       stmt = begin_omp_parallel ();
12353       RECUR (OMP_PARALLEL_BODY (t));
12354       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
12355         = OMP_PARALLEL_COMBINED (t);
12356       break;
12357
12358     case OMP_TASK:
12359       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
12360                                 args, complain, in_decl);
12361       stmt = begin_omp_task ();
12362       RECUR (OMP_TASK_BODY (t));
12363       finish_omp_task (tmp, stmt);
12364       break;
12365
12366     case OMP_FOR:
12367       {
12368         tree clauses, body, pre_body;
12369         tree declv, initv, condv, incrv;
12370         int i;
12371
12372         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
12373                                       args, complain, in_decl);
12374         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12375         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12376         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12377         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12378
12379         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
12380           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
12381                                    &clauses, args, complain, in_decl,
12382                                    integral_constant_expression_p);
12383
12384         stmt = begin_omp_structured_block ();
12385
12386         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
12387           if (TREE_VEC_ELT (initv, i) == NULL
12388               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
12389             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
12390           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
12391             {
12392               tree init = RECUR (TREE_VEC_ELT (initv, i));
12393               gcc_assert (init == TREE_VEC_ELT (declv, i));
12394               TREE_VEC_ELT (initv, i) = NULL_TREE;
12395             }
12396           else
12397             {
12398               tree decl_expr = TREE_VEC_ELT (initv, i);
12399               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
12400               gcc_assert (init != NULL);
12401               TREE_VEC_ELT (initv, i) = RECUR (init);
12402               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
12403               RECUR (decl_expr);
12404               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
12405             }
12406
12407         pre_body = push_stmt_list ();
12408         RECUR (OMP_FOR_PRE_BODY (t));
12409         pre_body = pop_stmt_list (pre_body);
12410
12411         body = push_stmt_list ();
12412         RECUR (OMP_FOR_BODY (t));
12413         body = pop_stmt_list (body);
12414
12415         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
12416                             body, pre_body, clauses);
12417
12418         add_stmt (finish_omp_structured_block (stmt));
12419       }
12420       break;
12421
12422     case OMP_SECTIONS:
12423     case OMP_SINGLE:
12424       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
12425       stmt = push_stmt_list ();
12426       RECUR (OMP_BODY (t));
12427       stmt = pop_stmt_list (stmt);
12428
12429       t = copy_node (t);
12430       OMP_BODY (t) = stmt;
12431       OMP_CLAUSES (t) = tmp;
12432       add_stmt (t);
12433       break;
12434
12435     case OMP_SECTION:
12436     case OMP_CRITICAL:
12437     case OMP_MASTER:
12438     case OMP_ORDERED:
12439       stmt = push_stmt_list ();
12440       RECUR (OMP_BODY (t));
12441       stmt = pop_stmt_list (stmt);
12442
12443       t = copy_node (t);
12444       OMP_BODY (t) = stmt;
12445       add_stmt (t);
12446       break;
12447
12448     case OMP_ATOMIC:
12449       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
12450       {
12451         tree op1 = TREE_OPERAND (t, 1);
12452         tree lhs = RECUR (TREE_OPERAND (op1, 0));
12453         tree rhs = RECUR (TREE_OPERAND (op1, 1));
12454         finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
12455       }
12456       break;
12457
12458     case EXPR_PACK_EXPANSION:
12459       error ("invalid use of pack expansion expression");
12460       return error_mark_node;
12461
12462     case NONTYPE_ARGUMENT_PACK:
12463       error ("use %<...%> to expand argument pack");
12464       return error_mark_node;
12465
12466     default:
12467       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
12468
12469       return tsubst_copy_and_build (t, args, complain, in_decl,
12470                                     /*function_p=*/false,
12471                                     integral_constant_expression_p);
12472     }
12473
12474   return NULL_TREE;
12475 #undef RECUR
12476 }
12477
12478 /* T is a postfix-expression that is not being used in a function
12479    call.  Return the substituted version of T.  */
12480
12481 static tree
12482 tsubst_non_call_postfix_expression (tree t, tree args,
12483                                     tsubst_flags_t complain,
12484                                     tree in_decl)
12485 {
12486   if (TREE_CODE (t) == SCOPE_REF)
12487     t = tsubst_qualified_id (t, args, complain, in_decl,
12488                              /*done=*/false, /*address_p=*/false);
12489   else
12490     t = tsubst_copy_and_build (t, args, complain, in_decl,
12491                                /*function_p=*/false,
12492                                /*integral_constant_expression_p=*/false);
12493
12494   return t;
12495 }
12496
12497 /* Like tsubst but deals with expressions and performs semantic
12498    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
12499
12500 tree
12501 tsubst_copy_and_build (tree t,
12502                        tree args,
12503                        tsubst_flags_t complain,
12504                        tree in_decl,
12505                        bool function_p,
12506                        bool integral_constant_expression_p)
12507 {
12508 #define RECUR(NODE)                                             \
12509   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
12510                          /*function_p=*/false,                  \
12511                          integral_constant_expression_p)
12512
12513   tree op1;
12514
12515   if (t == NULL_TREE || t == error_mark_node)
12516     return t;
12517
12518   switch (TREE_CODE (t))
12519     {
12520     case USING_DECL:
12521       t = DECL_NAME (t);
12522       /* Fall through.  */
12523     case IDENTIFIER_NODE:
12524       {
12525         tree decl;
12526         cp_id_kind idk;
12527         bool non_integral_constant_expression_p;
12528         const char *error_msg;
12529
12530         if (IDENTIFIER_TYPENAME_P (t))
12531           {
12532             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12533             t = mangle_conv_op_name_for_type (new_type);
12534           }
12535
12536         /* Look up the name.  */
12537         decl = lookup_name (t);
12538
12539         /* By convention, expressions use ERROR_MARK_NODE to indicate
12540            failure, not NULL_TREE.  */
12541         if (decl == NULL_TREE)
12542           decl = error_mark_node;
12543
12544         decl = finish_id_expression (t, decl, NULL_TREE,
12545                                      &idk,
12546                                      integral_constant_expression_p,
12547                                      /*allow_non_integral_constant_expression_p=*/false,
12548                                      &non_integral_constant_expression_p,
12549                                      /*template_p=*/false,
12550                                      /*done=*/true,
12551                                      /*address_p=*/false,
12552                                      /*template_arg_p=*/false,
12553                                      &error_msg,
12554                                      input_location);
12555         if (error_msg)
12556           error (error_msg);
12557         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
12558           decl = unqualified_name_lookup_error (decl);
12559         return decl;
12560       }
12561
12562     case TEMPLATE_ID_EXPR:
12563       {
12564         tree object;
12565         tree templ = RECUR (TREE_OPERAND (t, 0));
12566         tree targs = TREE_OPERAND (t, 1);
12567
12568         if (targs)
12569           targs = tsubst_template_args (targs, args, complain, in_decl);
12570
12571         if (TREE_CODE (templ) == COMPONENT_REF)
12572           {
12573             object = TREE_OPERAND (templ, 0);
12574             templ = TREE_OPERAND (templ, 1);
12575           }
12576         else
12577           object = NULL_TREE;
12578         templ = lookup_template_function (templ, targs);
12579
12580         if (object)
12581           return build3 (COMPONENT_REF, TREE_TYPE (templ),
12582                          object, templ, NULL_TREE);
12583         else
12584           return baselink_for_fns (templ);
12585       }
12586
12587     case INDIRECT_REF:
12588       {
12589         tree r = RECUR (TREE_OPERAND (t, 0));
12590
12591         if (REFERENCE_REF_P (t))
12592           {
12593             /* A type conversion to reference type will be enclosed in
12594                such an indirect ref, but the substitution of the cast
12595                will have also added such an indirect ref.  */
12596             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
12597               r = convert_from_reference (r);
12598           }
12599         else
12600           r = build_x_indirect_ref (r, RO_UNARY_STAR, complain);
12601         return r;
12602       }
12603
12604     case NOP_EXPR:
12605       return build_nop
12606         (tsubst (TREE_TYPE (t), args, complain, in_decl),
12607          RECUR (TREE_OPERAND (t, 0)));
12608
12609     case CAST_EXPR:
12610     case REINTERPRET_CAST_EXPR:
12611     case CONST_CAST_EXPR:
12612     case DYNAMIC_CAST_EXPR:
12613     case STATIC_CAST_EXPR:
12614       {
12615         tree type;
12616         tree op;
12617
12618         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12619         if (integral_constant_expression_p
12620             && !cast_valid_in_integral_constant_expression_p (type))
12621           {
12622             if (complain & tf_error)
12623               error ("a cast to a type other than an integral or "
12624                      "enumeration type cannot appear in a constant-expression");
12625             return error_mark_node; 
12626           }
12627
12628         op = RECUR (TREE_OPERAND (t, 0));
12629
12630         switch (TREE_CODE (t))
12631           {
12632           case CAST_EXPR:
12633             return build_functional_cast (type, op, complain);
12634           case REINTERPRET_CAST_EXPR:
12635             return build_reinterpret_cast (type, op, complain);
12636           case CONST_CAST_EXPR:
12637             return build_const_cast (type, op, complain);
12638           case DYNAMIC_CAST_EXPR:
12639             return build_dynamic_cast (type, op, complain);
12640           case STATIC_CAST_EXPR:
12641             return build_static_cast (type, op, complain);
12642           default:
12643             gcc_unreachable ();
12644           }
12645       }
12646
12647     case POSTDECREMENT_EXPR:
12648     case POSTINCREMENT_EXPR:
12649       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12650                                                 args, complain, in_decl);
12651       return build_x_unary_op (TREE_CODE (t), op1, complain);
12652
12653     case PREDECREMENT_EXPR:
12654     case PREINCREMENT_EXPR:
12655     case NEGATE_EXPR:
12656     case BIT_NOT_EXPR:
12657     case ABS_EXPR:
12658     case TRUTH_NOT_EXPR:
12659     case UNARY_PLUS_EXPR:  /* Unary + */
12660     case REALPART_EXPR:
12661     case IMAGPART_EXPR:
12662       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
12663                                complain);
12664
12665     case ADDR_EXPR:
12666       op1 = TREE_OPERAND (t, 0);
12667       if (TREE_CODE (op1) == LABEL_DECL)
12668         return finish_label_address_expr (DECL_NAME (op1),
12669                                           EXPR_LOCATION (op1));
12670       if (TREE_CODE (op1) == SCOPE_REF)
12671         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
12672                                    /*done=*/true, /*address_p=*/true);
12673       else
12674         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
12675                                                   in_decl);
12676       return build_x_unary_op (ADDR_EXPR, op1, complain);
12677
12678     case PLUS_EXPR:
12679     case MINUS_EXPR:
12680     case MULT_EXPR:
12681     case TRUNC_DIV_EXPR:
12682     case CEIL_DIV_EXPR:
12683     case FLOOR_DIV_EXPR:
12684     case ROUND_DIV_EXPR:
12685     case EXACT_DIV_EXPR:
12686     case BIT_AND_EXPR:
12687     case BIT_IOR_EXPR:
12688     case BIT_XOR_EXPR:
12689     case TRUNC_MOD_EXPR:
12690     case FLOOR_MOD_EXPR:
12691     case TRUTH_ANDIF_EXPR:
12692     case TRUTH_ORIF_EXPR:
12693     case TRUTH_AND_EXPR:
12694     case TRUTH_OR_EXPR:
12695     case RSHIFT_EXPR:
12696     case LSHIFT_EXPR:
12697     case RROTATE_EXPR:
12698     case LROTATE_EXPR:
12699     case EQ_EXPR:
12700     case NE_EXPR:
12701     case MAX_EXPR:
12702     case MIN_EXPR:
12703     case LE_EXPR:
12704     case GE_EXPR:
12705     case LT_EXPR:
12706     case GT_EXPR:
12707     case MEMBER_REF:
12708     case DOTSTAR_EXPR:
12709       return build_x_binary_op
12710         (TREE_CODE (t),
12711          RECUR (TREE_OPERAND (t, 0)),
12712          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
12713           ? ERROR_MARK
12714           : TREE_CODE (TREE_OPERAND (t, 0))),
12715          RECUR (TREE_OPERAND (t, 1)),
12716          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
12717           ? ERROR_MARK
12718           : TREE_CODE (TREE_OPERAND (t, 1))),
12719          /*overloaded_p=*/NULL,
12720          complain);
12721
12722     case SCOPE_REF:
12723       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
12724                                   /*address_p=*/false);
12725     case ARRAY_REF:
12726       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12727                                                 args, complain, in_decl);
12728       return build_x_array_ref (op1, RECUR (TREE_OPERAND (t, 1)), complain);
12729
12730     case SIZEOF_EXPR:
12731       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12732         return tsubst_copy (t, args, complain, in_decl);
12733       /* Fall through */
12734       
12735     case ALIGNOF_EXPR:
12736       op1 = TREE_OPERAND (t, 0);
12737       if (!args)
12738         {
12739           /* When there are no ARGS, we are trying to evaluate a
12740              non-dependent expression from the parser.  Trying to do
12741              the substitutions may not work.  */
12742           if (!TYPE_P (op1))
12743             op1 = TREE_TYPE (op1);
12744         }
12745       else
12746         {
12747           ++cp_unevaluated_operand;
12748           ++c_inhibit_evaluation_warnings;
12749           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
12750                                        /*function_p=*/false,
12751                                        /*integral_constant_expression_p=*/false);
12752           --cp_unevaluated_operand;
12753           --c_inhibit_evaluation_warnings;
12754         }
12755       if (TYPE_P (op1))
12756         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
12757                                            complain & tf_error);
12758       else
12759         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
12760                                            complain & tf_error);
12761
12762     case AT_ENCODE_EXPR:
12763       {
12764         op1 = TREE_OPERAND (t, 0);
12765         ++cp_unevaluated_operand;
12766         ++c_inhibit_evaluation_warnings;
12767         op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
12768                                      /*function_p=*/false,
12769                                      /*integral_constant_expression_p=*/false);
12770         --cp_unevaluated_operand;
12771         --c_inhibit_evaluation_warnings;
12772         return objc_build_encode_expr (op1);
12773       }
12774
12775     case NOEXCEPT_EXPR:
12776       op1 = TREE_OPERAND (t, 0);
12777       ++cp_unevaluated_operand;
12778       ++c_inhibit_evaluation_warnings;
12779       op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
12780                                    /*function_p=*/false,
12781                                    /*integral_constant_expression_p=*/false);
12782       --cp_unevaluated_operand;
12783       --c_inhibit_evaluation_warnings;
12784       return finish_noexcept_expr (op1, complain);
12785
12786     case MODOP_EXPR:
12787       {
12788         tree r = build_x_modify_expr
12789           (RECUR (TREE_OPERAND (t, 0)),
12790            TREE_CODE (TREE_OPERAND (t, 1)),
12791            RECUR (TREE_OPERAND (t, 2)),
12792            complain);
12793         /* TREE_NO_WARNING must be set if either the expression was
12794            parenthesized or it uses an operator such as >>= rather
12795            than plain assignment.  In the former case, it was already
12796            set and must be copied.  In the latter case,
12797            build_x_modify_expr sets it and it must not be reset
12798            here.  */
12799         if (TREE_NO_WARNING (t))
12800           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12801         return r;
12802       }
12803
12804     case ARROW_EXPR:
12805       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12806                                                 args, complain, in_decl);
12807       /* Remember that there was a reference to this entity.  */
12808       if (DECL_P (op1))
12809         mark_used (op1);
12810       return build_x_arrow (op1);
12811
12812     case NEW_EXPR:
12813       {
12814         tree placement = RECUR (TREE_OPERAND (t, 0));
12815         tree init = RECUR (TREE_OPERAND (t, 3));
12816         VEC(tree,gc) *placement_vec;
12817         VEC(tree,gc) *init_vec;
12818         tree ret;
12819
12820         if (placement == NULL_TREE)
12821           placement_vec = NULL;
12822         else
12823           {
12824             placement_vec = make_tree_vector ();
12825             for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
12826               VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement));
12827           }
12828
12829         /* If there was an initializer in the original tree, but it
12830            instantiated to an empty list, then we should pass a
12831            non-NULL empty vector to tell build_new that it was an
12832            empty initializer() rather than no initializer.  This can
12833            only happen when the initializer is a pack expansion whose
12834            parameter packs are of length zero.  */
12835         if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
12836           init_vec = NULL;
12837         else
12838           {
12839             init_vec = make_tree_vector ();
12840             if (init == void_zero_node)
12841               gcc_assert (init_vec != NULL);
12842             else
12843               {
12844                 for (; init != NULL_TREE; init = TREE_CHAIN (init))
12845                   VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init));
12846               }
12847           }
12848
12849         ret = build_new (&placement_vec,
12850                          tsubst (TREE_OPERAND (t, 1), args, complain, in_decl),
12851                          RECUR (TREE_OPERAND (t, 2)),
12852                          &init_vec,
12853                          NEW_EXPR_USE_GLOBAL (t),
12854                          complain);
12855
12856         if (placement_vec != NULL)
12857           release_tree_vector (placement_vec);
12858         if (init_vec != NULL)
12859           release_tree_vector (init_vec);
12860
12861         return ret;
12862       }
12863
12864     case DELETE_EXPR:
12865      return delete_sanity
12866        (RECUR (TREE_OPERAND (t, 0)),
12867         RECUR (TREE_OPERAND (t, 1)),
12868         DELETE_EXPR_USE_VEC (t),
12869         DELETE_EXPR_USE_GLOBAL (t),
12870         complain);
12871
12872     case COMPOUND_EXPR:
12873       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
12874                                     RECUR (TREE_OPERAND (t, 1)),
12875                                     complain);
12876
12877     case CALL_EXPR:
12878       {
12879         tree function;
12880         VEC(tree,gc) *call_args;
12881         unsigned int nargs, i;
12882         bool qualified_p;
12883         bool koenig_p;
12884         tree ret;
12885
12886         function = CALL_EXPR_FN (t);
12887         /* When we parsed the expression,  we determined whether or
12888            not Koenig lookup should be performed.  */
12889         koenig_p = KOENIG_LOOKUP_P (t);
12890         if (TREE_CODE (function) == SCOPE_REF)
12891           {
12892             qualified_p = true;
12893             function = tsubst_qualified_id (function, args, complain, in_decl,
12894                                             /*done=*/false,
12895                                             /*address_p=*/false);
12896           }
12897         else if (koenig_p && TREE_CODE (function) == IDENTIFIER_NODE)
12898           {
12899             /* Do nothing; calling tsubst_copy_and_build on an identifier
12900                would incorrectly perform unqualified lookup again.
12901
12902                Note that we can also have an IDENTIFIER_NODE if the earlier
12903                unqualified lookup found a member function; in that case
12904                koenig_p will be false and we do want to do the lookup
12905                again to find the instantiated member function.
12906
12907                FIXME but doing that causes c++/15272, so we need to stop
12908                using IDENTIFIER_NODE in that situation.  */
12909             qualified_p = false;
12910           }
12911         else
12912           {
12913             if (TREE_CODE (function) == COMPONENT_REF)
12914               {
12915                 tree op = TREE_OPERAND (function, 1);
12916
12917                 qualified_p = (TREE_CODE (op) == SCOPE_REF
12918                                || (BASELINK_P (op)
12919                                    && BASELINK_QUALIFIED_P (op)));
12920               }
12921             else
12922               qualified_p = false;
12923
12924             function = tsubst_copy_and_build (function, args, complain,
12925                                               in_decl,
12926                                               !qualified_p,
12927                                               integral_constant_expression_p);
12928
12929             if (BASELINK_P (function))
12930               qualified_p = true;
12931           }
12932
12933         nargs = call_expr_nargs (t);
12934         call_args = make_tree_vector ();
12935         for (i = 0; i < nargs; ++i)
12936           {
12937             tree arg = CALL_EXPR_ARG (t, i);
12938
12939             if (!PACK_EXPANSION_P (arg))
12940               VEC_safe_push (tree, gc, call_args,
12941                              RECUR (CALL_EXPR_ARG (t, i)));
12942             else
12943               {
12944                 /* Expand the pack expansion and push each entry onto
12945                    CALL_ARGS.  */
12946                 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
12947                 if (TREE_CODE (arg) == TREE_VEC)
12948                   {
12949                     unsigned int len, j;
12950
12951                     len = TREE_VEC_LENGTH (arg);
12952                     for (j = 0; j < len; ++j)
12953                       {
12954                         tree value = TREE_VEC_ELT (arg, j);
12955                         if (value != NULL_TREE)
12956                           value = convert_from_reference (value);
12957                         VEC_safe_push (tree, gc, call_args, value);
12958                       }
12959                   }
12960                 else
12961                   {
12962                     /* A partial substitution.  Add one entry.  */
12963                     VEC_safe_push (tree, gc, call_args, arg);
12964                   }
12965               }
12966           }
12967
12968         /* We do not perform argument-dependent lookup if normal
12969            lookup finds a non-function, in accordance with the
12970            expected resolution of DR 218.  */
12971         if (koenig_p
12972             && ((is_overloaded_fn (function)
12973                  /* If lookup found a member function, the Koenig lookup is
12974                     not appropriate, even if an unqualified-name was used
12975                     to denote the function.  */
12976                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
12977                 || TREE_CODE (function) == IDENTIFIER_NODE)
12978             /* Only do this when substitution turns a dependent call
12979                into a non-dependent call.  */
12980             && type_dependent_expression_p_push (t)
12981             && !any_type_dependent_arguments_p (call_args))
12982           function = perform_koenig_lookup (function, call_args, false,
12983                                             tf_none);
12984
12985         if (TREE_CODE (function) == IDENTIFIER_NODE
12986             && !any_type_dependent_arguments_p (call_args))
12987           {
12988             if (koenig_p && (complain & tf_warning_or_error))
12989               {
12990                 /* For backwards compatibility and good diagnostics, try
12991                    the unqualified lookup again if we aren't in SFINAE
12992                    context.  */
12993                 tree unq = (tsubst_copy_and_build
12994                             (function, args, complain, in_decl, true,
12995                              integral_constant_expression_p));
12996                 if (unq != function)
12997                   {
12998                     tree fn = unq;
12999                     if (TREE_CODE (fn) == COMPONENT_REF)
13000                       fn = TREE_OPERAND (fn, 1);
13001                     if (is_overloaded_fn (fn))
13002                       fn = get_first_fn (fn);
13003                     permerror (EXPR_LOC_OR_HERE (t),
13004                                "%qD was not declared in this scope, "
13005                                "and no declarations were found by "
13006                                "argument-dependent lookup at the point "
13007                                "of instantiation", function);
13008                     if (DECL_CLASS_SCOPE_P (fn))
13009                       {
13010                         inform (EXPR_LOC_OR_HERE (t),
13011                                 "declarations in dependent base %qT are "
13012                                 "not found by unqualified lookup",
13013                                 DECL_CLASS_CONTEXT (fn));
13014                         if (current_class_ptr)
13015                           inform (EXPR_LOC_OR_HERE (t),
13016                                   "use %<this->%D%> instead", function);
13017                         else
13018                           inform (EXPR_LOC_OR_HERE (t),
13019                                   "use %<%T::%D%> instead",
13020                                   TYPE_IDENTIFIER (current_class_type),
13021                                   function);
13022                       }
13023                     else
13024                       inform (0, "%q+D declared here, later in the "
13025                                 "translation unit", fn);
13026                     function = unq;
13027                   }
13028               }
13029             if (TREE_CODE (function) == IDENTIFIER_NODE)
13030               {
13031                 unqualified_name_lookup_error (function);
13032                 release_tree_vector (call_args);
13033                 return error_mark_node;
13034               }
13035           }
13036
13037         /* Remember that there was a reference to this entity.  */
13038         if (DECL_P (function))
13039           mark_used (function);
13040
13041         if (TREE_CODE (function) == OFFSET_REF)
13042           ret = build_offset_ref_call_from_tree (function, &call_args);
13043         else if (TREE_CODE (function) == COMPONENT_REF)
13044           {
13045             tree instance = TREE_OPERAND (function, 0);
13046             tree fn = TREE_OPERAND (function, 1);
13047
13048             if (processing_template_decl
13049                 && (type_dependent_expression_p (instance)
13050                     || (!BASELINK_P (fn)
13051                         && TREE_CODE (fn) != FIELD_DECL)
13052                     || type_dependent_expression_p (fn)
13053                     || any_type_dependent_arguments_p (call_args)))
13054               ret = build_nt_call_vec (function, call_args);
13055             else if (!BASELINK_P (fn))
13056               ret = finish_call_expr (function, &call_args,
13057                                        /*disallow_virtual=*/false,
13058                                        /*koenig_p=*/false,
13059                                        complain);
13060             else
13061               ret = (build_new_method_call
13062                       (instance, fn,
13063                        &call_args, NULL_TREE,
13064                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
13065                        /*fn_p=*/NULL,
13066                        complain));
13067           }
13068         else
13069           ret = finish_call_expr (function, &call_args,
13070                                   /*disallow_virtual=*/qualified_p,
13071                                   koenig_p,
13072                                   complain);
13073
13074         release_tree_vector (call_args);
13075
13076         return ret;
13077       }
13078
13079     case COND_EXPR:
13080       return build_x_conditional_expr
13081         (RECUR (TREE_OPERAND (t, 0)),
13082          RECUR (TREE_OPERAND (t, 1)),
13083          RECUR (TREE_OPERAND (t, 2)),
13084          complain);
13085
13086     case PSEUDO_DTOR_EXPR:
13087       return finish_pseudo_destructor_expr
13088         (RECUR (TREE_OPERAND (t, 0)),
13089          RECUR (TREE_OPERAND (t, 1)),
13090          tsubst (TREE_OPERAND (t, 2), args, complain, in_decl));
13091
13092     case TREE_LIST:
13093       {
13094         tree purpose, value, chain;
13095
13096         if (t == void_list_node)
13097           return t;
13098
13099         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
13100             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
13101           {
13102             /* We have pack expansions, so expand those and
13103                create a new list out of it.  */
13104             tree purposevec = NULL_TREE;
13105             tree valuevec = NULL_TREE;
13106             tree chain;
13107             int i, len = -1;
13108
13109             /* Expand the argument expressions.  */
13110             if (TREE_PURPOSE (t))
13111               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
13112                                                  complain, in_decl);
13113             if (TREE_VALUE (t))
13114               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
13115                                                complain, in_decl);
13116
13117             /* Build the rest of the list.  */
13118             chain = TREE_CHAIN (t);
13119             if (chain && chain != void_type_node)
13120               chain = RECUR (chain);
13121
13122             /* Determine the number of arguments.  */
13123             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
13124               {
13125                 len = TREE_VEC_LENGTH (purposevec);
13126                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
13127               }
13128             else if (TREE_CODE (valuevec) == TREE_VEC)
13129               len = TREE_VEC_LENGTH (valuevec);
13130             else
13131               {
13132                 /* Since we only performed a partial substitution into
13133                    the argument pack, we only return a single list
13134                    node.  */
13135                 if (purposevec == TREE_PURPOSE (t)
13136                     && valuevec == TREE_VALUE (t)
13137                     && chain == TREE_CHAIN (t))
13138                   return t;
13139
13140                 return tree_cons (purposevec, valuevec, chain);
13141               }
13142             
13143             /* Convert the argument vectors into a TREE_LIST */
13144             i = len;
13145             while (i > 0)
13146               {
13147                 /* Grab the Ith values.  */
13148                 i--;
13149                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
13150                                      : NULL_TREE;
13151                 value 
13152                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
13153                              : NULL_TREE;
13154
13155                 /* Build the list (backwards).  */
13156                 chain = tree_cons (purpose, value, chain);
13157               }
13158
13159             return chain;
13160           }
13161
13162         purpose = TREE_PURPOSE (t);
13163         if (purpose)
13164           purpose = RECUR (purpose);
13165         value = TREE_VALUE (t);
13166         if (value)
13167           value = RECUR (value);
13168         chain = TREE_CHAIN (t);
13169         if (chain && chain != void_type_node)
13170           chain = RECUR (chain);
13171         if (purpose == TREE_PURPOSE (t)
13172             && value == TREE_VALUE (t)
13173             && chain == TREE_CHAIN (t))
13174           return t;
13175         return tree_cons (purpose, value, chain);
13176       }
13177
13178     case COMPONENT_REF:
13179       {
13180         tree object;
13181         tree object_type;
13182         tree member;
13183
13184         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13185                                                      args, complain, in_decl);
13186         /* Remember that there was a reference to this entity.  */
13187         if (DECL_P (object))
13188           mark_used (object);
13189         object_type = TREE_TYPE (object);
13190
13191         member = TREE_OPERAND (t, 1);
13192         if (BASELINK_P (member))
13193           member = tsubst_baselink (member,
13194                                     non_reference (TREE_TYPE (object)),
13195                                     args, complain, in_decl);
13196         else
13197           member = tsubst_copy (member, args, complain, in_decl);
13198         if (member == error_mark_node)
13199           return error_mark_node;
13200
13201         if (object_type && !CLASS_TYPE_P (object_type))
13202           {
13203             if (SCALAR_TYPE_P (object_type))
13204               {
13205                 tree s = NULL_TREE;
13206                 tree dtor = member;
13207
13208                 if (TREE_CODE (dtor) == SCOPE_REF)
13209                   {
13210                     s = TREE_OPERAND (dtor, 0);
13211                     dtor = TREE_OPERAND (dtor, 1);
13212                   }
13213                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
13214                   {
13215                     dtor = TREE_OPERAND (dtor, 0);
13216                     if (TYPE_P (dtor))
13217                       return finish_pseudo_destructor_expr (object, s, dtor);
13218                   }
13219               }
13220           }
13221         else if (TREE_CODE (member) == SCOPE_REF
13222                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
13223           {
13224             tree tmpl;
13225             tree args;
13226
13227             /* Lookup the template functions now that we know what the
13228                scope is.  */
13229             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
13230             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
13231             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
13232                                             /*is_type_p=*/false,
13233                                             /*complain=*/false);
13234             if (BASELINK_P (member))
13235               {
13236                 BASELINK_FUNCTIONS (member)
13237                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
13238                               args);
13239                 member = (adjust_result_of_qualified_name_lookup
13240                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
13241                            object_type));
13242               }
13243             else
13244               {
13245                 qualified_name_lookup_error (object_type, tmpl, member,
13246                                              input_location);
13247                 return error_mark_node;
13248               }
13249           }
13250         else if (TREE_CODE (member) == SCOPE_REF
13251                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
13252                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
13253           {
13254             if (complain & tf_error)
13255               {
13256                 if (TYPE_P (TREE_OPERAND (member, 0)))
13257                   error ("%qT is not a class or namespace",
13258                          TREE_OPERAND (member, 0));
13259                 else
13260                   error ("%qD is not a class or namespace",
13261                          TREE_OPERAND (member, 0));
13262               }
13263             return error_mark_node;
13264           }
13265         else if (TREE_CODE (member) == FIELD_DECL)
13266           return finish_non_static_data_member (member, object, NULL_TREE);
13267
13268         return finish_class_member_access_expr (object, member,
13269                                                 /*template_p=*/false,
13270                                                 complain);
13271       }
13272
13273     case THROW_EXPR:
13274       return build_throw
13275         (RECUR (TREE_OPERAND (t, 0)));
13276
13277     case CONSTRUCTOR:
13278       {
13279         VEC(constructor_elt,gc) *n;
13280         constructor_elt *ce;
13281         unsigned HOST_WIDE_INT idx;
13282         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13283         bool process_index_p;
13284         int newlen;
13285         bool need_copy_p = false;
13286         tree r;
13287
13288         if (type == error_mark_node)
13289           return error_mark_node;
13290
13291         /* digest_init will do the wrong thing if we let it.  */
13292         if (type && TYPE_PTRMEMFUNC_P (type))
13293           return t;
13294
13295         /* We do not want to process the index of aggregate
13296            initializers as they are identifier nodes which will be
13297            looked up by digest_init.  */
13298         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
13299
13300         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
13301         newlen = VEC_length (constructor_elt, n);
13302         FOR_EACH_VEC_ELT (constructor_elt, n, idx, ce)
13303           {
13304             if (ce->index && process_index_p)
13305               ce->index = RECUR (ce->index);
13306
13307             if (PACK_EXPANSION_P (ce->value))
13308               {
13309                 /* Substitute into the pack expansion.  */
13310                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
13311                                                   in_decl);
13312
13313                 if (ce->value == error_mark_node
13314                     || PACK_EXPANSION_P (ce->value))
13315                   ;
13316                 else if (TREE_VEC_LENGTH (ce->value) == 1)
13317                   /* Just move the argument into place.  */
13318                   ce->value = TREE_VEC_ELT (ce->value, 0);
13319                 else
13320                   {
13321                     /* Update the length of the final CONSTRUCTOR
13322                        arguments vector, and note that we will need to
13323                        copy.*/
13324                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
13325                     need_copy_p = true;
13326                   }
13327               }
13328             else
13329               ce->value = RECUR (ce->value);
13330           }
13331
13332         if (need_copy_p)
13333           {
13334             VEC(constructor_elt,gc) *old_n = n;
13335
13336             n = VEC_alloc (constructor_elt, gc, newlen);
13337             FOR_EACH_VEC_ELT (constructor_elt, old_n, idx, ce)
13338               {
13339                 if (TREE_CODE (ce->value) == TREE_VEC)
13340                   {
13341                     int i, len = TREE_VEC_LENGTH (ce->value);
13342                     for (i = 0; i < len; ++i)
13343                       CONSTRUCTOR_APPEND_ELT (n, 0,
13344                                               TREE_VEC_ELT (ce->value, i));
13345                   }
13346                 else
13347                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
13348               }
13349           }
13350
13351         r = build_constructor (init_list_type_node, n);
13352         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
13353
13354         if (TREE_HAS_CONSTRUCTOR (t))
13355           return finish_compound_literal (type, r, complain);
13356
13357         TREE_TYPE (r) = type;
13358         return r;
13359       }
13360
13361     case TYPEID_EXPR:
13362       {
13363         tree operand_0 = TREE_OPERAND (t, 0);
13364         if (TYPE_P (operand_0))
13365           {
13366             operand_0 = tsubst (operand_0, args, complain, in_decl);
13367             return get_typeid (operand_0);
13368           }
13369         else
13370           {
13371             operand_0 = RECUR (operand_0);
13372             return build_typeid (operand_0);
13373           }
13374       }
13375
13376     case VAR_DECL:
13377       if (!args)
13378         return t;
13379       /* Fall through */
13380
13381     case PARM_DECL:
13382       {
13383         tree r = tsubst_copy (t, args, complain, in_decl);
13384
13385         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
13386           /* If the original type was a reference, we'll be wrapped in
13387              the appropriate INDIRECT_REF.  */
13388           r = convert_from_reference (r);
13389         return r;
13390       }
13391
13392     case VA_ARG_EXPR:
13393       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
13394                              tsubst (TREE_TYPE (t), args, complain, in_decl));
13395
13396     case OFFSETOF_EXPR:
13397       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
13398
13399     case TRAIT_EXPR:
13400       {
13401         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
13402                                   complain, in_decl);
13403
13404         tree type2 = TRAIT_EXPR_TYPE2 (t);
13405         if (type2)
13406           type2 = tsubst_copy (type2, args, complain, in_decl);
13407         
13408         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
13409       }
13410
13411     case STMT_EXPR:
13412       {
13413         tree old_stmt_expr = cur_stmt_expr;
13414         tree stmt_expr = begin_stmt_expr ();
13415
13416         cur_stmt_expr = stmt_expr;
13417         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
13418                      integral_constant_expression_p);
13419         stmt_expr = finish_stmt_expr (stmt_expr, false);
13420         cur_stmt_expr = old_stmt_expr;
13421
13422         /* If the resulting list of expression statement is empty,
13423            fold it further into void_zero_node.  */
13424         if (empty_expr_stmt_p (stmt_expr))
13425           stmt_expr = void_zero_node;
13426
13427         return stmt_expr;
13428       }
13429
13430     case CONST_DECL:
13431       t = tsubst_copy (t, args, complain, in_decl);
13432       /* As in finish_id_expression, we resolve enumeration constants
13433          to their underlying values.  */
13434       if (TREE_CODE (t) == CONST_DECL)
13435         {
13436           used_types_insert (TREE_TYPE (t));
13437           return DECL_INITIAL (t);
13438         }
13439       return t;
13440
13441     case LAMBDA_EXPR:
13442       {
13443         tree r = build_lambda_expr ();
13444
13445         tree type = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
13446         TREE_TYPE (r) = type;
13447         CLASSTYPE_LAMBDA_EXPR (type) = r;
13448
13449         LAMBDA_EXPR_LOCATION (r)
13450           = LAMBDA_EXPR_LOCATION (t);
13451         LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
13452           = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
13453         LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
13454         LAMBDA_EXPR_DISCRIMINATOR (r)
13455           = (LAMBDA_EXPR_DISCRIMINATOR (t));
13456         LAMBDA_EXPR_CAPTURE_LIST (r)
13457           = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
13458         LAMBDA_EXPR_THIS_CAPTURE (r)
13459           = RECUR (LAMBDA_EXPR_THIS_CAPTURE (t));
13460         LAMBDA_EXPR_EXTRA_SCOPE (r)
13461           = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
13462
13463         /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
13464         determine_visibility (TYPE_NAME (type));
13465         /* Now that we know visibility, instantiate the type so we have a
13466            declaration of the op() for later calls to lambda_function.  */
13467         complete_type (type);
13468
13469         type = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
13470         if (type)
13471           apply_lambda_return_type (r, type);
13472
13473         return build_lambda_object (r);
13474       }
13475
13476     case TARGET_EXPR:
13477       /* We can get here for a constant initializer of non-dependent type.
13478          FIXME stop folding in cp_parser_initializer_clause.  */
13479       gcc_assert (TREE_CONSTANT (t));
13480       {
13481         tree r = get_target_expr (RECUR (TARGET_EXPR_INITIAL (t)));
13482         TREE_CONSTANT (r) = true;
13483         return r;
13484       }
13485
13486     default:
13487       /* Handle Objective-C++ constructs, if appropriate.  */
13488       {
13489         tree subst
13490           = objcp_tsubst_copy_and_build (t, args, complain,
13491                                          in_decl, /*function_p=*/false);
13492         if (subst)
13493           return subst;
13494       }
13495       return tsubst_copy (t, args, complain, in_decl);
13496     }
13497
13498 #undef RECUR
13499 }
13500
13501 /* Verify that the instantiated ARGS are valid. For type arguments,
13502    make sure that the type's linkage is ok. For non-type arguments,
13503    make sure they are constants if they are integral or enumerations.
13504    Emit an error under control of COMPLAIN, and return TRUE on error.  */
13505
13506 static bool
13507 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
13508 {
13509   if (ARGUMENT_PACK_P (t))
13510     {
13511       tree vec = ARGUMENT_PACK_ARGS (t);
13512       int len = TREE_VEC_LENGTH (vec);
13513       bool result = false;
13514       int i;
13515
13516       for (i = 0; i < len; ++i)
13517         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
13518           result = true;
13519       return result;
13520     }
13521   else if (TYPE_P (t))
13522     {
13523       /* [basic.link]: A name with no linkage (notably, the name
13524          of a class or enumeration declared in a local scope)
13525          shall not be used to declare an entity with linkage.
13526          This implies that names with no linkage cannot be used as
13527          template arguments
13528
13529          DR 757 relaxes this restriction for C++0x.  */
13530       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
13531                  : no_linkage_check (t, /*relaxed_p=*/false));
13532
13533       if (nt)
13534         {
13535           /* DR 488 makes use of a type with no linkage cause
13536              type deduction to fail.  */
13537           if (complain & tf_error)
13538             {
13539               if (TYPE_ANONYMOUS_P (nt))
13540                 error ("%qT is/uses anonymous type", t);
13541               else
13542                 error ("template argument for %qD uses local type %qT",
13543                        tmpl, t);
13544             }
13545           return true;
13546         }
13547       /* In order to avoid all sorts of complications, we do not
13548          allow variably-modified types as template arguments.  */
13549       else if (variably_modified_type_p (t, NULL_TREE))
13550         {
13551           if (complain & tf_error)
13552             error ("%qT is a variably modified type", t);
13553           return true;
13554         }
13555     }
13556   /* A non-type argument of integral or enumerated type must be a
13557      constant.  */
13558   else if (TREE_TYPE (t)
13559            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
13560            && !TREE_CONSTANT (t))
13561     {
13562       if (complain & tf_error)
13563         error ("integral expression %qE is not constant", t);
13564       return true;
13565     }
13566   return false;
13567 }
13568
13569 static bool
13570 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
13571 {
13572   int ix, len = DECL_NTPARMS (tmpl);
13573   bool result = false;
13574
13575   for (ix = 0; ix != len; ix++)
13576     {
13577       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
13578         result = true;
13579     }
13580   if (result && (complain & tf_error))
13581     error ("  trying to instantiate %qD", tmpl);
13582   return result;
13583 }
13584
13585 DEF_VEC_O (spec_entry);
13586 DEF_VEC_ALLOC_O (spec_entry,gc);
13587 static GTY(()) VEC(spec_entry,gc) *current_deduction_vec;
13588 static GTY((param_is (spec_entry))) htab_t current_deduction_htab;
13589
13590 /* In C++0x, it's possible to have a function template whose type depends
13591    on itself recursively.  This is most obvious with decltype, but can also
13592    occur with enumeration scope (c++/48969).  So we need to catch infinite
13593    recursion and reject the substitution at deduction time.
13594
13595    Use of a VEC here is O(n^2) in the depth of function template argument
13596    deduction substitution, but using a hash table creates a lot of constant
13597    overhead for the typical case of very low depth.  So to make the typical
13598    case fast we start out with a VEC and switch to a hash table only if
13599    depth gets to be significant; in one metaprogramming testcase, even at
13600    depth 80 the overhead of the VEC relative to a hash table was only about
13601    0.5% of compile time.  */
13602
13603 static tree
13604 deduction_tsubst_fntype (tree fn, tree targs)
13605 {
13606   unsigned i;
13607   spec_entry **slot;
13608   spec_entry *p;
13609   spec_entry elt;
13610   tree r;
13611   hashval_t hash;
13612
13613   tree fntype = TREE_TYPE (fn);
13614
13615   /* We don't need to worry about this in C++98.  */
13616   if (cxx_dialect < cxx0x)
13617     return tsubst (fntype, targs, tf_none, NULL_TREE);
13618
13619   /* If we're seeing a lot of recursion, switch over to a hash table.  The
13620      constant 40 is fairly arbitrary.  */
13621   if (!current_deduction_htab
13622       && VEC_length (spec_entry, current_deduction_vec) > 40)
13623     {
13624       current_deduction_htab = htab_create_ggc (40*2, hash_specialization,
13625                                                 eq_specializations, ggc_free);
13626       FOR_EACH_VEC_ELT (spec_entry, current_deduction_vec, i, p)
13627         {
13628           slot = (spec_entry **) htab_find_slot (current_deduction_htab,
13629                                                  p, INSERT);
13630           *slot = ggc_alloc_spec_entry ();
13631           **slot = *p;
13632         }
13633       VEC_free (spec_entry, gc, current_deduction_vec);
13634     }
13635
13636   /* Now check everything in the vector, if any.  */
13637   FOR_EACH_VEC_ELT (spec_entry, current_deduction_vec, i, p)
13638     if (p->tmpl == fn && comp_template_args (p->args, targs))
13639       {
13640         p->spec = error_mark_node;
13641         return error_mark_node;
13642       }
13643
13644   elt.tmpl = fn;
13645   elt.args = targs;
13646   elt.spec = NULL_TREE;
13647
13648   /* If we've created a hash table, look there.  */
13649   if (current_deduction_htab)
13650     {
13651       hash = hash_specialization (&elt);
13652       slot = (spec_entry **)
13653         htab_find_slot_with_hash (current_deduction_htab, &elt, hash, INSERT);
13654       if (*slot)
13655         {
13656           /* We already have an entry for this.  */
13657           (*slot)->spec = error_mark_node;
13658           return error_mark_node;
13659         }
13660       else
13661         {
13662           /* Create a new entry.  */
13663           *slot = ggc_alloc_spec_entry ();
13664           **slot = elt;
13665         }
13666     }
13667   else
13668     {
13669       /* No hash table, so add it to the VEC.  */
13670       hash = 0;
13671       VEC_safe_push (spec_entry, gc, current_deduction_vec, &elt);
13672     }
13673
13674   r = tsubst (fntype, targs, tf_none, NULL_TREE);
13675
13676   /* After doing the substitution, make sure we didn't hit it again.  Note
13677      that we might have switched to a hash table during tsubst.  */
13678   if (current_deduction_htab)
13679     {
13680       if (hash == 0)
13681         hash = hash_specialization (&elt);
13682       slot = (spec_entry **)
13683         htab_find_slot_with_hash (current_deduction_htab, &elt, hash,
13684                                   NO_INSERT);
13685       if ((*slot)->spec == error_mark_node)
13686         r = error_mark_node;
13687       htab_clear_slot (current_deduction_htab, (void**)slot);
13688     }
13689   else
13690     {
13691       if (VEC_last (spec_entry, current_deduction_vec)->spec
13692           == error_mark_node)
13693         r = error_mark_node;
13694       VEC_pop (spec_entry, current_deduction_vec);
13695     }
13696   return r;
13697 }
13698
13699 /* Instantiate the indicated variable or function template TMPL with
13700    the template arguments in TARG_PTR.  */
13701
13702 static tree
13703 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
13704 {
13705   tree targ_ptr = orig_args;
13706   tree fndecl;
13707   tree gen_tmpl;
13708   tree spec;
13709   HOST_WIDE_INT saved_processing_template_decl;
13710
13711   if (tmpl == error_mark_node)
13712     return error_mark_node;
13713
13714   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
13715
13716   /* If this function is a clone, handle it specially.  */
13717   if (DECL_CLONED_FUNCTION_P (tmpl))
13718     {
13719       tree spec;
13720       tree clone;
13721
13722       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
13723          DECL_CLONED_FUNCTION.  */
13724       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
13725                                    targ_ptr, complain);
13726       if (spec == error_mark_node)
13727         return error_mark_node;
13728
13729       /* Look for the clone.  */
13730       FOR_EACH_CLONE (clone, spec)
13731         if (DECL_NAME (clone) == DECL_NAME (tmpl))
13732           return clone;
13733       /* We should always have found the clone by now.  */
13734       gcc_unreachable ();
13735       return NULL_TREE;
13736     }
13737
13738   /* Check to see if we already have this specialization.  */
13739   gen_tmpl = most_general_template (tmpl);
13740   if (tmpl != gen_tmpl)
13741     /* The TMPL is a partial instantiation.  To get a full set of
13742        arguments we must add the arguments used to perform the
13743        partial instantiation.  */
13744     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
13745                                             targ_ptr);
13746
13747   /* It would be nice to avoid hashing here and then again in tsubst_decl,
13748      but it doesn't seem to be on the hot path.  */
13749   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
13750
13751   gcc_assert (tmpl == gen_tmpl
13752               || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
13753                   == spec)
13754               || fndecl == NULL_TREE);
13755
13756   if (spec != NULL_TREE)
13757     return spec;
13758
13759   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
13760                                complain))
13761     return error_mark_node;
13762
13763   /* We are building a FUNCTION_DECL, during which the access of its
13764      parameters and return types have to be checked.  However this
13765      FUNCTION_DECL which is the desired context for access checking
13766      is not built yet.  We solve this chicken-and-egg problem by
13767      deferring all checks until we have the FUNCTION_DECL.  */
13768   push_deferring_access_checks (dk_deferred);
13769
13770   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
13771      (because, for example, we have encountered a non-dependent
13772      function call in the body of a template function and must now
13773      determine which of several overloaded functions will be called),
13774      within the instantiation itself we are not processing a
13775      template.  */  
13776   saved_processing_template_decl = processing_template_decl;
13777   processing_template_decl = 0;
13778   /* Substitute template parameters to obtain the specialization.  */
13779   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
13780                    targ_ptr, complain, gen_tmpl);
13781   processing_template_decl = saved_processing_template_decl;
13782   if (fndecl == error_mark_node)
13783     return error_mark_node;
13784
13785   /* Now we know the specialization, compute access previously
13786      deferred.  */
13787   push_access_scope (fndecl);
13788
13789   /* Some typedefs referenced from within the template code need to be access
13790      checked at template instantiation time, i.e now. These types were
13791      added to the template at parsing time. Let's get those and perfom
13792      the acces checks then.  */
13793   perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
13794   perform_deferred_access_checks ();
13795   pop_access_scope (fndecl);
13796   pop_deferring_access_checks ();
13797
13798   /* The DECL_TI_TEMPLATE should always be the immediate parent
13799      template, not the most general template.  */
13800   DECL_TI_TEMPLATE (fndecl) = tmpl;
13801
13802   /* If we've just instantiated the main entry point for a function,
13803      instantiate all the alternate entry points as well.  We do this
13804      by cloning the instantiation of the main entry point, not by
13805      instantiating the template clones.  */
13806   if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
13807     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
13808
13809   return fndecl;
13810 }
13811
13812 /* Wrapper for instantiate_template_1.  */
13813
13814 tree
13815 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
13816 {
13817   tree ret;
13818   timevar_push (TV_TEMPLATE_INST);
13819   ret = instantiate_template_1 (tmpl, orig_args,  complain);
13820   timevar_pop (TV_TEMPLATE_INST);
13821   return ret;
13822 }
13823
13824 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
13825    NARGS elements of the arguments that are being used when calling
13826    it.  TARGS is a vector into which the deduced template arguments
13827    are placed.
13828
13829    Return zero for success, 2 for an incomplete match that doesn't resolve
13830    all the types, and 1 for complete failure.  An error message will be
13831    printed only for an incomplete match.
13832
13833    If FN is a conversion operator, or we are trying to produce a specific
13834    specialization, RETURN_TYPE is the return type desired.
13835
13836    The EXPLICIT_TARGS are explicit template arguments provided via a
13837    template-id.
13838
13839    The parameter STRICT is one of:
13840
13841    DEDUCE_CALL:
13842      We are deducing arguments for a function call, as in
13843      [temp.deduct.call].
13844
13845    DEDUCE_CONV:
13846      We are deducing arguments for a conversion function, as in
13847      [temp.deduct.conv].
13848
13849    DEDUCE_EXACT:
13850      We are deducing arguments when doing an explicit instantiation
13851      as in [temp.explicit], when determining an explicit specialization
13852      as in [temp.expl.spec], or when taking the address of a function
13853      template, as in [temp.deduct.funcaddr].  */
13854
13855 int
13856 fn_type_unification (tree fn,
13857                      tree explicit_targs,
13858                      tree targs,
13859                      const tree *args,
13860                      unsigned int nargs,
13861                      tree return_type,
13862                      unification_kind_t strict,
13863                      int flags)
13864 {
13865   tree parms;
13866   tree fntype;
13867   int result;
13868   bool incomplete_argument_packs_p = false;
13869
13870   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
13871
13872   fntype = TREE_TYPE (fn);
13873   if (explicit_targs)
13874     {
13875       /* [temp.deduct]
13876
13877          The specified template arguments must match the template
13878          parameters in kind (i.e., type, nontype, template), and there
13879          must not be more arguments than there are parameters;
13880          otherwise type deduction fails.
13881
13882          Nontype arguments must match the types of the corresponding
13883          nontype template parameters, or must be convertible to the
13884          types of the corresponding nontype parameters as specified in
13885          _temp.arg.nontype_, otherwise type deduction fails.
13886
13887          All references in the function type of the function template
13888          to the corresponding template parameters are replaced by the
13889          specified template argument values.  If a substitution in a
13890          template parameter or in the function type of the function
13891          template results in an invalid type, type deduction fails.  */
13892       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
13893       int i, len = TREE_VEC_LENGTH (tparms);
13894       tree converted_args;
13895       bool incomplete = false;
13896
13897       if (explicit_targs == error_mark_node)
13898         return 1;
13899
13900       converted_args
13901         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
13902                                   /*require_all_args=*/false,
13903                                   /*use_default_args=*/false));
13904       if (converted_args == error_mark_node)
13905         return 1;
13906
13907       /* Substitute the explicit args into the function type.  This is
13908          necessary so that, for instance, explicitly declared function
13909          arguments can match null pointed constants.  If we were given
13910          an incomplete set of explicit args, we must not do semantic
13911          processing during substitution as we could create partial
13912          instantiations.  */
13913       for (i = 0; i < len; i++)
13914         {
13915           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
13916           bool parameter_pack = false;
13917
13918           /* Dig out the actual parm.  */
13919           if (TREE_CODE (parm) == TYPE_DECL
13920               || TREE_CODE (parm) == TEMPLATE_DECL)
13921             {
13922               parm = TREE_TYPE (parm);
13923               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
13924             }
13925           else if (TREE_CODE (parm) == PARM_DECL)
13926             {
13927               parm = DECL_INITIAL (parm);
13928               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
13929             }
13930
13931           if (parameter_pack)
13932             {
13933               int level, idx;
13934               tree targ;
13935               template_parm_level_and_index (parm, &level, &idx);
13936
13937               /* Mark the argument pack as "incomplete". We could
13938                  still deduce more arguments during unification.
13939                  We remove this mark in type_unification_real.  */
13940               targ = TMPL_ARG (converted_args, level, idx);
13941               if (targ)
13942                 {
13943                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
13944                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
13945                     = ARGUMENT_PACK_ARGS (targ);
13946                 }
13947
13948               /* We have some incomplete argument packs.  */
13949               incomplete_argument_packs_p = true;
13950             }
13951         }
13952
13953       if (incomplete_argument_packs_p)
13954         /* Any substitution is guaranteed to be incomplete if there
13955            are incomplete argument packs, because we can still deduce
13956            more arguments.  */
13957         incomplete = 1;
13958       else
13959         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
13960
13961       processing_template_decl += incomplete;
13962       fntype = deduction_tsubst_fntype (fn, converted_args);
13963       processing_template_decl -= incomplete;
13964
13965       if (fntype == error_mark_node)
13966         return 1;
13967
13968       /* Place the explicitly specified arguments in TARGS.  */
13969       for (i = NUM_TMPL_ARGS (converted_args); i--;)
13970         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
13971     }
13972
13973   /* Never do unification on the 'this' parameter.  */
13974   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
13975
13976   if (return_type)
13977     {
13978       tree *new_args;
13979
13980       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
13981       new_args = XALLOCAVEC (tree, nargs + 1);
13982       new_args[0] = return_type;
13983       memcpy (new_args + 1, args, nargs * sizeof (tree));
13984       args = new_args;
13985       ++nargs;
13986     }
13987
13988   /* We allow incomplete unification without an error message here
13989      because the standard doesn't seem to explicitly prohibit it.  Our
13990      callers must be ready to deal with unification failures in any
13991      event.  */
13992   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
13993                                   targs, parms, args, nargs, /*subr=*/0,
13994                                   strict, flags);
13995
13996   /* Now that we have bindings for all of the template arguments,
13997      ensure that the arguments deduced for the template template
13998      parameters have compatible template parameter lists.  We cannot
13999      check this property before we have deduced all template
14000      arguments, because the template parameter types of a template
14001      template parameter might depend on prior template parameters
14002      deduced after the template template parameter.  The following
14003      ill-formed example illustrates this issue:
14004
14005        template<typename T, template<T> class C> void f(C<5>, T);
14006
14007        template<int N> struct X {};
14008
14009        void g() {
14010          f(X<5>(), 5l); // error: template argument deduction fails
14011        }
14012
14013      The template parameter list of 'C' depends on the template type
14014      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
14015      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
14016      time that we deduce 'C'.  */
14017   if (result == 0
14018       && !template_template_parm_bindings_ok_p 
14019            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
14020     return 1;
14021
14022   if (result == 0)
14023     /* All is well so far.  Now, check:
14024
14025        [temp.deduct]
14026
14027        When all template arguments have been deduced, all uses of
14028        template parameters in nondeduced contexts are replaced with
14029        the corresponding deduced argument values.  If the
14030        substitution results in an invalid type, as described above,
14031        type deduction fails.  */
14032     {
14033       tree substed = deduction_tsubst_fntype (fn, targs);
14034       if (substed == error_mark_node)
14035         return 1;
14036
14037       /* If we're looking for an exact match, check that what we got
14038          is indeed an exact match.  It might not be if some template
14039          parameters are used in non-deduced contexts.  */
14040       if (strict == DEDUCE_EXACT)
14041         {
14042           unsigned int i;
14043
14044           tree sarg
14045             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
14046           if (return_type)
14047             sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
14048           for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
14049             if (!same_type_p (args[i], TREE_VALUE (sarg)))
14050               return 1;
14051         }
14052     }
14053
14054   return result;
14055 }
14056
14057 /* Adjust types before performing type deduction, as described in
14058    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
14059    sections are symmetric.  PARM is the type of a function parameter
14060    or the return type of the conversion function.  ARG is the type of
14061    the argument passed to the call, or the type of the value
14062    initialized with the result of the conversion function.
14063    ARG_EXPR is the original argument expression, which may be null.  */
14064
14065 static int
14066 maybe_adjust_types_for_deduction (unification_kind_t strict,
14067                                   tree* parm,
14068                                   tree* arg,
14069                                   tree arg_expr)
14070 {
14071   int result = 0;
14072
14073   switch (strict)
14074     {
14075     case DEDUCE_CALL:
14076       break;
14077
14078     case DEDUCE_CONV:
14079       {
14080         /* Swap PARM and ARG throughout the remainder of this
14081            function; the handling is precisely symmetric since PARM
14082            will initialize ARG rather than vice versa.  */
14083         tree* temp = parm;
14084         parm = arg;
14085         arg = temp;
14086         break;
14087       }
14088
14089     case DEDUCE_EXACT:
14090       /* Core issue #873: Do the DR606 thing (see below) for these cases,
14091          too, but here handle it by stripping the reference from PARM
14092          rather than by adding it to ARG.  */
14093       if (TREE_CODE (*parm) == REFERENCE_TYPE
14094           && TYPE_REF_IS_RVALUE (*parm)
14095           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
14096           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
14097           && TREE_CODE (*arg) == REFERENCE_TYPE
14098           && !TYPE_REF_IS_RVALUE (*arg))
14099         *parm = TREE_TYPE (*parm);
14100       /* Nothing else to do in this case.  */
14101       return 0;
14102
14103     default:
14104       gcc_unreachable ();
14105     }
14106
14107   if (TREE_CODE (*parm) != REFERENCE_TYPE)
14108     {
14109       /* [temp.deduct.call]
14110
14111          If P is not a reference type:
14112
14113          --If A is an array type, the pointer type produced by the
14114          array-to-pointer standard conversion (_conv.array_) is
14115          used in place of A for type deduction; otherwise,
14116
14117          --If A is a function type, the pointer type produced by
14118          the function-to-pointer standard conversion
14119          (_conv.func_) is used in place of A for type deduction;
14120          otherwise,
14121
14122          --If A is a cv-qualified type, the top level
14123          cv-qualifiers of A's type are ignored for type
14124          deduction.  */
14125       if (TREE_CODE (*arg) == ARRAY_TYPE)
14126         *arg = build_pointer_type (TREE_TYPE (*arg));
14127       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
14128         *arg = build_pointer_type (*arg);
14129       else
14130         *arg = TYPE_MAIN_VARIANT (*arg);
14131     }
14132
14133   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
14134      of the form T&&, where T is a template parameter, and the argument
14135      is an lvalue, T is deduced as A& */
14136   if (TREE_CODE (*parm) == REFERENCE_TYPE
14137       && TYPE_REF_IS_RVALUE (*parm)
14138       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
14139       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
14140       && (arg_expr ? real_lvalue_p (arg_expr)
14141           /* try_one_overload doesn't provide an arg_expr, but
14142              functions are always lvalues.  */
14143           : TREE_CODE (*arg) == FUNCTION_TYPE))
14144     *arg = build_reference_type (*arg);
14145
14146   /* [temp.deduct.call]
14147
14148      If P is a cv-qualified type, the top level cv-qualifiers
14149      of P's type are ignored for type deduction.  If P is a
14150      reference type, the type referred to by P is used for
14151      type deduction.  */
14152   *parm = TYPE_MAIN_VARIANT (*parm);
14153   if (TREE_CODE (*parm) == REFERENCE_TYPE)
14154     {
14155       *parm = TREE_TYPE (*parm);
14156       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
14157     }
14158
14159   /* DR 322. For conversion deduction, remove a reference type on parm
14160      too (which has been swapped into ARG).  */
14161   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
14162     *arg = TREE_TYPE (*arg);
14163
14164   return result;
14165 }
14166
14167 /* Most parms like fn_type_unification.
14168
14169    If SUBR is 1, we're being called recursively (to unify the
14170    arguments of a function or method parameter of a function
14171    template). */
14172
14173 static int
14174 type_unification_real (tree tparms,
14175                        tree targs,
14176                        tree xparms,
14177                        const tree *xargs,
14178                        unsigned int xnargs,
14179                        int subr,
14180                        unification_kind_t strict,
14181                        int flags)
14182 {
14183   tree parm, arg, arg_expr;
14184   int i;
14185   int ntparms = TREE_VEC_LENGTH (tparms);
14186   int sub_strict;
14187   int saw_undeduced = 0;
14188   tree parms;
14189   const tree *args;
14190   unsigned int nargs;
14191   unsigned int ia;
14192
14193   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
14194   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
14195   gcc_assert (ntparms > 0);
14196
14197   /* Reset the number of non-defaulted template arguments contained
14198      in TARGS.  */
14199   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
14200
14201   switch (strict)
14202     {
14203     case DEDUCE_CALL:
14204       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
14205                     | UNIFY_ALLOW_DERIVED);
14206       break;
14207
14208     case DEDUCE_CONV:
14209       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
14210       break;
14211
14212     case DEDUCE_EXACT:
14213       sub_strict = UNIFY_ALLOW_NONE;
14214       break;
14215
14216     default:
14217       gcc_unreachable ();
14218     }
14219
14220  again:
14221   parms = xparms;
14222   args = xargs;
14223   nargs = xnargs;
14224
14225   ia = 0;
14226   while (parms && parms != void_list_node
14227          && ia < nargs)
14228     {
14229       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
14230         break;
14231
14232       parm = TREE_VALUE (parms);
14233       parms = TREE_CHAIN (parms);
14234       arg = args[ia];
14235       ++ia;
14236       arg_expr = NULL;
14237
14238       if (arg == error_mark_node)
14239         return 1;
14240       if (arg == unknown_type_node)
14241         /* We can't deduce anything from this, but we might get all the
14242            template args from other function args.  */
14243         continue;
14244
14245       /* Conversions will be performed on a function argument that
14246          corresponds with a function parameter that contains only
14247          non-deducible template parameters and explicitly specified
14248          template parameters.  */
14249       if (!uses_template_parms (parm))
14250         {
14251           tree type;
14252
14253           if (!TYPE_P (arg))
14254             type = TREE_TYPE (arg);
14255           else
14256             type = arg;
14257
14258           if (same_type_p (parm, type))
14259             continue;
14260           if (strict != DEDUCE_EXACT
14261               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
14262                                   flags))
14263             continue;
14264
14265           return 1;
14266         }
14267
14268       if (!TYPE_P (arg))
14269         {
14270           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
14271           if (type_unknown_p (arg))
14272             {
14273               /* [temp.deduct.type] 
14274
14275                  A template-argument can be deduced from a pointer to
14276                  function or pointer to member function argument if
14277                  the set of overloaded functions does not contain
14278                  function templates and at most one of a set of
14279                  overloaded functions provides a unique match.  */
14280               if (resolve_overloaded_unification
14281                   (tparms, targs, parm, arg, strict, sub_strict))
14282                 continue;
14283
14284               return 1;
14285             }
14286           arg_expr = arg;
14287           arg = unlowered_expr_type (arg);
14288           if (arg == error_mark_node)
14289             return 1;
14290         }
14291
14292       {
14293         int arg_strict = sub_strict;
14294
14295         if (!subr)
14296           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
14297                                                           arg_expr);
14298
14299         if (arg == init_list_type_node && arg_expr)
14300           arg = arg_expr;
14301         if (unify (tparms, targs, parm, arg, arg_strict))
14302           return 1;
14303       }
14304     }
14305
14306
14307   if (parms 
14308       && parms != void_list_node
14309       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
14310     {
14311       /* Unify the remaining arguments with the pack expansion type.  */
14312       tree argvec;
14313       tree parmvec = make_tree_vec (1);
14314
14315       /* Allocate a TREE_VEC and copy in all of the arguments */ 
14316       argvec = make_tree_vec (nargs - ia);
14317       for (i = 0; ia < nargs; ++ia, ++i)
14318         TREE_VEC_ELT (argvec, i) = args[ia];
14319
14320       /* Copy the parameter into parmvec.  */
14321       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
14322       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
14323                                 /*call_args_p=*/true, /*subr=*/subr))
14324         return 1;
14325
14326       /* Advance to the end of the list of parameters.  */
14327       parms = TREE_CHAIN (parms);
14328     }
14329
14330   /* Fail if we've reached the end of the parm list, and more args
14331      are present, and the parm list isn't variadic.  */
14332   if (ia < nargs && parms == void_list_node)
14333     return 1;
14334   /* Fail if parms are left and they don't have default values.  */
14335   if (parms && parms != void_list_node
14336       && TREE_PURPOSE (parms) == NULL_TREE)
14337     return 1;
14338
14339   if (!subr)
14340     {
14341       /* Check to see if we need another pass before we start clearing
14342          ARGUMENT_PACK_INCOMPLETE_P.  */
14343       for (i = 0; i < ntparms; i++)
14344         {
14345           tree targ = TREE_VEC_ELT (targs, i);
14346           tree tparm = TREE_VEC_ELT (tparms, i);
14347
14348           if (targ || tparm == error_mark_node)
14349             continue;
14350           tparm = TREE_VALUE (tparm);
14351
14352           /* If this is an undeduced nontype parameter that depends on
14353              a type parameter, try another pass; its type may have been
14354              deduced from a later argument than the one from which
14355              this parameter can be deduced.  */
14356           if (TREE_CODE (tparm) == PARM_DECL
14357               && uses_template_parms (TREE_TYPE (tparm))
14358               && !saw_undeduced++)
14359             goto again;
14360         }
14361
14362       for (i = 0; i < ntparms; i++)
14363         {
14364           tree targ = TREE_VEC_ELT (targs, i);
14365           tree tparm = TREE_VEC_ELT (tparms, i);
14366
14367           /* Clear the "incomplete" flags on all argument packs now so that
14368              substituting them into later default arguments works.  */
14369           if (targ && ARGUMENT_PACK_P (targ))
14370             {
14371               ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
14372               ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
14373             }
14374
14375           if (targ || tparm == error_mark_node)
14376             continue;
14377           tparm = TREE_VALUE (tparm);
14378
14379           /* Core issue #226 (C++0x) [temp.deduct]:
14380
14381              If a template argument has not been deduced, its
14382              default template argument, if any, is used. 
14383
14384              When we are in C++98 mode, TREE_PURPOSE will either
14385              be NULL_TREE or ERROR_MARK_NODE, so we do not need
14386              to explicitly check cxx_dialect here.  */
14387           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
14388             {
14389               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14390               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
14391               arg = tsubst_template_arg (arg, targs, tf_none, NULL_TREE);
14392               arg = convert_template_argument (parm, arg, targs, tf_none,
14393                                                i, NULL_TREE);
14394               if (arg == error_mark_node)
14395                 return 1;
14396               else
14397                 {
14398                   TREE_VEC_ELT (targs, i) = arg;
14399                   /* The position of the first default template argument,
14400                      is also the number of non-defaulted arguments in TARGS.
14401                      Record that.  */
14402                   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
14403                     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
14404                   continue;
14405                 }
14406             }
14407
14408           /* If the type parameter is a parameter pack, then it will
14409              be deduced to an empty parameter pack.  */
14410           if (template_parameter_pack_p (tparm))
14411             {
14412               tree arg;
14413
14414               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
14415                 {
14416                   arg = make_node (NONTYPE_ARGUMENT_PACK);
14417                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
14418                   TREE_CONSTANT (arg) = 1;
14419                 }
14420               else
14421                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
14422
14423               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
14424
14425               TREE_VEC_ELT (targs, i) = arg;
14426               continue;
14427             }
14428
14429           return 2;
14430         }
14431     }
14432 #ifdef ENABLE_CHECKING
14433   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
14434     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
14435 #endif
14436
14437   return 0;
14438 }
14439
14440 /* Subroutine of type_unification_real.  Args are like the variables
14441    at the call site.  ARG is an overloaded function (or template-id);
14442    we try deducing template args from each of the overloads, and if
14443    only one succeeds, we go with that.  Modifies TARGS and returns
14444    true on success.  */
14445
14446 static bool
14447 resolve_overloaded_unification (tree tparms,
14448                                 tree targs,
14449                                 tree parm,
14450                                 tree arg,
14451                                 unification_kind_t strict,
14452                                 int sub_strict)
14453 {
14454   tree tempargs = copy_node (targs);
14455   int good = 0;
14456   tree goodfn = NULL_TREE;
14457   bool addr_p;
14458
14459   if (TREE_CODE (arg) == ADDR_EXPR)
14460     {
14461       arg = TREE_OPERAND (arg, 0);
14462       addr_p = true;
14463     }
14464   else
14465     addr_p = false;
14466
14467   if (TREE_CODE (arg) == COMPONENT_REF)
14468     /* Handle `&x' where `x' is some static or non-static member
14469        function name.  */
14470     arg = TREE_OPERAND (arg, 1);
14471
14472   if (TREE_CODE (arg) == OFFSET_REF)
14473     arg = TREE_OPERAND (arg, 1);
14474
14475   /* Strip baselink information.  */
14476   if (BASELINK_P (arg))
14477     arg = BASELINK_FUNCTIONS (arg);
14478
14479   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
14480     {
14481       /* If we got some explicit template args, we need to plug them into
14482          the affected templates before we try to unify, in case the
14483          explicit args will completely resolve the templates in question.  */
14484
14485       tree expl_subargs = TREE_OPERAND (arg, 1);
14486       arg = TREE_OPERAND (arg, 0);
14487
14488       for (; arg; arg = OVL_NEXT (arg))
14489         {
14490           tree fn = OVL_CURRENT (arg);
14491           tree subargs, elem;
14492
14493           if (TREE_CODE (fn) != TEMPLATE_DECL)
14494             continue;
14495
14496           ++processing_template_decl;
14497           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
14498                                   expl_subargs, /*check_ret=*/false);
14499           if (subargs)
14500             {
14501               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
14502               if (try_one_overload (tparms, targs, tempargs, parm,
14503                                     elem, strict, sub_strict, addr_p)
14504                   && (!goodfn || !decls_match (goodfn, elem)))
14505                 {
14506                   goodfn = elem;
14507                   ++good;
14508                 }
14509             }
14510           --processing_template_decl;
14511         }
14512     }
14513   else if (TREE_CODE (arg) != OVERLOAD
14514            && TREE_CODE (arg) != FUNCTION_DECL)
14515     /* If ARG is, for example, "(0, &f)" then its type will be unknown
14516        -- but the deduction does not succeed because the expression is
14517        not just the function on its own.  */
14518     return false;
14519   else
14520     for (; arg; arg = OVL_NEXT (arg))
14521       if (try_one_overload (tparms, targs, tempargs, parm,
14522                             TREE_TYPE (OVL_CURRENT (arg)),
14523                             strict, sub_strict, addr_p)
14524           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
14525         {
14526           goodfn = OVL_CURRENT (arg);
14527           ++good;
14528         }
14529
14530   /* [temp.deduct.type] A template-argument can be deduced from a pointer
14531      to function or pointer to member function argument if the set of
14532      overloaded functions does not contain function templates and at most
14533      one of a set of overloaded functions provides a unique match.
14534
14535      So if we found multiple possibilities, we return success but don't
14536      deduce anything.  */
14537
14538   if (good == 1)
14539     {
14540       int i = TREE_VEC_LENGTH (targs);
14541       for (; i--; )
14542         if (TREE_VEC_ELT (tempargs, i))
14543           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
14544     }
14545   if (good)
14546     return true;
14547
14548   return false;
14549 }
14550
14551 /* Core DR 115: In contexts where deduction is done and fails, or in
14552    contexts where deduction is not done, if a template argument list is
14553    specified and it, along with any default template arguments, identifies
14554    a single function template specialization, then the template-id is an
14555    lvalue for the function template specialization.  */
14556
14557 tree
14558 resolve_nondeduced_context (tree orig_expr)
14559 {
14560   tree expr, offset, baselink;
14561   bool addr;
14562
14563   if (!type_unknown_p (orig_expr))
14564     return orig_expr;
14565
14566   expr = orig_expr;
14567   addr = false;
14568   offset = NULL_TREE;
14569   baselink = NULL_TREE;
14570
14571   if (TREE_CODE (expr) == ADDR_EXPR)
14572     {
14573       expr = TREE_OPERAND (expr, 0);
14574       addr = true;
14575     }
14576   if (TREE_CODE (expr) == OFFSET_REF)
14577     {
14578       offset = expr;
14579       expr = TREE_OPERAND (expr, 1);
14580     }
14581   if (TREE_CODE (expr) == BASELINK)
14582     {
14583       baselink = expr;
14584       expr = BASELINK_FUNCTIONS (expr);
14585     }
14586
14587   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
14588     {
14589       int good = 0;
14590       tree goodfn = NULL_TREE;
14591
14592       /* If we got some explicit template args, we need to plug them into
14593          the affected templates before we try to unify, in case the
14594          explicit args will completely resolve the templates in question.  */
14595
14596       tree expl_subargs = TREE_OPERAND (expr, 1);
14597       tree arg = TREE_OPERAND (expr, 0);
14598       tree badfn = NULL_TREE;
14599       tree badargs = NULL_TREE;
14600
14601       for (; arg; arg = OVL_NEXT (arg))
14602         {
14603           tree fn = OVL_CURRENT (arg);
14604           tree subargs, elem;
14605
14606           if (TREE_CODE (fn) != TEMPLATE_DECL)
14607             continue;
14608
14609           ++processing_template_decl;
14610           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
14611                                   expl_subargs, /*check_ret=*/false);
14612           if (subargs && !any_dependent_template_arguments_p (subargs))
14613             {
14614               elem = instantiate_template (fn, subargs, tf_none);
14615               if (elem == error_mark_node)
14616                 {
14617                   badfn = fn;
14618                   badargs = subargs;
14619                 }
14620               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
14621                 {
14622                   goodfn = elem;
14623                   ++good;
14624                 }
14625             }
14626           --processing_template_decl;
14627         }
14628       if (good == 1)
14629         {
14630           expr = goodfn;
14631           if (baselink)
14632             expr = build_baselink (BASELINK_BINFO (baselink),
14633                                    BASELINK_ACCESS_BINFO (baselink),
14634                                    expr, BASELINK_OPTYPE (baselink));
14635           if (offset)
14636             {
14637               tree base
14638                 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
14639               expr = build_offset_ref (base, expr, addr);
14640             }
14641           if (addr)
14642             expr = cp_build_addr_expr (expr, tf_warning_or_error);
14643           return expr;
14644         }
14645       else if (good == 0 && badargs)
14646         /* There were no good options and at least one bad one, so let the
14647            user know what the problem is.  */
14648         instantiate_template (badfn, badargs, tf_warning_or_error);
14649     }
14650   return orig_expr;
14651 }
14652
14653 /* Subroutine of resolve_overloaded_unification; does deduction for a single
14654    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
14655    different overloads deduce different arguments for a given parm.
14656    ADDR_P is true if the expression for which deduction is being
14657    performed was of the form "& fn" rather than simply "fn".
14658
14659    Returns 1 on success.  */
14660
14661 static int
14662 try_one_overload (tree tparms,
14663                   tree orig_targs,
14664                   tree targs,
14665                   tree parm,
14666                   tree arg,
14667                   unification_kind_t strict,
14668                   int sub_strict,
14669                   bool addr_p)
14670 {
14671   int nargs;
14672   tree tempargs;
14673   int i;
14674
14675   /* [temp.deduct.type] A template-argument can be deduced from a pointer
14676      to function or pointer to member function argument if the set of
14677      overloaded functions does not contain function templates and at most
14678      one of a set of overloaded functions provides a unique match.
14679
14680      So if this is a template, just return success.  */
14681
14682   if (uses_template_parms (arg))
14683     return 1;
14684
14685   if (TREE_CODE (arg) == METHOD_TYPE)
14686     arg = build_ptrmemfunc_type (build_pointer_type (arg));
14687   else if (addr_p)
14688     arg = build_pointer_type (arg);
14689
14690   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
14691
14692   /* We don't copy orig_targs for this because if we have already deduced
14693      some template args from previous args, unify would complain when we
14694      try to deduce a template parameter for the same argument, even though
14695      there isn't really a conflict.  */
14696   nargs = TREE_VEC_LENGTH (targs);
14697   tempargs = make_tree_vec (nargs);
14698
14699   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
14700     return 0;
14701
14702   /* First make sure we didn't deduce anything that conflicts with
14703      explicitly specified args.  */
14704   for (i = nargs; i--; )
14705     {
14706       tree elt = TREE_VEC_ELT (tempargs, i);
14707       tree oldelt = TREE_VEC_ELT (orig_targs, i);
14708
14709       if (!elt)
14710         /*NOP*/;
14711       else if (uses_template_parms (elt))
14712         /* Since we're unifying against ourselves, we will fill in
14713            template args used in the function parm list with our own
14714            template parms.  Discard them.  */
14715         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
14716       else if (oldelt && !template_args_equal (oldelt, elt))
14717         return 0;
14718     }
14719
14720   for (i = nargs; i--; )
14721     {
14722       tree elt = TREE_VEC_ELT (tempargs, i);
14723
14724       if (elt)
14725         TREE_VEC_ELT (targs, i) = elt;
14726     }
14727
14728   return 1;
14729 }
14730
14731 /* PARM is a template class (perhaps with unbound template
14732    parameters).  ARG is a fully instantiated type.  If ARG can be
14733    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
14734    TARGS are as for unify.  */
14735
14736 static tree
14737 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
14738 {
14739   tree copy_of_targs;
14740
14741   if (!CLASSTYPE_TEMPLATE_INFO (arg)
14742       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
14743           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
14744     return NULL_TREE;
14745
14746   /* We need to make a new template argument vector for the call to
14747      unify.  If we used TARGS, we'd clutter it up with the result of
14748      the attempted unification, even if this class didn't work out.
14749      We also don't want to commit ourselves to all the unifications
14750      we've already done, since unification is supposed to be done on
14751      an argument-by-argument basis.  In other words, consider the
14752      following pathological case:
14753
14754        template <int I, int J, int K>
14755        struct S {};
14756
14757        template <int I, int J>
14758        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
14759
14760        template <int I, int J, int K>
14761        void f(S<I, J, K>, S<I, I, I>);
14762
14763        void g() {
14764          S<0, 0, 0> s0;
14765          S<0, 1, 2> s2;
14766
14767          f(s0, s2);
14768        }
14769
14770      Now, by the time we consider the unification involving `s2', we
14771      already know that we must have `f<0, 0, 0>'.  But, even though
14772      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
14773      because there are two ways to unify base classes of S<0, 1, 2>
14774      with S<I, I, I>.  If we kept the already deduced knowledge, we
14775      would reject the possibility I=1.  */
14776   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
14777
14778   /* If unification failed, we're done.  */
14779   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
14780              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
14781     return NULL_TREE;
14782
14783   return arg;
14784 }
14785
14786 /* Given a template type PARM and a class type ARG, find the unique
14787    base type in ARG that is an instance of PARM.  We do not examine
14788    ARG itself; only its base-classes.  If there is not exactly one
14789    appropriate base class, return NULL_TREE.  PARM may be the type of
14790    a partial specialization, as well as a plain template type.  Used
14791    by unify.  */
14792
14793 static tree
14794 get_template_base (tree tparms, tree targs, tree parm, tree arg)
14795 {
14796   tree rval = NULL_TREE;
14797   tree binfo;
14798
14799   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
14800
14801   binfo = TYPE_BINFO (complete_type (arg));
14802   if (!binfo)
14803     /* The type could not be completed.  */
14804     return NULL_TREE;
14805
14806   /* Walk in inheritance graph order.  The search order is not
14807      important, and this avoids multiple walks of virtual bases.  */
14808   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
14809     {
14810       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
14811
14812       if (r)
14813         {
14814           /* If there is more than one satisfactory baseclass, then:
14815
14816                [temp.deduct.call]
14817
14818               If they yield more than one possible deduced A, the type
14819               deduction fails.
14820
14821              applies.  */
14822           if (rval && !same_type_p (r, rval))
14823             return NULL_TREE;
14824
14825           rval = r;
14826         }
14827     }
14828
14829   return rval;
14830 }
14831
14832 /* Returns the level of DECL, which declares a template parameter.  */
14833
14834 static int
14835 template_decl_level (tree decl)
14836 {
14837   switch (TREE_CODE (decl))
14838     {
14839     case TYPE_DECL:
14840     case TEMPLATE_DECL:
14841       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
14842
14843     case PARM_DECL:
14844       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
14845
14846     default:
14847       gcc_unreachable ();
14848     }
14849   return 0;
14850 }
14851
14852 /* Decide whether ARG can be unified with PARM, considering only the
14853    cv-qualifiers of each type, given STRICT as documented for unify.
14854    Returns nonzero iff the unification is OK on that basis.  */
14855
14856 static int
14857 check_cv_quals_for_unify (int strict, tree arg, tree parm)
14858 {
14859   int arg_quals = cp_type_quals (arg);
14860   int parm_quals = cp_type_quals (parm);
14861
14862   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14863       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
14864     {
14865       /*  Although a CVR qualifier is ignored when being applied to a
14866           substituted template parameter ([8.3.2]/1 for example), that
14867           does not allow us to unify "const T" with "int&" because both
14868           types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
14869           It is ok when we're allowing additional CV qualifiers
14870           at the outer level [14.8.2.1]/3,1st bullet.  */
14871       if ((TREE_CODE (arg) == REFERENCE_TYPE
14872            || TREE_CODE (arg) == FUNCTION_TYPE
14873            || TREE_CODE (arg) == METHOD_TYPE)
14874           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
14875         return 0;
14876
14877       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
14878           && (parm_quals & TYPE_QUAL_RESTRICT))
14879         return 0;
14880     }
14881
14882   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
14883       && (arg_quals & parm_quals) != parm_quals)
14884     return 0;
14885
14886   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
14887       && (parm_quals & arg_quals) != arg_quals)
14888     return 0;
14889
14890   return 1;
14891 }
14892
14893 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
14894 void 
14895 template_parm_level_and_index (tree parm, int* level, int* index)
14896 {
14897   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14898       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
14899       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
14900     {
14901       *index = TEMPLATE_TYPE_IDX (parm);
14902       *level = TEMPLATE_TYPE_LEVEL (parm);
14903     }
14904   else
14905     {
14906       *index = TEMPLATE_PARM_IDX (parm);
14907       *level = TEMPLATE_PARM_LEVEL (parm);
14908     }
14909 }
14910
14911 /* Unifies the remaining arguments in PACKED_ARGS with the pack
14912    expansion at the end of PACKED_PARMS. Returns 0 if the type
14913    deduction succeeds, 1 otherwise. STRICT is the same as in
14914    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
14915    call argument list. We'll need to adjust the arguments to make them
14916    types. SUBR tells us if this is from a recursive call to
14917    type_unification_real.  */
14918 int
14919 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
14920                       tree packed_args, int strict, bool call_args_p,
14921                       bool subr)
14922 {
14923   tree parm 
14924     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
14925   tree pattern = PACK_EXPANSION_PATTERN (parm);
14926   tree pack, packs = NULL_TREE;
14927   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
14928   int len = TREE_VEC_LENGTH (packed_args);
14929
14930   /* Determine the parameter packs we will be deducing from the
14931      pattern, and record their current deductions.  */
14932   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
14933        pack; pack = TREE_CHAIN (pack))
14934     {
14935       tree parm_pack = TREE_VALUE (pack);
14936       int idx, level;
14937
14938       /* Determine the index and level of this parameter pack.  */
14939       template_parm_level_and_index (parm_pack, &level, &idx);
14940
14941       /* Keep track of the parameter packs and their corresponding
14942          argument packs.  */
14943       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
14944       TREE_TYPE (packs) = make_tree_vec (len - start);
14945     }
14946   
14947   /* Loop through all of the arguments that have not yet been
14948      unified and unify each with the pattern.  */
14949   for (i = start; i < len; i++)
14950     {
14951       tree parm = pattern;
14952
14953       /* For each parameter pack, clear out the deduced value so that
14954          we can deduce it again.  */
14955       for (pack = packs; pack; pack = TREE_CHAIN (pack))
14956         {
14957           int idx, level;
14958           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14959
14960           TMPL_ARG (targs, level, idx) = NULL_TREE;
14961         }
14962
14963       /* Unify the pattern with the current argument.  */
14964       {
14965         tree arg = TREE_VEC_ELT (packed_args, i);
14966         tree arg_expr = NULL_TREE;
14967         int arg_strict = strict;
14968         bool skip_arg_p = false;
14969
14970         if (call_args_p)
14971           {
14972             int sub_strict;
14973
14974             /* This mirrors what we do in type_unification_real.  */
14975             switch (strict)
14976               {
14977               case DEDUCE_CALL:
14978                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
14979                               | UNIFY_ALLOW_MORE_CV_QUAL
14980                               | UNIFY_ALLOW_DERIVED);
14981                 break;
14982                 
14983               case DEDUCE_CONV:
14984                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
14985                 break;
14986                 
14987               case DEDUCE_EXACT:
14988                 sub_strict = UNIFY_ALLOW_NONE;
14989                 break;
14990                 
14991               default:
14992                 gcc_unreachable ();
14993               }
14994
14995             if (!TYPE_P (arg))
14996               {
14997                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
14998                 if (type_unknown_p (arg))
14999                   {
15000                     /* [temp.deduct.type] A template-argument can be
15001                        deduced from a pointer to function or pointer
15002                        to member function argument if the set of
15003                        overloaded functions does not contain function
15004                        templates and at most one of a set of
15005                        overloaded functions provides a unique
15006                        match.  */
15007
15008                     if (resolve_overloaded_unification
15009                         (tparms, targs, parm, arg,
15010                          (unification_kind_t) strict,
15011                          sub_strict)
15012                         != 0)
15013                       return 1;
15014                     skip_arg_p = true;
15015                   }
15016
15017                 if (!skip_arg_p)
15018                   {
15019                     arg_expr = arg;
15020                     arg = unlowered_expr_type (arg);
15021                     if (arg == error_mark_node)
15022                       return 1;
15023                   }
15024               }
15025       
15026             arg_strict = sub_strict;
15027
15028             if (!subr)
15029               arg_strict |= 
15030                 maybe_adjust_types_for_deduction ((unification_kind_t) strict,
15031                                                   &parm, &arg, arg_expr);
15032           }
15033
15034         if (!skip_arg_p)
15035           {
15036             /* For deduction from an init-list we need the actual list.  */
15037             if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
15038               arg = arg_expr;
15039             if (unify (tparms, targs, parm, arg, arg_strict))
15040               return 1;
15041           }
15042       }
15043
15044       /* For each parameter pack, collect the deduced value.  */
15045       for (pack = packs; pack; pack = TREE_CHAIN (pack))
15046         {
15047           int idx, level;
15048           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15049
15050           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
15051             TMPL_ARG (targs, level, idx);
15052         }
15053     }
15054
15055   /* Verify that the results of unification with the parameter packs
15056      produce results consistent with what we've seen before, and make
15057      the deduced argument packs available.  */
15058   for (pack = packs; pack; pack = TREE_CHAIN (pack))
15059     {
15060       tree old_pack = TREE_VALUE (pack);
15061       tree new_args = TREE_TYPE (pack);
15062       int i, len = TREE_VEC_LENGTH (new_args);
15063       int idx, level;
15064       bool nondeduced_p = false;
15065
15066       /* By default keep the original deduced argument pack.
15067          If necessary, more specific code is going to update the
15068          resulting deduced argument later down in this function.  */
15069       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15070       TMPL_ARG (targs, level, idx) = old_pack;
15071
15072       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
15073          actually deduce anything.  */
15074       for (i = 0; i < len && !nondeduced_p; ++i)
15075         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
15076           nondeduced_p = true;
15077       if (nondeduced_p)
15078         continue;
15079
15080       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
15081         {
15082           /* Prepend the explicit arguments onto NEW_ARGS.  */
15083           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
15084           tree old_args = new_args;
15085           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
15086           int len = explicit_len + TREE_VEC_LENGTH (old_args);
15087
15088           /* Copy the explicit arguments.  */
15089           new_args = make_tree_vec (len);
15090           for (i = 0; i < explicit_len; i++)
15091             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
15092
15093           /* Copy the deduced arguments.  */
15094           for (; i < len; i++)
15095             TREE_VEC_ELT (new_args, i) =
15096               TREE_VEC_ELT (old_args, i - explicit_len);
15097         }
15098
15099       if (!old_pack)
15100         {
15101           tree result;
15102           /* Build the deduced *_ARGUMENT_PACK.  */
15103           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
15104             {
15105               result = make_node (NONTYPE_ARGUMENT_PACK);
15106               TREE_TYPE (result) = 
15107                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
15108               TREE_CONSTANT (result) = 1;
15109             }
15110           else
15111             result = cxx_make_type (TYPE_ARGUMENT_PACK);
15112
15113           SET_ARGUMENT_PACK_ARGS (result, new_args);
15114
15115           /* Note the deduced argument packs for this parameter
15116              pack.  */
15117           TMPL_ARG (targs, level, idx) = result;
15118         }
15119       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
15120                && (ARGUMENT_PACK_ARGS (old_pack) 
15121                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
15122         {
15123           /* We only had the explicitly-provided arguments before, but
15124              now we have a complete set of arguments.  */
15125           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
15126
15127           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
15128           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
15129           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
15130         }
15131       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
15132                                     new_args))
15133         /* Inconsistent unification of this parameter pack.  */
15134         return 1;
15135     }
15136
15137   return 0;
15138 }
15139
15140 /* Deduce the value of template parameters.  TPARMS is the (innermost)
15141    set of template parameters to a template.  TARGS is the bindings
15142    for those template parameters, as determined thus far; TARGS may
15143    include template arguments for outer levels of template parameters
15144    as well.  PARM is a parameter to a template function, or a
15145    subcomponent of that parameter; ARG is the corresponding argument.
15146    This function attempts to match PARM with ARG in a manner
15147    consistent with the existing assignments in TARGS.  If more values
15148    are deduced, then TARGS is updated.
15149
15150    Returns 0 if the type deduction succeeds, 1 otherwise.  The
15151    parameter STRICT is a bitwise or of the following flags:
15152
15153      UNIFY_ALLOW_NONE:
15154        Require an exact match between PARM and ARG.
15155      UNIFY_ALLOW_MORE_CV_QUAL:
15156        Allow the deduced ARG to be more cv-qualified (by qualification
15157        conversion) than ARG.
15158      UNIFY_ALLOW_LESS_CV_QUAL:
15159        Allow the deduced ARG to be less cv-qualified than ARG.
15160      UNIFY_ALLOW_DERIVED:
15161        Allow the deduced ARG to be a template base class of ARG,
15162        or a pointer to a template base class of the type pointed to by
15163        ARG.
15164      UNIFY_ALLOW_INTEGER:
15165        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
15166        case for more information.
15167      UNIFY_ALLOW_OUTER_LEVEL:
15168        This is the outermost level of a deduction. Used to determine validity
15169        of qualification conversions. A valid qualification conversion must
15170        have const qualified pointers leading up to the inner type which
15171        requires additional CV quals, except at the outer level, where const
15172        is not required [conv.qual]. It would be normal to set this flag in
15173        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
15174      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
15175        This is the outermost level of a deduction, and PARM can be more CV
15176        qualified at this point.
15177      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
15178        This is the outermost level of a deduction, and PARM can be less CV
15179        qualified at this point.  */
15180
15181 static int
15182 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
15183 {
15184   int idx;
15185   tree targ;
15186   tree tparm;
15187   int strict_in = strict;
15188
15189   /* I don't think this will do the right thing with respect to types.
15190      But the only case I've seen it in so far has been array bounds, where
15191      signedness is the only information lost, and I think that will be
15192      okay.  */
15193   while (TREE_CODE (parm) == NOP_EXPR)
15194     parm = TREE_OPERAND (parm, 0);
15195
15196   if (arg == error_mark_node)
15197     return 1;
15198   if (arg == unknown_type_node
15199       || arg == init_list_type_node)
15200     /* We can't deduce anything from this, but we might get all the
15201        template args from other function args.  */
15202     return 0;
15203
15204   /* If PARM uses template parameters, then we can't bail out here,
15205      even if ARG == PARM, since we won't record unifications for the
15206      template parameters.  We might need them if we're trying to
15207      figure out which of two things is more specialized.  */
15208   if (arg == parm && !uses_template_parms (parm))
15209     return 0;
15210
15211   /* Handle init lists early, so the rest of the function can assume
15212      we're dealing with a type. */
15213   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
15214     {
15215       tree elt, elttype;
15216       unsigned i;
15217       tree orig_parm = parm;
15218
15219       /* Replace T with std::initializer_list<T> for deduction.  */
15220       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15221           && flag_deduce_init_list)
15222         parm = listify (parm);
15223
15224       if (!is_std_init_list (parm))
15225         /* We can only deduce from an initializer list argument if the
15226            parameter is std::initializer_list; otherwise this is a
15227            non-deduced context. */
15228         return 0;
15229
15230       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
15231
15232       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
15233         {
15234           int elt_strict = strict;
15235
15236           if (elt == error_mark_node)
15237             return 1;
15238
15239           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
15240             {
15241               tree type = TREE_TYPE (elt);
15242               /* It should only be possible to get here for a call.  */
15243               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
15244               elt_strict |= maybe_adjust_types_for_deduction
15245                 (DEDUCE_CALL, &elttype, &type, elt);
15246               elt = type;
15247             }
15248
15249           if (unify (tparms, targs, elttype, elt, elt_strict))
15250             return 1;
15251         }
15252
15253       /* If the std::initializer_list<T> deduction worked, replace the
15254          deduced A with std::initializer_list<A>.  */
15255       if (orig_parm != parm)
15256         {
15257           idx = TEMPLATE_TYPE_IDX (orig_parm);
15258           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15259           targ = listify (targ);
15260           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
15261         }
15262       return 0;
15263     }
15264
15265   /* Immediately reject some pairs that won't unify because of
15266      cv-qualification mismatches.  */
15267   if (TREE_CODE (arg) == TREE_CODE (parm)
15268       && TYPE_P (arg)
15269       /* It is the elements of the array which hold the cv quals of an array
15270          type, and the elements might be template type parms. We'll check
15271          when we recurse.  */
15272       && TREE_CODE (arg) != ARRAY_TYPE
15273       /* We check the cv-qualifiers when unifying with template type
15274          parameters below.  We want to allow ARG `const T' to unify with
15275          PARM `T' for example, when computing which of two templates
15276          is more specialized, for example.  */
15277       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
15278       && !check_cv_quals_for_unify (strict_in, arg, parm))
15279     return 1;
15280
15281   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
15282       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
15283     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
15284   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
15285   strict &= ~UNIFY_ALLOW_DERIVED;
15286   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
15287   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
15288
15289   switch (TREE_CODE (parm))
15290     {
15291     case TYPENAME_TYPE:
15292     case SCOPE_REF:
15293     case UNBOUND_CLASS_TEMPLATE:
15294       /* In a type which contains a nested-name-specifier, template
15295          argument values cannot be deduced for template parameters used
15296          within the nested-name-specifier.  */
15297       return 0;
15298
15299     case TEMPLATE_TYPE_PARM:
15300     case TEMPLATE_TEMPLATE_PARM:
15301     case BOUND_TEMPLATE_TEMPLATE_PARM:
15302       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
15303       if (tparm == error_mark_node)
15304         return 1;
15305
15306       if (TEMPLATE_TYPE_LEVEL (parm)
15307           != template_decl_level (tparm))
15308         /* The PARM is not one we're trying to unify.  Just check
15309            to see if it matches ARG.  */
15310         return (TREE_CODE (arg) == TREE_CODE (parm)
15311                 && same_type_p (parm, arg)) ? 0 : 1;
15312       idx = TEMPLATE_TYPE_IDX (parm);
15313       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15314       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
15315
15316       /* Check for mixed types and values.  */
15317       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15318            && TREE_CODE (tparm) != TYPE_DECL)
15319           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15320               && TREE_CODE (tparm) != TEMPLATE_DECL))
15321         return 1;
15322
15323       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15324         {
15325           /* ARG must be constructed from a template class or a template
15326              template parameter.  */
15327           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
15328               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
15329             return 1;
15330
15331           {
15332             tree parmvec = TYPE_TI_ARGS (parm);
15333             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
15334             tree full_argvec = add_to_template_args (targs, argvec);
15335             tree parm_parms 
15336               = DECL_INNERMOST_TEMPLATE_PARMS
15337                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
15338             int i, len;
15339             int parm_variadic_p = 0;
15340
15341             /* The resolution to DR150 makes clear that default
15342                arguments for an N-argument may not be used to bind T
15343                to a template template parameter with fewer than N
15344                parameters.  It is not safe to permit the binding of
15345                default arguments as an extension, as that may change
15346                the meaning of a conforming program.  Consider:
15347
15348                   struct Dense { static const unsigned int dim = 1; };
15349
15350                   template <template <typename> class View,
15351                             typename Block>
15352                   void operator+(float, View<Block> const&);
15353
15354                   template <typename Block,
15355                             unsigned int Dim = Block::dim>
15356                   struct Lvalue_proxy { operator float() const; };
15357
15358                   void
15359                   test_1d (void) {
15360                     Lvalue_proxy<Dense> p;
15361                     float b;
15362                     b + p;
15363                   }
15364
15365               Here, if Lvalue_proxy is permitted to bind to View, then
15366               the global operator+ will be used; if they are not, the
15367               Lvalue_proxy will be converted to float.  */
15368             if (coerce_template_parms (parm_parms,
15369                                        full_argvec,
15370                                        TYPE_TI_TEMPLATE (parm),
15371                                        tf_none,
15372                                        /*require_all_args=*/true,
15373                                        /*use_default_args=*/false)
15374                 == error_mark_node)
15375               return 1;
15376
15377             /* Deduce arguments T, i from TT<T> or TT<i>.
15378                We check each element of PARMVEC and ARGVEC individually
15379                rather than the whole TREE_VEC since they can have
15380                different number of elements.  */
15381
15382             parmvec = expand_template_argument_pack (parmvec);
15383             argvec = expand_template_argument_pack (argvec);
15384
15385             len = TREE_VEC_LENGTH (parmvec);
15386
15387             /* Check if the parameters end in a pack, making them
15388                variadic.  */
15389             if (len > 0
15390                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
15391               parm_variadic_p = 1;
15392             
15393             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
15394               return 1;
15395
15396              for (i = 0; i < len - parm_variadic_p; ++i)
15397               {
15398                 if (unify (tparms, targs,
15399                            TREE_VEC_ELT (parmvec, i),
15400                            TREE_VEC_ELT (argvec, i),
15401                            UNIFY_ALLOW_NONE))
15402                   return 1;
15403               }
15404
15405             if (parm_variadic_p
15406                 && unify_pack_expansion (tparms, targs,
15407                                          parmvec, argvec,
15408                                          UNIFY_ALLOW_NONE,
15409                                          /*call_args_p=*/false,
15410                                          /*subr=*/false))
15411               return 1;
15412           }
15413           arg = TYPE_TI_TEMPLATE (arg);
15414
15415           /* Fall through to deduce template name.  */
15416         }
15417
15418       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15419           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15420         {
15421           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
15422
15423           /* Simple cases: Value already set, does match or doesn't.  */
15424           if (targ != NULL_TREE && template_args_equal (targ, arg))
15425             return 0;
15426           else if (targ)
15427             return 1;
15428         }
15429       else
15430         {
15431           /* If PARM is `const T' and ARG is only `int', we don't have
15432              a match unless we are allowing additional qualification.
15433              If ARG is `const int' and PARM is just `T' that's OK;
15434              that binds `const int' to `T'.  */
15435           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
15436                                          arg, parm))
15437             return 1;
15438
15439           /* Consider the case where ARG is `const volatile int' and
15440              PARM is `const T'.  Then, T should be `volatile int'.  */
15441           arg = cp_build_qualified_type_real
15442             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
15443           if (arg == error_mark_node)
15444             return 1;
15445
15446           /* Simple cases: Value already set, does match or doesn't.  */
15447           if (targ != NULL_TREE && same_type_p (targ, arg))
15448             return 0;
15449           else if (targ)
15450             return 1;
15451
15452           /* Make sure that ARG is not a variable-sized array.  (Note
15453              that were talking about variable-sized arrays (like
15454              `int[n]'), rather than arrays of unknown size (like
15455              `int[]').)  We'll get very confused by such a type since
15456              the bound of the array will not be computable in an
15457              instantiation.  Besides, such types are not allowed in
15458              ISO C++, so we can do as we please here.  */
15459           if (variably_modified_type_p (arg, NULL_TREE))
15460             return 1;
15461
15462           /* Strip typedefs as in convert_template_argument.  */
15463           arg = strip_typedefs (arg);
15464         }
15465
15466       /* If ARG is a parameter pack or an expansion, we cannot unify
15467          against it unless PARM is also a parameter pack.  */
15468       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
15469           && !template_parameter_pack_p (parm))
15470         return 1;
15471
15472       /* If the argument deduction results is a METHOD_TYPE,
15473          then there is a problem.
15474          METHOD_TYPE doesn't map to any real C++ type the result of
15475          the deduction can not be of that type.  */
15476       if (TREE_CODE (arg) == METHOD_TYPE)
15477         return 1;
15478
15479       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
15480       return 0;
15481
15482     case TEMPLATE_PARM_INDEX:
15483       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
15484       if (tparm == error_mark_node)
15485         return 1;
15486
15487       if (TEMPLATE_PARM_LEVEL (parm)
15488           != template_decl_level (tparm))
15489         /* The PARM is not one we're trying to unify.  Just check
15490            to see if it matches ARG.  */
15491         return !(TREE_CODE (arg) == TREE_CODE (parm)
15492                  && cp_tree_equal (parm, arg));
15493
15494       idx = TEMPLATE_PARM_IDX (parm);
15495       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15496
15497       if (targ)
15498         return !cp_tree_equal (targ, arg);
15499
15500       /* [temp.deduct.type] If, in the declaration of a function template
15501          with a non-type template-parameter, the non-type
15502          template-parameter is used in an expression in the function
15503          parameter-list and, if the corresponding template-argument is
15504          deduced, the template-argument type shall match the type of the
15505          template-parameter exactly, except that a template-argument
15506          deduced from an array bound may be of any integral type.
15507          The non-type parameter might use already deduced type parameters.  */
15508       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
15509       if (!TREE_TYPE (arg))
15510         /* Template-parameter dependent expression.  Just accept it for now.
15511            It will later be processed in convert_template_argument.  */
15512         ;
15513       else if (same_type_p (TREE_TYPE (arg), tparm))
15514         /* OK */;
15515       else if ((strict & UNIFY_ALLOW_INTEGER)
15516                && (TREE_CODE (tparm) == INTEGER_TYPE
15517                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
15518         /* Convert the ARG to the type of PARM; the deduced non-type
15519            template argument must exactly match the types of the
15520            corresponding parameter.  */
15521         arg = fold (build_nop (tparm, arg));
15522       else if (uses_template_parms (tparm))
15523         /* We haven't deduced the type of this parameter yet.  Try again
15524            later.  */
15525         return 0;
15526       else
15527         return 1;
15528
15529       /* If ARG is a parameter pack or an expansion, we cannot unify
15530          against it unless PARM is also a parameter pack.  */
15531       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
15532           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
15533         return 1;
15534
15535       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
15536       return 0;
15537
15538     case PTRMEM_CST:
15539      {
15540         /* A pointer-to-member constant can be unified only with
15541          another constant.  */
15542       if (TREE_CODE (arg) != PTRMEM_CST)
15543         return 1;
15544
15545       /* Just unify the class member. It would be useless (and possibly
15546          wrong, depending on the strict flags) to unify also
15547          PTRMEM_CST_CLASS, because we want to be sure that both parm and
15548          arg refer to the same variable, even if through different
15549          classes. For instance:
15550
15551          struct A { int x; };
15552          struct B : A { };
15553
15554          Unification of &A::x and &B::x must succeed.  */
15555       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
15556                     PTRMEM_CST_MEMBER (arg), strict);
15557      }
15558
15559     case POINTER_TYPE:
15560       {
15561         if (TREE_CODE (arg) != POINTER_TYPE)
15562           return 1;
15563
15564         /* [temp.deduct.call]
15565
15566            A can be another pointer or pointer to member type that can
15567            be converted to the deduced A via a qualification
15568            conversion (_conv.qual_).
15569
15570            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
15571            This will allow for additional cv-qualification of the
15572            pointed-to types if appropriate.  */
15573
15574         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
15575           /* The derived-to-base conversion only persists through one
15576              level of pointers.  */
15577           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
15578
15579         return unify (tparms, targs, TREE_TYPE (parm),
15580                       TREE_TYPE (arg), strict);
15581       }
15582
15583     case REFERENCE_TYPE:
15584       if (TREE_CODE (arg) != REFERENCE_TYPE)
15585         return 1;
15586       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15587                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
15588
15589     case ARRAY_TYPE:
15590       if (TREE_CODE (arg) != ARRAY_TYPE)
15591         return 1;
15592       if ((TYPE_DOMAIN (parm) == NULL_TREE)
15593           != (TYPE_DOMAIN (arg) == NULL_TREE))
15594         return 1;
15595       if (TYPE_DOMAIN (parm) != NULL_TREE)
15596         {
15597           tree parm_max;
15598           tree arg_max;
15599           bool parm_cst;
15600           bool arg_cst;
15601
15602           /* Our representation of array types uses "N - 1" as the
15603              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
15604              not an integer constant.  We cannot unify arbitrarily
15605              complex expressions, so we eliminate the MINUS_EXPRs
15606              here.  */
15607           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
15608           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
15609           if (!parm_cst)
15610             {
15611               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
15612               parm_max = TREE_OPERAND (parm_max, 0);
15613             }
15614           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
15615           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
15616           if (!arg_cst)
15617             {
15618               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
15619                  trying to unify the type of a variable with the type
15620                  of a template parameter.  For example:
15621
15622                    template <unsigned int N>
15623                    void f (char (&) [N]);
15624                    int g(); 
15625                    void h(int i) {
15626                      char a[g(i)];
15627                      f(a); 
15628                    }
15629
15630                 Here, the type of the ARG will be "int [g(i)]", and
15631                 may be a SAVE_EXPR, etc.  */
15632               if (TREE_CODE (arg_max) != MINUS_EXPR)
15633                 return 1;
15634               arg_max = TREE_OPERAND (arg_max, 0);
15635             }
15636
15637           /* If only one of the bounds used a MINUS_EXPR, compensate
15638              by adding one to the other bound.  */
15639           if (parm_cst && !arg_cst)
15640             parm_max = fold_build2_loc (input_location, PLUS_EXPR,
15641                                     integer_type_node,
15642                                     parm_max,
15643                                     integer_one_node);
15644           else if (arg_cst && !parm_cst)
15645             arg_max = fold_build2_loc (input_location, PLUS_EXPR,
15646                                    integer_type_node,
15647                                    arg_max,
15648                                    integer_one_node);
15649
15650           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
15651             return 1;
15652         }
15653       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15654                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
15655
15656     case REAL_TYPE:
15657     case COMPLEX_TYPE:
15658     case VECTOR_TYPE:
15659     case INTEGER_TYPE:
15660     case BOOLEAN_TYPE:
15661     case ENUMERAL_TYPE:
15662     case VOID_TYPE:
15663       if (TREE_CODE (arg) != TREE_CODE (parm))
15664         return 1;
15665
15666       /* We have already checked cv-qualification at the top of the
15667          function.  */
15668       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
15669         return 1;
15670
15671       /* As far as unification is concerned, this wins.  Later checks
15672          will invalidate it if necessary.  */
15673       return 0;
15674
15675       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
15676       /* Type INTEGER_CST can come from ordinary constant template args.  */
15677     case INTEGER_CST:
15678       while (TREE_CODE (arg) == NOP_EXPR)
15679         arg = TREE_OPERAND (arg, 0);
15680
15681       if (TREE_CODE (arg) != INTEGER_CST)
15682         return 1;
15683       return !tree_int_cst_equal (parm, arg);
15684
15685     case TREE_VEC:
15686       {
15687         int i;
15688         if (TREE_CODE (arg) != TREE_VEC)
15689           return 1;
15690         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
15691           return 1;
15692         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
15693           if (unify (tparms, targs,
15694                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
15695                      UNIFY_ALLOW_NONE))
15696             return 1;
15697         return 0;
15698       }
15699
15700     case RECORD_TYPE:
15701     case UNION_TYPE:
15702       if (TREE_CODE (arg) != TREE_CODE (parm))
15703         return 1;
15704
15705       if (TYPE_PTRMEMFUNC_P (parm))
15706         {
15707           if (!TYPE_PTRMEMFUNC_P (arg))
15708             return 1;
15709
15710           return unify (tparms, targs,
15711                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
15712                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
15713                         strict);
15714         }
15715
15716       if (CLASSTYPE_TEMPLATE_INFO (parm))
15717         {
15718           tree t = NULL_TREE;
15719
15720           if (strict_in & UNIFY_ALLOW_DERIVED)
15721             {
15722               /* First, we try to unify the PARM and ARG directly.  */
15723               t = try_class_unification (tparms, targs,
15724                                          parm, arg);
15725
15726               if (!t)
15727                 {
15728                   /* Fallback to the special case allowed in
15729                      [temp.deduct.call]:
15730
15731                        If P is a class, and P has the form
15732                        template-id, then A can be a derived class of
15733                        the deduced A.  Likewise, if P is a pointer to
15734                        a class of the form template-id, A can be a
15735                        pointer to a derived class pointed to by the
15736                        deduced A.  */
15737                   t = get_template_base (tparms, targs, parm, arg);
15738
15739                   if (!t)
15740                     return 1;
15741                 }
15742             }
15743           else if (CLASSTYPE_TEMPLATE_INFO (arg)
15744                    && (CLASSTYPE_TI_TEMPLATE (parm)
15745                        == CLASSTYPE_TI_TEMPLATE (arg)))
15746             /* Perhaps PARM is something like S<U> and ARG is S<int>.
15747                Then, we should unify `int' and `U'.  */
15748             t = arg;
15749           else
15750             /* There's no chance of unification succeeding.  */
15751             return 1;
15752
15753           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
15754                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
15755         }
15756       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
15757         return 1;
15758       return 0;
15759
15760     case METHOD_TYPE:
15761     case FUNCTION_TYPE:
15762       {
15763         unsigned int nargs;
15764         tree *args;
15765         tree a;
15766         unsigned int i;
15767
15768         if (TREE_CODE (arg) != TREE_CODE (parm))
15769           return 1;
15770
15771         /* CV qualifications for methods can never be deduced, they must
15772            match exactly.  We need to check them explicitly here,
15773            because type_unification_real treats them as any other
15774            cv-qualified parameter.  */
15775         if (TREE_CODE (parm) == METHOD_TYPE
15776             && (!check_cv_quals_for_unify
15777                 (UNIFY_ALLOW_NONE,
15778                  class_of_this_parm (arg),
15779                  class_of_this_parm (parm))))
15780           return 1;
15781
15782         if (unify (tparms, targs, TREE_TYPE (parm),
15783                    TREE_TYPE (arg), UNIFY_ALLOW_NONE))
15784           return 1;
15785
15786         nargs = list_length (TYPE_ARG_TYPES (arg));
15787         args = XALLOCAVEC (tree, nargs);
15788         for (a = TYPE_ARG_TYPES (arg), i = 0;
15789              a != NULL_TREE && a != void_list_node;
15790              a = TREE_CHAIN (a), ++i)
15791           args[i] = TREE_VALUE (a);
15792         nargs = i;
15793
15794         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
15795                                       args, nargs, 1, DEDUCE_EXACT,
15796                                       LOOKUP_NORMAL);
15797       }
15798
15799     case OFFSET_TYPE:
15800       /* Unify a pointer to member with a pointer to member function, which
15801          deduces the type of the member as a function type. */
15802       if (TYPE_PTRMEMFUNC_P (arg))
15803         {
15804           tree method_type;
15805           tree fntype;
15806
15807           /* Check top-level cv qualifiers */
15808           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
15809             return 1;
15810
15811           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
15812                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
15813             return 1;
15814
15815           /* Determine the type of the function we are unifying against. */
15816           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
15817           fntype =
15818             build_function_type (TREE_TYPE (method_type),
15819                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
15820
15821           /* Extract the cv-qualifiers of the member function from the
15822              implicit object parameter and place them on the function
15823              type to be restored later. */
15824           fntype = apply_memfn_quals (fntype, type_memfn_quals (method_type));
15825           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
15826         }
15827
15828       if (TREE_CODE (arg) != OFFSET_TYPE)
15829         return 1;
15830       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
15831                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
15832         return 1;
15833       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15834                     strict);
15835
15836     case CONST_DECL:
15837       if (DECL_TEMPLATE_PARM_P (parm))
15838         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
15839       if (arg != integral_constant_value (parm))
15840         return 1;
15841       return 0;
15842
15843     case FIELD_DECL:
15844     case TEMPLATE_DECL:
15845       /* Matched cases are handled by the ARG == PARM test above.  */
15846       return 1;
15847
15848     case VAR_DECL:
15849       /* A non-type template parameter that is a variable should be a
15850          an integral constant, in which case, it whould have been
15851          folded into its (constant) value. So we should not be getting
15852          a variable here.  */
15853       gcc_unreachable ();
15854
15855     case TYPE_ARGUMENT_PACK:
15856     case NONTYPE_ARGUMENT_PACK:
15857       {
15858         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
15859         tree packed_args = ARGUMENT_PACK_ARGS (arg);
15860         int i, len = TREE_VEC_LENGTH (packed_parms);
15861         int argslen = TREE_VEC_LENGTH (packed_args);
15862         int parm_variadic_p = 0;
15863
15864         for (i = 0; i < len; ++i)
15865           {
15866             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
15867               {
15868                 if (i == len - 1)
15869                   /* We can unify against something with a trailing
15870                      parameter pack.  */
15871                   parm_variadic_p = 1;
15872                 else
15873                   /* Since there is something following the pack
15874                      expansion, we cannot unify this template argument
15875                      list.  */
15876                   return 0;
15877               }
15878           }
15879           
15880
15881         /* If we don't have enough arguments to satisfy the parameters
15882            (not counting the pack expression at the end), or we have
15883            too many arguments for a parameter list that doesn't end in
15884            a pack expression, we can't unify.  */
15885         if (argslen < (len - parm_variadic_p)
15886             || (argslen > len && !parm_variadic_p))
15887           return 1;
15888
15889         /* Unify all of the parameters that precede the (optional)
15890            pack expression.  */
15891         for (i = 0; i < len - parm_variadic_p; ++i)
15892           {
15893             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
15894                        TREE_VEC_ELT (packed_args, i), strict))
15895               return 1;
15896           }
15897
15898         if (parm_variadic_p)
15899           return unify_pack_expansion (tparms, targs, 
15900                                        packed_parms, packed_args,
15901                                        strict, /*call_args_p=*/false,
15902                                        /*subr=*/false);
15903         return 0;
15904       }
15905
15906       break;
15907
15908     case TYPEOF_TYPE:
15909     case DECLTYPE_TYPE:
15910     case UNDERLYING_TYPE:
15911       /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
15912          or UNDERLYING_TYPE nodes.  */
15913       return 0;
15914
15915     case ERROR_MARK:
15916       /* Unification fails if we hit an error node.  */
15917       return 1;
15918
15919     default:
15920       /* An unresolved overload is a nondeduced context.  */
15921       if (type_unknown_p (parm))
15922         return 0;
15923       gcc_assert (EXPR_P (parm));
15924
15925       /* We must be looking at an expression.  This can happen with
15926          something like:
15927
15928            template <int I>
15929            void foo(S<I>, S<I + 2>);
15930
15931          This is a "nondeduced context":
15932
15933            [deduct.type]
15934
15935            The nondeduced contexts are:
15936
15937            --A type that is a template-id in which one or more of
15938              the template-arguments is an expression that references
15939              a template-parameter.
15940
15941          In these cases, we assume deduction succeeded, but don't
15942          actually infer any unifications.  */
15943
15944       if (!uses_template_parms (parm)
15945           && !template_args_equal (parm, arg))
15946         return 1;
15947       else
15948         return 0;
15949     }
15950 }
15951 \f
15952 /* Note that DECL can be defined in this translation unit, if
15953    required.  */
15954
15955 static void
15956 mark_definable (tree decl)
15957 {
15958   tree clone;
15959   DECL_NOT_REALLY_EXTERN (decl) = 1;
15960   FOR_EACH_CLONE (clone, decl)
15961     DECL_NOT_REALLY_EXTERN (clone) = 1;
15962 }
15963
15964 /* Called if RESULT is explicitly instantiated, or is a member of an
15965    explicitly instantiated class.  */
15966
15967 void
15968 mark_decl_instantiated (tree result, int extern_p)
15969 {
15970   SET_DECL_EXPLICIT_INSTANTIATION (result);
15971
15972   /* If this entity has already been written out, it's too late to
15973      make any modifications.  */
15974   if (TREE_ASM_WRITTEN (result))
15975     return;
15976
15977   if (TREE_CODE (result) != FUNCTION_DECL)
15978     /* The TREE_PUBLIC flag for function declarations will have been
15979        set correctly by tsubst.  */
15980     TREE_PUBLIC (result) = 1;
15981
15982   /* This might have been set by an earlier implicit instantiation.  */
15983   DECL_COMDAT (result) = 0;
15984
15985   if (extern_p)
15986     DECL_NOT_REALLY_EXTERN (result) = 0;
15987   else
15988     {
15989       mark_definable (result);
15990       /* Always make artificials weak.  */
15991       if (DECL_ARTIFICIAL (result) && flag_weak)
15992         comdat_linkage (result);
15993       /* For WIN32 we also want to put explicit instantiations in
15994          linkonce sections.  */
15995       else if (TREE_PUBLIC (result))
15996         maybe_make_one_only (result);
15997     }
15998
15999   /* If EXTERN_P, then this function will not be emitted -- unless
16000      followed by an explicit instantiation, at which point its linkage
16001      will be adjusted.  If !EXTERN_P, then this function will be
16002      emitted here.  In neither circumstance do we want
16003      import_export_decl to adjust the linkage.  */
16004   DECL_INTERFACE_KNOWN (result) = 1;
16005 }
16006
16007 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
16008    important template arguments.  If any are missing, we check whether
16009    they're important by using error_mark_node for substituting into any
16010    args that were used for partial ordering (the ones between ARGS and END)
16011    and seeing if it bubbles up.  */
16012
16013 static bool
16014 check_undeduced_parms (tree targs, tree args, tree end)
16015 {
16016   bool found = false;
16017   int i;
16018   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
16019     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
16020       {
16021         found = true;
16022         TREE_VEC_ELT (targs, i) = error_mark_node;
16023       }
16024   if (found)
16025     {
16026       for (; args != end; args = TREE_CHAIN (args))
16027         {
16028           tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
16029           if (substed == error_mark_node)
16030             return true;
16031         }
16032     }
16033   return false;
16034 }
16035
16036 /* Given two function templates PAT1 and PAT2, return:
16037
16038    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
16039    -1 if PAT2 is more specialized than PAT1.
16040    0 if neither is more specialized.
16041
16042    LEN indicates the number of parameters we should consider
16043    (defaulted parameters should not be considered).
16044
16045    The 1998 std underspecified function template partial ordering, and
16046    DR214 addresses the issue.  We take pairs of arguments, one from
16047    each of the templates, and deduce them against each other.  One of
16048    the templates will be more specialized if all the *other*
16049    template's arguments deduce against its arguments and at least one
16050    of its arguments *does* *not* deduce against the other template's
16051    corresponding argument.  Deduction is done as for class templates.
16052    The arguments used in deduction have reference and top level cv
16053    qualifiers removed.  Iff both arguments were originally reference
16054    types *and* deduction succeeds in both directions, the template
16055    with the more cv-qualified argument wins for that pairing (if
16056    neither is more cv-qualified, they both are equal).  Unlike regular
16057    deduction, after all the arguments have been deduced in this way,
16058    we do *not* verify the deduced template argument values can be
16059    substituted into non-deduced contexts.
16060
16061    The logic can be a bit confusing here, because we look at deduce1 and
16062    targs1 to see if pat2 is at least as specialized, and vice versa; if we
16063    can find template arguments for pat1 to make arg1 look like arg2, that
16064    means that arg2 is at least as specialized as arg1.  */
16065
16066 int
16067 more_specialized_fn (tree pat1, tree pat2, int len)
16068 {
16069   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
16070   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
16071   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
16072   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
16073   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
16074   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
16075   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
16076   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
16077   tree origs1, origs2;
16078   bool lose1 = false;
16079   bool lose2 = false;
16080
16081   /* Remove the this parameter from non-static member functions.  If
16082      one is a non-static member function and the other is not a static
16083      member function, remove the first parameter from that function
16084      also.  This situation occurs for operator functions where we
16085      locate both a member function (with this pointer) and non-member
16086      operator (with explicit first operand).  */
16087   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
16088     {
16089       len--; /* LEN is the number of significant arguments for DECL1 */
16090       args1 = TREE_CHAIN (args1);
16091       if (!DECL_STATIC_FUNCTION_P (decl2))
16092         args2 = TREE_CHAIN (args2);
16093     }
16094   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
16095     {
16096       args2 = TREE_CHAIN (args2);
16097       if (!DECL_STATIC_FUNCTION_P (decl1))
16098         {
16099           len--;
16100           args1 = TREE_CHAIN (args1);
16101         }
16102     }
16103
16104   /* If only one is a conversion operator, they are unordered.  */
16105   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
16106     return 0;
16107
16108   /* Consider the return type for a conversion function */
16109   if (DECL_CONV_FN_P (decl1))
16110     {
16111       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
16112       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
16113       len++;
16114     }
16115
16116   processing_template_decl++;
16117
16118   origs1 = args1;
16119   origs2 = args2;
16120
16121   while (len--
16122          /* Stop when an ellipsis is seen.  */
16123          && args1 != NULL_TREE && args2 != NULL_TREE)
16124     {
16125       tree arg1 = TREE_VALUE (args1);
16126       tree arg2 = TREE_VALUE (args2);
16127       int deduce1, deduce2;
16128       int quals1 = -1;
16129       int quals2 = -1;
16130
16131       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
16132           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
16133         {
16134           /* When both arguments are pack expansions, we need only
16135              unify the patterns themselves.  */
16136           arg1 = PACK_EXPANSION_PATTERN (arg1);
16137           arg2 = PACK_EXPANSION_PATTERN (arg2);
16138
16139           /* This is the last comparison we need to do.  */
16140           len = 0;
16141         }
16142
16143       if (TREE_CODE (arg1) == REFERENCE_TYPE)
16144         {
16145           arg1 = TREE_TYPE (arg1);
16146           quals1 = cp_type_quals (arg1);
16147         }
16148
16149       if (TREE_CODE (arg2) == REFERENCE_TYPE)
16150         {
16151           arg2 = TREE_TYPE (arg2);
16152           quals2 = cp_type_quals (arg2);
16153         }
16154
16155       if ((quals1 < 0) != (quals2 < 0))
16156         {
16157           /* Only of the args is a reference, see if we should apply
16158              array/function pointer decay to it.  This is not part of
16159              DR214, but is, IMHO, consistent with the deduction rules
16160              for the function call itself, and with our earlier
16161              implementation of the underspecified partial ordering
16162              rules.  (nathan).  */
16163           if (quals1 >= 0)
16164             {
16165               switch (TREE_CODE (arg1))
16166                 {
16167                 case ARRAY_TYPE:
16168                   arg1 = TREE_TYPE (arg1);
16169                   /* FALLTHROUGH. */
16170                 case FUNCTION_TYPE:
16171                   arg1 = build_pointer_type (arg1);
16172                   break;
16173
16174                 default:
16175                   break;
16176                 }
16177             }
16178           else
16179             {
16180               switch (TREE_CODE (arg2))
16181                 {
16182                 case ARRAY_TYPE:
16183                   arg2 = TREE_TYPE (arg2);
16184                   /* FALLTHROUGH. */
16185                 case FUNCTION_TYPE:
16186                   arg2 = build_pointer_type (arg2);
16187                   break;
16188
16189                 default:
16190                   break;
16191                 }
16192             }
16193         }
16194
16195       arg1 = TYPE_MAIN_VARIANT (arg1);
16196       arg2 = TYPE_MAIN_VARIANT (arg2);
16197
16198       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
16199         {
16200           int i, len2 = list_length (args2);
16201           tree parmvec = make_tree_vec (1);
16202           tree argvec = make_tree_vec (len2);
16203           tree ta = args2;
16204
16205           /* Setup the parameter vector, which contains only ARG1.  */
16206           TREE_VEC_ELT (parmvec, 0) = arg1;
16207
16208           /* Setup the argument vector, which contains the remaining
16209              arguments.  */
16210           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
16211             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
16212
16213           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
16214                                            argvec, UNIFY_ALLOW_NONE, 
16215                                            /*call_args_p=*/false, 
16216                                            /*subr=*/0);
16217
16218           /* We cannot deduce in the other direction, because ARG1 is
16219              a pack expansion but ARG2 is not.  */
16220           deduce2 = 0;
16221         }
16222       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
16223         {
16224           int i, len1 = list_length (args1);
16225           tree parmvec = make_tree_vec (1);
16226           tree argvec = make_tree_vec (len1);
16227           tree ta = args1;
16228
16229           /* Setup the parameter vector, which contains only ARG1.  */
16230           TREE_VEC_ELT (parmvec, 0) = arg2;
16231
16232           /* Setup the argument vector, which contains the remaining
16233              arguments.  */
16234           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
16235             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
16236
16237           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
16238                                            argvec, UNIFY_ALLOW_NONE, 
16239                                            /*call_args_p=*/false, 
16240                                            /*subr=*/0);
16241
16242           /* We cannot deduce in the other direction, because ARG2 is
16243              a pack expansion but ARG1 is not.*/
16244           deduce1 = 0;
16245         }
16246
16247       else
16248         {
16249           /* The normal case, where neither argument is a pack
16250              expansion.  */
16251           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
16252           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
16253         }
16254
16255       /* If we couldn't deduce arguments for tparms1 to make arg1 match
16256          arg2, then arg2 is not as specialized as arg1.  */
16257       if (!deduce1)
16258         lose2 = true;
16259       if (!deduce2)
16260         lose1 = true;
16261
16262       /* "If, for a given type, deduction succeeds in both directions
16263          (i.e., the types are identical after the transformations above)
16264          and if the type from the argument template is more cv-qualified
16265          than the type from the parameter template (as described above)
16266          that type is considered to be more specialized than the other. If
16267          neither type is more cv-qualified than the other then neither type
16268          is more specialized than the other."  */
16269
16270       if (deduce1 && deduce2
16271           && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
16272         {
16273           if ((quals1 & quals2) == quals2)
16274             lose2 = true;
16275           if ((quals1 & quals2) == quals1)
16276             lose1 = true;
16277         }
16278
16279       if (lose1 && lose2)
16280         /* We've failed to deduce something in either direction.
16281            These must be unordered.  */
16282         break;
16283
16284       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
16285           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
16286         /* We have already processed all of the arguments in our
16287            handing of the pack expansion type.  */
16288         len = 0;
16289
16290       args1 = TREE_CHAIN (args1);
16291       args2 = TREE_CHAIN (args2);
16292     }
16293
16294   /* "In most cases, all template parameters must have values in order for
16295      deduction to succeed, but for partial ordering purposes a template
16296      parameter may remain without a value provided it is not used in the
16297      types being used for partial ordering."
16298
16299      Thus, if we are missing any of the targs1 we need to substitute into
16300      origs1, then pat2 is not as specialized as pat1.  This can happen when
16301      there is a nondeduced context.  */
16302   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
16303     lose2 = true;
16304   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
16305     lose1 = true;
16306
16307   processing_template_decl--;
16308
16309   /* All things being equal, if the next argument is a pack expansion
16310      for one function but not for the other, prefer the
16311      non-variadic function.  FIXME this is bogus; see c++/41958.  */
16312   if (lose1 == lose2
16313       && args1 && TREE_VALUE (args1)
16314       && args2 && TREE_VALUE (args2))
16315     {
16316       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
16317       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
16318     }
16319
16320   if (lose1 == lose2)
16321     return 0;
16322   else if (!lose1)
16323     return 1;
16324   else
16325     return -1;
16326 }
16327
16328 /* Determine which of two partial specializations is more specialized.
16329
16330    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
16331    to the first partial specialization.  The TREE_VALUE is the
16332    innermost set of template parameters for the partial
16333    specialization.  PAT2 is similar, but for the second template.
16334
16335    Return 1 if the first partial specialization is more specialized;
16336    -1 if the second is more specialized; 0 if neither is more
16337    specialized.
16338
16339    See [temp.class.order] for information about determining which of
16340    two templates is more specialized.  */
16341
16342 static int
16343 more_specialized_class (tree pat1, tree pat2)
16344 {
16345   tree targs;
16346   tree tmpl1, tmpl2;
16347   int winner = 0;
16348   bool any_deductions = false;
16349
16350   tmpl1 = TREE_TYPE (pat1);
16351   tmpl2 = TREE_TYPE (pat2);
16352
16353   /* Just like what happens for functions, if we are ordering between
16354      different class template specializations, we may encounter dependent
16355      types in the arguments, and we need our dependency check functions
16356      to behave correctly.  */
16357   ++processing_template_decl;
16358   targs = get_class_bindings (TREE_VALUE (pat1),
16359                               CLASSTYPE_TI_ARGS (tmpl1),
16360                               CLASSTYPE_TI_ARGS (tmpl2));
16361   if (targs)
16362     {
16363       --winner;
16364       any_deductions = true;
16365     }
16366
16367   targs = get_class_bindings (TREE_VALUE (pat2),
16368                               CLASSTYPE_TI_ARGS (tmpl2),
16369                               CLASSTYPE_TI_ARGS (tmpl1));
16370   if (targs)
16371     {
16372       ++winner;
16373       any_deductions = true;
16374     }
16375   --processing_template_decl;
16376
16377   /* In the case of a tie where at least one of the class templates
16378      has a parameter pack at the end, the template with the most
16379      non-packed parameters wins.  */
16380   if (winner == 0
16381       && any_deductions
16382       && (template_args_variadic_p (TREE_PURPOSE (pat1))
16383           || template_args_variadic_p (TREE_PURPOSE (pat2))))
16384     {
16385       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
16386       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
16387       int len1 = TREE_VEC_LENGTH (args1);
16388       int len2 = TREE_VEC_LENGTH (args2);
16389
16390       /* We don't count the pack expansion at the end.  */
16391       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
16392         --len1;
16393       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
16394         --len2;
16395
16396       if (len1 > len2)
16397         return 1;
16398       else if (len1 < len2)
16399         return -1;
16400     }
16401
16402   return winner;
16403 }
16404
16405 /* Return the template arguments that will produce the function signature
16406    DECL from the function template FN, with the explicit template
16407    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
16408    also match.  Return NULL_TREE if no satisfactory arguments could be
16409    found.  */
16410
16411 static tree
16412 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
16413 {
16414   int ntparms = DECL_NTPARMS (fn);
16415   tree targs = make_tree_vec (ntparms);
16416   tree decl_type;
16417   tree decl_arg_types;
16418   tree *args;
16419   unsigned int nargs, ix;
16420   tree arg;
16421
16422   /* Substitute the explicit template arguments into the type of DECL.
16423      The call to fn_type_unification will handle substitution into the
16424      FN.  */
16425   decl_type = TREE_TYPE (decl);
16426   if (explicit_args && uses_template_parms (decl_type))
16427     {
16428       tree tmpl;
16429       tree converted_args;
16430
16431       if (DECL_TEMPLATE_INFO (decl))
16432         tmpl = DECL_TI_TEMPLATE (decl);
16433       else
16434         /* We can get here for some invalid specializations.  */
16435         return NULL_TREE;
16436
16437       converted_args
16438         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
16439                                  explicit_args, NULL_TREE,
16440                                  tf_none,
16441                                  /*require_all_args=*/false,
16442                                  /*use_default_args=*/false);
16443       if (converted_args == error_mark_node)
16444         return NULL_TREE;
16445
16446       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
16447       if (decl_type == error_mark_node)
16448         return NULL_TREE;
16449     }
16450
16451   /* Never do unification on the 'this' parameter.  */
16452   decl_arg_types = skip_artificial_parms_for (decl, 
16453                                               TYPE_ARG_TYPES (decl_type));
16454
16455   nargs = list_length (decl_arg_types);
16456   args = XALLOCAVEC (tree, nargs);
16457   for (arg = decl_arg_types, ix = 0;
16458        arg != NULL_TREE && arg != void_list_node;
16459        arg = TREE_CHAIN (arg), ++ix)
16460     args[ix] = TREE_VALUE (arg);
16461
16462   if (fn_type_unification (fn, explicit_args, targs,
16463                            args, ix,
16464                            (check_rettype || DECL_CONV_FN_P (fn)
16465                             ? TREE_TYPE (decl_type) : NULL_TREE),
16466                            DEDUCE_EXACT, LOOKUP_NORMAL))
16467     return NULL_TREE;
16468
16469   return targs;
16470 }
16471
16472 /* Return the innermost template arguments that, when applied to a
16473    template specialization whose innermost template parameters are
16474    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
16475    ARGS.
16476
16477    For example, suppose we have:
16478
16479      template <class T, class U> struct S {};
16480      template <class T> struct S<T*, int> {};
16481
16482    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
16483    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
16484    int}.  The resulting vector will be {double}, indicating that `T'
16485    is bound to `double'.  */
16486
16487 static tree
16488 get_class_bindings (tree tparms, tree spec_args, tree args)
16489 {
16490   int i, ntparms = TREE_VEC_LENGTH (tparms);
16491   tree deduced_args;
16492   tree innermost_deduced_args;
16493
16494   innermost_deduced_args = make_tree_vec (ntparms);
16495   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
16496     {
16497       deduced_args = copy_node (args);
16498       SET_TMPL_ARGS_LEVEL (deduced_args,
16499                            TMPL_ARGS_DEPTH (deduced_args),
16500                            innermost_deduced_args);
16501     }
16502   else
16503     deduced_args = innermost_deduced_args;
16504
16505   if (unify (tparms, deduced_args,
16506              INNERMOST_TEMPLATE_ARGS (spec_args),
16507              INNERMOST_TEMPLATE_ARGS (args),
16508              UNIFY_ALLOW_NONE))
16509     return NULL_TREE;
16510
16511   for (i =  0; i < ntparms; ++i)
16512     if (! TREE_VEC_ELT (innermost_deduced_args, i))
16513       return NULL_TREE;
16514
16515   /* Verify that nondeduced template arguments agree with the type
16516      obtained from argument deduction.
16517
16518      For example:
16519
16520        struct A { typedef int X; };
16521        template <class T, class U> struct C {};
16522        template <class T> struct C<T, typename T::X> {};
16523
16524      Then with the instantiation `C<A, int>', we can deduce that
16525      `T' is `A' but unify () does not check whether `typename T::X'
16526      is `int'.  */
16527   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
16528   if (spec_args == error_mark_node
16529       /* We only need to check the innermost arguments; the other
16530          arguments will always agree.  */
16531       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
16532                               INNERMOST_TEMPLATE_ARGS (args)))
16533     return NULL_TREE;
16534
16535   /* Now that we have bindings for all of the template arguments,
16536      ensure that the arguments deduced for the template template
16537      parameters have compatible template parameter lists.  See the use
16538      of template_template_parm_bindings_ok_p in fn_type_unification
16539      for more information.  */
16540   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
16541     return NULL_TREE;
16542
16543   return deduced_args;
16544 }
16545
16546 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
16547    Return the TREE_LIST node with the most specialized template, if
16548    any.  If there is no most specialized template, the error_mark_node
16549    is returned.
16550
16551    Note that this function does not look at, or modify, the
16552    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
16553    returned is one of the elements of INSTANTIATIONS, callers may
16554    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
16555    and retrieve it from the value returned.  */
16556
16557 tree
16558 most_specialized_instantiation (tree templates)
16559 {
16560   tree fn, champ;
16561
16562   ++processing_template_decl;
16563
16564   champ = templates;
16565   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
16566     {
16567       int fate = 0;
16568
16569       if (get_bindings (TREE_VALUE (champ),
16570                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
16571                         NULL_TREE, /*check_ret=*/false))
16572         fate--;
16573
16574       if (get_bindings (TREE_VALUE (fn),
16575                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
16576                         NULL_TREE, /*check_ret=*/false))
16577         fate++;
16578
16579       if (fate == -1)
16580         champ = fn;
16581       else if (!fate)
16582         {
16583           /* Equally specialized, move to next function.  If there
16584              is no next function, nothing's most specialized.  */
16585           fn = TREE_CHAIN (fn);
16586           champ = fn;
16587           if (!fn)
16588             break;
16589         }
16590     }
16591
16592   if (champ)
16593     /* Now verify that champ is better than everything earlier in the
16594        instantiation list.  */
16595     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
16596       if (get_bindings (TREE_VALUE (champ),
16597                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
16598                         NULL_TREE, /*check_ret=*/false)
16599           || !get_bindings (TREE_VALUE (fn),
16600                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
16601                             NULL_TREE, /*check_ret=*/false))
16602         {
16603           champ = NULL_TREE;
16604           break;
16605         }
16606
16607   processing_template_decl--;
16608
16609   if (!champ)
16610     return error_mark_node;
16611
16612   return champ;
16613 }
16614
16615 /* If DECL is a specialization of some template, return the most
16616    general such template.  Otherwise, returns NULL_TREE.
16617
16618    For example, given:
16619
16620      template <class T> struct S { template <class U> void f(U); };
16621
16622    if TMPL is `template <class U> void S<int>::f(U)' this will return
16623    the full template.  This function will not trace past partial
16624    specializations, however.  For example, given in addition:
16625
16626      template <class T> struct S<T*> { template <class U> void f(U); };
16627
16628    if TMPL is `template <class U> void S<int*>::f(U)' this will return
16629    `template <class T> template <class U> S<T*>::f(U)'.  */
16630
16631 tree
16632 most_general_template (tree decl)
16633 {
16634   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
16635      an immediate specialization.  */
16636   if (TREE_CODE (decl) == FUNCTION_DECL)
16637     {
16638       if (DECL_TEMPLATE_INFO (decl)) {
16639         decl = DECL_TI_TEMPLATE (decl);
16640
16641         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
16642            template friend.  */
16643         if (TREE_CODE (decl) != TEMPLATE_DECL)
16644           return NULL_TREE;
16645       } else
16646         return NULL_TREE;
16647     }
16648
16649   /* Look for more and more general templates.  */
16650   while (DECL_TEMPLATE_INFO (decl))
16651     {
16652       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
16653          (See cp-tree.h for details.)  */
16654       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
16655         break;
16656
16657       if (CLASS_TYPE_P (TREE_TYPE (decl))
16658           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
16659         break;
16660
16661       /* Stop if we run into an explicitly specialized class template.  */
16662       if (!DECL_NAMESPACE_SCOPE_P (decl)
16663           && DECL_CONTEXT (decl)
16664           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
16665         break;
16666
16667       decl = DECL_TI_TEMPLATE (decl);
16668     }
16669
16670   return decl;
16671 }
16672
16673 /* Return the most specialized of the class template partial
16674    specializations of TMPL which can produce TYPE, a specialization of
16675    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
16676    a _TYPE node corresponding to the partial specialization, while the
16677    TREE_PURPOSE is the set of template arguments that must be
16678    substituted into the TREE_TYPE in order to generate TYPE.
16679
16680    If the choice of partial specialization is ambiguous, a diagnostic
16681    is issued, and the error_mark_node is returned.  If there are no
16682    partial specializations of TMPL matching TYPE, then NULL_TREE is
16683    returned.  */
16684
16685 static tree
16686 most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
16687 {
16688   tree list = NULL_TREE;
16689   tree t;
16690   tree champ;
16691   int fate;
16692   bool ambiguous_p;
16693   tree args;
16694   tree outer_args = NULL_TREE;
16695
16696   tmpl = most_general_template (tmpl);
16697   args = CLASSTYPE_TI_ARGS (type);
16698
16699   /* For determining which partial specialization to use, only the
16700      innermost args are interesting.  */
16701   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
16702     {
16703       outer_args = strip_innermost_template_args (args, 1);
16704       args = INNERMOST_TEMPLATE_ARGS (args);
16705     }
16706
16707   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
16708     {
16709       tree partial_spec_args;
16710       tree spec_args;
16711       tree parms = TREE_VALUE (t);
16712
16713       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
16714
16715       ++processing_template_decl;
16716
16717       if (outer_args)
16718         {
16719           int i;
16720
16721           /* Discard the outer levels of args, and then substitute in the
16722              template args from the enclosing class.  */
16723           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
16724           partial_spec_args = tsubst_template_args
16725             (partial_spec_args, outer_args, tf_none, NULL_TREE);
16726
16727           /* PARMS already refers to just the innermost parms, but the
16728              template parms in partial_spec_args had their levels lowered
16729              by tsubst, so we need to do the same for the parm list.  We
16730              can't just tsubst the TREE_VEC itself, as tsubst wants to
16731              treat a TREE_VEC as an argument vector.  */
16732           parms = copy_node (parms);
16733           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
16734             TREE_VEC_ELT (parms, i) =
16735               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
16736
16737         }
16738
16739       partial_spec_args =
16740           coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
16741                                  add_to_template_args (outer_args,
16742                                                        partial_spec_args),
16743                                  tmpl, tf_none,
16744                                  /*require_all_args=*/true,
16745                                  /*use_default_args=*/true);
16746
16747       --processing_template_decl;
16748
16749       if (partial_spec_args == error_mark_node)
16750         return error_mark_node;
16751
16752       spec_args = get_class_bindings (parms,
16753                                       partial_spec_args,
16754                                       args);
16755       if (spec_args)
16756         {
16757           if (outer_args)
16758             spec_args = add_to_template_args (outer_args, spec_args);
16759           list = tree_cons (spec_args, TREE_VALUE (t), list);
16760           TREE_TYPE (list) = TREE_TYPE (t);
16761         }
16762     }
16763
16764   if (! list)
16765     return NULL_TREE;
16766
16767   ambiguous_p = false;
16768   t = list;
16769   champ = t;
16770   t = TREE_CHAIN (t);
16771   for (; t; t = TREE_CHAIN (t))
16772     {
16773       fate = more_specialized_class (champ, t);
16774       if (fate == 1)
16775         ;
16776       else
16777         {
16778           if (fate == 0)
16779             {
16780               t = TREE_CHAIN (t);
16781               if (! t)
16782                 {
16783                   ambiguous_p = true;
16784                   break;
16785                 }
16786             }
16787           champ = t;
16788         }
16789     }
16790
16791   if (!ambiguous_p)
16792     for (t = list; t && t != champ; t = TREE_CHAIN (t))
16793       {
16794         fate = more_specialized_class (champ, t);
16795         if (fate != 1)
16796           {
16797             ambiguous_p = true;
16798             break;
16799           }
16800       }
16801
16802   if (ambiguous_p)
16803     {
16804       const char *str;
16805       char *spaces = NULL;
16806       if (!(complain & tf_error))
16807         return error_mark_node;
16808       error ("ambiguous class template instantiation for %q#T", type);
16809       str = ngettext ("candidate is:", "candidates are:", list_length (list));
16810       for (t = list; t; t = TREE_CHAIN (t))
16811         {
16812           error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
16813           spaces = spaces ? spaces : get_spaces (str);
16814         }
16815       free (spaces);
16816       return error_mark_node;
16817     }
16818
16819   return champ;
16820 }
16821
16822 /* Explicitly instantiate DECL.  */
16823
16824 void
16825 do_decl_instantiation (tree decl, tree storage)
16826 {
16827   tree result = NULL_TREE;
16828   int extern_p = 0;
16829
16830   if (!decl || decl == error_mark_node)
16831     /* An error occurred, for which grokdeclarator has already issued
16832        an appropriate message.  */
16833     return;
16834   else if (! DECL_LANG_SPECIFIC (decl))
16835     {
16836       error ("explicit instantiation of non-template %q#D", decl);
16837       return;
16838     }
16839   else if (TREE_CODE (decl) == VAR_DECL)
16840     {
16841       /* There is an asymmetry here in the way VAR_DECLs and
16842          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
16843          the latter, the DECL we get back will be marked as a
16844          template instantiation, and the appropriate
16845          DECL_TEMPLATE_INFO will be set up.  This does not happen for
16846          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
16847          should handle VAR_DECLs as it currently handles
16848          FUNCTION_DECLs.  */
16849       if (!DECL_CLASS_SCOPE_P (decl))
16850         {
16851           error ("%qD is not a static data member of a class template", decl);
16852           return;
16853         }
16854       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
16855       if (!result || TREE_CODE (result) != VAR_DECL)
16856         {
16857           error ("no matching template for %qD found", decl);
16858           return;
16859         }
16860       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
16861         {
16862           error ("type %qT for explicit instantiation %qD does not match "
16863                  "declared type %qT", TREE_TYPE (result), decl,
16864                  TREE_TYPE (decl));
16865           return;
16866         }
16867     }
16868   else if (TREE_CODE (decl) != FUNCTION_DECL)
16869     {
16870       error ("explicit instantiation of %q#D", decl);
16871       return;
16872     }
16873   else
16874     result = decl;
16875
16876   /* Check for various error cases.  Note that if the explicit
16877      instantiation is valid the RESULT will currently be marked as an
16878      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
16879      until we get here.  */
16880
16881   if (DECL_TEMPLATE_SPECIALIZATION (result))
16882     {
16883       /* DR 259 [temp.spec].
16884
16885          Both an explicit instantiation and a declaration of an explicit
16886          specialization shall not appear in a program unless the explicit
16887          instantiation follows a declaration of the explicit specialization.
16888
16889          For a given set of template parameters, if an explicit
16890          instantiation of a template appears after a declaration of an
16891          explicit specialization for that template, the explicit
16892          instantiation has no effect.  */
16893       return;
16894     }
16895   else if (DECL_EXPLICIT_INSTANTIATION (result))
16896     {
16897       /* [temp.spec]
16898
16899          No program shall explicitly instantiate any template more
16900          than once.
16901
16902          We check DECL_NOT_REALLY_EXTERN so as not to complain when
16903          the first instantiation was `extern' and the second is not,
16904          and EXTERN_P for the opposite case.  */
16905       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
16906         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
16907       /* If an "extern" explicit instantiation follows an ordinary
16908          explicit instantiation, the template is instantiated.  */
16909       if (extern_p)
16910         return;
16911     }
16912   else if (!DECL_IMPLICIT_INSTANTIATION (result))
16913     {
16914       error ("no matching template for %qD found", result);
16915       return;
16916     }
16917   else if (!DECL_TEMPLATE_INFO (result))
16918     {
16919       permerror (input_location, "explicit instantiation of non-template %q#D", result);
16920       return;
16921     }
16922
16923   if (storage == NULL_TREE)
16924     ;
16925   else if (storage == ridpointers[(int) RID_EXTERN])
16926     {
16927       if (!in_system_header && (cxx_dialect == cxx98))
16928         pedwarn (input_location, OPT_pedantic, 
16929                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
16930                  "instantiations");
16931       extern_p = 1;
16932     }
16933   else
16934     error ("storage class %qD applied to template instantiation", storage);
16935
16936   check_explicit_instantiation_namespace (result);
16937   mark_decl_instantiated (result, extern_p);
16938   if (! extern_p)
16939     instantiate_decl (result, /*defer_ok=*/1,
16940                       /*expl_inst_class_mem_p=*/false);
16941 }
16942
16943 static void
16944 mark_class_instantiated (tree t, int extern_p)
16945 {
16946   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
16947   SET_CLASSTYPE_INTERFACE_KNOWN (t);
16948   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
16949   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
16950   if (! extern_p)
16951     {
16952       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
16953       rest_of_type_compilation (t, 1);
16954     }
16955 }
16956
16957 /* Called from do_type_instantiation through binding_table_foreach to
16958    do recursive instantiation for the type bound in ENTRY.  */
16959 static void
16960 bt_instantiate_type_proc (binding_entry entry, void *data)
16961 {
16962   tree storage = *(tree *) data;
16963
16964   if (MAYBE_CLASS_TYPE_P (entry->type)
16965       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
16966     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
16967 }
16968
16969 /* Called from do_type_instantiation to instantiate a member
16970    (a member function or a static member variable) of an
16971    explicitly instantiated class template.  */
16972 static void
16973 instantiate_class_member (tree decl, int extern_p)
16974 {
16975   mark_decl_instantiated (decl, extern_p);
16976   if (! extern_p)
16977     instantiate_decl (decl, /*defer_ok=*/1,
16978                       /*expl_inst_class_mem_p=*/true);
16979 }
16980
16981 /* Perform an explicit instantiation of template class T.  STORAGE, if
16982    non-null, is the RID for extern, inline or static.  COMPLAIN is
16983    nonzero if this is called from the parser, zero if called recursively,
16984    since the standard is unclear (as detailed below).  */
16985
16986 void
16987 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
16988 {
16989   int extern_p = 0;
16990   int nomem_p = 0;
16991   int static_p = 0;
16992   int previous_instantiation_extern_p = 0;
16993
16994   if (TREE_CODE (t) == TYPE_DECL)
16995     t = TREE_TYPE (t);
16996
16997   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
16998     {
16999       error ("explicit instantiation of non-template type %qT", t);
17000       return;
17001     }
17002
17003   complete_type (t);
17004
17005   if (!COMPLETE_TYPE_P (t))
17006     {
17007       if (complain & tf_error)
17008         error ("explicit instantiation of %q#T before definition of template",
17009                t);
17010       return;
17011     }
17012
17013   if (storage != NULL_TREE)
17014     {
17015       if (!in_system_header)
17016         {
17017           if (storage == ridpointers[(int) RID_EXTERN])
17018             {
17019               if (cxx_dialect == cxx98)
17020                 pedwarn (input_location, OPT_pedantic, 
17021                          "ISO C++ 1998 forbids the use of %<extern%> on "
17022                          "explicit instantiations");
17023             }
17024           else
17025             pedwarn (input_location, OPT_pedantic, 
17026                      "ISO C++ forbids the use of %qE"
17027                      " on explicit instantiations", storage);
17028         }
17029
17030       if (storage == ridpointers[(int) RID_INLINE])
17031         nomem_p = 1;
17032       else if (storage == ridpointers[(int) RID_EXTERN])
17033         extern_p = 1;
17034       else if (storage == ridpointers[(int) RID_STATIC])
17035         static_p = 1;
17036       else
17037         {
17038           error ("storage class %qD applied to template instantiation",
17039                  storage);
17040           extern_p = 0;
17041         }
17042     }
17043
17044   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
17045     {
17046       /* DR 259 [temp.spec].
17047
17048          Both an explicit instantiation and a declaration of an explicit
17049          specialization shall not appear in a program unless the explicit
17050          instantiation follows a declaration of the explicit specialization.
17051
17052          For a given set of template parameters, if an explicit
17053          instantiation of a template appears after a declaration of an
17054          explicit specialization for that template, the explicit
17055          instantiation has no effect.  */
17056       return;
17057     }
17058   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
17059     {
17060       /* [temp.spec]
17061
17062          No program shall explicitly instantiate any template more
17063          than once.
17064
17065          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
17066          instantiation was `extern'.  If EXTERN_P then the second is.
17067          These cases are OK.  */
17068       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
17069
17070       if (!previous_instantiation_extern_p && !extern_p
17071           && (complain & tf_error))
17072         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
17073
17074       /* If we've already instantiated the template, just return now.  */
17075       if (!CLASSTYPE_INTERFACE_ONLY (t))
17076         return;
17077     }
17078
17079   check_explicit_instantiation_namespace (TYPE_NAME (t));
17080   mark_class_instantiated (t, extern_p);
17081
17082   if (nomem_p)
17083     return;
17084
17085   {
17086     tree tmp;
17087
17088     /* In contrast to implicit instantiation, where only the
17089        declarations, and not the definitions, of members are
17090        instantiated, we have here:
17091
17092          [temp.explicit]
17093
17094          The explicit instantiation of a class template specialization
17095          implies the instantiation of all of its members not
17096          previously explicitly specialized in the translation unit
17097          containing the explicit instantiation.
17098
17099        Of course, we can't instantiate member template classes, since
17100        we don't have any arguments for them.  Note that the standard
17101        is unclear on whether the instantiation of the members are
17102        *explicit* instantiations or not.  However, the most natural
17103        interpretation is that it should be an explicit instantiation.  */
17104
17105     if (! static_p)
17106       for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
17107         if (TREE_CODE (tmp) == FUNCTION_DECL
17108             && DECL_TEMPLATE_INSTANTIATION (tmp))
17109           instantiate_class_member (tmp, extern_p);
17110
17111     for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
17112       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
17113         instantiate_class_member (tmp, extern_p);
17114
17115     if (CLASSTYPE_NESTED_UTDS (t))
17116       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
17117                              bt_instantiate_type_proc, &storage);
17118   }
17119 }
17120
17121 /* Given a function DECL, which is a specialization of TMPL, modify
17122    DECL to be a re-instantiation of TMPL with the same template
17123    arguments.  TMPL should be the template into which tsubst'ing
17124    should occur for DECL, not the most general template.
17125
17126    One reason for doing this is a scenario like this:
17127
17128      template <class T>
17129      void f(const T&, int i);
17130
17131      void g() { f(3, 7); }
17132
17133      template <class T>
17134      void f(const T& t, const int i) { }
17135
17136    Note that when the template is first instantiated, with
17137    instantiate_template, the resulting DECL will have no name for the
17138    first parameter, and the wrong type for the second.  So, when we go
17139    to instantiate the DECL, we regenerate it.  */
17140
17141 static void
17142 regenerate_decl_from_template (tree decl, tree tmpl)
17143 {
17144   /* The arguments used to instantiate DECL, from the most general
17145      template.  */
17146   tree args;
17147   tree code_pattern;
17148
17149   args = DECL_TI_ARGS (decl);
17150   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
17151
17152   /* Make sure that we can see identifiers, and compute access
17153      correctly.  */
17154   push_access_scope (decl);
17155
17156   if (TREE_CODE (decl) == FUNCTION_DECL)
17157     {
17158       tree decl_parm;
17159       tree pattern_parm;
17160       tree specs;
17161       int args_depth;
17162       int parms_depth;
17163
17164       args_depth = TMPL_ARGS_DEPTH (args);
17165       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
17166       if (args_depth > parms_depth)
17167         args = get_innermost_template_args (args, parms_depth);
17168
17169       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
17170                                               args, tf_error, NULL_TREE);
17171       if (specs)
17172         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
17173                                                     specs);
17174
17175       /* Merge parameter declarations.  */
17176       decl_parm = skip_artificial_parms_for (decl,
17177                                              DECL_ARGUMENTS (decl));
17178       pattern_parm
17179         = skip_artificial_parms_for (code_pattern,
17180                                      DECL_ARGUMENTS (code_pattern));
17181       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
17182         {
17183           tree parm_type;
17184           tree attributes;
17185           
17186           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
17187             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
17188           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
17189                               NULL_TREE);
17190           parm_type = type_decays_to (parm_type);
17191           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
17192             TREE_TYPE (decl_parm) = parm_type;
17193           attributes = DECL_ATTRIBUTES (pattern_parm);
17194           if (DECL_ATTRIBUTES (decl_parm) != attributes)
17195             {
17196               DECL_ATTRIBUTES (decl_parm) = attributes;
17197               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
17198             }
17199           decl_parm = DECL_CHAIN (decl_parm);
17200           pattern_parm = DECL_CHAIN (pattern_parm);
17201         }
17202       /* Merge any parameters that match with the function parameter
17203          pack.  */
17204       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
17205         {
17206           int i, len;
17207           tree expanded_types;
17208           /* Expand the TYPE_PACK_EXPANSION that provides the types for
17209              the parameters in this function parameter pack.  */
17210           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
17211                                                  args, tf_error, NULL_TREE);
17212           len = TREE_VEC_LENGTH (expanded_types);
17213           for (i = 0; i < len; i++)
17214             {
17215               tree parm_type;
17216               tree attributes;
17217           
17218               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
17219                 /* Rename the parameter to include the index.  */
17220                 DECL_NAME (decl_parm) = 
17221                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
17222               parm_type = TREE_VEC_ELT (expanded_types, i);
17223               parm_type = type_decays_to (parm_type);
17224               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
17225                 TREE_TYPE (decl_parm) = parm_type;
17226               attributes = DECL_ATTRIBUTES (pattern_parm);
17227               if (DECL_ATTRIBUTES (decl_parm) != attributes)
17228                 {
17229                   DECL_ATTRIBUTES (decl_parm) = attributes;
17230                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
17231                 }
17232               decl_parm = DECL_CHAIN (decl_parm);
17233             }
17234         }
17235       /* Merge additional specifiers from the CODE_PATTERN.  */
17236       if (DECL_DECLARED_INLINE_P (code_pattern)
17237           && !DECL_DECLARED_INLINE_P (decl))
17238         DECL_DECLARED_INLINE_P (decl) = 1;
17239     }
17240   else if (TREE_CODE (decl) == VAR_DECL)
17241     {
17242       DECL_INITIAL (decl) =
17243         tsubst_expr (DECL_INITIAL (code_pattern), args,
17244                      tf_error, DECL_TI_TEMPLATE (decl),
17245                      /*integral_constant_expression_p=*/false);
17246       if (VAR_HAD_UNKNOWN_BOUND (decl))
17247         TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
17248                                    tf_error, DECL_TI_TEMPLATE (decl));
17249     }
17250   else
17251     gcc_unreachable ();
17252
17253   pop_access_scope (decl);
17254 }
17255
17256 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
17257    substituted to get DECL.  */
17258
17259 tree
17260 template_for_substitution (tree decl)
17261 {
17262   tree tmpl = DECL_TI_TEMPLATE (decl);
17263
17264   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
17265      for the instantiation.  This is not always the most general
17266      template.  Consider, for example:
17267
17268         template <class T>
17269         struct S { template <class U> void f();
17270                    template <> void f<int>(); };
17271
17272      and an instantiation of S<double>::f<int>.  We want TD to be the
17273      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
17274   while (/* An instantiation cannot have a definition, so we need a
17275             more general template.  */
17276          DECL_TEMPLATE_INSTANTIATION (tmpl)
17277            /* We must also deal with friend templates.  Given:
17278
17279                 template <class T> struct S {
17280                   template <class U> friend void f() {};
17281                 };
17282
17283               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
17284               so far as the language is concerned, but that's still
17285               where we get the pattern for the instantiation from.  On
17286               other hand, if the definition comes outside the class, say:
17287
17288                 template <class T> struct S {
17289                   template <class U> friend void f();
17290                 };
17291                 template <class U> friend void f() {}
17292
17293               we don't need to look any further.  That's what the check for
17294               DECL_INITIAL is for.  */
17295           || (TREE_CODE (decl) == FUNCTION_DECL
17296               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
17297               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
17298     {
17299       /* The present template, TD, should not be a definition.  If it
17300          were a definition, we should be using it!  Note that we
17301          cannot restructure the loop to just keep going until we find
17302          a template with a definition, since that might go too far if
17303          a specialization was declared, but not defined.  */
17304       gcc_assert (TREE_CODE (decl) != VAR_DECL
17305                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
17306
17307       /* Fetch the more general template.  */
17308       tmpl = DECL_TI_TEMPLATE (tmpl);
17309     }
17310
17311   return tmpl;
17312 }
17313
17314 /* Returns true if we need to instantiate this template instance even if we
17315    know we aren't going to emit it..  */
17316
17317 bool
17318 always_instantiate_p (tree decl)
17319 {
17320   /* We always instantiate inline functions so that we can inline them.  An
17321      explicit instantiation declaration prohibits implicit instantiation of
17322      non-inline functions.  With high levels of optimization, we would
17323      normally inline non-inline functions -- but we're not allowed to do
17324      that for "extern template" functions.  Therefore, we check
17325      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
17326   return ((TREE_CODE (decl) == FUNCTION_DECL
17327            && DECL_DECLARED_INLINE_P (decl))
17328           /* And we need to instantiate static data members so that
17329              their initializers are available in integral constant
17330              expressions.  */
17331           || (TREE_CODE (decl) == VAR_DECL
17332               && decl_maybe_constant_var_p (decl)));
17333 }
17334
17335 /* Produce the definition of D, a _DECL generated from a template.  If
17336    DEFER_OK is nonzero, then we don't have to actually do the
17337    instantiation now; we just have to do it sometime.  Normally it is
17338    an error if this is an explicit instantiation but D is undefined.
17339    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
17340    explicitly instantiated class template.  */
17341
17342 tree
17343 instantiate_decl (tree d, int defer_ok,
17344                   bool expl_inst_class_mem_p)
17345 {
17346   tree tmpl = DECL_TI_TEMPLATE (d);
17347   tree gen_args;
17348   tree args;
17349   tree td;
17350   tree code_pattern;
17351   tree spec;
17352   tree gen_tmpl;
17353   bool pattern_defined;
17354   int need_push;
17355   location_t saved_loc = input_location;
17356   bool external_p;
17357
17358   /* This function should only be used to instantiate templates for
17359      functions and static member variables.  */
17360   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
17361               || TREE_CODE (d) == VAR_DECL);
17362
17363   /* Variables are never deferred; if instantiation is required, they
17364      are instantiated right away.  That allows for better code in the
17365      case that an expression refers to the value of the variable --
17366      if the variable has a constant value the referring expression can
17367      take advantage of that fact.  */
17368   if (TREE_CODE (d) == VAR_DECL
17369       || DECL_DECLARED_CONSTEXPR_P (d))
17370     defer_ok = 0;
17371
17372   /* Don't instantiate cloned functions.  Instead, instantiate the
17373      functions they cloned.  */
17374   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
17375     d = DECL_CLONED_FUNCTION (d);
17376
17377   if (DECL_TEMPLATE_INSTANTIATED (d)
17378       || DECL_TEMPLATE_SPECIALIZATION (d))
17379     /* D has already been instantiated or explicitly specialized, so
17380        there's nothing for us to do here.
17381
17382        It might seem reasonable to check whether or not D is an explicit
17383        instantiation, and, if so, stop here.  But when an explicit
17384        instantiation is deferred until the end of the compilation,
17385        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
17386        the instantiation.  */
17387     return d;
17388
17389   /* Check to see whether we know that this template will be
17390      instantiated in some other file, as with "extern template"
17391      extension.  */
17392   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
17393
17394   /* In general, we do not instantiate such templates.  */
17395   if (external_p && !always_instantiate_p (d))
17396     return d;
17397
17398   gen_tmpl = most_general_template (tmpl);
17399   gen_args = DECL_TI_ARGS (d);
17400
17401   if (tmpl != gen_tmpl)
17402     /* We should already have the extra args.  */
17403     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
17404                 == TMPL_ARGS_DEPTH (gen_args));
17405   /* And what's in the hash table should match D.  */
17406   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
17407               || spec == NULL_TREE);
17408
17409   /* This needs to happen before any tsubsting.  */
17410   if (! push_tinst_level (d))
17411     return d;
17412
17413   timevar_push (TV_TEMPLATE_INST);
17414
17415   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
17416      for the instantiation.  */
17417   td = template_for_substitution (d);
17418   code_pattern = DECL_TEMPLATE_RESULT (td);
17419
17420   /* We should never be trying to instantiate a member of a class
17421      template or partial specialization.  */
17422   gcc_assert (d != code_pattern);
17423
17424   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
17425       || DECL_TEMPLATE_SPECIALIZATION (td))
17426     /* In the case of a friend template whose definition is provided
17427        outside the class, we may have too many arguments.  Drop the
17428        ones we don't need.  The same is true for specializations.  */
17429     args = get_innermost_template_args
17430       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
17431   else
17432     args = gen_args;
17433
17434   if (TREE_CODE (d) == FUNCTION_DECL)
17435     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
17436   else
17437     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
17438
17439   /* We may be in the middle of deferred access check.  Disable it now.  */
17440   push_deferring_access_checks (dk_no_deferred);
17441
17442   /* Unless an explicit instantiation directive has already determined
17443      the linkage of D, remember that a definition is available for
17444      this entity.  */
17445   if (pattern_defined
17446       && !DECL_INTERFACE_KNOWN (d)
17447       && !DECL_NOT_REALLY_EXTERN (d))
17448     mark_definable (d);
17449
17450   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
17451   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
17452   input_location = DECL_SOURCE_LOCATION (d);
17453
17454   /* If D is a member of an explicitly instantiated class template,
17455      and no definition is available, treat it like an implicit
17456      instantiation.  */
17457   if (!pattern_defined && expl_inst_class_mem_p
17458       && DECL_EXPLICIT_INSTANTIATION (d))
17459     {
17460       /* Leave linkage flags alone on instantiations with anonymous
17461          visibility.  */
17462       if (TREE_PUBLIC (d))
17463         {
17464           DECL_NOT_REALLY_EXTERN (d) = 0;
17465           DECL_INTERFACE_KNOWN (d) = 0;
17466         }
17467       SET_DECL_IMPLICIT_INSTANTIATION (d);
17468     }
17469
17470   /* Recheck the substitutions to obtain any warning messages
17471      about ignoring cv qualifiers.  Don't do this for artificial decls,
17472      as it breaks the context-sensitive substitution for lambda op(). */
17473   if (!defer_ok && !DECL_ARTIFICIAL (d))
17474     {
17475       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
17476       tree type = TREE_TYPE (gen);
17477
17478       /* Make sure that we can see identifiers, and compute access
17479          correctly.  D is already the target FUNCTION_DECL with the
17480          right context.  */
17481       push_access_scope (d);
17482
17483       if (TREE_CODE (gen) == FUNCTION_DECL)
17484         {
17485           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
17486           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
17487                                           d);
17488           /* Don't simply tsubst the function type, as that will give
17489              duplicate warnings about poor parameter qualifications.
17490              The function arguments are the same as the decl_arguments
17491              without the top level cv qualifiers.  */
17492           type = TREE_TYPE (type);
17493         }
17494       tsubst (type, gen_args, tf_warning_or_error, d);
17495
17496       pop_access_scope (d);
17497     }
17498
17499   /* Defer all other templates, unless we have been explicitly
17500      forbidden from doing so.  */
17501   if (/* If there is no definition, we cannot instantiate the
17502          template.  */
17503       ! pattern_defined
17504       /* If it's OK to postpone instantiation, do so.  */
17505       || defer_ok
17506       /* If this is a static data member that will be defined
17507          elsewhere, we don't want to instantiate the entire data
17508          member, but we do want to instantiate the initializer so that
17509          we can substitute that elsewhere.  */
17510       || (external_p && TREE_CODE (d) == VAR_DECL))
17511     {
17512       /* The definition of the static data member is now required so
17513          we must substitute the initializer.  */
17514       if (TREE_CODE (d) == VAR_DECL
17515           && !DECL_INITIAL (d)
17516           && DECL_INITIAL (code_pattern))
17517         {
17518           tree ns;
17519           tree init;
17520           bool const_init = false;
17521
17522           ns = decl_namespace_context (d);
17523           push_nested_namespace (ns);
17524           push_nested_class (DECL_CONTEXT (d));
17525           init = tsubst_expr (DECL_INITIAL (code_pattern),
17526                               args,
17527                               tf_warning_or_error, NULL_TREE,
17528                               /*integral_constant_expression_p=*/false);
17529           /* Make sure the initializer is still constant, in case of
17530              circular dependency (template/instantiate6.C). */
17531           const_init
17532             = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
17533           cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
17534                           /*asmspec_tree=*/NULL_TREE,
17535                           LOOKUP_ONLYCONVERTING);
17536           pop_nested_class ();
17537           pop_nested_namespace (ns);
17538         }
17539
17540       /* We restore the source position here because it's used by
17541          add_pending_template.  */
17542       input_location = saved_loc;
17543
17544       if (at_eof && !pattern_defined
17545           && DECL_EXPLICIT_INSTANTIATION (d)
17546           && DECL_NOT_REALLY_EXTERN (d))
17547         /* [temp.explicit]
17548
17549            The definition of a non-exported function template, a
17550            non-exported member function template, or a non-exported
17551            member function or static data member of a class template
17552            shall be present in every translation unit in which it is
17553            explicitly instantiated.  */
17554         permerror (input_location,  "explicit instantiation of %qD "
17555                    "but no definition available", d);
17556
17557       /* If we're in unevaluated context, we just wanted to get the
17558          constant value; this isn't an odr use, so don't queue
17559          a full instantiation.  */
17560       if (cp_unevaluated_operand != 0)
17561         goto out;
17562       /* ??? Historically, we have instantiated inline functions, even
17563          when marked as "extern template".  */
17564       if (!(external_p && TREE_CODE (d) == VAR_DECL))
17565         add_pending_template (d);
17566       goto out;
17567     }
17568   /* Tell the repository that D is available in this translation unit
17569      -- and see if it is supposed to be instantiated here.  */
17570   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
17571     {
17572       /* In a PCH file, despite the fact that the repository hasn't
17573          requested instantiation in the PCH it is still possible that
17574          an instantiation will be required in a file that includes the
17575          PCH.  */
17576       if (pch_file)
17577         add_pending_template (d);
17578       /* Instantiate inline functions so that the inliner can do its
17579          job, even though we'll not be emitting a copy of this
17580          function.  */
17581       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
17582         goto out;
17583     }
17584
17585   need_push = !cfun || !global_bindings_p ();
17586   if (need_push)
17587     push_to_top_level ();
17588
17589   /* Mark D as instantiated so that recursive calls to
17590      instantiate_decl do not try to instantiate it again.  */
17591   DECL_TEMPLATE_INSTANTIATED (d) = 1;
17592
17593   /* Regenerate the declaration in case the template has been modified
17594      by a subsequent redeclaration.  */
17595   regenerate_decl_from_template (d, td);
17596
17597   /* We already set the file and line above.  Reset them now in case
17598      they changed as a result of calling regenerate_decl_from_template.  */
17599   input_location = DECL_SOURCE_LOCATION (d);
17600
17601   if (TREE_CODE (d) == VAR_DECL)
17602     {
17603       tree init;
17604       bool const_init = false;
17605
17606       /* Clear out DECL_RTL; whatever was there before may not be right
17607          since we've reset the type of the declaration.  */
17608       SET_DECL_RTL (d, NULL);
17609       DECL_IN_AGGR_P (d) = 0;
17610
17611       /* The initializer is placed in DECL_INITIAL by
17612          regenerate_decl_from_template so we don't need to
17613          push/pop_access_scope again here.  Pull it out so that
17614          cp_finish_decl can process it.  */
17615       init = DECL_INITIAL (d);
17616       DECL_INITIAL (d) = NULL_TREE;
17617       DECL_INITIALIZED_P (d) = 0;
17618
17619       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
17620          initializer.  That function will defer actual emission until
17621          we have a chance to determine linkage.  */
17622       DECL_EXTERNAL (d) = 0;
17623
17624       /* Enter the scope of D so that access-checking works correctly.  */
17625       push_nested_class (DECL_CONTEXT (d));
17626       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
17627       cp_finish_decl (d, init, const_init, NULL_TREE, 0);
17628       pop_nested_class ();
17629     }
17630   else if (TREE_CODE (d) == FUNCTION_DECL)
17631     {
17632       htab_t saved_local_specializations;
17633       tree subst_decl;
17634       tree tmpl_parm;
17635       tree spec_parm;
17636
17637       /* Save away the current list, in case we are instantiating one
17638          template from within the body of another.  */
17639       saved_local_specializations = local_specializations;
17640
17641       /* Set up the list of local specializations.  */
17642       local_specializations = htab_create (37,
17643                                            hash_local_specialization,
17644                                            eq_local_specializations,
17645                                            NULL);
17646
17647       /* Set up context.  */
17648       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
17649
17650       /* Create substitution entries for the parameters.  */
17651       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
17652       tmpl_parm = DECL_ARGUMENTS (subst_decl);
17653       spec_parm = DECL_ARGUMENTS (d);
17654       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
17655         {
17656           register_local_specialization (spec_parm, tmpl_parm);
17657           spec_parm = skip_artificial_parms_for (d, spec_parm);
17658           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
17659         }
17660       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
17661         {
17662           register_local_specialization (spec_parm, tmpl_parm);
17663           tmpl_parm = DECL_CHAIN (tmpl_parm);
17664           spec_parm = DECL_CHAIN (spec_parm);
17665         }
17666       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
17667         {
17668           /* Register the (value) argument pack as a specialization of
17669              TMPL_PARM, then move on.  */
17670           tree argpack = make_fnparm_pack (spec_parm);
17671           register_local_specialization (argpack, tmpl_parm);
17672           tmpl_parm = DECL_CHAIN (tmpl_parm);
17673           spec_parm = NULL_TREE;
17674         }
17675       gcc_assert (!spec_parm);
17676
17677       /* Substitute into the body of the function.  */
17678       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
17679                    tf_warning_or_error, tmpl,
17680                    /*integral_constant_expression_p=*/false);
17681
17682       /* Set the current input_location to the end of the function
17683          so that finish_function knows where we are.  */
17684       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
17685
17686       /* We don't need the local specializations any more.  */
17687       htab_delete (local_specializations);
17688       local_specializations = saved_local_specializations;
17689
17690       /* Finish the function.  */
17691       d = finish_function (0);
17692       expand_or_defer_fn (d);
17693     }
17694
17695   /* We're not deferring instantiation any more.  */
17696   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
17697
17698   if (need_push)
17699     pop_from_top_level ();
17700
17701 out:
17702   input_location = saved_loc;
17703   pop_deferring_access_checks ();
17704   pop_tinst_level ();
17705
17706   timevar_pop (TV_TEMPLATE_INST);
17707
17708   return d;
17709 }
17710
17711 /* Run through the list of templates that we wish we could
17712    instantiate, and instantiate any we can.  RETRIES is the
17713    number of times we retry pending template instantiation.  */
17714
17715 void
17716 instantiate_pending_templates (int retries)
17717 {
17718   int reconsider;
17719   location_t saved_loc = input_location;
17720
17721   /* Instantiating templates may trigger vtable generation.  This in turn
17722      may require further template instantiations.  We place a limit here
17723      to avoid infinite loop.  */
17724   if (pending_templates && retries >= max_tinst_depth)
17725     {
17726       tree decl = pending_templates->tinst->decl;
17727
17728       error ("template instantiation depth exceeds maximum of %d"
17729              " instantiating %q+D, possibly from virtual table generation"
17730              " (use -ftemplate-depth= to increase the maximum)",
17731              max_tinst_depth, decl);
17732       if (TREE_CODE (decl) == FUNCTION_DECL)
17733         /* Pretend that we defined it.  */
17734         DECL_INITIAL (decl) = error_mark_node;
17735       return;
17736     }
17737
17738   do
17739     {
17740       struct pending_template **t = &pending_templates;
17741       struct pending_template *last = NULL;
17742       reconsider = 0;
17743       while (*t)
17744         {
17745           tree instantiation = reopen_tinst_level ((*t)->tinst);
17746           bool complete = false;
17747
17748           if (TYPE_P (instantiation))
17749             {
17750               tree fn;
17751
17752               if (!COMPLETE_TYPE_P (instantiation))
17753                 {
17754                   instantiate_class_template (instantiation);
17755                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
17756                     for (fn = TYPE_METHODS (instantiation);
17757                          fn;
17758                          fn = TREE_CHAIN (fn))
17759                       if (! DECL_ARTIFICIAL (fn))
17760                         instantiate_decl (fn,
17761                                           /*defer_ok=*/0,
17762                                           /*expl_inst_class_mem_p=*/false);
17763                   if (COMPLETE_TYPE_P (instantiation))
17764                     reconsider = 1;
17765                 }
17766
17767               complete = COMPLETE_TYPE_P (instantiation);
17768             }
17769           else
17770             {
17771               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
17772                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
17773                 {
17774                   instantiation
17775                     = instantiate_decl (instantiation,
17776                                         /*defer_ok=*/0,
17777                                         /*expl_inst_class_mem_p=*/false);
17778                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
17779                     reconsider = 1;
17780                 }
17781
17782               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
17783                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
17784             }
17785
17786           if (complete)
17787             /* If INSTANTIATION has been instantiated, then we don't
17788                need to consider it again in the future.  */
17789             *t = (*t)->next;
17790           else
17791             {
17792               last = *t;
17793               t = &(*t)->next;
17794             }
17795           tinst_depth = 0;
17796           current_tinst_level = NULL;
17797         }
17798       last_pending_template = last;
17799     }
17800   while (reconsider);
17801
17802   input_location = saved_loc;
17803 }
17804
17805 /* Substitute ARGVEC into T, which is a list of initializers for
17806    either base class or a non-static data member.  The TREE_PURPOSEs
17807    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
17808    instantiate_decl.  */
17809
17810 static tree
17811 tsubst_initializer_list (tree t, tree argvec)
17812 {
17813   tree inits = NULL_TREE;
17814
17815   for (; t; t = TREE_CHAIN (t))
17816     {
17817       tree decl;
17818       tree init;
17819       tree expanded_bases = NULL_TREE;
17820       tree expanded_arguments = NULL_TREE;
17821       int i, len = 1;
17822
17823       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
17824         {
17825           tree expr;
17826           tree arg;
17827
17828           /* Expand the base class expansion type into separate base
17829              classes.  */
17830           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
17831                                                  tf_warning_or_error,
17832                                                  NULL_TREE);
17833           if (expanded_bases == error_mark_node)
17834             continue;
17835           
17836           /* We'll be building separate TREE_LISTs of arguments for
17837              each base.  */
17838           len = TREE_VEC_LENGTH (expanded_bases);
17839           expanded_arguments = make_tree_vec (len);
17840           for (i = 0; i < len; i++)
17841             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
17842
17843           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
17844              expand each argument in the TREE_VALUE of t.  */
17845           expr = make_node (EXPR_PACK_EXPANSION);
17846           PACK_EXPANSION_PARAMETER_PACKS (expr) =
17847             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
17848
17849           if (TREE_VALUE (t) == void_type_node)
17850             /* VOID_TYPE_NODE is used to indicate
17851                value-initialization.  */
17852             {
17853               for (i = 0; i < len; i++)
17854                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
17855             }
17856           else
17857             {
17858               /* Substitute parameter packs into each argument in the
17859                  TREE_LIST.  */
17860               in_base_initializer = 1;
17861               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
17862                 {
17863                   tree expanded_exprs;
17864
17865                   /* Expand the argument.  */
17866                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
17867                   expanded_exprs 
17868                     = tsubst_pack_expansion (expr, argvec,
17869                                              tf_warning_or_error,
17870                                              NULL_TREE);
17871                   if (expanded_exprs == error_mark_node)
17872                     continue;
17873
17874                   /* Prepend each of the expanded expressions to the
17875                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
17876                   for (i = 0; i < len; i++)
17877                     {
17878                       TREE_VEC_ELT (expanded_arguments, i) = 
17879                         tree_cons (NULL_TREE, 
17880                                    TREE_VEC_ELT (expanded_exprs, i),
17881                                    TREE_VEC_ELT (expanded_arguments, i));
17882                     }
17883                 }
17884               in_base_initializer = 0;
17885
17886               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
17887                  since we built them backwards.  */
17888               for (i = 0; i < len; i++)
17889                 {
17890                   TREE_VEC_ELT (expanded_arguments, i) = 
17891                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
17892                 }
17893             }
17894         }
17895
17896       for (i = 0; i < len; ++i)
17897         {
17898           if (expanded_bases)
17899             {
17900               decl = TREE_VEC_ELT (expanded_bases, i);
17901               decl = expand_member_init (decl);
17902               init = TREE_VEC_ELT (expanded_arguments, i);
17903             }
17904           else
17905             {
17906               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
17907                                   tf_warning_or_error, NULL_TREE);
17908
17909               decl = expand_member_init (decl);
17910               if (decl && !DECL_P (decl))
17911                 in_base_initializer = 1;
17912
17913               init = TREE_VALUE (t);
17914               if (init != void_type_node)
17915                 init = tsubst_expr (init, argvec,
17916                                     tf_warning_or_error, NULL_TREE,
17917                                     /*integral_constant_expression_p=*/false);
17918               in_base_initializer = 0;
17919             }
17920
17921           if (decl)
17922             {
17923               init = build_tree_list (decl, init);
17924               TREE_CHAIN (init) = inits;
17925               inits = init;
17926             }
17927         }
17928     }
17929   return inits;
17930 }
17931
17932 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
17933
17934 static void
17935 set_current_access_from_decl (tree decl)
17936 {
17937   if (TREE_PRIVATE (decl))
17938     current_access_specifier = access_private_node;
17939   else if (TREE_PROTECTED (decl))
17940     current_access_specifier = access_protected_node;
17941   else
17942     current_access_specifier = access_public_node;
17943 }
17944
17945 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
17946    is the instantiation (which should have been created with
17947    start_enum) and ARGS are the template arguments to use.  */
17948
17949 static void
17950 tsubst_enum (tree tag, tree newtag, tree args)
17951 {
17952   tree e;
17953
17954   if (SCOPED_ENUM_P (newtag))
17955     begin_scope (sk_scoped_enum, newtag);
17956
17957   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
17958     {
17959       tree value;
17960       tree decl;
17961
17962       decl = TREE_VALUE (e);
17963       /* Note that in a template enum, the TREE_VALUE is the
17964          CONST_DECL, not the corresponding INTEGER_CST.  */
17965       value = tsubst_expr (DECL_INITIAL (decl),
17966                            args, tf_warning_or_error, NULL_TREE,
17967                            /*integral_constant_expression_p=*/true);
17968
17969       /* Give this enumeration constant the correct access.  */
17970       set_current_access_from_decl (decl);
17971
17972       /* Actually build the enumerator itself.  */
17973       build_enumerator
17974         (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
17975     }
17976
17977   if (SCOPED_ENUM_P (newtag))
17978     finish_scope ();
17979
17980   finish_enum_value_list (newtag);
17981   finish_enum (newtag);
17982
17983   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
17984     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
17985 }
17986
17987 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
17988    its type -- but without substituting the innermost set of template
17989    arguments.  So, innermost set of template parameters will appear in
17990    the type.  */
17991
17992 tree
17993 get_mostly_instantiated_function_type (tree decl)
17994 {
17995   tree fn_type;
17996   tree tmpl;
17997   tree targs;
17998   tree tparms;
17999   int parm_depth;
18000
18001   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
18002   targs = DECL_TI_ARGS (decl);
18003   tparms = DECL_TEMPLATE_PARMS (tmpl);
18004   parm_depth = TMPL_PARMS_DEPTH (tparms);
18005
18006   /* There should be as many levels of arguments as there are levels
18007      of parameters.  */
18008   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
18009
18010   fn_type = TREE_TYPE (tmpl);
18011
18012   if (parm_depth == 1)
18013     /* No substitution is necessary.  */
18014     ;
18015   else
18016     {
18017       int i, save_access_control;
18018       tree partial_args;
18019
18020       /* Replace the innermost level of the TARGS with NULL_TREEs to
18021          let tsubst know not to substitute for those parameters.  */
18022       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
18023       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
18024         SET_TMPL_ARGS_LEVEL (partial_args, i,
18025                              TMPL_ARGS_LEVEL (targs, i));
18026       SET_TMPL_ARGS_LEVEL (partial_args,
18027                            TMPL_ARGS_DEPTH (targs),
18028                            make_tree_vec (DECL_NTPARMS (tmpl)));
18029
18030       /* Disable access control as this function is used only during
18031          name-mangling.  */
18032       save_access_control = flag_access_control;
18033       flag_access_control = 0;
18034
18035       ++processing_template_decl;
18036       /* Now, do the (partial) substitution to figure out the
18037          appropriate function type.  */
18038       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
18039       --processing_template_decl;
18040
18041       /* Substitute into the template parameters to obtain the real
18042          innermost set of parameters.  This step is important if the
18043          innermost set of template parameters contains value
18044          parameters whose types depend on outer template parameters.  */
18045       TREE_VEC_LENGTH (partial_args)--;
18046       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
18047
18048       flag_access_control = save_access_control;
18049     }
18050
18051   return fn_type;
18052 }
18053
18054 /* Return truthvalue if we're processing a template different from
18055    the last one involved in diagnostics.  */
18056 int
18057 problematic_instantiation_changed (void)
18058 {
18059   return last_template_error_tick != tinst_level_tick;
18060 }
18061
18062 /* Remember current template involved in diagnostics.  */
18063 void
18064 record_last_problematic_instantiation (void)
18065 {
18066   last_template_error_tick = tinst_level_tick;
18067 }
18068
18069 struct tinst_level *
18070 current_instantiation (void)
18071 {
18072   return current_tinst_level;
18073 }
18074
18075 /* [temp.param] Check that template non-type parm TYPE is of an allowable
18076    type. Return zero for ok, nonzero for disallowed. Issue error and
18077    warning messages under control of COMPLAIN.  */
18078
18079 static int
18080 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
18081 {
18082   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
18083     return 0;
18084   else if (POINTER_TYPE_P (type))
18085     return 0;
18086   else if (TYPE_PTR_TO_MEMBER_P (type))
18087     return 0;
18088   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
18089     return 0;
18090   else if (TREE_CODE (type) == TYPENAME_TYPE)
18091     return 0;
18092
18093   if (complain & tf_error)
18094     error ("%q#T is not a valid type for a template constant parameter", type);
18095   return 1;
18096 }
18097
18098 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
18099    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
18100
18101 static bool
18102 dependent_type_p_r (tree type)
18103 {
18104   tree scope;
18105
18106   /* [temp.dep.type]
18107
18108      A type is dependent if it is:
18109
18110      -- a template parameter. Template template parameters are types
18111         for us (since TYPE_P holds true for them) so we handle
18112         them here.  */
18113   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
18114       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
18115     return true;
18116   /* -- a qualified-id with a nested-name-specifier which contains a
18117         class-name that names a dependent type or whose unqualified-id
18118         names a dependent type.  */
18119   if (TREE_CODE (type) == TYPENAME_TYPE)
18120     return true;
18121   /* -- a cv-qualified type where the cv-unqualified type is
18122         dependent.  */
18123   type = TYPE_MAIN_VARIANT (type);
18124   /* -- a compound type constructed from any dependent type.  */
18125   if (TYPE_PTR_TO_MEMBER_P (type))
18126     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
18127             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
18128                                            (type)));
18129   else if (TREE_CODE (type) == POINTER_TYPE
18130            || TREE_CODE (type) == REFERENCE_TYPE)
18131     return dependent_type_p (TREE_TYPE (type));
18132   else if (TREE_CODE (type) == FUNCTION_TYPE
18133            || TREE_CODE (type) == METHOD_TYPE)
18134     {
18135       tree arg_type;
18136
18137       if (dependent_type_p (TREE_TYPE (type)))
18138         return true;
18139       for (arg_type = TYPE_ARG_TYPES (type);
18140            arg_type;
18141            arg_type = TREE_CHAIN (arg_type))
18142         if (dependent_type_p (TREE_VALUE (arg_type)))
18143           return true;
18144       return false;
18145     }
18146   /* -- an array type constructed from any dependent type or whose
18147         size is specified by a constant expression that is
18148         value-dependent.
18149
18150         We checked for type- and value-dependence of the bounds in
18151         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
18152   if (TREE_CODE (type) == ARRAY_TYPE)
18153     {
18154       if (TYPE_DOMAIN (type)
18155           && dependent_type_p (TYPE_DOMAIN (type)))
18156         return true;
18157       return dependent_type_p (TREE_TYPE (type));
18158     }
18159
18160   /* -- a template-id in which either the template name is a template
18161      parameter ...  */
18162   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
18163     return true;
18164   /* ... or any of the template arguments is a dependent type or
18165         an expression that is type-dependent or value-dependent.  */
18166   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
18167            && (any_dependent_template_arguments_p
18168                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
18169     return true;
18170
18171   /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
18172      dependent; if the argument of the `typeof' expression is not
18173      type-dependent, then it should already been have resolved.  */
18174   if (TREE_CODE (type) == TYPEOF_TYPE
18175       || TREE_CODE (type) == DECLTYPE_TYPE
18176       || TREE_CODE (type) == UNDERLYING_TYPE)
18177     return true;
18178
18179   /* A template argument pack is dependent if any of its packed
18180      arguments are.  */
18181   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
18182     {
18183       tree args = ARGUMENT_PACK_ARGS (type);
18184       int i, len = TREE_VEC_LENGTH (args);
18185       for (i = 0; i < len; ++i)
18186         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
18187           return true;
18188     }
18189
18190   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
18191      be template parameters.  */
18192   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
18193     return true;
18194
18195   /* The standard does not specifically mention types that are local
18196      to template functions or local classes, but they should be
18197      considered dependent too.  For example:
18198
18199        template <int I> void f() {
18200          enum E { a = I };
18201          S<sizeof (E)> s;
18202        }
18203
18204      The size of `E' cannot be known until the value of `I' has been
18205      determined.  Therefore, `E' must be considered dependent.  */
18206   scope = TYPE_CONTEXT (type);
18207   if (scope && TYPE_P (scope))
18208     return dependent_type_p (scope);
18209   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
18210     return type_dependent_expression_p (scope);
18211
18212   /* Other types are non-dependent.  */
18213   return false;
18214 }
18215
18216 /* Returns TRUE if TYPE is dependent, in the sense of
18217    [temp.dep.type].  Note that a NULL type is considered dependent.  */
18218
18219 bool
18220 dependent_type_p (tree type)
18221 {
18222   /* If there are no template parameters in scope, then there can't be
18223      any dependent types.  */
18224   if (!processing_template_decl)
18225     {
18226       /* If we are not processing a template, then nobody should be
18227          providing us with a dependent type.  */
18228       gcc_assert (type);
18229       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
18230       return false;
18231     }
18232
18233   /* If the type is NULL, we have not computed a type for the entity
18234      in question; in that case, the type is dependent.  */
18235   if (!type)
18236     return true;
18237
18238   /* Erroneous types can be considered non-dependent.  */
18239   if (type == error_mark_node)
18240     return false;
18241
18242   /* If we have not already computed the appropriate value for TYPE,
18243      do so now.  */
18244   if (!TYPE_DEPENDENT_P_VALID (type))
18245     {
18246       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
18247       TYPE_DEPENDENT_P_VALID (type) = 1;
18248     }
18249
18250   return TYPE_DEPENDENT_P (type);
18251 }
18252
18253 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
18254    lookup.  In other words, a dependent type that is not the current
18255    instantiation.  */
18256
18257 bool
18258 dependent_scope_p (tree scope)
18259 {
18260   return (scope && TYPE_P (scope) && dependent_type_p (scope)
18261           && !currently_open_class (scope));
18262 }
18263
18264 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
18265    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
18266    expression.  */
18267
18268 /* Note that this predicate is not appropriate for general expressions;
18269    only constant expressions (that satisfy potential_constant_expression)
18270    can be tested for value dependence.
18271
18272    We should really also have a predicate for "instantiation-dependent".
18273
18274    fold_non_dependent_expr: fold if constant and not type-dependent and not value-dependent.
18275      (what about instantiation-dependent constant-expressions?)
18276    is_late_template_attribute: defer if instantiation-dependent.
18277    compute_array_index_type: proceed if constant and not t- or v-dependent
18278      if instantiation-dependent, need to remember full expression
18279    uses_template_parms: FIXME - need to audit callers
18280    tsubst_decl [function_decl]: Why is this using value_dependent_expression_p?
18281    dependent_type_p [array_type]: dependent if index type is dependent
18282      (or non-constant?)
18283    static_assert - instantiation-dependent */
18284
18285 bool
18286 value_dependent_expression_p (tree expression)
18287 {
18288   if (!processing_template_decl)
18289     return false;
18290
18291   /* A name declared with a dependent type.  */
18292   if (DECL_P (expression) && type_dependent_expression_p (expression))
18293     return true;
18294
18295   switch (TREE_CODE (expression))
18296     {
18297     case IDENTIFIER_NODE:
18298       /* A name that has not been looked up -- must be dependent.  */
18299       return true;
18300
18301     case TEMPLATE_PARM_INDEX:
18302       /* A non-type template parm.  */
18303       return true;
18304
18305     case CONST_DECL:
18306       /* A non-type template parm.  */
18307       if (DECL_TEMPLATE_PARM_P (expression))
18308         return true;
18309       return value_dependent_expression_p (DECL_INITIAL (expression));
18310
18311     case VAR_DECL:
18312        /* A constant with literal type and is initialized
18313           with an expression that is value-dependent.  */
18314       if (DECL_INITIAL (expression)
18315           && decl_constant_var_p (expression)
18316           && value_dependent_expression_p (DECL_INITIAL (expression)))
18317         return true;
18318       return false;
18319
18320     case DYNAMIC_CAST_EXPR:
18321     case STATIC_CAST_EXPR:
18322     case CONST_CAST_EXPR:
18323     case REINTERPRET_CAST_EXPR:
18324     case CAST_EXPR:
18325       /* These expressions are value-dependent if the type to which
18326          the cast occurs is dependent or the expression being casted
18327          is value-dependent.  */
18328       {
18329         tree type = TREE_TYPE (expression);
18330
18331         if (dependent_type_p (type))
18332           return true;
18333
18334         /* A functional cast has a list of operands.  */
18335         expression = TREE_OPERAND (expression, 0);
18336         if (!expression)
18337           {
18338             /* If there are no operands, it must be an expression such
18339                as "int()". This should not happen for aggregate types
18340                because it would form non-constant expressions.  */
18341             gcc_assert (cxx_dialect >= cxx0x
18342                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
18343
18344             return false;
18345           }
18346
18347         if (TREE_CODE (expression) == TREE_LIST)
18348           return any_value_dependent_elements_p (expression);
18349
18350         return value_dependent_expression_p (expression);
18351       }
18352
18353     case SIZEOF_EXPR:
18354     case ALIGNOF_EXPR:
18355     case TYPEID_EXPR:
18356       /* A `sizeof' expression is value-dependent if the operand is
18357          type-dependent or is a pack expansion.  */
18358       expression = TREE_OPERAND (expression, 0);
18359       if (PACK_EXPANSION_P (expression))
18360         return true;
18361       else if (TYPE_P (expression))
18362         return dependent_type_p (expression);
18363       return type_dependent_expression_p (expression);
18364
18365     case AT_ENCODE_EXPR:
18366       /* An 'encode' expression is value-dependent if the operand is
18367          type-dependent.  */
18368       expression = TREE_OPERAND (expression, 0);
18369       return dependent_type_p (expression);
18370
18371     case NOEXCEPT_EXPR:
18372       expression = TREE_OPERAND (expression, 0);
18373       return type_dependent_expression_p (expression);
18374
18375     case SCOPE_REF:
18376       {
18377         tree name = TREE_OPERAND (expression, 1);
18378         return value_dependent_expression_p (name);
18379       }
18380
18381     case COMPONENT_REF:
18382       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
18383               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
18384
18385     case NONTYPE_ARGUMENT_PACK:
18386       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
18387          is value-dependent.  */
18388       {
18389         tree values = ARGUMENT_PACK_ARGS (expression);
18390         int i, len = TREE_VEC_LENGTH (values);
18391         
18392         for (i = 0; i < len; ++i)
18393           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
18394             return true;
18395         
18396         return false;
18397       }
18398
18399     case TRAIT_EXPR:
18400       {
18401         tree type2 = TRAIT_EXPR_TYPE2 (expression);
18402         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
18403                 || (type2 ? dependent_type_p (type2) : false));
18404       }
18405
18406     case MODOP_EXPR:
18407       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
18408               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
18409
18410     case ARRAY_REF:
18411       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
18412               || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
18413
18414     case ADDR_EXPR:
18415       {
18416         tree op = TREE_OPERAND (expression, 0);
18417         return (value_dependent_expression_p (op)
18418                 || has_value_dependent_address (op));
18419       }
18420
18421     case CALL_EXPR:
18422       {
18423         tree fn = get_callee_fndecl (expression);
18424         int i, nargs;
18425         if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
18426           return true;
18427         nargs = call_expr_nargs (expression);
18428         for (i = 0; i < nargs; ++i)
18429           {
18430             tree op = CALL_EXPR_ARG (expression, i);
18431             /* In a call to a constexpr member function, look through the
18432                implicit ADDR_EXPR on the object argument so that it doesn't
18433                cause the call to be considered value-dependent.  We also
18434                look through it in potential_constant_expression.  */
18435             if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
18436                 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
18437                 && TREE_CODE (op) == ADDR_EXPR)
18438               op = TREE_OPERAND (op, 0);
18439             if (value_dependent_expression_p (op))
18440               return true;
18441           }
18442         return false;
18443       }
18444
18445     case TEMPLATE_ID_EXPR:
18446       /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
18447          type-dependent.  */
18448       return type_dependent_expression_p (expression);
18449
18450     case CONSTRUCTOR:
18451       {
18452         unsigned ix;
18453         tree val;
18454         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
18455           if (value_dependent_expression_p (val))
18456             return true;
18457         return false;
18458       }
18459
18460     default:
18461       /* A constant expression is value-dependent if any subexpression is
18462          value-dependent.  */
18463       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
18464         {
18465         case tcc_reference:
18466         case tcc_unary:
18467         case tcc_comparison:
18468         case tcc_binary:
18469         case tcc_expression:
18470         case tcc_vl_exp:
18471           {
18472             int i, len = cp_tree_operand_length (expression);
18473
18474             for (i = 0; i < len; i++)
18475               {
18476                 tree t = TREE_OPERAND (expression, i);
18477
18478                 /* In some cases, some of the operands may be missing.l
18479                    (For example, in the case of PREDECREMENT_EXPR, the
18480                    amount to increment by may be missing.)  That doesn't
18481                    make the expression dependent.  */
18482                 if (t && value_dependent_expression_p (t))
18483                   return true;
18484               }
18485           }
18486           break;
18487         default:
18488           break;
18489         }
18490       break;
18491     }
18492
18493   /* The expression is not value-dependent.  */
18494   return false;
18495 }
18496
18497 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
18498    [temp.dep.expr].  Note that an expression with no type is
18499    considered dependent.  Other parts of the compiler arrange for an
18500    expression with type-dependent subexpressions to have no type, so
18501    this function doesn't have to be fully recursive.  */
18502
18503 bool
18504 type_dependent_expression_p (tree expression)
18505 {
18506   if (!processing_template_decl)
18507     return false;
18508
18509   if (expression == error_mark_node)
18510     return false;
18511
18512   /* An unresolved name is always dependent.  */
18513   if (TREE_CODE (expression) == IDENTIFIER_NODE
18514       || TREE_CODE (expression) == USING_DECL)
18515     return true;
18516
18517   /* Some expression forms are never type-dependent.  */
18518   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
18519       || TREE_CODE (expression) == SIZEOF_EXPR
18520       || TREE_CODE (expression) == ALIGNOF_EXPR
18521       || TREE_CODE (expression) == AT_ENCODE_EXPR
18522       || TREE_CODE (expression) == NOEXCEPT_EXPR
18523       || TREE_CODE (expression) == TRAIT_EXPR
18524       || TREE_CODE (expression) == TYPEID_EXPR
18525       || TREE_CODE (expression) == DELETE_EXPR
18526       || TREE_CODE (expression) == VEC_DELETE_EXPR
18527       || TREE_CODE (expression) == THROW_EXPR)
18528     return false;
18529
18530   /* The types of these expressions depends only on the type to which
18531      the cast occurs.  */
18532   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
18533       || TREE_CODE (expression) == STATIC_CAST_EXPR
18534       || TREE_CODE (expression) == CONST_CAST_EXPR
18535       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
18536       || TREE_CODE (expression) == CAST_EXPR)
18537     return dependent_type_p (TREE_TYPE (expression));
18538
18539   /* The types of these expressions depends only on the type created
18540      by the expression.  */
18541   if (TREE_CODE (expression) == NEW_EXPR
18542       || TREE_CODE (expression) == VEC_NEW_EXPR)
18543     {
18544       /* For NEW_EXPR tree nodes created inside a template, either
18545          the object type itself or a TREE_LIST may appear as the
18546          operand 1.  */
18547       tree type = TREE_OPERAND (expression, 1);
18548       if (TREE_CODE (type) == TREE_LIST)
18549         /* This is an array type.  We need to check array dimensions
18550            as well.  */
18551         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
18552                || value_dependent_expression_p
18553                     (TREE_OPERAND (TREE_VALUE (type), 1));
18554       else
18555         return dependent_type_p (type);
18556     }
18557
18558   if (TREE_CODE (expression) == SCOPE_REF)
18559     {
18560       tree scope = TREE_OPERAND (expression, 0);
18561       tree name = TREE_OPERAND (expression, 1);
18562
18563       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
18564          contains an identifier associated by name lookup with one or more
18565          declarations declared with a dependent type, or...a
18566          nested-name-specifier or qualified-id that names a member of an
18567          unknown specialization.  */
18568       return (type_dependent_expression_p (name)
18569               || dependent_scope_p (scope));
18570     }
18571
18572   if (TREE_CODE (expression) == FUNCTION_DECL
18573       && DECL_LANG_SPECIFIC (expression)
18574       && DECL_TEMPLATE_INFO (expression)
18575       && (any_dependent_template_arguments_p
18576           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
18577     return true;
18578
18579   if (TREE_CODE (expression) == TEMPLATE_DECL
18580       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
18581     return false;
18582
18583   if (TREE_CODE (expression) == STMT_EXPR)
18584     expression = stmt_expr_value_expr (expression);
18585
18586   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
18587     {
18588       tree elt;
18589       unsigned i;
18590
18591       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
18592         {
18593           if (type_dependent_expression_p (elt))
18594             return true;
18595         }
18596       return false;
18597     }
18598
18599   /* A static data member of the current instantiation with incomplete
18600      array type is type-dependent, as the definition and specializations
18601      can have different bounds.  */
18602   if (TREE_CODE (expression) == VAR_DECL
18603       && DECL_CLASS_SCOPE_P (expression)
18604       && dependent_type_p (DECL_CONTEXT (expression))
18605       && VAR_HAD_UNKNOWN_BOUND (expression))
18606     return true;
18607
18608   if (TREE_TYPE (expression) == unknown_type_node)
18609     {
18610       if (TREE_CODE (expression) == ADDR_EXPR)
18611         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
18612       if (TREE_CODE (expression) == COMPONENT_REF
18613           || TREE_CODE (expression) == OFFSET_REF)
18614         {
18615           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
18616             return true;
18617           expression = TREE_OPERAND (expression, 1);
18618           if (TREE_CODE (expression) == IDENTIFIER_NODE)
18619             return false;
18620         }
18621       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
18622       if (TREE_CODE (expression) == SCOPE_REF)
18623         return false;
18624
18625       if (TREE_CODE (expression) == BASELINK)
18626         expression = BASELINK_FUNCTIONS (expression);
18627
18628       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
18629         {
18630           if (any_dependent_template_arguments_p
18631               (TREE_OPERAND (expression, 1)))
18632             return true;
18633           expression = TREE_OPERAND (expression, 0);
18634         }
18635       gcc_assert (TREE_CODE (expression) == OVERLOAD
18636                   || TREE_CODE (expression) == FUNCTION_DECL);
18637
18638       while (expression)
18639         {
18640           if (type_dependent_expression_p (OVL_CURRENT (expression)))
18641             return true;
18642           expression = OVL_NEXT (expression);
18643         }
18644       return false;
18645     }
18646
18647   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
18648
18649   return (dependent_type_p (TREE_TYPE (expression)));
18650 }
18651
18652 /* Like type_dependent_expression_p, but it also works while not processing
18653    a template definition, i.e. during substitution or mangling.  */
18654
18655 bool
18656 type_dependent_expression_p_push (tree expr)
18657 {
18658   bool b;
18659   ++processing_template_decl;
18660   b = type_dependent_expression_p (expr);
18661   --processing_template_decl;
18662   return b;
18663 }
18664
18665 /* Returns TRUE if ARGS contains a type-dependent expression.  */
18666
18667 bool
18668 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
18669 {
18670   unsigned int i;
18671   tree arg;
18672
18673   FOR_EACH_VEC_ELT (tree, args, i, arg)
18674     {
18675       if (type_dependent_expression_p (arg))
18676         return true;
18677     }
18678   return false;
18679 }
18680
18681 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
18682    expressions) contains any type-dependent expressions.  */
18683
18684 bool
18685 any_type_dependent_elements_p (const_tree list)
18686 {
18687   for (; list; list = TREE_CHAIN (list))
18688     if (value_dependent_expression_p (TREE_VALUE (list)))
18689       return true;
18690
18691   return false;
18692 }
18693
18694 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
18695    expressions) contains any value-dependent expressions.  */
18696
18697 bool
18698 any_value_dependent_elements_p (const_tree list)
18699 {
18700   for (; list; list = TREE_CHAIN (list))
18701     if (value_dependent_expression_p (TREE_VALUE (list)))
18702       return true;
18703
18704   return false;
18705 }
18706
18707 /* Returns TRUE if the ARG (a template argument) is dependent.  */
18708
18709 bool
18710 dependent_template_arg_p (tree arg)
18711 {
18712   if (!processing_template_decl)
18713     return false;
18714
18715   /* Assume a template argument that was wrongly written by the user
18716      is dependent. This is consistent with what
18717      any_dependent_template_arguments_p [that calls this function]
18718      does.  */
18719   if (arg == error_mark_node)
18720     return true;
18721
18722   if (TREE_CODE (arg) == TEMPLATE_DECL
18723       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
18724     return dependent_template_p (arg);
18725   else if (ARGUMENT_PACK_P (arg))
18726     {
18727       tree args = ARGUMENT_PACK_ARGS (arg);
18728       int i, len = TREE_VEC_LENGTH (args);
18729       for (i = 0; i < len; ++i)
18730         {
18731           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
18732             return true;
18733         }
18734
18735       return false;
18736     }
18737   else if (TYPE_P (arg))
18738     return dependent_type_p (arg);
18739   else
18740     return (type_dependent_expression_p (arg)
18741             || value_dependent_expression_p (arg));
18742 }
18743
18744 /* Returns true if ARGS (a collection of template arguments) contains
18745    any types that require structural equality testing.  */
18746
18747 bool
18748 any_template_arguments_need_structural_equality_p (tree args)
18749 {
18750   int i;
18751   int j;
18752
18753   if (!args)
18754     return false;
18755   if (args == error_mark_node)
18756     return true;
18757
18758   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
18759     {
18760       tree level = TMPL_ARGS_LEVEL (args, i + 1);
18761       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
18762         {
18763           tree arg = TREE_VEC_ELT (level, j);
18764           tree packed_args = NULL_TREE;
18765           int k, len = 1;
18766
18767           if (ARGUMENT_PACK_P (arg))
18768             {
18769               /* Look inside the argument pack.  */
18770               packed_args = ARGUMENT_PACK_ARGS (arg);
18771               len = TREE_VEC_LENGTH (packed_args);
18772             }
18773
18774           for (k = 0; k < len; ++k)
18775             {
18776               if (packed_args)
18777                 arg = TREE_VEC_ELT (packed_args, k);
18778
18779               if (error_operand_p (arg))
18780                 return true;
18781               else if (TREE_CODE (arg) == TEMPLATE_DECL
18782                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
18783                 continue;
18784               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
18785                 return true;
18786               else if (!TYPE_P (arg) && TREE_TYPE (arg)
18787                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
18788                 return true;
18789             }
18790         }
18791     }
18792
18793   return false;
18794 }
18795
18796 /* Returns true if ARGS (a collection of template arguments) contains
18797    any dependent arguments.  */
18798
18799 bool
18800 any_dependent_template_arguments_p (const_tree args)
18801 {
18802   int i;
18803   int j;
18804
18805   if (!args)
18806     return false;
18807   if (args == error_mark_node)
18808     return true;
18809
18810   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
18811     {
18812       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
18813       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
18814         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
18815           return true;
18816     }
18817
18818   return false;
18819 }
18820
18821 /* Returns TRUE if the template TMPL is dependent.  */
18822
18823 bool
18824 dependent_template_p (tree tmpl)
18825 {
18826   if (TREE_CODE (tmpl) == OVERLOAD)
18827     {
18828       while (tmpl)
18829         {
18830           if (dependent_template_p (OVL_CURRENT (tmpl)))
18831             return true;
18832           tmpl = OVL_NEXT (tmpl);
18833         }
18834       return false;
18835     }
18836
18837   /* Template template parameters are dependent.  */
18838   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
18839       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
18840     return true;
18841   /* So are names that have not been looked up.  */
18842   if (TREE_CODE (tmpl) == SCOPE_REF
18843       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
18844     return true;
18845   /* So are member templates of dependent classes.  */
18846   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
18847     return dependent_type_p (DECL_CONTEXT (tmpl));
18848   return false;
18849 }
18850
18851 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
18852
18853 bool
18854 dependent_template_id_p (tree tmpl, tree args)
18855 {
18856   return (dependent_template_p (tmpl)
18857           || any_dependent_template_arguments_p (args));
18858 }
18859
18860 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
18861    is dependent.  */
18862
18863 bool
18864 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
18865 {
18866   int i;
18867
18868   if (!processing_template_decl)
18869     return false;
18870
18871   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
18872     {
18873       tree decl = TREE_VEC_ELT (declv, i);
18874       tree init = TREE_VEC_ELT (initv, i);
18875       tree cond = TREE_VEC_ELT (condv, i);
18876       tree incr = TREE_VEC_ELT (incrv, i);
18877
18878       if (type_dependent_expression_p (decl))
18879         return true;
18880
18881       if (init && type_dependent_expression_p (init))
18882         return true;
18883
18884       if (type_dependent_expression_p (cond))
18885         return true;
18886
18887       if (COMPARISON_CLASS_P (cond)
18888           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
18889               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
18890         return true;
18891
18892       if (TREE_CODE (incr) == MODOP_EXPR)
18893         {
18894           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
18895               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
18896             return true;
18897         }
18898       else if (type_dependent_expression_p (incr))
18899         return true;
18900       else if (TREE_CODE (incr) == MODIFY_EXPR)
18901         {
18902           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
18903             return true;
18904           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
18905             {
18906               tree t = TREE_OPERAND (incr, 1);
18907               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
18908                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
18909                 return true;
18910             }
18911         }
18912     }
18913
18914   return false;
18915 }
18916
18917 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
18918    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
18919    no such TYPE can be found.  Note that this function peers inside
18920    uninstantiated templates and therefore should be used only in
18921    extremely limited situations.  ONLY_CURRENT_P restricts this
18922    peering to the currently open classes hierarchy (which is required
18923    when comparing types).  */
18924
18925 tree
18926 resolve_typename_type (tree type, bool only_current_p)
18927 {
18928   tree scope;
18929   tree name;
18930   tree decl;
18931   int quals;
18932   tree pushed_scope;
18933   tree result;
18934
18935   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
18936
18937   scope = TYPE_CONTEXT (type);
18938   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
18939      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
18940      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
18941      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
18942      identifier  of the TYPENAME_TYPE anymore.
18943      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
18944      TYPENAME_TYPE instead, we avoid messing up with a possible
18945      typedef variant case.  */
18946   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
18947
18948   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
18949      it first before we can figure out what NAME refers to.  */
18950   if (TREE_CODE (scope) == TYPENAME_TYPE)
18951     scope = resolve_typename_type (scope, only_current_p);
18952   /* If we don't know what SCOPE refers to, then we cannot resolve the
18953      TYPENAME_TYPE.  */
18954   if (TREE_CODE (scope) == TYPENAME_TYPE)
18955     return type;
18956   /* If the SCOPE is a template type parameter, we have no way of
18957      resolving the name.  */
18958   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
18959     return type;
18960   /* If the SCOPE is not the current instantiation, there's no reason
18961      to look inside it.  */
18962   if (only_current_p && !currently_open_class (scope))
18963     return type;
18964   /* If this is a typedef, we don't want to look inside (c++/11987).  */
18965   if (typedef_variant_p (type))
18966     return type;
18967   /* If SCOPE isn't the template itself, it will not have a valid
18968      TYPE_FIELDS list.  */
18969   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
18970     /* scope is either the template itself or a compatible instantiation
18971        like X<T>, so look up the name in the original template.  */
18972     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
18973   else
18974     /* scope is a partial instantiation, so we can't do the lookup or we
18975        will lose the template arguments.  */
18976     return type;
18977   /* Enter the SCOPE so that name lookup will be resolved as if we
18978      were in the class definition.  In particular, SCOPE will no
18979      longer be considered a dependent type.  */
18980   pushed_scope = push_scope (scope);
18981   /* Look up the declaration.  */
18982   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
18983
18984   result = NULL_TREE;
18985   
18986   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
18987      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
18988   if (!decl)
18989     /*nop*/;
18990   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
18991            && TREE_CODE (decl) == TYPE_DECL)
18992     {
18993       result = TREE_TYPE (decl);
18994       if (result == error_mark_node)
18995         result = NULL_TREE;
18996     }
18997   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
18998            && DECL_CLASS_TEMPLATE_P (decl))
18999     {
19000       tree tmpl;
19001       tree args;
19002       /* Obtain the template and the arguments.  */
19003       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
19004       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
19005       /* Instantiate the template.  */
19006       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
19007                                       /*entering_scope=*/0,
19008                                       tf_error | tf_user);
19009       if (result == error_mark_node)
19010         result = NULL_TREE;
19011     }
19012   
19013   /* Leave the SCOPE.  */
19014   if (pushed_scope)
19015     pop_scope (pushed_scope);
19016
19017   /* If we failed to resolve it, return the original typename.  */
19018   if (!result)
19019     return type;
19020   
19021   /* If lookup found a typename type, resolve that too.  */
19022   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
19023     {
19024       /* Ill-formed programs can cause infinite recursion here, so we
19025          must catch that.  */
19026       TYPENAME_IS_RESOLVING_P (type) = 1;
19027       result = resolve_typename_type (result, only_current_p);
19028       TYPENAME_IS_RESOLVING_P (type) = 0;
19029     }
19030   
19031   /* Qualify the resulting type.  */
19032   quals = cp_type_quals (type);
19033   if (quals)
19034     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
19035
19036   return result;
19037 }
19038
19039 /* EXPR is an expression which is not type-dependent.  Return a proxy
19040    for EXPR that can be used to compute the types of larger
19041    expressions containing EXPR.  */
19042
19043 tree
19044 build_non_dependent_expr (tree expr)
19045 {
19046   tree inner_expr;
19047
19048 #ifdef ENABLE_CHECKING
19049   /* Try to get a constant value for all non-type-dependent expressions in
19050       order to expose bugs in *_dependent_expression_p and constexpr.  */
19051   if (cxx_dialect >= cxx0x)
19052     maybe_constant_value (fold_non_dependent_expr (expr));
19053 #endif
19054
19055   /* Preserve OVERLOADs; the functions must be available to resolve
19056      types.  */
19057   inner_expr = expr;
19058   if (TREE_CODE (inner_expr) == STMT_EXPR)
19059     inner_expr = stmt_expr_value_expr (inner_expr);
19060   if (TREE_CODE (inner_expr) == ADDR_EXPR)
19061     inner_expr = TREE_OPERAND (inner_expr, 0);
19062   if (TREE_CODE (inner_expr) == COMPONENT_REF)
19063     inner_expr = TREE_OPERAND (inner_expr, 1);
19064   if (is_overloaded_fn (inner_expr)
19065       || TREE_CODE (inner_expr) == OFFSET_REF)
19066     return expr;
19067   /* There is no need to return a proxy for a variable.  */
19068   if (TREE_CODE (expr) == VAR_DECL)
19069     return expr;
19070   /* Preserve string constants; conversions from string constants to
19071      "char *" are allowed, even though normally a "const char *"
19072      cannot be used to initialize a "char *".  */
19073   if (TREE_CODE (expr) == STRING_CST)
19074     return expr;
19075   /* Preserve arithmetic constants, as an optimization -- there is no
19076      reason to create a new node.  */
19077   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
19078     return expr;
19079   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
19080      There is at least one place where we want to know that a
19081      particular expression is a throw-expression: when checking a ?:
19082      expression, there are special rules if the second or third
19083      argument is a throw-expression.  */
19084   if (TREE_CODE (expr) == THROW_EXPR)
19085     return expr;
19086
19087   if (TREE_CODE (expr) == COND_EXPR)
19088     return build3 (COND_EXPR,
19089                    TREE_TYPE (expr),
19090                    TREE_OPERAND (expr, 0),
19091                    (TREE_OPERAND (expr, 1)
19092                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
19093                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
19094                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
19095   if (TREE_CODE (expr) == COMPOUND_EXPR
19096       && !COMPOUND_EXPR_OVERLOADED (expr))
19097     return build2 (COMPOUND_EXPR,
19098                    TREE_TYPE (expr),
19099                    TREE_OPERAND (expr, 0),
19100                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
19101
19102   /* Keep dereferences outside the NON_DEPENDENT_EXPR so lvalue_kind
19103      doesn't need to look inside.  */
19104   if (REFERENCE_REF_P (expr))
19105     return convert_from_reference (build_non_dependent_expr
19106                                    (TREE_OPERAND (expr, 0)));
19107
19108   /* If the type is unknown, it can't really be non-dependent */
19109   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
19110
19111   /* Otherwise, build a NON_DEPENDENT_EXPR.  */
19112   return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
19113 }
19114
19115 /* ARGS is a vector of expressions as arguments to a function call.
19116    Replace the arguments with equivalent non-dependent expressions.
19117    This modifies ARGS in place.  */
19118
19119 void
19120 make_args_non_dependent (VEC(tree,gc) *args)
19121 {
19122   unsigned int ix;
19123   tree arg;
19124
19125   FOR_EACH_VEC_ELT (tree, args, ix, arg)
19126     {
19127       tree newarg = build_non_dependent_expr (arg);
19128       if (newarg != arg)
19129         VEC_replace (tree, args, ix, newarg);
19130     }
19131 }
19132
19133 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
19134    with a level one deeper than the actual template parms.  */
19135
19136 tree
19137 make_auto (void)
19138 {
19139   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
19140   TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
19141                                TYPE_DECL, get_identifier ("auto"), au);
19142   TYPE_STUB_DECL (au) = TYPE_NAME (au);
19143   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
19144     (0, processing_template_decl + 1, processing_template_decl + 1,
19145      0, TYPE_NAME (au), NULL_TREE);
19146   TYPE_CANONICAL (au) = canonical_type_parameter (au);
19147   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
19148   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
19149
19150   return au;
19151 }
19152
19153 /* Given type ARG, return std::initializer_list<ARG>.  */
19154
19155 static tree
19156 listify (tree arg)
19157 {
19158   tree std_init_list = namespace_binding
19159     (get_identifier ("initializer_list"), std_node);
19160   tree argvec;
19161   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
19162     {    
19163       error ("deducing from brace-enclosed initializer list requires "
19164              "#include <initializer_list>");
19165       return error_mark_node;
19166     }
19167   argvec = make_tree_vec (1);
19168   TREE_VEC_ELT (argvec, 0) = arg;
19169   return lookup_template_class (std_init_list, argvec, NULL_TREE,
19170                                 NULL_TREE, 0, tf_warning_or_error);
19171 }
19172
19173 /* Replace auto in TYPE with std::initializer_list<auto>.  */
19174
19175 static tree
19176 listify_autos (tree type, tree auto_node)
19177 {
19178   tree init_auto = listify (auto_node);
19179   tree argvec = make_tree_vec (1);
19180   TREE_VEC_ELT (argvec, 0) = init_auto;
19181   if (processing_template_decl)
19182     argvec = add_to_template_args (current_template_args (), argvec);
19183   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
19184 }
19185
19186 /* walk_tree helper for do_auto_deduction.  */
19187
19188 static tree
19189 contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
19190                  void *type)
19191 {
19192   /* Is this a variable with the type we're looking for?  */
19193   if (DECL_P (*tp)
19194       && TREE_TYPE (*tp) == type)
19195     return *tp;
19196   else
19197     return NULL_TREE;
19198 }
19199
19200 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
19201    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
19202
19203 tree
19204 do_auto_deduction (tree type, tree init, tree auto_node)
19205 {
19206   tree parms, tparms, targs;
19207   tree args[1];
19208   tree decl;
19209   int val;
19210
19211   /* The name of the object being declared shall not appear in the
19212      initializer expression.  */
19213   decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
19214   if (decl)
19215     {
19216       error ("variable %q#D with %<auto%> type used in its own "
19217              "initializer", decl);
19218       return error_mark_node;
19219     }
19220
19221   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
19222      with either a new invented type template parameter U or, if the
19223      initializer is a braced-init-list (8.5.4), with
19224      std::initializer_list<U>.  */
19225   if (BRACE_ENCLOSED_INITIALIZER_P (init))
19226     type = listify_autos (type, auto_node);
19227
19228   init = resolve_nondeduced_context (init);
19229
19230   parms = build_tree_list (NULL_TREE, type);
19231   args[0] = init;
19232   tparms = make_tree_vec (1);
19233   targs = make_tree_vec (1);
19234   TREE_VEC_ELT (tparms, 0)
19235     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
19236   val = type_unification_real (tparms, targs, parms, args, 1, 0,
19237                                DEDUCE_CALL, LOOKUP_NORMAL);
19238   if (val > 0)
19239     {
19240       if (type && type != error_mark_node)
19241         /* If type is error_mark_node a diagnostic must have been
19242            emitted by now.  Also, having a mention to '<type error>'
19243            in the diagnostic is not really useful to the user.  */
19244         error ("unable to deduce %qT from %qE", type, init);
19245       return error_mark_node;
19246     }
19247
19248   /* If the list of declarators contains more than one declarator, the type
19249      of each declared variable is determined as described above. If the
19250      type deduced for the template parameter U is not the same in each
19251      deduction, the program is ill-formed.  */
19252   if (TREE_TYPE (auto_node)
19253       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
19254     {
19255       error ("inconsistent deduction for %qT: %qT and then %qT",
19256              auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
19257       return error_mark_node;
19258     }
19259   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
19260
19261   if (processing_template_decl)
19262     targs = add_to_template_args (current_template_args (), targs);
19263   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
19264 }
19265
19266 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
19267    result.  */
19268
19269 tree
19270 splice_late_return_type (tree type, tree late_return_type)
19271 {
19272   tree argvec;
19273
19274   if (late_return_type == NULL_TREE)
19275     return type;
19276   argvec = make_tree_vec (1);
19277   TREE_VEC_ELT (argvec, 0) = late_return_type;
19278   if (processing_template_decl)
19279     argvec = add_to_template_args (current_template_args (), argvec);
19280   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
19281 }
19282
19283 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
19284
19285 bool
19286 is_auto (const_tree type)
19287 {
19288   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
19289       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
19290     return true;
19291   else
19292     return false;
19293 }
19294
19295 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
19296    appear as a type-specifier for the declaration in question, we don't
19297    have to look through the whole type.  */
19298
19299 tree
19300 type_uses_auto (tree type)
19301 {
19302   enum tree_code code;
19303   if (is_auto (type))
19304     return type;
19305
19306   code = TREE_CODE (type);
19307
19308   if (code == POINTER_TYPE || code == REFERENCE_TYPE
19309       || code == OFFSET_TYPE || code == FUNCTION_TYPE
19310       || code == METHOD_TYPE || code == ARRAY_TYPE)
19311     return type_uses_auto (TREE_TYPE (type));
19312
19313   if (TYPE_PTRMEMFUNC_P (type))
19314     return type_uses_auto (TREE_TYPE (TREE_TYPE
19315                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
19316
19317   return NULL_TREE;
19318 }
19319
19320 /* For a given template T, return the vector of typedefs referenced
19321    in T for which access check is needed at T instantiation time.
19322    T is either  a FUNCTION_DECL or a RECORD_TYPE.
19323    Those typedefs were added to T by the function
19324    append_type_to_template_for_access_check.  */
19325
19326 VEC(qualified_typedef_usage_t,gc)*
19327 get_types_needing_access_check (tree t)
19328 {
19329   tree ti;
19330   VEC(qualified_typedef_usage_t,gc) *result = NULL;
19331
19332   if (!t || t == error_mark_node)
19333     return NULL;
19334
19335   if (!(ti = get_template_info (t)))
19336     return NULL;
19337
19338   if (CLASS_TYPE_P (t)
19339       || TREE_CODE (t) == FUNCTION_DECL)
19340     {
19341       if (!TI_TEMPLATE (ti))
19342         return NULL;
19343
19344       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
19345     }
19346
19347   return result;
19348 }
19349
19350 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
19351    tied to T. That list of typedefs will be access checked at
19352    T instantiation time.
19353    T is either a FUNCTION_DECL or a RECORD_TYPE.
19354    TYPE_DECL is a TYPE_DECL node representing a typedef.
19355    SCOPE is the scope through which TYPE_DECL is accessed.
19356    LOCATION is the location of the usage point of TYPE_DECL.
19357
19358    This function is a subroutine of
19359    append_type_to_template_for_access_check.  */
19360
19361 static void
19362 append_type_to_template_for_access_check_1 (tree t,
19363                                             tree type_decl,
19364                                             tree scope,
19365                                             location_t location)
19366 {
19367   qualified_typedef_usage_t typedef_usage;
19368   tree ti;
19369
19370   if (!t || t == error_mark_node)
19371     return;
19372
19373   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
19374                || CLASS_TYPE_P (t))
19375               && type_decl
19376               && TREE_CODE (type_decl) == TYPE_DECL
19377               && scope);
19378
19379   if (!(ti = get_template_info (t)))
19380     return;
19381
19382   gcc_assert (TI_TEMPLATE (ti));
19383
19384   typedef_usage.typedef_decl = type_decl;
19385   typedef_usage.context = scope;
19386   typedef_usage.locus = location;
19387
19388   VEC_safe_push (qualified_typedef_usage_t, gc,
19389                  TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
19390                  &typedef_usage);
19391 }
19392
19393 /* Append TYPE_DECL to the template TEMPL.
19394    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
19395    At TEMPL instanciation time, TYPE_DECL will be checked to see
19396    if it can be accessed through SCOPE.
19397    LOCATION is the location of the usage point of TYPE_DECL.
19398
19399    e.g. consider the following code snippet:
19400
19401      class C
19402      {
19403        typedef int myint;
19404      };
19405
19406      template<class U> struct S
19407      {
19408        C::myint mi; // <-- usage point of the typedef C::myint
19409      };
19410
19411      S<char> s;
19412
19413    At S<char> instantiation time, we need to check the access of C::myint
19414    In other words, we need to check the access of the myint typedef through
19415    the C scope. For that purpose, this function will add the myint typedef
19416    and the scope C through which its being accessed to a list of typedefs
19417    tied to the template S. That list will be walked at template instantiation
19418    time and access check performed on each typedefs it contains.
19419    Note that this particular code snippet should yield an error because
19420    myint is private to C.  */
19421
19422 void
19423 append_type_to_template_for_access_check (tree templ,
19424                                           tree type_decl,
19425                                           tree scope,
19426                                           location_t location)
19427 {
19428   qualified_typedef_usage_t *iter;
19429   int i;
19430
19431   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
19432
19433   /* Make sure we don't append the type to the template twice.  */
19434   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
19435                     get_types_needing_access_check (templ),
19436                     i, iter)
19437     if (iter->typedef_decl == type_decl && scope == iter->context)
19438       return;
19439
19440   append_type_to_template_for_access_check_1 (templ, type_decl,
19441                                               scope, location);
19442 }
19443
19444 /* Set up the hash tables for template instantiations.  */
19445
19446 void
19447 init_template_processing (void)
19448 {
19449   decl_specializations = htab_create_ggc (37,
19450                                           hash_specialization,
19451                                           eq_specializations,
19452                                           ggc_free);
19453   type_specializations = htab_create_ggc (37,
19454                                           hash_specialization,
19455                                           eq_specializations,
19456                                           ggc_free);
19457 }
19458
19459 /* Print stats about the template hash tables for -fstats.  */
19460
19461 void
19462 print_template_statistics (void)
19463 {
19464   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
19465            "%f collisions\n", (long) htab_size (decl_specializations),
19466            (long) htab_elements (decl_specializations),
19467            htab_collisions (decl_specializations));
19468   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
19469            "%f collisions\n", (long) htab_size (type_specializations),
19470            (long) htab_elements (type_specializations),
19471            htab_collisions (type_specializations));
19472   if (current_deduction_htab)
19473     fprintf (stderr, "current_deduction_htab: size %ld, %ld elements, "
19474              "%f collisions\n", (long) htab_size (current_deduction_htab),
19475              (long) htab_elements (current_deduction_htab),
19476              htab_collisions (current_deduction_htab));
19477 }
19478
19479 #include "gt-cp-pt.h"