OSDN Git Service

PR c++/48449
[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_CHAIN (arg))
1520         val = iterative_hash_template_arg (OVL_FUNCTION (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         gcc_assert (!OVL_NEXT (fn) && !is_overloaded_fn (fn));
1710         for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1711           print_candidates_1 (TREE_VALUE (fn2),
1712                               TREE_CHAIN (fn2) || more, str);
1713       }
1714     else
1715       {
1716         if (!*str)
1717           {
1718             /* Pick the prefix string.  */
1719             if (!more && !OVL_NEXT (fns))
1720               {
1721                 error ("candidate is: %+#D", OVL_CURRENT (fn));
1722                 continue;
1723               }
1724
1725             *str = _("candidates are:");
1726             spaces = get_spaces (*str);
1727           }
1728         error ("%s %+#D", *str, OVL_CURRENT (fn));
1729         *str = spaces ? spaces : *str;
1730       }
1731
1732   if (!more)
1733     {
1734       free (spaces);
1735       *str = NULL;
1736     }
1737 }
1738
1739 /* Print the list of candidate FNS in an error message.  */
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 tree
6686 lookup_template_class (tree d1,
6687                        tree arglist,
6688                        tree in_decl,
6689                        tree context,
6690                        int entering_scope,
6691                        tsubst_flags_t complain)
6692 {
6693   tree templ = NULL_TREE, parmlist;
6694   tree t;
6695   spec_entry **slot;
6696   spec_entry *entry;
6697   spec_entry elt;
6698   hashval_t hash;
6699
6700   timevar_push (TV_NAME_LOOKUP);
6701
6702   if (TREE_CODE (d1) == IDENTIFIER_NODE)
6703     {
6704       tree value = innermost_non_namespace_value (d1);
6705       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
6706         templ = value;
6707       else
6708         {
6709           if (context)
6710             push_decl_namespace (context);
6711           templ = lookup_name (d1);
6712           templ = maybe_get_template_decl_from_type_decl (templ);
6713           if (context)
6714             pop_decl_namespace ();
6715         }
6716       if (templ)
6717         context = DECL_CONTEXT (templ);
6718     }
6719   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
6720     {
6721       tree type = TREE_TYPE (d1);
6722
6723       /* If we are declaring a constructor, say A<T>::A<T>, we will get
6724          an implicit typename for the second A.  Deal with it.  */
6725       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
6726         type = TREE_TYPE (type);
6727
6728       if (CLASSTYPE_TEMPLATE_INFO (type))
6729         {
6730           templ = CLASSTYPE_TI_TEMPLATE (type);
6731           d1 = DECL_NAME (templ);
6732         }
6733     }
6734   else if (TREE_CODE (d1) == ENUMERAL_TYPE
6735            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
6736     {
6737       templ = TYPE_TI_TEMPLATE (d1);
6738       d1 = DECL_NAME (templ);
6739     }
6740   else if (TREE_CODE (d1) == TEMPLATE_DECL
6741            && DECL_TEMPLATE_RESULT (d1)
6742            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
6743     {
6744       templ = d1;
6745       d1 = DECL_NAME (templ);
6746       context = DECL_CONTEXT (templ);
6747     }
6748
6749   /* Issue an error message if we didn't find a template.  */
6750   if (! templ)
6751     {
6752       if (complain & tf_error)
6753         error ("%qT is not a template", d1);
6754       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6755     }
6756
6757   if (TREE_CODE (templ) != TEMPLATE_DECL
6758          /* Make sure it's a user visible template, if it was named by
6759             the user.  */
6760       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
6761           && !PRIMARY_TEMPLATE_P (templ)))
6762     {
6763       if (complain & tf_error)
6764         {
6765           error ("non-template type %qT used as a template", d1);
6766           if (in_decl)
6767             error ("for template declaration %q+D", in_decl);
6768         }
6769       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6770     }
6771
6772   complain &= ~tf_user;
6773
6774   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
6775     {
6776       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
6777          template arguments */
6778
6779       tree parm;
6780       tree arglist2;
6781       tree outer;
6782
6783       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
6784
6785       /* Consider an example where a template template parameter declared as
6786
6787            template <class T, class U = std::allocator<T> > class TT
6788
6789          The template parameter level of T and U are one level larger than
6790          of TT.  To proper process the default argument of U, say when an
6791          instantiation `TT<int>' is seen, we need to build the full
6792          arguments containing {int} as the innermost level.  Outer levels,
6793          available when not appearing as default template argument, can be
6794          obtained from the arguments of the enclosing template.
6795
6796          Suppose that TT is later substituted with std::vector.  The above
6797          instantiation is `TT<int, std::allocator<T> >' with TT at
6798          level 1, and T at level 2, while the template arguments at level 1
6799          becomes {std::vector} and the inner level 2 is {int}.  */
6800
6801       outer = DECL_CONTEXT (templ);
6802       if (outer)
6803         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
6804       else if (current_template_parms)
6805         /* This is an argument of the current template, so we haven't set
6806            DECL_CONTEXT yet.  */
6807         outer = current_template_args ();
6808
6809       if (outer)
6810         arglist = add_to_template_args (outer, arglist);
6811
6812       arglist2 = coerce_template_parms (parmlist, arglist, templ,
6813                                         complain,
6814                                         /*require_all_args=*/true,
6815                                         /*use_default_args=*/true);
6816       if (arglist2 == error_mark_node
6817           || (!uses_template_parms (arglist2)
6818               && check_instantiated_args (templ, arglist2, complain)))
6819         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6820
6821       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
6822       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
6823     }
6824   else
6825     {
6826       tree template_type = TREE_TYPE (templ);
6827       tree gen_tmpl;
6828       tree type_decl;
6829       tree found = NULL_TREE;
6830       int arg_depth;
6831       int parm_depth;
6832       int is_dependent_type;
6833       int use_partial_inst_tmpl = false;
6834
6835       gen_tmpl = most_general_template (templ);
6836       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
6837       parm_depth = TMPL_PARMS_DEPTH (parmlist);
6838       arg_depth = TMPL_ARGS_DEPTH (arglist);
6839
6840       if (arg_depth == 1 && parm_depth > 1)
6841         {
6842           /* We've been given an incomplete set of template arguments.
6843              For example, given:
6844
6845                template <class T> struct S1 {
6846                  template <class U> struct S2 {};
6847                  template <class U> struct S2<U*> {};
6848                 };
6849
6850              we will be called with an ARGLIST of `U*', but the
6851              TEMPLATE will be `template <class T> template
6852              <class U> struct S1<T>::S2'.  We must fill in the missing
6853              arguments.  */
6854           arglist
6855             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
6856                                            arglist);
6857           arg_depth = TMPL_ARGS_DEPTH (arglist);
6858         }
6859
6860       /* Now we should have enough arguments.  */
6861       gcc_assert (parm_depth == arg_depth);
6862
6863       /* From here on, we're only interested in the most general
6864          template.  */
6865
6866       /* Calculate the BOUND_ARGS.  These will be the args that are
6867          actually tsubst'd into the definition to create the
6868          instantiation.  */
6869       if (parm_depth > 1)
6870         {
6871           /* We have multiple levels of arguments to coerce, at once.  */
6872           int i;
6873           int saved_depth = TMPL_ARGS_DEPTH (arglist);
6874
6875           tree bound_args = make_tree_vec (parm_depth);
6876
6877           for (i = saved_depth,
6878                  t = DECL_TEMPLATE_PARMS (gen_tmpl);
6879                i > 0 && t != NULL_TREE;
6880                --i, t = TREE_CHAIN (t))
6881             {
6882               tree a;
6883               if (i == saved_depth)
6884                 a = coerce_template_parms (TREE_VALUE (t),
6885                                            arglist, gen_tmpl,
6886                                            complain,
6887                                            /*require_all_args=*/true,
6888                                            /*use_default_args=*/true);
6889               else
6890                 /* Outer levels should have already been coerced.  */
6891                 a = TMPL_ARGS_LEVEL (arglist, i);
6892
6893               /* Don't process further if one of the levels fails.  */
6894               if (a == error_mark_node)
6895                 {
6896                   /* Restore the ARGLIST to its full size.  */
6897                   TREE_VEC_LENGTH (arglist) = saved_depth;
6898                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6899                 }
6900
6901               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
6902
6903               /* We temporarily reduce the length of the ARGLIST so
6904                  that coerce_template_parms will see only the arguments
6905                  corresponding to the template parameters it is
6906                  examining.  */
6907               TREE_VEC_LENGTH (arglist)--;
6908             }
6909
6910           /* Restore the ARGLIST to its full size.  */
6911           TREE_VEC_LENGTH (arglist) = saved_depth;
6912
6913           arglist = bound_args;
6914         }
6915       else
6916         arglist
6917           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
6918                                    INNERMOST_TEMPLATE_ARGS (arglist),
6919                                    gen_tmpl,
6920                                    complain,
6921                                    /*require_all_args=*/true,
6922                                    /*use_default_args=*/true);
6923
6924       if (arglist == error_mark_node)
6925         /* We were unable to bind the arguments.  */
6926         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6927
6928       /* In the scope of a template class, explicit references to the
6929          template class refer to the type of the template, not any
6930          instantiation of it.  For example, in:
6931
6932            template <class T> class C { void f(C<T>); }
6933
6934          the `C<T>' is just the same as `C'.  Outside of the
6935          class, however, such a reference is an instantiation.  */
6936       if ((entering_scope
6937            || !PRIMARY_TEMPLATE_P (gen_tmpl)
6938            || currently_open_class (template_type))
6939           /* comp_template_args is expensive, check it last.  */
6940           && comp_template_args (TYPE_TI_ARGS (template_type),
6941                                  arglist))
6942         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, template_type);
6943
6944       /* If we already have this specialization, return it.  */
6945       elt.tmpl = gen_tmpl;
6946       elt.args = arglist;
6947       hash = hash_specialization (&elt);
6948       entry = (spec_entry *) htab_find_with_hash (type_specializations,
6949                                                   &elt, hash);
6950
6951       if (entry)
6952         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, entry->spec);
6953
6954       is_dependent_type = uses_template_parms (arglist);
6955
6956       /* If the deduced arguments are invalid, then the binding
6957          failed.  */
6958       if (!is_dependent_type
6959           && check_instantiated_args (gen_tmpl,
6960                                       INNERMOST_TEMPLATE_ARGS (arglist),
6961                                       complain))
6962         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6963
6964       if (!is_dependent_type
6965           && !PRIMARY_TEMPLATE_P (gen_tmpl)
6966           && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
6967           && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
6968         {
6969           found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
6970                                       DECL_NAME (gen_tmpl),
6971                                       /*tag_scope=*/ts_global);
6972           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
6973         }
6974
6975       context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
6976                         complain, in_decl);
6977       if (!context)
6978         context = global_namespace;
6979
6980       /* Create the type.  */
6981       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
6982         {
6983           if (!is_dependent_type)
6984             {
6985               set_current_access_from_decl (TYPE_NAME (template_type));
6986               t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
6987                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
6988                                       arglist, complain, in_decl),
6989                               SCOPED_ENUM_P (template_type), NULL);
6990             }
6991           else
6992             {
6993               /* We don't want to call start_enum for this type, since
6994                  the values for the enumeration constants may involve
6995                  template parameters.  And, no one should be interested
6996                  in the enumeration constants for such a type.  */
6997               t = cxx_make_type (ENUMERAL_TYPE);
6998               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
6999             }
7000           SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7001           ENUM_FIXED_UNDERLYING_TYPE_P (t)
7002             = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7003         }
7004       else
7005         {
7006           t = make_class_type (TREE_CODE (template_type));
7007           CLASSTYPE_DECLARED_CLASS (t)
7008             = CLASSTYPE_DECLARED_CLASS (template_type);
7009           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7010           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7011
7012           /* A local class.  Make sure the decl gets registered properly.  */
7013           if (context == current_function_decl)
7014             pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7015
7016           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7017             /* This instantiation is another name for the primary
7018                template type. Set the TYPE_CANONICAL field
7019                appropriately. */
7020             TYPE_CANONICAL (t) = template_type;
7021           else if (any_template_arguments_need_structural_equality_p (arglist))
7022             /* Some of the template arguments require structural
7023                equality testing, so this template class requires
7024                structural equality testing. */
7025             SET_TYPE_STRUCTURAL_EQUALITY (t);
7026         }
7027
7028       /* If we called start_enum or pushtag above, this information
7029          will already be set up.  */
7030       if (!TYPE_NAME (t))
7031         {
7032           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7033
7034           type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7035           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7036           DECL_SOURCE_LOCATION (type_decl)
7037             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7038         }
7039       else
7040         type_decl = TYPE_NAME (t);
7041
7042       TREE_PRIVATE (type_decl)
7043         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
7044       TREE_PROTECTED (type_decl)
7045         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
7046       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7047         {
7048           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7049           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7050         }
7051
7052       /* Let's consider the explicit specialization of a member
7053          of a class template specialization that is implicitely instantiated,
7054          e.g.:
7055              template<class T>
7056              struct S
7057              {
7058                template<class U> struct M {}; //#0
7059              };
7060
7061              template<>
7062              template<>
7063              struct S<int>::M<char> //#1
7064              {
7065                int i;
7066              };
7067         [temp.expl.spec]/4 says this is valid.
7068
7069         In this case, when we write:
7070         S<int>::M<char> m;
7071
7072         M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7073         the one of #0.
7074
7075         When we encounter #1, we want to store the partial instantiation
7076         of M (template<class T> S<int>::M<T>) in it's CLASSTYPE_TI_TEMPLATE.
7077
7078         For all cases other than this "explicit specialization of member of a
7079         class template", we just want to store the most general template into
7080         the CLASSTYPE_TI_TEMPLATE of M.
7081
7082         This case of "explicit specialization of member of a class template"
7083         only happens when:
7084         1/ the enclosing class is an instantiation of, and therefore not
7085         the same as, the context of the most general template, and
7086         2/ we aren't looking at the partial instantiation itself, i.e.
7087         the innermost arguments are not the same as the innermost parms of
7088         the most general template.
7089
7090         So it's only when 1/ and 2/ happens that we want to use the partial
7091         instantiation of the member template in lieu of its most general
7092         template.  */
7093
7094       if (PRIMARY_TEMPLATE_P (gen_tmpl)
7095           && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7096           /* the enclosing class must be an instantiation...  */
7097           && CLASS_TYPE_P (context)
7098           && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7099         {
7100           tree partial_inst_args;
7101           TREE_VEC_LENGTH (arglist)--;
7102           ++processing_template_decl;
7103           partial_inst_args =
7104             tsubst (INNERMOST_TEMPLATE_ARGS
7105                         (CLASSTYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7106                     arglist, complain, NULL_TREE);
7107           --processing_template_decl;
7108           TREE_VEC_LENGTH (arglist)++;
7109           use_partial_inst_tmpl =
7110             /*...and we must not be looking at the partial instantiation
7111              itself. */
7112             !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7113                                  partial_inst_args);
7114         }
7115
7116       if (!use_partial_inst_tmpl)
7117         /* This case is easy; there are no member templates involved.  */
7118         found = gen_tmpl;
7119       else
7120         {
7121           /* This is a full instantiation of a member template.  Find
7122              the partial instantiation of which this is an instance.  */
7123
7124           /* Temporarily reduce by one the number of levels in the ARGLIST
7125              so as to avoid comparing the last set of arguments.  */
7126           TREE_VEC_LENGTH (arglist)--;
7127           found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7128           TREE_VEC_LENGTH (arglist)++;
7129           found = CLASSTYPE_TI_TEMPLATE (found);
7130         }
7131
7132       SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7133
7134       elt.spec = t;
7135       slot = (spec_entry **) htab_find_slot_with_hash (type_specializations,
7136                                                        &elt, hash, INSERT);
7137       *slot = ggc_alloc_spec_entry ();
7138       **slot = elt;
7139
7140       /* Note this use of the partial instantiation so we can check it
7141          later in maybe_process_partial_specialization.  */
7142       DECL_TEMPLATE_INSTANTIATIONS (templ)
7143         = tree_cons (arglist, t,
7144                      DECL_TEMPLATE_INSTANTIATIONS (templ));
7145
7146       if (TREE_CODE (t) == ENUMERAL_TYPE && !is_dependent_type)
7147         /* Now that the type has been registered on the instantiations
7148            list, we set up the enumerators.  Because the enumeration
7149            constants may involve the enumeration type itself, we make
7150            sure to register the type first, and then create the
7151            constants.  That way, doing tsubst_expr for the enumeration
7152            constants won't result in recursive calls here; we'll find
7153            the instantiation and exit above.  */
7154         tsubst_enum (template_type, t, arglist);
7155
7156       if (is_dependent_type)
7157         /* If the type makes use of template parameters, the
7158            code that generates debugging information will crash.  */
7159         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
7160
7161       /* Possibly limit visibility based on template args.  */
7162       TREE_PUBLIC (type_decl) = 1;
7163       determine_visibility (type_decl);
7164
7165       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
7166     }
7167   timevar_pop (TV_NAME_LOOKUP);
7168 }
7169 \f
7170 struct pair_fn_data
7171 {
7172   tree_fn_t fn;
7173   void *data;
7174   /* True when we should also visit template parameters that occur in
7175      non-deduced contexts.  */
7176   bool include_nondeduced_p;
7177   struct pointer_set_t *visited;
7178 };
7179
7180 /* Called from for_each_template_parm via walk_tree.  */
7181
7182 static tree
7183 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
7184 {
7185   tree t = *tp;
7186   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
7187   tree_fn_t fn = pfd->fn;
7188   void *data = pfd->data;
7189
7190   if (TYPE_P (t)
7191       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
7192       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
7193                                  pfd->include_nondeduced_p))
7194     return error_mark_node;
7195
7196   switch (TREE_CODE (t))
7197     {
7198     case RECORD_TYPE:
7199       if (TYPE_PTRMEMFUNC_P (t))
7200         break;
7201       /* Fall through.  */
7202
7203     case UNION_TYPE:
7204     case ENUMERAL_TYPE:
7205       if (!TYPE_TEMPLATE_INFO (t))
7206         *walk_subtrees = 0;
7207       else if (for_each_template_parm (TI_ARGS (TYPE_TEMPLATE_INFO (t)),
7208                                        fn, data, pfd->visited, 
7209                                        pfd->include_nondeduced_p))
7210         return error_mark_node;
7211       break;
7212
7213     case INTEGER_TYPE:
7214       if (for_each_template_parm (TYPE_MIN_VALUE (t),
7215                                   fn, data, pfd->visited, 
7216                                   pfd->include_nondeduced_p)
7217           || for_each_template_parm (TYPE_MAX_VALUE (t),
7218                                      fn, data, pfd->visited,
7219                                      pfd->include_nondeduced_p))
7220         return error_mark_node;
7221       break;
7222
7223     case METHOD_TYPE:
7224       /* Since we're not going to walk subtrees, we have to do this
7225          explicitly here.  */
7226       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
7227                                   pfd->visited, pfd->include_nondeduced_p))
7228         return error_mark_node;
7229       /* Fall through.  */
7230
7231     case FUNCTION_TYPE:
7232       /* Check the return type.  */
7233       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7234                                   pfd->include_nondeduced_p))
7235         return error_mark_node;
7236
7237       /* Check the parameter types.  Since default arguments are not
7238          instantiated until they are needed, the TYPE_ARG_TYPES may
7239          contain expressions that involve template parameters.  But,
7240          no-one should be looking at them yet.  And, once they're
7241          instantiated, they don't contain template parameters, so
7242          there's no point in looking at them then, either.  */
7243       {
7244         tree parm;
7245
7246         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
7247           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
7248                                       pfd->visited, pfd->include_nondeduced_p))
7249             return error_mark_node;
7250
7251         /* Since we've already handled the TYPE_ARG_TYPES, we don't
7252            want walk_tree walking into them itself.  */
7253         *walk_subtrees = 0;
7254       }
7255       break;
7256
7257     case TYPEOF_TYPE:
7258       if (pfd->include_nondeduced_p
7259           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
7260                                      pfd->visited, 
7261                                      pfd->include_nondeduced_p))
7262         return error_mark_node;
7263       break;
7264
7265     case FUNCTION_DECL:
7266     case VAR_DECL:
7267       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
7268           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
7269                                      pfd->visited, pfd->include_nondeduced_p))
7270         return error_mark_node;
7271       /* Fall through.  */
7272
7273     case PARM_DECL:
7274     case CONST_DECL:
7275       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
7276           && for_each_template_parm (DECL_INITIAL (t), fn, data,
7277                                      pfd->visited, pfd->include_nondeduced_p))
7278         return error_mark_node;
7279       if (DECL_CONTEXT (t)
7280           && pfd->include_nondeduced_p
7281           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
7282                                      pfd->visited, pfd->include_nondeduced_p))
7283         return error_mark_node;
7284       break;
7285
7286     case BOUND_TEMPLATE_TEMPLATE_PARM:
7287       /* Record template parameters such as `T' inside `TT<T>'.  */
7288       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
7289                                   pfd->include_nondeduced_p))
7290         return error_mark_node;
7291       /* Fall through.  */
7292
7293     case TEMPLATE_TEMPLATE_PARM:
7294     case TEMPLATE_TYPE_PARM:
7295     case TEMPLATE_PARM_INDEX:
7296       if (fn && (*fn)(t, data))
7297         return error_mark_node;
7298       else if (!fn)
7299         return error_mark_node;
7300       break;
7301
7302     case TEMPLATE_DECL:
7303       /* A template template parameter is encountered.  */
7304       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
7305           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7306                                      pfd->include_nondeduced_p))
7307         return error_mark_node;
7308
7309       /* Already substituted template template parameter */
7310       *walk_subtrees = 0;
7311       break;
7312
7313     case TYPENAME_TYPE:
7314       if (!fn
7315           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
7316                                      data, pfd->visited, 
7317                                      pfd->include_nondeduced_p))
7318         return error_mark_node;
7319       break;
7320
7321     case CONSTRUCTOR:
7322       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
7323           && pfd->include_nondeduced_p
7324           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
7325                                      (TREE_TYPE (t)), fn, data,
7326                                      pfd->visited, pfd->include_nondeduced_p))
7327         return error_mark_node;
7328       break;
7329
7330     case INDIRECT_REF:
7331     case COMPONENT_REF:
7332       /* If there's no type, then this thing must be some expression
7333          involving template parameters.  */
7334       if (!fn && !TREE_TYPE (t))
7335         return error_mark_node;
7336       break;
7337
7338     case MODOP_EXPR:
7339     case CAST_EXPR:
7340     case REINTERPRET_CAST_EXPR:
7341     case CONST_CAST_EXPR:
7342     case STATIC_CAST_EXPR:
7343     case DYNAMIC_CAST_EXPR:
7344     case ARROW_EXPR:
7345     case DOTSTAR_EXPR:
7346     case TYPEID_EXPR:
7347     case PSEUDO_DTOR_EXPR:
7348       if (!fn)
7349         return error_mark_node;
7350       break;
7351
7352     default:
7353       break;
7354     }
7355
7356   /* We didn't find any template parameters we liked.  */
7357   return NULL_TREE;
7358 }
7359
7360 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
7361    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
7362    call FN with the parameter and the DATA.
7363    If FN returns nonzero, the iteration is terminated, and
7364    for_each_template_parm returns 1.  Otherwise, the iteration
7365    continues.  If FN never returns a nonzero value, the value
7366    returned by for_each_template_parm is 0.  If FN is NULL, it is
7367    considered to be the function which always returns 1.
7368
7369    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
7370    parameters that occur in non-deduced contexts.  When false, only
7371    visits those template parameters that can be deduced.  */
7372
7373 static int
7374 for_each_template_parm (tree t, tree_fn_t fn, void* data,
7375                         struct pointer_set_t *visited,
7376                         bool include_nondeduced_p)
7377 {
7378   struct pair_fn_data pfd;
7379   int result;
7380
7381   /* Set up.  */
7382   pfd.fn = fn;
7383   pfd.data = data;
7384   pfd.include_nondeduced_p = include_nondeduced_p;
7385
7386   /* Walk the tree.  (Conceptually, we would like to walk without
7387      duplicates, but for_each_template_parm_r recursively calls
7388      for_each_template_parm, so we would need to reorganize a fair
7389      bit to use walk_tree_without_duplicates, so we keep our own
7390      visited list.)  */
7391   if (visited)
7392     pfd.visited = visited;
7393   else
7394     pfd.visited = pointer_set_create ();
7395   result = cp_walk_tree (&t,
7396                          for_each_template_parm_r,
7397                          &pfd,
7398                          pfd.visited) != NULL_TREE;
7399
7400   /* Clean up.  */
7401   if (!visited)
7402     {
7403       pointer_set_destroy (pfd.visited);
7404       pfd.visited = 0;
7405     }
7406
7407   return result;
7408 }
7409
7410 /* Returns true if T depends on any template parameter.  */
7411
7412 int
7413 uses_template_parms (tree t)
7414 {
7415   bool dependent_p;
7416   int saved_processing_template_decl;
7417
7418   saved_processing_template_decl = processing_template_decl;
7419   if (!saved_processing_template_decl)
7420     processing_template_decl = 1;
7421   if (TYPE_P (t))
7422     dependent_p = dependent_type_p (t);
7423   else if (TREE_CODE (t) == TREE_VEC)
7424     dependent_p = any_dependent_template_arguments_p (t);
7425   else if (TREE_CODE (t) == TREE_LIST)
7426     dependent_p = (uses_template_parms (TREE_VALUE (t))
7427                    || uses_template_parms (TREE_CHAIN (t)));
7428   else if (TREE_CODE (t) == TYPE_DECL)
7429     dependent_p = dependent_type_p (TREE_TYPE (t));
7430   else if (DECL_P (t)
7431            || EXPR_P (t)
7432            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
7433            || TREE_CODE (t) == OVERLOAD
7434            || TREE_CODE (t) == BASELINK
7435            || TREE_CODE (t) == IDENTIFIER_NODE
7436            || TREE_CODE (t) == TRAIT_EXPR
7437            || TREE_CODE (t) == CONSTRUCTOR
7438            || CONSTANT_CLASS_P (t))
7439     dependent_p = (type_dependent_expression_p (t)
7440                    || value_dependent_expression_p (t));
7441   else
7442     {
7443       gcc_assert (t == error_mark_node);
7444       dependent_p = false;
7445     }
7446
7447   processing_template_decl = saved_processing_template_decl;
7448
7449   return dependent_p;
7450 }
7451
7452 /* Returns true if T depends on any template parameter with level LEVEL.  */
7453
7454 int
7455 uses_template_parms_level (tree t, int level)
7456 {
7457   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
7458                                  /*include_nondeduced_p=*/true);
7459 }
7460
7461 static int tinst_depth;
7462 extern int max_tinst_depth;
7463 #ifdef GATHER_STATISTICS
7464 int depth_reached;
7465 #endif
7466 static int tinst_level_tick;
7467 static int last_template_error_tick;
7468
7469 /* We're starting to instantiate D; record the template instantiation context
7470    for diagnostics and to restore it later.  */
7471
7472 int
7473 push_tinst_level (tree d)
7474 {
7475   struct tinst_level *new_level;
7476
7477   if (tinst_depth >= max_tinst_depth)
7478     {
7479       /* If the instantiation in question still has unbound template parms,
7480          we don't really care if we can't instantiate it, so just return.
7481          This happens with base instantiation for implicit `typename'.  */
7482       if (uses_template_parms (d))
7483         return 0;
7484
7485       last_template_error_tick = tinst_level_tick;
7486       error ("template instantiation depth exceeds maximum of %d (use "
7487              "-ftemplate-depth= to increase the maximum) instantiating %qD",
7488              max_tinst_depth, d);
7489
7490       print_instantiation_context ();
7491
7492       return 0;
7493     }
7494
7495   new_level = ggc_alloc_tinst_level ();
7496   new_level->decl = d;
7497   new_level->locus = input_location;
7498   new_level->in_system_header_p = in_system_header;
7499   new_level->next = current_tinst_level;
7500   current_tinst_level = new_level;
7501
7502   ++tinst_depth;
7503 #ifdef GATHER_STATISTICS
7504   if (tinst_depth > depth_reached)
7505     depth_reached = tinst_depth;
7506 #endif
7507
7508   ++tinst_level_tick;
7509   return 1;
7510 }
7511
7512 /* We're done instantiating this template; return to the instantiation
7513    context.  */
7514
7515 void
7516 pop_tinst_level (void)
7517 {
7518   /* Restore the filename and line number stashed away when we started
7519      this instantiation.  */
7520   input_location = current_tinst_level->locus;
7521   current_tinst_level = current_tinst_level->next;
7522   --tinst_depth;
7523   ++tinst_level_tick;
7524 }
7525
7526 /* We're instantiating a deferred template; restore the template
7527    instantiation context in which the instantiation was requested, which
7528    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
7529
7530 static tree
7531 reopen_tinst_level (struct tinst_level *level)
7532 {
7533   struct tinst_level *t;
7534
7535   tinst_depth = 0;
7536   for (t = level; t; t = t->next)
7537     ++tinst_depth;
7538
7539   current_tinst_level = level;
7540   pop_tinst_level ();
7541   return level->decl;
7542 }
7543
7544 /* Returns the TINST_LEVEL which gives the original instantiation
7545    context.  */
7546
7547 struct tinst_level *
7548 outermost_tinst_level (void)
7549 {
7550   struct tinst_level *level = current_tinst_level;
7551   if (level)
7552     while (level->next)
7553       level = level->next;
7554   return level;
7555 }
7556
7557 /* Returns TRUE if PARM is a parameter of the template TEMPL.  */
7558
7559 bool
7560 parameter_of_template_p (tree parm, tree templ)
7561 {
7562   tree parms;
7563   int i;
7564
7565   if (!parm || !templ)
7566     return false;
7567
7568   gcc_assert (DECL_TEMPLATE_PARM_P (parm));
7569   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
7570
7571   parms = DECL_TEMPLATE_PARMS (templ);
7572   parms = INNERMOST_TEMPLATE_PARMS (parms);
7573
7574   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
7575     if (parm == TREE_VALUE (TREE_VEC_ELT (parms, i)))
7576       return true;
7577
7578   return false;
7579 }
7580
7581 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
7582    vector of template arguments, as for tsubst.
7583
7584    Returns an appropriate tsubst'd friend declaration.  */
7585
7586 static tree
7587 tsubst_friend_function (tree decl, tree args)
7588 {
7589   tree new_friend;
7590
7591   if (TREE_CODE (decl) == FUNCTION_DECL
7592       && DECL_TEMPLATE_INSTANTIATION (decl)
7593       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
7594     /* This was a friend declared with an explicit template
7595        argument list, e.g.:
7596
7597        friend void f<>(T);
7598
7599        to indicate that f was a template instantiation, not a new
7600        function declaration.  Now, we have to figure out what
7601        instantiation of what template.  */
7602     {
7603       tree template_id, arglist, fns;
7604       tree new_args;
7605       tree tmpl;
7606       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
7607
7608       /* Friend functions are looked up in the containing namespace scope.
7609          We must enter that scope, to avoid finding member functions of the
7610          current class with same name.  */
7611       push_nested_namespace (ns);
7612       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
7613                          tf_warning_or_error, NULL_TREE,
7614                          /*integral_constant_expression_p=*/false);
7615       pop_nested_namespace (ns);
7616       arglist = tsubst (DECL_TI_ARGS (decl), args,
7617                         tf_warning_or_error, NULL_TREE);
7618       template_id = lookup_template_function (fns, arglist);
7619
7620       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
7621       tmpl = determine_specialization (template_id, new_friend,
7622                                        &new_args,
7623                                        /*need_member_template=*/0,
7624                                        TREE_VEC_LENGTH (args),
7625                                        tsk_none);
7626       return instantiate_template (tmpl, new_args, tf_error);
7627     }
7628
7629   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
7630
7631   /* The NEW_FRIEND will look like an instantiation, to the
7632      compiler, but is not an instantiation from the point of view of
7633      the language.  For example, we might have had:
7634
7635      template <class T> struct S {
7636        template <class U> friend void f(T, U);
7637      };
7638
7639      Then, in S<int>, template <class U> void f(int, U) is not an
7640      instantiation of anything.  */
7641   if (new_friend == error_mark_node)
7642     return error_mark_node;
7643
7644   DECL_USE_TEMPLATE (new_friend) = 0;
7645   if (TREE_CODE (decl) == TEMPLATE_DECL)
7646     {
7647       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
7648       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
7649         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
7650     }
7651
7652   /* The mangled name for the NEW_FRIEND is incorrect.  The function
7653      is not a template instantiation and should not be mangled like
7654      one.  Therefore, we forget the mangling here; we'll recompute it
7655      later if we need it.  */
7656   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
7657     {
7658       SET_DECL_RTL (new_friend, NULL);
7659       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
7660     }
7661
7662   if (DECL_NAMESPACE_SCOPE_P (new_friend))
7663     {
7664       tree old_decl;
7665       tree new_friend_template_info;
7666       tree new_friend_result_template_info;
7667       tree ns;
7668       int  new_friend_is_defn;
7669
7670       /* We must save some information from NEW_FRIEND before calling
7671          duplicate decls since that function will free NEW_FRIEND if
7672          possible.  */
7673       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
7674       new_friend_is_defn =
7675             (DECL_INITIAL (DECL_TEMPLATE_RESULT
7676                            (template_for_substitution (new_friend)))
7677              != NULL_TREE);
7678       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
7679         {
7680           /* This declaration is a `primary' template.  */
7681           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
7682
7683           new_friend_result_template_info
7684             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
7685         }
7686       else
7687         new_friend_result_template_info = NULL_TREE;
7688
7689       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
7690       if (new_friend_is_defn)
7691         DECL_INITIAL (new_friend) = error_mark_node;
7692
7693       /* Inside pushdecl_namespace_level, we will push into the
7694          current namespace. However, the friend function should go
7695          into the namespace of the template.  */
7696       ns = decl_namespace_context (new_friend);
7697       push_nested_namespace (ns);
7698       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
7699       pop_nested_namespace (ns);
7700
7701       if (old_decl == error_mark_node)
7702         return error_mark_node;
7703
7704       if (old_decl != new_friend)
7705         {
7706           /* This new friend declaration matched an existing
7707              declaration.  For example, given:
7708
7709                template <class T> void f(T);
7710                template <class U> class C {
7711                  template <class T> friend void f(T) {}
7712                };
7713
7714              the friend declaration actually provides the definition
7715              of `f', once C has been instantiated for some type.  So,
7716              old_decl will be the out-of-class template declaration,
7717              while new_friend is the in-class definition.
7718
7719              But, if `f' was called before this point, the
7720              instantiation of `f' will have DECL_TI_ARGS corresponding
7721              to `T' but not to `U', references to which might appear
7722              in the definition of `f'.  Previously, the most general
7723              template for an instantiation of `f' was the out-of-class
7724              version; now it is the in-class version.  Therefore, we
7725              run through all specialization of `f', adding to their
7726              DECL_TI_ARGS appropriately.  In particular, they need a
7727              new set of outer arguments, corresponding to the
7728              arguments for this class instantiation.
7729
7730              The same situation can arise with something like this:
7731
7732                friend void f(int);
7733                template <class T> class C {
7734                  friend void f(T) {}
7735                };
7736
7737              when `C<int>' is instantiated.  Now, `f(int)' is defined
7738              in the class.  */
7739
7740           if (!new_friend_is_defn)
7741             /* On the other hand, if the in-class declaration does
7742                *not* provide a definition, then we don't want to alter
7743                existing definitions.  We can just leave everything
7744                alone.  */
7745             ;
7746           else
7747             {
7748               tree new_template = TI_TEMPLATE (new_friend_template_info);
7749               tree new_args = TI_ARGS (new_friend_template_info);
7750
7751               /* Overwrite whatever template info was there before, if
7752                  any, with the new template information pertaining to
7753                  the declaration.  */
7754               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
7755
7756               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
7757                 {
7758                   /* We should have called reregister_specialization in
7759                      duplicate_decls.  */
7760                   gcc_assert (retrieve_specialization (new_template,
7761                                                        new_args, 0)
7762                               == old_decl);
7763
7764                   /* Instantiate it if the global has already been used.  */
7765                   if (DECL_ODR_USED (old_decl))
7766                     instantiate_decl (old_decl, /*defer_ok=*/true,
7767                                       /*expl_inst_class_mem_p=*/false);
7768                 }
7769               else
7770                 {
7771                   tree t;
7772
7773                   /* Indicate that the old function template is a partial
7774                      instantiation.  */
7775                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
7776                     = new_friend_result_template_info;
7777
7778                   gcc_assert (new_template
7779                               == most_general_template (new_template));
7780                   gcc_assert (new_template != old_decl);
7781
7782                   /* Reassign any specializations already in the hash table
7783                      to the new more general template, and add the
7784                      additional template args.  */
7785                   for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
7786                        t != NULL_TREE;
7787                        t = TREE_CHAIN (t))
7788                     {
7789                       tree spec = TREE_VALUE (t);
7790                       spec_entry elt;
7791
7792                       elt.tmpl = old_decl;
7793                       elt.args = DECL_TI_ARGS (spec);
7794                       elt.spec = NULL_TREE;
7795
7796                       htab_remove_elt (decl_specializations, &elt);
7797
7798                       DECL_TI_ARGS (spec)
7799                         = add_outermost_template_args (new_args,
7800                                                        DECL_TI_ARGS (spec));
7801
7802                       register_specialization
7803                         (spec, new_template, DECL_TI_ARGS (spec), true, 0);
7804
7805                     }
7806                   DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
7807                 }
7808             }
7809
7810           /* The information from NEW_FRIEND has been merged into OLD_DECL
7811              by duplicate_decls.  */
7812           new_friend = old_decl;
7813         }
7814     }
7815   else
7816     {
7817       tree context = DECL_CONTEXT (new_friend);
7818       bool dependent_p;
7819
7820       /* In the code
7821            template <class T> class C {
7822              template <class U> friend void C1<U>::f (); // case 1
7823              friend void C2<T>::f ();                    // case 2
7824            };
7825          we only need to make sure CONTEXT is a complete type for
7826          case 2.  To distinguish between the two cases, we note that
7827          CONTEXT of case 1 remains dependent type after tsubst while
7828          this isn't true for case 2.  */
7829       ++processing_template_decl;
7830       dependent_p = dependent_type_p (context);
7831       --processing_template_decl;
7832
7833       if (!dependent_p
7834           && !complete_type_or_else (context, NULL_TREE))
7835         return error_mark_node;
7836
7837       if (COMPLETE_TYPE_P (context))
7838         {
7839           /* Check to see that the declaration is really present, and,
7840              possibly obtain an improved declaration.  */
7841           tree fn = check_classfn (context,
7842                                    new_friend, NULL_TREE);
7843
7844           if (fn)
7845             new_friend = fn;
7846         }
7847     }
7848
7849   return new_friend;
7850 }
7851
7852 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
7853    template arguments, as for tsubst.
7854
7855    Returns an appropriate tsubst'd friend type or error_mark_node on
7856    failure.  */
7857
7858 static tree
7859 tsubst_friend_class (tree friend_tmpl, tree args)
7860 {
7861   tree friend_type;
7862   tree tmpl;
7863   tree context;
7864
7865   context = CP_DECL_CONTEXT (friend_tmpl);
7866
7867   if (context != global_namespace)
7868     {
7869       if (TREE_CODE (context) == NAMESPACE_DECL)
7870         push_nested_namespace (context);
7871       else
7872         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
7873     }
7874
7875   /* Look for a class template declaration.  We look for hidden names
7876      because two friend declarations of the same template are the
7877      same.  For example, in:
7878
7879        struct A { 
7880          template <typename> friend class F;
7881        };
7882        template <typename> struct B { 
7883          template <typename> friend class F;
7884        };
7885
7886      both F templates are the same.  */
7887   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
7888                            /*block_p=*/true, 0, 
7889                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
7890
7891   /* But, if we don't find one, it might be because we're in a
7892      situation like this:
7893
7894        template <class T>
7895        struct S {
7896          template <class U>
7897          friend struct S;
7898        };
7899
7900      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
7901      for `S<int>', not the TEMPLATE_DECL.  */
7902   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
7903     {
7904       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
7905       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
7906     }
7907
7908   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
7909     {
7910       /* The friend template has already been declared.  Just
7911          check to see that the declarations match, and install any new
7912          default parameters.  We must tsubst the default parameters,
7913          of course.  We only need the innermost template parameters
7914          because that is all that redeclare_class_template will look
7915          at.  */
7916       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
7917           > TMPL_ARGS_DEPTH (args))
7918         {
7919           tree parms;
7920           location_t saved_input_location;
7921           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
7922                                          args, tf_warning_or_error);
7923
7924           saved_input_location = input_location;
7925           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
7926           redeclare_class_template (TREE_TYPE (tmpl), parms);
7927           input_location = saved_input_location;
7928           
7929         }
7930
7931       friend_type = TREE_TYPE (tmpl);
7932     }
7933   else
7934     {
7935       /* The friend template has not already been declared.  In this
7936          case, the instantiation of the template class will cause the
7937          injection of this template into the global scope.  */
7938       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
7939       if (tmpl == error_mark_node)
7940         return error_mark_node;
7941
7942       /* The new TMPL is not an instantiation of anything, so we
7943          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
7944          the new type because that is supposed to be the corresponding
7945          template decl, i.e., TMPL.  */
7946       DECL_USE_TEMPLATE (tmpl) = 0;
7947       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
7948       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
7949       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
7950         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
7951
7952       /* Inject this template into the global scope.  */
7953       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
7954     }
7955
7956   if (context != global_namespace)
7957     {
7958       if (TREE_CODE (context) == NAMESPACE_DECL)
7959         pop_nested_namespace (context);
7960       else
7961         pop_nested_class ();
7962     }
7963
7964   return friend_type;
7965 }
7966
7967 /* Returns zero if TYPE cannot be completed later due to circularity.
7968    Otherwise returns one.  */
7969
7970 static int
7971 can_complete_type_without_circularity (tree type)
7972 {
7973   if (type == NULL_TREE || type == error_mark_node)
7974     return 0;
7975   else if (COMPLETE_TYPE_P (type))
7976     return 1;
7977   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
7978     return can_complete_type_without_circularity (TREE_TYPE (type));
7979   else if (CLASS_TYPE_P (type)
7980            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
7981     return 0;
7982   else
7983     return 1;
7984 }
7985
7986 /* Apply any attributes which had to be deferred until instantiation
7987    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
7988    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
7989
7990 static void
7991 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
7992                                 tree args, tsubst_flags_t complain, tree in_decl)
7993 {
7994   tree last_dep = NULL_TREE;
7995   tree t;
7996   tree *p;
7997
7998   for (t = attributes; t; t = TREE_CHAIN (t))
7999     if (ATTR_IS_DEPENDENT (t))
8000       {
8001         last_dep = t;
8002         attributes = copy_list (attributes);
8003         break;
8004       }
8005
8006   if (DECL_P (*decl_p))
8007     {
8008       if (TREE_TYPE (*decl_p) == error_mark_node)
8009         return;
8010       p = &DECL_ATTRIBUTES (*decl_p);
8011     }
8012   else
8013     p = &TYPE_ATTRIBUTES (*decl_p);
8014
8015   if (last_dep)
8016     {
8017       tree late_attrs = NULL_TREE;
8018       tree *q = &late_attrs;
8019
8020       for (*p = attributes; *p; )
8021         {
8022           t = *p;
8023           if (ATTR_IS_DEPENDENT (t))
8024             {
8025               *p = TREE_CHAIN (t);
8026               TREE_CHAIN (t) = NULL_TREE;
8027               /* If the first attribute argument is an identifier, don't
8028                  pass it through tsubst.  Attributes like mode, format,
8029                  cleanup and several target specific attributes expect it
8030                  unmodified.  */
8031               if (TREE_VALUE (t)
8032                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
8033                   && TREE_VALUE (TREE_VALUE (t))
8034                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
8035                       == IDENTIFIER_NODE))
8036                 {
8037                   tree chain
8038                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
8039                                    in_decl,
8040                                    /*integral_constant_expression_p=*/false);
8041                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
8042                     TREE_VALUE (t)
8043                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
8044                                    chain);
8045                 }
8046               else
8047                 TREE_VALUE (t)
8048                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
8049                                  /*integral_constant_expression_p=*/false);
8050               *q = t;
8051               q = &TREE_CHAIN (t);
8052             }
8053           else
8054             p = &TREE_CHAIN (t);
8055         }
8056
8057       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
8058     }
8059 }
8060
8061 /* Perform (or defer) access check for typedefs that were referenced
8062    from within the template TMPL code.
8063    This is a subroutine of instantiate_template and instantiate_class_template.
8064    TMPL is the template to consider and TARGS is the list of arguments of
8065    that template.  */
8066
8067 static void
8068 perform_typedefs_access_check (tree tmpl, tree targs)
8069 {
8070   location_t saved_location;
8071   int i;
8072   qualified_typedef_usage_t *iter;
8073
8074   if (!tmpl
8075       || (!CLASS_TYPE_P (tmpl)
8076           && TREE_CODE (tmpl) != FUNCTION_DECL))
8077     return;
8078
8079   saved_location = input_location;
8080   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
8081                     get_types_needing_access_check (tmpl),
8082                     i, iter)
8083     {
8084       tree type_decl = iter->typedef_decl;
8085       tree type_scope = iter->context;
8086
8087       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
8088         continue;
8089
8090       if (uses_template_parms (type_decl))
8091         type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
8092       if (uses_template_parms (type_scope))
8093         type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
8094
8095       /* Make access check error messages point to the location
8096          of the use of the typedef.  */
8097       input_location = iter->locus;
8098       perform_or_defer_access_check (TYPE_BINFO (type_scope),
8099                                      type_decl, type_decl);
8100     }
8101     input_location = saved_location;
8102 }
8103
8104 tree
8105 instantiate_class_template (tree type)
8106 {
8107   tree templ, args, pattern, t, member;
8108   tree typedecl;
8109   tree pbinfo;
8110   tree base_list;
8111   unsigned int saved_maximum_field_alignment;
8112
8113   if (type == error_mark_node)
8114     return error_mark_node;
8115
8116   if (COMPLETE_OR_OPEN_TYPE_P (type)
8117       || uses_template_parms (type))
8118     return type;
8119
8120   /* Figure out which template is being instantiated.  */
8121   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
8122   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8123
8124   /* Determine what specialization of the original template to
8125      instantiate.  */
8126   t = most_specialized_class (type, templ, tf_warning_or_error);
8127   if (t == error_mark_node)
8128     {
8129       TYPE_BEING_DEFINED (type) = 1;
8130       return error_mark_node;
8131     }
8132   else if (t)
8133     {
8134       /* This TYPE is actually an instantiation of a partial
8135          specialization.  We replace the innermost set of ARGS with
8136          the arguments appropriate for substitution.  For example,
8137          given:
8138
8139            template <class T> struct S {};
8140            template <class T> struct S<T*> {};
8141
8142          and supposing that we are instantiating S<int*>, ARGS will
8143          presently be {int*} -- but we need {int}.  */
8144       pattern = TREE_TYPE (t);
8145       args = TREE_PURPOSE (t);
8146     }
8147   else
8148     {
8149       pattern = TREE_TYPE (templ);
8150       args = CLASSTYPE_TI_ARGS (type);
8151     }
8152
8153   /* If the template we're instantiating is incomplete, then clearly
8154      there's nothing we can do.  */
8155   if (!COMPLETE_TYPE_P (pattern))
8156     return type;
8157
8158   /* If we've recursively instantiated too many templates, stop.  */
8159   if (! push_tinst_level (type))
8160     return type;
8161
8162   /* Now we're really doing the instantiation.  Mark the type as in
8163      the process of being defined.  */
8164   TYPE_BEING_DEFINED (type) = 1;
8165
8166   /* We may be in the middle of deferred access check.  Disable
8167      it now.  */
8168   push_deferring_access_checks (dk_no_deferred);
8169
8170   push_to_top_level ();
8171   /* Use #pragma pack from the template context.  */
8172   saved_maximum_field_alignment = maximum_field_alignment;
8173   maximum_field_alignment = TYPE_PRECISION (pattern);
8174
8175   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8176
8177   /* Set the input location to the most specialized template definition.
8178      This is needed if tsubsting causes an error.  */
8179   typedecl = TYPE_MAIN_DECL (pattern);
8180   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
8181     DECL_SOURCE_LOCATION (typedecl);
8182
8183   TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern);
8184   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
8185   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
8186   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
8187   TYPE_HAS_COPY_ASSIGN (type) = TYPE_HAS_COPY_ASSIGN (pattern);
8188   TYPE_HAS_CONST_COPY_ASSIGN (type) = TYPE_HAS_CONST_COPY_ASSIGN (pattern);
8189   TYPE_HAS_COPY_CTOR (type) = TYPE_HAS_COPY_CTOR (pattern);
8190   TYPE_HAS_CONST_COPY_CTOR (type) = TYPE_HAS_CONST_COPY_CTOR (pattern);
8191   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
8192   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
8193   TYPE_PACKED (type) = TYPE_PACKED (pattern);
8194   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
8195   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
8196   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
8197   if (ANON_AGGR_TYPE_P (pattern))
8198     SET_ANON_AGGR_TYPE_P (type);
8199   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
8200     {
8201       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
8202       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
8203     }
8204
8205   pbinfo = TYPE_BINFO (pattern);
8206
8207   /* We should never instantiate a nested class before its enclosing
8208      class; we need to look up the nested class by name before we can
8209      instantiate it, and that lookup should instantiate the enclosing
8210      class.  */
8211   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
8212               || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
8213
8214   base_list = NULL_TREE;
8215   if (BINFO_N_BASE_BINFOS (pbinfo))
8216     {
8217       tree pbase_binfo;
8218       tree pushed_scope;
8219       int i;
8220
8221       /* We must enter the scope containing the type, as that is where
8222          the accessibility of types named in dependent bases are
8223          looked up from.  */
8224       pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
8225
8226       /* Substitute into each of the bases to determine the actual
8227          basetypes.  */
8228       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
8229         {
8230           tree base;
8231           tree access = BINFO_BASE_ACCESS (pbinfo, i);
8232           tree expanded_bases = NULL_TREE;
8233           int idx, len = 1;
8234
8235           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
8236             {
8237               expanded_bases = 
8238                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
8239                                        args, tf_error, NULL_TREE);
8240               if (expanded_bases == error_mark_node)
8241                 continue;
8242
8243               len = TREE_VEC_LENGTH (expanded_bases);
8244             }
8245
8246           for (idx = 0; idx < len; idx++)
8247             {
8248               if (expanded_bases)
8249                 /* Extract the already-expanded base class.  */
8250                 base = TREE_VEC_ELT (expanded_bases, idx);
8251               else
8252                 /* Substitute to figure out the base class.  */
8253                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
8254                                NULL_TREE);
8255
8256               if (base == error_mark_node)
8257                 continue;
8258
8259               base_list = tree_cons (access, base, base_list);
8260               if (BINFO_VIRTUAL_P (pbase_binfo))
8261                 TREE_TYPE (base_list) = integer_type_node;
8262             }
8263         }
8264
8265       /* The list is now in reverse order; correct that.  */
8266       base_list = nreverse (base_list);
8267
8268       if (pushed_scope)
8269         pop_scope (pushed_scope);
8270     }
8271   /* Now call xref_basetypes to set up all the base-class
8272      information.  */
8273   xref_basetypes (type, base_list);
8274
8275   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
8276                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
8277                                   args, tf_error, NULL_TREE);
8278   fixup_attribute_variants (type);
8279
8280   /* Now that our base classes are set up, enter the scope of the
8281      class, so that name lookups into base classes, etc. will work
8282      correctly.  This is precisely analogous to what we do in
8283      begin_class_definition when defining an ordinary non-template
8284      class, except we also need to push the enclosing classes.  */
8285   push_nested_class (type);
8286
8287   /* Now members are processed in the order of declaration.  */
8288   for (member = CLASSTYPE_DECL_LIST (pattern);
8289        member; member = TREE_CHAIN (member))
8290     {
8291       tree t = TREE_VALUE (member);
8292
8293       if (TREE_PURPOSE (member))
8294         {
8295           if (TYPE_P (t))
8296             {
8297               /* Build new CLASSTYPE_NESTED_UTDS.  */
8298
8299               tree newtag;
8300               bool class_template_p;
8301
8302               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
8303                                   && TYPE_LANG_SPECIFIC (t)
8304                                   && CLASSTYPE_IS_TEMPLATE (t));
8305               /* If the member is a class template, then -- even after
8306                  substitution -- there may be dependent types in the
8307                  template argument list for the class.  We increment
8308                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
8309                  that function will assume that no types are dependent
8310                  when outside of a template.  */
8311               if (class_template_p)
8312                 ++processing_template_decl;
8313               newtag = tsubst (t, args, tf_error, NULL_TREE);
8314               if (class_template_p)
8315                 --processing_template_decl;
8316               if (newtag == error_mark_node)
8317                 continue;
8318
8319               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
8320                 {
8321                   tree name = TYPE_IDENTIFIER (t);
8322
8323                   if (class_template_p)
8324                     /* Unfortunately, lookup_template_class sets
8325                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
8326                        instantiation (i.e., for the type of a member
8327                        template class nested within a template class.)
8328                        This behavior is required for
8329                        maybe_process_partial_specialization to work
8330                        correctly, but is not accurate in this case;
8331                        the TAG is not an instantiation of anything.
8332                        (The corresponding TEMPLATE_DECL is an
8333                        instantiation, but the TYPE is not.) */
8334                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
8335
8336                   /* Now, we call pushtag to put this NEWTAG into the scope of
8337                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
8338                      pushtag calling push_template_decl.  We don't have to do
8339                      this for enums because it will already have been done in
8340                      tsubst_enum.  */
8341                   if (name)
8342                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
8343                   pushtag (name, newtag, /*tag_scope=*/ts_current);
8344                 }
8345             }
8346           else if (TREE_CODE (t) == FUNCTION_DECL
8347                    || DECL_FUNCTION_TEMPLATE_P (t))
8348             {
8349               /* Build new TYPE_METHODS.  */
8350               tree r;
8351
8352               if (TREE_CODE (t) == TEMPLATE_DECL)
8353                 ++processing_template_decl;
8354               r = tsubst (t, args, tf_error, NULL_TREE);
8355               if (TREE_CODE (t) == TEMPLATE_DECL)
8356                 --processing_template_decl;
8357               set_current_access_from_decl (r);
8358               finish_member_declaration (r);
8359             }
8360           else
8361             {
8362               /* Build new TYPE_FIELDS.  */
8363               if (TREE_CODE (t) == STATIC_ASSERT)
8364                 {
8365                   tree condition = 
8366                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
8367                                  tf_warning_or_error, NULL_TREE,
8368                                  /*integral_constant_expression_p=*/true);
8369                   finish_static_assert (condition,
8370                                         STATIC_ASSERT_MESSAGE (t), 
8371                                         STATIC_ASSERT_SOURCE_LOCATION (t),
8372                                         /*member_p=*/true);
8373                 }
8374               else if (TREE_CODE (t) != CONST_DECL)
8375                 {
8376                   tree r;
8377
8378                   /* The file and line for this declaration, to
8379                      assist in error message reporting.  Since we
8380                      called push_tinst_level above, we don't need to
8381                      restore these.  */
8382                   input_location = DECL_SOURCE_LOCATION (t);
8383
8384                   if (TREE_CODE (t) == TEMPLATE_DECL)
8385                     ++processing_template_decl;
8386                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
8387                   if (TREE_CODE (t) == TEMPLATE_DECL)
8388                     --processing_template_decl;
8389                   if (TREE_CODE (r) == VAR_DECL)
8390                     {
8391                       /* In [temp.inst]:
8392
8393                            [t]he initialization (and any associated
8394                            side-effects) of a static data member does
8395                            not occur unless the static data member is
8396                            itself used in a way that requires the
8397                            definition of the static data member to
8398                            exist.
8399
8400                          Therefore, we do not substitute into the
8401                          initialized for the static data member here.  */
8402                       finish_static_data_member_decl
8403                         (r,
8404                          /*init=*/NULL_TREE,
8405                          /*init_const_expr_p=*/false,
8406                          /*asmspec_tree=*/NULL_TREE,
8407                          /*flags=*/0);
8408                       if (DECL_INITIALIZED_IN_CLASS_P (r))
8409                         check_static_variable_definition (r, TREE_TYPE (r));
8410                     }
8411                   else if (TREE_CODE (r) == FIELD_DECL)
8412                     {
8413                       /* Determine whether R has a valid type and can be
8414                          completed later.  If R is invalid, then it is
8415                          replaced by error_mark_node so that it will not be
8416                          added to TYPE_FIELDS.  */
8417                       tree rtype = TREE_TYPE (r);
8418                       if (can_complete_type_without_circularity (rtype))
8419                         complete_type (rtype);
8420
8421                       if (!COMPLETE_TYPE_P (rtype))
8422                         {
8423                           cxx_incomplete_type_error (r, rtype);
8424                           r = error_mark_node;
8425                         }
8426                     }
8427
8428                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
8429                      such a thing will already have been added to the field
8430                      list by tsubst_enum in finish_member_declaration in the
8431                      CLASSTYPE_NESTED_UTDS case above.  */
8432                   if (!(TREE_CODE (r) == TYPE_DECL
8433                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
8434                         && DECL_ARTIFICIAL (r)))
8435                     {
8436                       set_current_access_from_decl (r);
8437                       finish_member_declaration (r);
8438                     }
8439                 }
8440             }
8441         }
8442       else
8443         {
8444           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
8445             {
8446               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
8447
8448               tree friend_type = t;
8449               bool adjust_processing_template_decl = false;
8450
8451               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8452                 {
8453                   /* template <class T> friend class C;  */
8454                   friend_type = tsubst_friend_class (friend_type, args);
8455                   adjust_processing_template_decl = true;
8456                 }
8457               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
8458                 {
8459                   /* template <class T> friend class C::D;  */
8460                   friend_type = tsubst (friend_type, args,
8461                                         tf_warning_or_error, NULL_TREE);
8462                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8463                     friend_type = TREE_TYPE (friend_type);
8464                   adjust_processing_template_decl = true;
8465                 }
8466               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
8467                 {
8468                   /* This could be either
8469
8470                        friend class T::C;
8471
8472                      when dependent_type_p is false or
8473
8474                        template <class U> friend class T::C;
8475
8476                      otherwise.  */
8477                   friend_type = tsubst (friend_type, args,
8478                                         tf_warning_or_error, NULL_TREE);
8479                   /* Bump processing_template_decl for correct
8480                      dependent_type_p calculation.  */
8481                   ++processing_template_decl;
8482                   if (dependent_type_p (friend_type))
8483                     adjust_processing_template_decl = true;
8484                   --processing_template_decl;
8485                 }
8486               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
8487                        && hidden_name_p (TYPE_NAME (friend_type)))
8488                 {
8489                   /* friend class C;
8490
8491                      where C hasn't been declared yet.  Let's lookup name
8492                      from namespace scope directly, bypassing any name that
8493                      come from dependent base class.  */
8494                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
8495
8496                   /* The call to xref_tag_from_type does injection for friend
8497                      classes.  */
8498                   push_nested_namespace (ns);
8499                   friend_type =
8500                     xref_tag_from_type (friend_type, NULL_TREE,
8501                                         /*tag_scope=*/ts_current);
8502                   pop_nested_namespace (ns);
8503                 }
8504               else if (uses_template_parms (friend_type))
8505                 /* friend class C<T>;  */
8506                 friend_type = tsubst (friend_type, args,
8507                                       tf_warning_or_error, NULL_TREE);
8508               /* Otherwise it's
8509
8510                    friend class C;
8511
8512                  where C is already declared or
8513
8514                    friend class C<int>;
8515
8516                  We don't have to do anything in these cases.  */
8517
8518               if (adjust_processing_template_decl)
8519                 /* Trick make_friend_class into realizing that the friend
8520                    we're adding is a template, not an ordinary class.  It's
8521                    important that we use make_friend_class since it will
8522                    perform some error-checking and output cross-reference
8523                    information.  */
8524                 ++processing_template_decl;
8525
8526               if (friend_type != error_mark_node)
8527                 make_friend_class (type, friend_type, /*complain=*/false);
8528
8529               if (adjust_processing_template_decl)
8530                 --processing_template_decl;
8531             }
8532           else
8533             {
8534               /* Build new DECL_FRIENDLIST.  */
8535               tree r;
8536
8537               /* The file and line for this declaration, to
8538                  assist in error message reporting.  Since we
8539                  called push_tinst_level above, we don't need to
8540                  restore these.  */
8541               input_location = DECL_SOURCE_LOCATION (t);
8542
8543               if (TREE_CODE (t) == TEMPLATE_DECL)
8544                 {
8545                   ++processing_template_decl;
8546                   push_deferring_access_checks (dk_no_check);
8547                 }
8548
8549               r = tsubst_friend_function (t, args);
8550               add_friend (type, r, /*complain=*/false);
8551               if (TREE_CODE (t) == TEMPLATE_DECL)
8552                 {
8553                   pop_deferring_access_checks ();
8554                   --processing_template_decl;
8555                 }
8556             }
8557         }
8558     }
8559
8560   /* Set the file and line number information to whatever is given for
8561      the class itself.  This puts error messages involving generated
8562      implicit functions at a predictable point, and the same point
8563      that would be used for non-template classes.  */
8564   input_location = DECL_SOURCE_LOCATION (typedecl);
8565
8566   unreverse_member_declarations (type);
8567   finish_struct_1 (type);
8568   TYPE_BEING_DEFINED (type) = 0;
8569
8570   /* We don't instantiate default arguments for member functions.  14.7.1:
8571
8572      The implicit instantiation of a class template specialization causes
8573      the implicit instantiation of the declarations, but not of the
8574      definitions or default arguments, of the class member functions,
8575      member classes, static data members and member templates....  */
8576
8577   /* Some typedefs referenced from within the template code need to be access
8578      checked at template instantiation time, i.e now. These types were
8579      added to the template at parsing time. Let's get those and perform
8580      the access checks then.  */
8581   perform_typedefs_access_check (pattern, args);
8582   perform_deferred_access_checks ();
8583   pop_nested_class ();
8584   maximum_field_alignment = saved_maximum_field_alignment;
8585   pop_from_top_level ();
8586   pop_deferring_access_checks ();
8587   pop_tinst_level ();
8588
8589   /* The vtable for a template class can be emitted in any translation
8590      unit in which the class is instantiated.  When there is no key
8591      method, however, finish_struct_1 will already have added TYPE to
8592      the keyed_classes list.  */
8593   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
8594     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
8595
8596   return type;
8597 }
8598
8599 static tree
8600 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8601 {
8602   tree r;
8603
8604   if (!t)
8605     r = t;
8606   else if (TYPE_P (t))
8607     r = tsubst (t, args, complain, in_decl);
8608   else
8609     {
8610       if (!(complain & tf_warning))
8611         ++c_inhibit_evaluation_warnings;
8612       r = tsubst_expr (t, args, complain, in_decl,
8613                        /*integral_constant_expression_p=*/true);
8614       if (!(complain & tf_warning))
8615         --c_inhibit_evaluation_warnings;
8616     }
8617   return r;
8618 }
8619
8620 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
8621    NONTYPE_ARGUMENT_PACK.  */
8622
8623 static tree
8624 make_fnparm_pack (tree spec_parm)
8625 {
8626   /* Collect all of the extra "packed" parameters into an
8627      argument pack.  */
8628   tree parmvec;
8629   tree parmtypevec;
8630   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
8631   tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
8632   int i, len = list_length (spec_parm);
8633
8634   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
8635   parmvec = make_tree_vec (len);
8636   parmtypevec = make_tree_vec (len);
8637   for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
8638     {
8639       TREE_VEC_ELT (parmvec, i) = spec_parm;
8640       TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
8641     }
8642
8643   /* Build the argument packs.  */
8644   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
8645   SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
8646   TREE_TYPE (argpack) = argtypepack;
8647
8648   return argpack;
8649 }        
8650
8651 /* Substitute ARGS into T, which is an pack expansion
8652    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
8653    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
8654    (if only a partial substitution could be performed) or
8655    ERROR_MARK_NODE if there was an error.  */
8656 tree
8657 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
8658                        tree in_decl)
8659 {
8660   tree pattern;
8661   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
8662   int i, len = -1;
8663   tree result;
8664   int incomplete = 0;
8665   htab_t saved_local_specializations = NULL;
8666
8667   gcc_assert (PACK_EXPANSION_P (t));
8668   pattern = PACK_EXPANSION_PATTERN (t);
8669
8670   /* Determine the argument packs that will instantiate the parameter
8671      packs used in the expansion expression. While we're at it,
8672      compute the number of arguments to be expanded and make sure it
8673      is consistent.  */
8674   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
8675        pack = TREE_CHAIN (pack))
8676     {
8677       tree parm_pack = TREE_VALUE (pack);
8678       tree arg_pack = NULL_TREE;
8679       tree orig_arg = NULL_TREE;
8680
8681       if (TREE_CODE (parm_pack) == PARM_DECL)
8682         {
8683           if (!cp_unevaluated_operand)
8684             arg_pack = retrieve_local_specialization (parm_pack);
8685           else
8686             {
8687               /* We can't rely on local_specializations for a parameter
8688                  name used later in a function declaration (such as in a
8689                  late-specified return type).  Even if it exists, it might
8690                  have the wrong value for a recursive call.  Just make a
8691                  dummy decl, since it's only used for its type.  */
8692               arg_pack = tsubst_decl (parm_pack, args, complain);
8693               arg_pack = make_fnparm_pack (arg_pack);
8694             }
8695         }
8696       else
8697         {
8698           int level, idx, levels;
8699           template_parm_level_and_index (parm_pack, &level, &idx);
8700
8701           levels = TMPL_ARGS_DEPTH (args);
8702           if (level <= levels)
8703             arg_pack = TMPL_ARG (args, level, idx);
8704         }
8705
8706       orig_arg = arg_pack;
8707       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
8708         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
8709       
8710       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
8711         /* This can only happen if we forget to expand an argument
8712            pack somewhere else. Just return an error, silently.  */
8713         {
8714           result = make_tree_vec (1);
8715           TREE_VEC_ELT (result, 0) = error_mark_node;
8716           return result;
8717         }
8718
8719       /* For clarity in the comments below let's use the
8720          representation 'argument_pack<elements>' to denote an
8721          argument pack and its elements.
8722
8723          In the 'if' block below, we want to detect cases where
8724          ARG_PACK is argument_pack<PARM_PACK...>.  I.e, we want to
8725          check if ARG_PACK is an argument pack which sole element is
8726          the expansion of PARM_PACK.  That argument pack is typically
8727          created by template_parm_to_arg when passed a parameter
8728          pack.  */
8729       if (arg_pack
8730           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
8731           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
8732         {
8733           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
8734           tree pattern = PACK_EXPANSION_PATTERN (expansion);
8735           /* So we have an argument_pack<P...>.  We want to test if P
8736              is actually PARM_PACK.  We will not use cp_tree_equal to
8737              test P and PARM_PACK because during type fixup (by
8738              fixup_template_parm) P can be a pre-fixup version of a
8739              type and PARM_PACK be its post-fixup version.
8740              cp_tree_equal would consider them as different even
8741              though we would want to consider them compatible for our
8742              precise purpose here.
8743
8744              Thus we are going to consider that P and PARM_PACK are
8745              compatible if they have the same DECL.  */
8746           if ((/* If ARG_PACK is a type parameter pack named by the
8747                   same DECL as parm_pack ...  */
8748                (TYPE_P (pattern)
8749                 && TYPE_P (parm_pack)
8750                 && TYPE_NAME (pattern) == TYPE_NAME (parm_pack))
8751                /* ... or if ARG_PACK is a non-type parameter
8752                   named by the same DECL as parm_pack ...  */
8753                || (TREE_CODE (pattern) == TEMPLATE_PARM_INDEX
8754                    && TREE_CODE (parm_pack) == PARM_DECL
8755                    && TEMPLATE_PARM_DECL (pattern)
8756                    == TEMPLATE_PARM_DECL (DECL_INITIAL (parm_pack))))
8757               && template_parameter_pack_p (pattern))
8758             /* ... then the argument pack that the parameter maps to
8759                is just an expansion of the parameter itself, such as
8760                one would find in the implicit typedef of a class
8761                inside the class itself.  Consider this parameter
8762                "unsubstituted", so that we will maintain the outer
8763                pack expansion.  */
8764             arg_pack = NULL_TREE;
8765         }
8766           
8767       if (arg_pack)
8768         {
8769           int my_len = 
8770             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
8771
8772           /* It's all-or-nothing with incomplete argument packs.  */
8773           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
8774             return error_mark_node;
8775           
8776           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
8777             incomplete = 1;
8778
8779           if (len < 0)
8780             len = my_len;
8781           else if (len != my_len)
8782             {
8783               if (incomplete)
8784                 /* We got explicit args for some packs but not others;
8785                    do nothing now and try again after deduction.  */
8786                 return t;
8787               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
8788                 error ("mismatched argument pack lengths while expanding "
8789                        "%<%T%>",
8790                        pattern);
8791               else
8792                 error ("mismatched argument pack lengths while expanding "
8793                        "%<%E%>",
8794                        pattern);
8795               return error_mark_node;
8796             }
8797
8798           /* Keep track of the parameter packs and their corresponding
8799              argument packs.  */
8800           packs = tree_cons (parm_pack, arg_pack, packs);
8801           TREE_TYPE (packs) = orig_arg;
8802         }
8803       else
8804         /* We can't substitute for this parameter pack.  */
8805         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
8806                                          TREE_VALUE (pack),
8807                                          unsubstituted_packs);
8808     }
8809
8810   /* We cannot expand this expansion expression, because we don't have
8811      all of the argument packs we need. Substitute into the pattern
8812      and return a PACK_EXPANSION_*. The caller will need to deal with
8813      that.  */
8814   if (unsubstituted_packs)
8815     {
8816       tree new_pat;
8817       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
8818         new_pat = tsubst_expr (pattern, args, complain, in_decl,
8819                                /*integral_constant_expression_p=*/false);
8820       else
8821         new_pat = tsubst (pattern, args, complain, in_decl);
8822       return make_pack_expansion (new_pat);
8823     }
8824
8825   /* We could not find any argument packs that work.  */
8826   if (len < 0)
8827     return error_mark_node;
8828
8829   if (cp_unevaluated_operand)
8830     {
8831       /* We're in a late-specified return type, so create our own local
8832          specializations table; the current table is either NULL or (in the
8833          case of recursive unification) might have bindings that we don't
8834          want to use or alter.  */
8835       saved_local_specializations = local_specializations;
8836       local_specializations = htab_create (37,
8837                                            hash_local_specialization,
8838                                            eq_local_specializations,
8839                                            NULL);
8840     }
8841
8842   /* For each argument in each argument pack, substitute into the
8843      pattern.  */
8844   result = make_tree_vec (len + incomplete);
8845   for (i = 0; i < len + incomplete; ++i)
8846     {
8847       /* For parameter pack, change the substitution of the parameter
8848          pack to the ith argument in its argument pack, then expand
8849          the pattern.  */
8850       for (pack = packs; pack; pack = TREE_CHAIN (pack))
8851         {
8852           tree parm = TREE_PURPOSE (pack);
8853
8854           if (TREE_CODE (parm) == PARM_DECL)
8855             {
8856               /* Select the Ith argument from the pack.  */
8857               tree arg = make_node (ARGUMENT_PACK_SELECT);
8858               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
8859               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
8860               mark_used (parm);
8861               register_local_specialization (arg, parm);
8862             }
8863           else
8864             {
8865               tree value = parm;
8866               int idx, level;
8867               template_parm_level_and_index (parm, &level, &idx);
8868               
8869               if (i < len) 
8870                 {
8871                   /* Select the Ith argument from the pack. */
8872                   value = make_node (ARGUMENT_PACK_SELECT);
8873                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
8874                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
8875                 }
8876
8877               /* Update the corresponding argument.  */
8878               TMPL_ARG (args, level, idx) = value;
8879             }
8880         }
8881
8882       /* Substitute into the PATTERN with the altered arguments.  */
8883       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
8884         TREE_VEC_ELT (result, i) = 
8885           tsubst_expr (pattern, args, complain, in_decl,
8886                        /*integral_constant_expression_p=*/false);
8887       else
8888         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
8889
8890       if (i == len)
8891         /* When we have incomplete argument packs, the last "expanded"
8892            result is itself a pack expansion, which allows us
8893            to deduce more arguments.  */
8894         TREE_VEC_ELT (result, i) = 
8895           make_pack_expansion (TREE_VEC_ELT (result, i));
8896
8897       if (TREE_VEC_ELT (result, i) == error_mark_node)
8898         {
8899           result = error_mark_node;
8900           break;
8901         }
8902     }
8903
8904   /* Update ARGS to restore the substitution from parameter packs to
8905      their argument packs.  */
8906   for (pack = packs; pack; pack = TREE_CHAIN (pack))
8907     {
8908       tree parm = TREE_PURPOSE (pack);
8909
8910       if (TREE_CODE (parm) == PARM_DECL)
8911         register_local_specialization (TREE_TYPE (pack), parm);
8912       else
8913         {
8914           int idx, level;
8915           template_parm_level_and_index (parm, &level, &idx);
8916           
8917           /* Update the corresponding argument.  */
8918           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
8919             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
8920               TREE_TYPE (pack);
8921           else
8922             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
8923         }
8924     }
8925
8926   if (saved_local_specializations)
8927     {
8928       htab_delete (local_specializations);
8929       local_specializations = saved_local_specializations;
8930     }
8931   
8932   return result;
8933 }
8934
8935 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
8936    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
8937    parameter packs; all parms generated from a function parameter pack will
8938    have the same DECL_PARM_INDEX.  */
8939
8940 tree
8941 get_pattern_parm (tree parm, tree tmpl)
8942 {
8943   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
8944   tree patparm;
8945
8946   if (DECL_ARTIFICIAL (parm))
8947     {
8948       for (patparm = DECL_ARGUMENTS (pattern);
8949            patparm; patparm = DECL_CHAIN (patparm))
8950         if (DECL_ARTIFICIAL (patparm)
8951             && DECL_NAME (parm) == DECL_NAME (patparm))
8952           break;
8953     }
8954   else
8955     {
8956       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
8957       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
8958       gcc_assert (DECL_PARM_INDEX (patparm)
8959                   == DECL_PARM_INDEX (parm));
8960     }
8961
8962   return patparm;
8963 }
8964
8965 /* Substitute ARGS into the vector or list of template arguments T.  */
8966
8967 static tree
8968 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8969 {
8970   tree orig_t = t;
8971   int len, need_new = 0, i, expanded_len_adjust = 0, out;
8972   tree *elts;
8973
8974   if (t == error_mark_node)
8975     return error_mark_node;
8976
8977   len = TREE_VEC_LENGTH (t);
8978   elts = XALLOCAVEC (tree, len);
8979
8980   for (i = 0; i < len; i++)
8981     {
8982       tree orig_arg = TREE_VEC_ELT (t, i);
8983       tree new_arg;
8984
8985       if (TREE_CODE (orig_arg) == TREE_VEC)
8986         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
8987       else if (PACK_EXPANSION_P (orig_arg))
8988         {
8989           /* Substitute into an expansion expression.  */
8990           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
8991
8992           if (TREE_CODE (new_arg) == TREE_VEC)
8993             /* Add to the expanded length adjustment the number of
8994                expanded arguments. We subtract one from this
8995                measurement, because the argument pack expression
8996                itself is already counted as 1 in
8997                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
8998                the argument pack is empty.  */
8999             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
9000         }
9001       else if (ARGUMENT_PACK_P (orig_arg))
9002         {
9003           /* Substitute into each of the arguments.  */
9004           new_arg = TYPE_P (orig_arg)
9005             ? cxx_make_type (TREE_CODE (orig_arg))
9006             : make_node (TREE_CODE (orig_arg));
9007           
9008           SET_ARGUMENT_PACK_ARGS (
9009             new_arg,
9010             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
9011                                   args, complain, in_decl));
9012
9013           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
9014             new_arg = error_mark_node;
9015
9016           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
9017             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
9018                                           complain, in_decl);
9019             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
9020
9021             if (TREE_TYPE (new_arg) == error_mark_node)
9022               new_arg = error_mark_node;
9023           }
9024         }
9025       else
9026         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
9027
9028       if (new_arg == error_mark_node)
9029         return error_mark_node;
9030
9031       elts[i] = new_arg;
9032       if (new_arg != orig_arg)
9033         need_new = 1;
9034     }
9035
9036   if (!need_new)
9037     return t;
9038
9039   /* Make space for the expanded arguments coming from template
9040      argument packs.  */
9041   t = make_tree_vec (len + expanded_len_adjust);
9042   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
9043      arguments for a member template.
9044      In that case each TREE_VEC in ORIG_T represents a level of template
9045      arguments, and ORIG_T won't carry any non defaulted argument count.
9046      It will rather be the nested TREE_VECs that will carry one.
9047      In other words, ORIG_T carries a non defaulted argument count only
9048      if it doesn't contain any nested TREE_VEC.  */
9049   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
9050     {
9051       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
9052       count += expanded_len_adjust;
9053       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
9054     }
9055   for (i = 0, out = 0; i < len; i++)
9056     {
9057       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
9058            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
9059           && TREE_CODE (elts[i]) == TREE_VEC)
9060         {
9061           int idx;
9062
9063           /* Now expand the template argument pack "in place".  */
9064           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
9065             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
9066         }
9067       else
9068         {
9069           TREE_VEC_ELT (t, out) = elts[i];
9070           out++;
9071         }
9072     }
9073
9074   return t;
9075 }
9076
9077 /* Return the result of substituting ARGS into the template parameters
9078    given by PARMS.  If there are m levels of ARGS and m + n levels of
9079    PARMS, then the result will contain n levels of PARMS.  For
9080    example, if PARMS is `template <class T> template <class U>
9081    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
9082    result will be `template <int*, double, class V>'.  */
9083
9084 static tree
9085 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
9086 {
9087   tree r = NULL_TREE;
9088   tree* new_parms;
9089
9090   /* When substituting into a template, we must set
9091      PROCESSING_TEMPLATE_DECL as the template parameters may be
9092      dependent if they are based on one-another, and the dependency
9093      predicates are short-circuit outside of templates.  */
9094   ++processing_template_decl;
9095
9096   for (new_parms = &r;
9097        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
9098        new_parms = &(TREE_CHAIN (*new_parms)),
9099          parms = TREE_CHAIN (parms))
9100     {
9101       tree new_vec =
9102         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
9103       int i;
9104
9105       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
9106         {
9107           tree tuple;
9108
9109           if (parms == error_mark_node)
9110             continue;
9111
9112           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
9113
9114           if (tuple == error_mark_node)
9115             continue;
9116
9117           TREE_VEC_ELT (new_vec, i) =
9118             tsubst_template_parm (tuple, args, complain);
9119         }
9120
9121       *new_parms =
9122         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
9123                              - TMPL_ARGS_DEPTH (args)),
9124                    new_vec, NULL_TREE);
9125     }
9126
9127   --processing_template_decl;
9128
9129   return r;
9130 }
9131
9132 /* Return the result of substituting ARGS into one template parameter
9133    given by T. T Must be a TREE_LIST which TREE_VALUE is the template
9134    parameter and which TREE_PURPOSE is the default argument of the
9135    template parameter.  */
9136
9137 static tree
9138 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
9139 {
9140   tree default_value, parm_decl;
9141
9142   if (args == NULL_TREE
9143       || t == NULL_TREE
9144       || t == error_mark_node)
9145     return t;
9146
9147   gcc_assert (TREE_CODE (t) == TREE_LIST);
9148
9149   default_value = TREE_PURPOSE (t);
9150   parm_decl = TREE_VALUE (t);
9151
9152   parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
9153   if (TREE_CODE (parm_decl) == PARM_DECL
9154       && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
9155     parm_decl = error_mark_node;
9156   default_value = tsubst_template_arg (default_value, args,
9157                                        complain, NULL_TREE);
9158
9159   return build_tree_list (default_value, parm_decl);
9160 }
9161
9162 /* Substitute the ARGS into the indicated aggregate (or enumeration)
9163    type T.  If T is not an aggregate or enumeration type, it is
9164    handled as if by tsubst.  IN_DECL is as for tsubst.  If
9165    ENTERING_SCOPE is nonzero, T is the context for a template which
9166    we are presently tsubst'ing.  Return the substituted value.  */
9167
9168 static tree
9169 tsubst_aggr_type (tree t,
9170                   tree args,
9171                   tsubst_flags_t complain,
9172                   tree in_decl,
9173                   int entering_scope)
9174 {
9175   if (t == NULL_TREE)
9176     return NULL_TREE;
9177
9178   switch (TREE_CODE (t))
9179     {
9180     case RECORD_TYPE:
9181       if (TYPE_PTRMEMFUNC_P (t))
9182         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
9183
9184       /* Else fall through.  */
9185     case ENUMERAL_TYPE:
9186     case UNION_TYPE:
9187       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
9188         {
9189           tree argvec;
9190           tree context;
9191           tree r;
9192           int saved_unevaluated_operand;
9193           int saved_inhibit_evaluation_warnings;
9194
9195           /* In "sizeof(X<I>)" we need to evaluate "I".  */
9196           saved_unevaluated_operand = cp_unevaluated_operand;
9197           cp_unevaluated_operand = 0;
9198           saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
9199           c_inhibit_evaluation_warnings = 0;
9200
9201           /* First, determine the context for the type we are looking
9202              up.  */
9203           context = TYPE_CONTEXT (t);
9204           if (context)
9205             {
9206               context = tsubst_aggr_type (context, args, complain,
9207                                           in_decl, /*entering_scope=*/1);
9208               /* If context is a nested class inside a class template,
9209                  it may still need to be instantiated (c++/33959).  */
9210               if (TYPE_P (context))
9211                 context = complete_type (context);
9212             }
9213
9214           /* Then, figure out what arguments are appropriate for the
9215              type we are trying to find.  For example, given:
9216
9217                template <class T> struct S;
9218                template <class T, class U> void f(T, U) { S<U> su; }
9219
9220              and supposing that we are instantiating f<int, double>,
9221              then our ARGS will be {int, double}, but, when looking up
9222              S we only want {double}.  */
9223           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
9224                                          complain, in_decl);
9225           if (argvec == error_mark_node)
9226             r = error_mark_node;
9227           else
9228             {
9229               r = lookup_template_class (t, argvec, in_decl, context,
9230                                          entering_scope, complain);
9231               r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
9232             }
9233
9234           cp_unevaluated_operand = saved_unevaluated_operand;
9235           c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
9236
9237           return r;
9238         }
9239       else
9240         /* This is not a template type, so there's nothing to do.  */
9241         return t;
9242
9243     default:
9244       return tsubst (t, args, complain, in_decl);
9245     }
9246 }
9247
9248 /* Substitute into the default argument ARG (a default argument for
9249    FN), which has the indicated TYPE.  */
9250
9251 tree
9252 tsubst_default_argument (tree fn, tree type, tree arg)
9253 {
9254   tree saved_class_ptr = NULL_TREE;
9255   tree saved_class_ref = NULL_TREE;
9256
9257   /* This can happen in invalid code.  */
9258   if (TREE_CODE (arg) == DEFAULT_ARG)
9259     return arg;
9260
9261   /* This default argument came from a template.  Instantiate the
9262      default argument here, not in tsubst.  In the case of
9263      something like:
9264
9265        template <class T>
9266        struct S {
9267          static T t();
9268          void f(T = t());
9269        };
9270
9271      we must be careful to do name lookup in the scope of S<T>,
9272      rather than in the current class.  */
9273   push_access_scope (fn);
9274   /* The "this" pointer is not valid in a default argument.  */
9275   if (cfun)
9276     {
9277       saved_class_ptr = current_class_ptr;
9278       cp_function_chain->x_current_class_ptr = NULL_TREE;
9279       saved_class_ref = current_class_ref;
9280       cp_function_chain->x_current_class_ref = NULL_TREE;
9281     }
9282
9283   push_deferring_access_checks(dk_no_deferred);
9284   /* The default argument expression may cause implicitly defined
9285      member functions to be synthesized, which will result in garbage
9286      collection.  We must treat this situation as if we were within
9287      the body of function so as to avoid collecting live data on the
9288      stack.  */
9289   ++function_depth;
9290   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
9291                      tf_warning_or_error, NULL_TREE,
9292                      /*integral_constant_expression_p=*/false);
9293   --function_depth;
9294   pop_deferring_access_checks();
9295
9296   /* Restore the "this" pointer.  */
9297   if (cfun)
9298     {
9299       cp_function_chain->x_current_class_ptr = saved_class_ptr;
9300       cp_function_chain->x_current_class_ref = saved_class_ref;
9301     }
9302
9303   /* Make sure the default argument is reasonable.  */
9304   arg = check_default_argument (type, arg);
9305
9306   pop_access_scope (fn);
9307
9308   return arg;
9309 }
9310
9311 /* Substitute into all the default arguments for FN.  */
9312
9313 static void
9314 tsubst_default_arguments (tree fn)
9315 {
9316   tree arg;
9317   tree tmpl_args;
9318
9319   tmpl_args = DECL_TI_ARGS (fn);
9320
9321   /* If this function is not yet instantiated, we certainly don't need
9322      its default arguments.  */
9323   if (uses_template_parms (tmpl_args))
9324     return;
9325   /* Don't do this again for clones.  */
9326   if (DECL_CLONED_FUNCTION_P (fn))
9327     return;
9328
9329   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
9330        arg;
9331        arg = TREE_CHAIN (arg))
9332     if (TREE_PURPOSE (arg))
9333       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
9334                                                     TREE_VALUE (arg),
9335                                                     TREE_PURPOSE (arg));
9336 }
9337
9338 /* Substitute the ARGS into the T, which is a _DECL.  Return the
9339    result of the substitution.  Issue error and warning messages under
9340    control of COMPLAIN.  */
9341
9342 static tree
9343 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
9344 {
9345 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
9346   location_t saved_loc;
9347   tree r = NULL_TREE;
9348   tree in_decl = t;
9349   hashval_t hash = 0;
9350
9351   /* Set the filename and linenumber to improve error-reporting.  */
9352   saved_loc = input_location;
9353   input_location = DECL_SOURCE_LOCATION (t);
9354
9355   switch (TREE_CODE (t))
9356     {
9357     case TEMPLATE_DECL:
9358       {
9359         /* We can get here when processing a member function template,
9360            member class template, or template template parameter.  */
9361         tree decl = DECL_TEMPLATE_RESULT (t);
9362         tree spec;
9363         tree tmpl_args;
9364         tree full_args;
9365
9366         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9367           {
9368             /* Template template parameter is treated here.  */
9369             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9370             if (new_type == error_mark_node)
9371               RETURN (error_mark_node);
9372
9373             r = copy_decl (t);
9374             DECL_CHAIN (r) = NULL_TREE;
9375             TREE_TYPE (r) = new_type;
9376             DECL_TEMPLATE_RESULT (r)
9377               = build_decl (DECL_SOURCE_LOCATION (decl),
9378                             TYPE_DECL, DECL_NAME (decl), new_type);
9379             DECL_TEMPLATE_PARMS (r)
9380               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
9381                                        complain);
9382             TYPE_NAME (new_type) = r;
9383             break;
9384           }
9385
9386         /* We might already have an instance of this template.
9387            The ARGS are for the surrounding class type, so the
9388            full args contain the tsubst'd args for the context,
9389            plus the innermost args from the template decl.  */
9390         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
9391           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
9392           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
9393         /* Because this is a template, the arguments will still be
9394            dependent, even after substitution.  If
9395            PROCESSING_TEMPLATE_DECL is not set, the dependency
9396            predicates will short-circuit.  */
9397         ++processing_template_decl;
9398         full_args = tsubst_template_args (tmpl_args, args,
9399                                           complain, in_decl);
9400         --processing_template_decl;
9401         if (full_args == error_mark_node)
9402           RETURN (error_mark_node);
9403
9404         /* If this is a default template template argument,
9405            tsubst might not have changed anything.  */
9406         if (full_args == tmpl_args)
9407           RETURN (t);
9408
9409         hash = hash_tmpl_and_args (t, full_args);
9410         spec = retrieve_specialization (t, full_args, hash);
9411         if (spec != NULL_TREE)
9412           {
9413             r = spec;
9414             break;
9415           }
9416
9417         /* Make a new template decl.  It will be similar to the
9418            original, but will record the current template arguments.
9419            We also create a new function declaration, which is just
9420            like the old one, but points to this new template, rather
9421            than the old one.  */
9422         r = copy_decl (t);
9423         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
9424         DECL_CHAIN (r) = NULL_TREE;
9425
9426         DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
9427
9428         if (TREE_CODE (decl) == TYPE_DECL)
9429           {
9430             tree new_type;
9431             ++processing_template_decl;
9432             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9433             --processing_template_decl;
9434             if (new_type == error_mark_node)
9435               RETURN (error_mark_node);
9436
9437             TREE_TYPE (r) = new_type;
9438             CLASSTYPE_TI_TEMPLATE (new_type) = r;
9439             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
9440             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
9441             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
9442           }
9443         else
9444           {
9445             tree new_decl;
9446             ++processing_template_decl;
9447             new_decl = tsubst (decl, args, complain, in_decl);
9448             --processing_template_decl;
9449             if (new_decl == error_mark_node)
9450               RETURN (error_mark_node);
9451
9452             DECL_TEMPLATE_RESULT (r) = new_decl;
9453             DECL_TI_TEMPLATE (new_decl) = r;
9454             TREE_TYPE (r) = TREE_TYPE (new_decl);
9455             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
9456             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
9457           }
9458
9459         SET_DECL_IMPLICIT_INSTANTIATION (r);
9460         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
9461         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
9462
9463         /* The template parameters for this new template are all the
9464            template parameters for the old template, except the
9465            outermost level of parameters.  */
9466         DECL_TEMPLATE_PARMS (r)
9467           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
9468                                    complain);
9469
9470         if (PRIMARY_TEMPLATE_P (t))
9471           DECL_PRIMARY_TEMPLATE (r) = r;
9472
9473         if (TREE_CODE (decl) != TYPE_DECL)
9474           /* Record this non-type partial instantiation.  */
9475           register_specialization (r, t,
9476                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
9477                                    false, hash);
9478       }
9479       break;
9480
9481     case FUNCTION_DECL:
9482       {
9483         tree ctx;
9484         tree argvec = NULL_TREE;
9485         tree *friends;
9486         tree gen_tmpl;
9487         tree type;
9488         int member;
9489         int args_depth;
9490         int parms_depth;
9491
9492         /* Nobody should be tsubst'ing into non-template functions.  */
9493         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
9494
9495         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
9496           {
9497             tree spec;
9498             bool dependent_p;
9499
9500             /* If T is not dependent, just return it.  We have to
9501                increment PROCESSING_TEMPLATE_DECL because
9502                value_dependent_expression_p assumes that nothing is
9503                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
9504             ++processing_template_decl;
9505             dependent_p = value_dependent_expression_p (t);
9506             --processing_template_decl;
9507             if (!dependent_p)
9508               RETURN (t);
9509
9510             /* Calculate the most general template of which R is a
9511                specialization, and the complete set of arguments used to
9512                specialize R.  */
9513             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
9514             argvec = tsubst_template_args (DECL_TI_ARGS
9515                                           (DECL_TEMPLATE_RESULT
9516                                                  (DECL_TI_TEMPLATE (t))),
9517                                            args, complain, in_decl);
9518
9519             /* Check to see if we already have this specialization.  */
9520             hash = hash_tmpl_and_args (gen_tmpl, argvec);
9521             spec = retrieve_specialization (gen_tmpl, argvec, hash);
9522
9523             if (spec)
9524               {
9525                 r = spec;
9526                 break;
9527               }
9528
9529             /* We can see more levels of arguments than parameters if
9530                there was a specialization of a member template, like
9531                this:
9532
9533                  template <class T> struct S { template <class U> void f(); }
9534                  template <> template <class U> void S<int>::f(U);
9535
9536                Here, we'll be substituting into the specialization,
9537                because that's where we can find the code we actually
9538                want to generate, but we'll have enough arguments for
9539                the most general template.
9540
9541                We also deal with the peculiar case:
9542
9543                  template <class T> struct S {
9544                    template <class U> friend void f();
9545                  };
9546                  template <class U> void f() {}
9547                  template S<int>;
9548                  template void f<double>();
9549
9550                Here, the ARGS for the instantiation of will be {int,
9551                double}.  But, we only need as many ARGS as there are
9552                levels of template parameters in CODE_PATTERN.  We are
9553                careful not to get fooled into reducing the ARGS in
9554                situations like:
9555
9556                  template <class T> struct S { template <class U> void f(U); }
9557                  template <class T> template <> void S<T>::f(int) {}
9558
9559                which we can spot because the pattern will be a
9560                specialization in this case.  */
9561             args_depth = TMPL_ARGS_DEPTH (args);
9562             parms_depth =
9563               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
9564             if (args_depth > parms_depth
9565                 && !DECL_TEMPLATE_SPECIALIZATION (t))
9566               args = get_innermost_template_args (args, parms_depth);
9567           }
9568         else
9569           {
9570             /* This special case arises when we have something like this:
9571
9572                  template <class T> struct S {
9573                    friend void f<int>(int, double);
9574                  };
9575
9576                Here, the DECL_TI_TEMPLATE for the friend declaration
9577                will be an IDENTIFIER_NODE.  We are being called from
9578                tsubst_friend_function, and we want only to create a
9579                new decl (R) with appropriate types so that we can call
9580                determine_specialization.  */
9581             gen_tmpl = NULL_TREE;
9582           }
9583
9584         if (DECL_CLASS_SCOPE_P (t))
9585           {
9586             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
9587               member = 2;
9588             else
9589               member = 1;
9590             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
9591                                     complain, t, /*entering_scope=*/1);
9592           }
9593         else
9594           {
9595             member = 0;
9596             ctx = DECL_CONTEXT (t);
9597           }
9598         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9599         if (type == error_mark_node)
9600           RETURN (error_mark_node);
9601
9602         /* We do NOT check for matching decls pushed separately at this
9603            point, as they may not represent instantiations of this
9604            template, and in any case are considered separate under the
9605            discrete model.  */
9606         r = copy_decl (t);
9607         DECL_USE_TEMPLATE (r) = 0;
9608         TREE_TYPE (r) = type;
9609         /* Clear out the mangled name and RTL for the instantiation.  */
9610         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
9611         SET_DECL_RTL (r, NULL);
9612         /* Leave DECL_INITIAL set on deleted instantiations.  */
9613         if (!DECL_DELETED_FN (r))
9614           DECL_INITIAL (r) = NULL_TREE;
9615         DECL_CONTEXT (r) = ctx;
9616
9617         if (member && DECL_CONV_FN_P (r))
9618           /* Type-conversion operator.  Reconstruct the name, in
9619              case it's the name of one of the template's parameters.  */
9620           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
9621
9622         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
9623                                      complain, t);
9624         DECL_RESULT (r) = NULL_TREE;
9625
9626         TREE_STATIC (r) = 0;
9627         TREE_PUBLIC (r) = TREE_PUBLIC (t);
9628         DECL_EXTERNAL (r) = 1;
9629         /* If this is an instantiation of a function with internal
9630            linkage, we already know what object file linkage will be
9631            assigned to the instantiation.  */
9632         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
9633         DECL_DEFER_OUTPUT (r) = 0;
9634         DECL_CHAIN (r) = NULL_TREE;
9635         DECL_PENDING_INLINE_INFO (r) = 0;
9636         DECL_PENDING_INLINE_P (r) = 0;
9637         DECL_SAVED_TREE (r) = NULL_TREE;
9638         DECL_STRUCT_FUNCTION (r) = NULL;
9639         TREE_USED (r) = 0;
9640         /* We'll re-clone as appropriate in instantiate_template.  */
9641         DECL_CLONED_FUNCTION (r) = NULL_TREE;
9642
9643         /* If we aren't complaining now, return on error before we register
9644            the specialization so that we'll complain eventually.  */
9645         if ((complain & tf_error) == 0
9646             && IDENTIFIER_OPNAME_P (DECL_NAME (r))
9647             && !grok_op_properties (r, /*complain=*/false))
9648           RETURN (error_mark_node);
9649
9650         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
9651            this in the special friend case mentioned above where
9652            GEN_TMPL is NULL.  */
9653         if (gen_tmpl)
9654           {
9655             DECL_TEMPLATE_INFO (r)
9656               = build_template_info (gen_tmpl, argvec);
9657             SET_DECL_IMPLICIT_INSTANTIATION (r);
9658             register_specialization (r, gen_tmpl, argvec, false, hash);
9659
9660             /* We're not supposed to instantiate default arguments
9661                until they are called, for a template.  But, for a
9662                declaration like:
9663
9664                  template <class T> void f ()
9665                  { extern void g(int i = T()); }
9666
9667                we should do the substitution when the template is
9668                instantiated.  We handle the member function case in
9669                instantiate_class_template since the default arguments
9670                might refer to other members of the class.  */
9671             if (!member
9672                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
9673                 && !uses_template_parms (argvec))
9674               tsubst_default_arguments (r);
9675           }
9676         else
9677           DECL_TEMPLATE_INFO (r) = NULL_TREE;
9678
9679         /* Copy the list of befriending classes.  */
9680         for (friends = &DECL_BEFRIENDING_CLASSES (r);
9681              *friends;
9682              friends = &TREE_CHAIN (*friends))
9683           {
9684             *friends = copy_node (*friends);
9685             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
9686                                             args, complain,
9687                                             in_decl);
9688           }
9689
9690         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
9691           {
9692             maybe_retrofit_in_chrg (r);
9693             if (DECL_CONSTRUCTOR_P (r))
9694               grok_ctor_properties (ctx, r);
9695             /* If this is an instantiation of a member template, clone it.
9696                If it isn't, that'll be handled by
9697                clone_constructors_and_destructors.  */
9698             if (PRIMARY_TEMPLATE_P (gen_tmpl))
9699               clone_function_decl (r, /*update_method_vec_p=*/0);
9700           }
9701         else if ((complain & tf_error) != 0
9702                  && IDENTIFIER_OPNAME_P (DECL_NAME (r))
9703                  && !grok_op_properties (r, /*complain=*/true))
9704           RETURN (error_mark_node);
9705
9706         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
9707           SET_DECL_FRIEND_CONTEXT (r,
9708                                    tsubst (DECL_FRIEND_CONTEXT (t),
9709                                             args, complain, in_decl));
9710
9711         /* Possibly limit visibility based on template args.  */
9712         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
9713         if (DECL_VISIBILITY_SPECIFIED (t))
9714           {
9715             DECL_VISIBILITY_SPECIFIED (r) = 0;
9716             DECL_ATTRIBUTES (r)
9717               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
9718           }
9719         determine_visibility (r);
9720         if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
9721             && !processing_template_decl)
9722           defaulted_late_check (r);
9723
9724         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9725                                         args, complain, in_decl);
9726       }
9727       break;
9728
9729     case PARM_DECL:
9730       {
9731         tree type = NULL_TREE;
9732         int i, len = 1;
9733         tree expanded_types = NULL_TREE;
9734         tree prev_r = NULL_TREE;
9735         tree first_r = NULL_TREE;
9736
9737         if (FUNCTION_PARAMETER_PACK_P (t))
9738           {
9739             /* If there is a local specialization that isn't a
9740                parameter pack, it means that we're doing a "simple"
9741                substitution from inside tsubst_pack_expansion. Just
9742                return the local specialization (which will be a single
9743                parm).  */
9744             tree spec = retrieve_local_specialization (t);
9745             if (spec 
9746                 && TREE_CODE (spec) == PARM_DECL
9747                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
9748               RETURN (spec);
9749
9750             /* Expand the TYPE_PACK_EXPANSION that provides the types for
9751                the parameters in this function parameter pack.  */
9752             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
9753                                                     complain, in_decl);
9754             if (TREE_CODE (expanded_types) == TREE_VEC)
9755               {
9756                 len = TREE_VEC_LENGTH (expanded_types);
9757
9758                 /* Zero-length parameter packs are boring. Just substitute
9759                    into the chain.  */
9760                 if (len == 0)
9761                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
9762                                   TREE_CHAIN (t)));
9763               }
9764             else
9765               {
9766                 /* All we did was update the type. Make a note of that.  */
9767                 type = expanded_types;
9768                 expanded_types = NULL_TREE;
9769               }
9770           }
9771
9772         /* Loop through all of the parameter's we'll build. When T is
9773            a function parameter pack, LEN is the number of expanded
9774            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
9775         r = NULL_TREE;
9776         for (i = 0; i < len; ++i)
9777           {
9778             prev_r = r;
9779             r = copy_node (t);
9780             if (DECL_TEMPLATE_PARM_P (t))
9781               SET_DECL_TEMPLATE_PARM_P (r);
9782
9783             /* An argument of a function parameter pack is not a parameter
9784                pack.  */
9785             FUNCTION_PARAMETER_PACK_P (r) = false;
9786
9787             if (expanded_types)
9788               /* We're on the Ith parameter of the function parameter
9789                  pack.  */
9790               {
9791                 /* Get the Ith type.  */
9792                 type = TREE_VEC_ELT (expanded_types, i);
9793
9794                 if (DECL_NAME (r))
9795                   /* Rename the parameter to include the index.  */
9796                   DECL_NAME (r) =
9797                     make_ith_pack_parameter_name (DECL_NAME (r), i);
9798               }
9799             else if (!type)
9800               /* We're dealing with a normal parameter.  */
9801               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9802
9803             type = type_decays_to (type);
9804             TREE_TYPE (r) = type;
9805             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9806
9807             if (DECL_INITIAL (r))
9808               {
9809                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
9810                   DECL_INITIAL (r) = TREE_TYPE (r);
9811                 else
9812                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
9813                                              complain, in_decl);
9814               }
9815
9816             DECL_CONTEXT (r) = NULL_TREE;
9817
9818             if (!DECL_TEMPLATE_PARM_P (r))
9819               DECL_ARG_TYPE (r) = type_passed_as (type);
9820
9821             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9822                                             args, complain, in_decl);
9823
9824             /* Keep track of the first new parameter we
9825                generate. That's what will be returned to the
9826                caller.  */
9827             if (!first_r)
9828               first_r = r;
9829
9830             /* Build a proper chain of parameters when substituting
9831                into a function parameter pack.  */
9832             if (prev_r)
9833               DECL_CHAIN (prev_r) = r;
9834           }
9835
9836         if (DECL_CHAIN (t))
9837           DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
9838                                    complain, DECL_CHAIN (t));
9839
9840         /* FIRST_R contains the start of the chain we've built.  */
9841         r = first_r;
9842       }
9843       break;
9844
9845     case FIELD_DECL:
9846       {
9847         tree type;
9848
9849         r = copy_decl (t);
9850         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9851         if (type == error_mark_node)
9852           RETURN (error_mark_node);
9853         TREE_TYPE (r) = type;
9854         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9855
9856         /* DECL_INITIAL gives the number of bits in a bit-field.  */
9857         DECL_INITIAL (r)
9858           = tsubst_expr (DECL_INITIAL (t), args,
9859                          complain, in_decl,
9860                          /*integral_constant_expression_p=*/true);
9861         /* We don't have to set DECL_CONTEXT here; it is set by
9862            finish_member_declaration.  */
9863         DECL_CHAIN (r) = NULL_TREE;
9864         if (VOID_TYPE_P (type))
9865           error ("instantiation of %q+D as type %qT", r, type);
9866
9867         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9868                                         args, complain, in_decl);
9869       }
9870       break;
9871
9872     case USING_DECL:
9873       /* We reach here only for member using decls.  */
9874       if (DECL_DEPENDENT_P (t))
9875         {
9876           r = do_class_using_decl
9877             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
9878              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
9879           if (!r)
9880             r = error_mark_node;
9881           else
9882             {
9883               TREE_PROTECTED (r) = TREE_PROTECTED (t);
9884               TREE_PRIVATE (r) = TREE_PRIVATE (t);
9885             }
9886         }
9887       else
9888         {
9889           r = copy_node (t);
9890           DECL_CHAIN (r) = NULL_TREE;
9891         }
9892       break;
9893
9894     case TYPE_DECL:
9895     case VAR_DECL:
9896       {
9897         tree argvec = NULL_TREE;
9898         tree gen_tmpl = NULL_TREE;
9899         tree spec;
9900         tree tmpl = NULL_TREE;
9901         tree ctx;
9902         tree type = NULL_TREE;
9903         bool local_p;
9904
9905         if (TREE_CODE (t) == TYPE_DECL
9906             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
9907           {
9908             /* If this is the canonical decl, we don't have to
9909                mess with instantiations, and often we can't (for
9910                typename, template type parms and such).  Note that
9911                TYPE_NAME is not correct for the above test if
9912                we've copied the type for a typedef.  */
9913             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9914             if (type == error_mark_node)
9915               RETURN (error_mark_node);
9916             r = TYPE_NAME (type);
9917             break;
9918           }
9919
9920         /* Check to see if we already have the specialization we
9921            need.  */
9922         spec = NULL_TREE;
9923         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
9924           {
9925             /* T is a static data member or namespace-scope entity.
9926                We have to substitute into namespace-scope variables
9927                (even though such entities are never templates) because
9928                of cases like:
9929                
9930                  template <class T> void f() { extern T t; }
9931
9932                where the entity referenced is not known until
9933                instantiation time.  */
9934             local_p = false;
9935             ctx = DECL_CONTEXT (t);
9936             if (DECL_CLASS_SCOPE_P (t))
9937               {
9938                 ctx = tsubst_aggr_type (ctx, args,
9939                                         complain,
9940                                         in_decl, /*entering_scope=*/1);
9941                 /* If CTX is unchanged, then T is in fact the
9942                    specialization we want.  That situation occurs when
9943                    referencing a static data member within in its own
9944                    class.  We can use pointer equality, rather than
9945                    same_type_p, because DECL_CONTEXT is always
9946                    canonical.  */
9947                 if (ctx == DECL_CONTEXT (t))
9948                   spec = t;
9949               }
9950
9951             if (!spec)
9952               {
9953                 tmpl = DECL_TI_TEMPLATE (t);
9954                 gen_tmpl = most_general_template (tmpl);
9955                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
9956                 hash = hash_tmpl_and_args (gen_tmpl, argvec);
9957                 spec = retrieve_specialization (gen_tmpl, argvec, hash);
9958               }
9959           }
9960         else
9961           {
9962             /* A local variable.  */
9963             local_p = true;
9964             /* Subsequent calls to pushdecl will fill this in.  */
9965             ctx = NULL_TREE;
9966             spec = retrieve_local_specialization (t);
9967           }
9968         /* If we already have the specialization we need, there is
9969            nothing more to do.  */ 
9970         if (spec)
9971           {
9972             r = spec;
9973             break;
9974           }
9975
9976         /* Create a new node for the specialization we need.  */
9977         r = copy_decl (t);
9978         if (type == NULL_TREE)
9979           {
9980             if (is_typedef_decl (t))
9981               type = DECL_ORIGINAL_TYPE (t);
9982             else
9983               type = TREE_TYPE (t);
9984             if (TREE_CODE (t) == VAR_DECL && VAR_HAD_UNKNOWN_BOUND (t))
9985               type = strip_array_domain (type);
9986             type = tsubst (type, args, complain, in_decl);
9987           }
9988         if (TREE_CODE (r) == VAR_DECL)
9989           {
9990             /* Even if the original location is out of scope, the
9991                newly substituted one is not.  */
9992             DECL_DEAD_FOR_LOCAL (r) = 0;
9993             DECL_INITIALIZED_P (r) = 0;
9994             DECL_TEMPLATE_INSTANTIATED (r) = 0;
9995             if (type == error_mark_node)
9996               RETURN (error_mark_node);
9997             if (TREE_CODE (type) == FUNCTION_TYPE)
9998               {
9999                 /* It may seem that this case cannot occur, since:
10000
10001                      typedef void f();
10002                      void g() { f x; }
10003
10004                    declares a function, not a variable.  However:
10005       
10006                      typedef void f();
10007                      template <typename T> void g() { T t; }
10008                      template void g<f>();
10009
10010                    is an attempt to declare a variable with function
10011                    type.  */
10012                 error ("variable %qD has function type",
10013                        /* R is not yet sufficiently initialized, so we
10014                           just use its name.  */
10015                        DECL_NAME (r));
10016                 RETURN (error_mark_node);
10017               }
10018             type = complete_type (type);
10019             /* Wait until cp_finish_decl to set this again, to handle
10020                circular dependency (template/instantiate6.C). */
10021             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
10022             type = check_var_type (DECL_NAME (r), type);
10023
10024             if (DECL_HAS_VALUE_EXPR_P (t))
10025               {
10026                 tree ve = DECL_VALUE_EXPR (t);
10027                 ve = tsubst_expr (ve, args, complain, in_decl,
10028                                   /*constant_expression_p=*/false);
10029                 SET_DECL_VALUE_EXPR (r, ve);
10030               }
10031           }
10032         else if (DECL_SELF_REFERENCE_P (t))
10033           SET_DECL_SELF_REFERENCE_P (r);
10034         TREE_TYPE (r) = type;
10035         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10036         DECL_CONTEXT (r) = ctx;
10037         /* Clear out the mangled name and RTL for the instantiation.  */
10038         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10039         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10040           SET_DECL_RTL (r, NULL);
10041         /* The initializer must not be expanded until it is required;
10042            see [temp.inst].  */
10043         DECL_INITIAL (r) = NULL_TREE;
10044         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10045           SET_DECL_RTL (r, NULL);
10046         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
10047         if (TREE_CODE (r) == VAR_DECL)
10048           {
10049             /* Possibly limit visibility based on template args.  */
10050             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10051             if (DECL_VISIBILITY_SPECIFIED (t))
10052               {
10053                 DECL_VISIBILITY_SPECIFIED (r) = 0;
10054                 DECL_ATTRIBUTES (r)
10055                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10056               }
10057             determine_visibility (r);
10058           }
10059
10060         if (!local_p)
10061           {
10062             /* A static data member declaration is always marked
10063                external when it is declared in-class, even if an
10064                initializer is present.  We mimic the non-template
10065                processing here.  */
10066             DECL_EXTERNAL (r) = 1;
10067
10068             register_specialization (r, gen_tmpl, argvec, false, hash);
10069             DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
10070             SET_DECL_IMPLICIT_INSTANTIATION (r);
10071           }
10072         else if (cp_unevaluated_operand)
10073           {
10074             /* We're substituting this var in a decltype outside of its
10075                scope, such as for a lambda return type.  Don't add it to
10076                local_specializations, do perform auto deduction.  */
10077             tree auto_node = type_uses_auto (type);
10078             tree init
10079               = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
10080                              /*constant_expression_p=*/false);
10081
10082             if (auto_node && init)
10083               {
10084                 init = resolve_nondeduced_context (init);
10085                 if (describable_type (init))
10086                   {
10087                     type = do_auto_deduction (type, init, auto_node);
10088                     TREE_TYPE (r) = type;
10089                   }
10090               }
10091           }
10092         else
10093           register_local_specialization (r, t);
10094
10095         DECL_CHAIN (r) = NULL_TREE;
10096
10097         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
10098                                         /*flags=*/0,
10099                                         args, complain, in_decl);
10100
10101         /* Preserve a typedef that names a type.  */
10102         if (is_typedef_decl (r))
10103           {
10104             DECL_ORIGINAL_TYPE (r) = NULL_TREE;
10105             set_underlying_type (r);
10106           }
10107
10108         layout_decl (r, 0);
10109       }
10110       break;
10111
10112     default:
10113       gcc_unreachable ();
10114     }
10115 #undef RETURN
10116
10117  out:
10118   /* Restore the file and line information.  */
10119   input_location = saved_loc;
10120
10121   return r;
10122 }
10123
10124 /* Substitute into the ARG_TYPES of a function type.  */
10125
10126 static tree
10127 tsubst_arg_types (tree arg_types,
10128                   tree args,
10129                   tsubst_flags_t complain,
10130                   tree in_decl)
10131 {
10132   tree remaining_arg_types;
10133   tree type = NULL_TREE;
10134   int i = 1;
10135   tree expanded_args = NULL_TREE;
10136   tree default_arg;
10137
10138   if (!arg_types || arg_types == void_list_node)
10139     return arg_types;
10140
10141   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
10142                                           args, complain, in_decl);
10143   if (remaining_arg_types == error_mark_node)
10144     return error_mark_node;
10145
10146   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
10147     {
10148       /* For a pack expansion, perform substitution on the
10149          entire expression. Later on, we'll handle the arguments
10150          one-by-one.  */
10151       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
10152                                             args, complain, in_decl);
10153
10154       if (TREE_CODE (expanded_args) == TREE_VEC)
10155         /* So that we'll spin through the parameters, one by one.  */
10156         i = TREE_VEC_LENGTH (expanded_args);
10157       else
10158         {
10159           /* We only partially substituted into the parameter
10160              pack. Our type is TYPE_PACK_EXPANSION.  */
10161           type = expanded_args;
10162           expanded_args = NULL_TREE;
10163         }
10164     }
10165
10166   while (i > 0) {
10167     --i;
10168     
10169     if (expanded_args)
10170       type = TREE_VEC_ELT (expanded_args, i);
10171     else if (!type)
10172       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
10173
10174     if (type == error_mark_node)
10175       return error_mark_node;
10176     if (VOID_TYPE_P (type))
10177       {
10178         if (complain & tf_error)
10179           {
10180             error ("invalid parameter type %qT", type);
10181             if (in_decl)
10182               error ("in declaration %q+D", in_decl);
10183           }
10184         return error_mark_node;
10185     }
10186     
10187     /* Do array-to-pointer, function-to-pointer conversion, and ignore
10188        top-level qualifiers as required.  */
10189     type = TYPE_MAIN_VARIANT (type_decays_to (type));
10190
10191     /* We do not substitute into default arguments here.  The standard
10192        mandates that they be instantiated only when needed, which is
10193        done in build_over_call.  */
10194     default_arg = TREE_PURPOSE (arg_types);
10195
10196     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
10197       {
10198         /* We've instantiated a template before its default arguments
10199            have been parsed.  This can happen for a nested template
10200            class, and is not an error unless we require the default
10201            argument in a call of this function.  */
10202         remaining_arg_types = 
10203           tree_cons (default_arg, type, remaining_arg_types);
10204         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
10205                        remaining_arg_types);
10206       }
10207     else
10208       remaining_arg_types = 
10209         hash_tree_cons (default_arg, type, remaining_arg_types);
10210   }
10211         
10212   return remaining_arg_types;
10213 }
10214
10215 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
10216    *not* handle the exception-specification for FNTYPE, because the
10217    initial substitution of explicitly provided template parameters
10218    during argument deduction forbids substitution into the
10219    exception-specification:
10220
10221      [temp.deduct]
10222
10223      All references in the function type of the function template to  the
10224      corresponding template parameters are replaced by the specified tem-
10225      plate argument values.  If a substitution in a template parameter or
10226      in  the function type of the function template results in an invalid
10227      type, type deduction fails.  [Note: The equivalent  substitution  in
10228      exception specifications is done only when the function is instanti-
10229      ated, at which point a program is  ill-formed  if  the  substitution
10230      results in an invalid type.]  */
10231
10232 static tree
10233 tsubst_function_type (tree t,
10234                       tree args,
10235                       tsubst_flags_t complain,
10236                       tree in_decl)
10237 {
10238   tree return_type;
10239   tree arg_types;
10240   tree fntype;
10241
10242   /* The TYPE_CONTEXT is not used for function/method types.  */
10243   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
10244
10245   /* Substitute the return type.  */
10246   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10247   if (return_type == error_mark_node)
10248     return error_mark_node;
10249   /* The standard does not presently indicate that creation of a
10250      function type with an invalid return type is a deduction failure.
10251      However, that is clearly analogous to creating an array of "void"
10252      or a reference to a reference.  This is core issue #486.  */
10253   if (TREE_CODE (return_type) == ARRAY_TYPE
10254       || TREE_CODE (return_type) == FUNCTION_TYPE)
10255     {
10256       if (complain & tf_error)
10257         {
10258           if (TREE_CODE (return_type) == ARRAY_TYPE)
10259             error ("function returning an array");
10260           else
10261             error ("function returning a function");
10262         }
10263       return error_mark_node;
10264     }
10265
10266   /* Substitute the argument types.  */
10267   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
10268                                 complain, in_decl);
10269   if (arg_types == error_mark_node)
10270     return error_mark_node;
10271
10272   /* Construct a new type node and return it.  */
10273   if (TREE_CODE (t) == FUNCTION_TYPE)
10274     {
10275       fntype = build_function_type (return_type, arg_types);
10276       fntype = apply_memfn_quals (fntype, type_memfn_quals (t));
10277     }
10278   else
10279     {
10280       tree r = TREE_TYPE (TREE_VALUE (arg_types));
10281       if (! MAYBE_CLASS_TYPE_P (r))
10282         {
10283           /* [temp.deduct]
10284
10285              Type deduction may fail for any of the following
10286              reasons:
10287
10288              -- Attempting to create "pointer to member of T" when T
10289              is not a class type.  */
10290           if (complain & tf_error)
10291             error ("creating pointer to member function of non-class type %qT",
10292                       r);
10293           return error_mark_node;
10294         }
10295
10296       fntype = build_method_type_directly (r, return_type,
10297                                            TREE_CHAIN (arg_types));
10298     }
10299   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
10300
10301   return fntype;
10302 }
10303
10304 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
10305    ARGS into that specification, and return the substituted
10306    specification.  If there is no specification, return NULL_TREE.  */
10307
10308 static tree
10309 tsubst_exception_specification (tree fntype,
10310                                 tree args,
10311                                 tsubst_flags_t complain,
10312                                 tree in_decl)
10313 {
10314   tree specs;
10315   tree new_specs;
10316
10317   specs = TYPE_RAISES_EXCEPTIONS (fntype);
10318   new_specs = NULL_TREE;
10319   if (specs && TREE_PURPOSE (specs))
10320     {
10321       /* A noexcept-specifier.  */
10322       new_specs = tsubst_copy_and_build
10323         (TREE_PURPOSE (specs), args, complain, in_decl, /*function_p=*/false,
10324          /*integral_constant_expression_p=*/true);
10325       new_specs = build_noexcept_spec (new_specs, complain);
10326     }
10327   else if (specs)
10328     {
10329       if (! TREE_VALUE (specs))
10330         new_specs = specs;
10331       else
10332         while (specs)
10333           {
10334             tree spec;
10335             int i, len = 1;
10336             tree expanded_specs = NULL_TREE;
10337
10338             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
10339               {
10340                 /* Expand the pack expansion type.  */
10341                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
10342                                                        args, complain,
10343                                                        in_decl);
10344
10345                 if (expanded_specs == error_mark_node)
10346                   return error_mark_node;
10347                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
10348                   len = TREE_VEC_LENGTH (expanded_specs);
10349                 else
10350                   {
10351                     /* We're substituting into a member template, so
10352                        we got a TYPE_PACK_EXPANSION back.  Add that
10353                        expansion and move on.  */
10354                     gcc_assert (TREE_CODE (expanded_specs) 
10355                                 == TYPE_PACK_EXPANSION);
10356                     new_specs = add_exception_specifier (new_specs,
10357                                                          expanded_specs,
10358                                                          complain);
10359                     specs = TREE_CHAIN (specs);
10360                     continue;
10361                   }
10362               }
10363
10364             for (i = 0; i < len; ++i)
10365               {
10366                 if (expanded_specs)
10367                   spec = TREE_VEC_ELT (expanded_specs, i);
10368                 else
10369                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
10370                 if (spec == error_mark_node)
10371                   return spec;
10372                 new_specs = add_exception_specifier (new_specs, spec, 
10373                                                      complain);
10374               }
10375
10376             specs = TREE_CHAIN (specs);
10377           }
10378     }
10379   return new_specs;
10380 }
10381
10382 /* Take the tree structure T and replace template parameters used
10383    therein with the argument vector ARGS.  IN_DECL is an associated
10384    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
10385    Issue error and warning messages under control of COMPLAIN.  Note
10386    that we must be relatively non-tolerant of extensions here, in
10387    order to preserve conformance; if we allow substitutions that
10388    should not be allowed, we may allow argument deductions that should
10389    not succeed, and therefore report ambiguous overload situations
10390    where there are none.  In theory, we could allow the substitution,
10391    but indicate that it should have failed, and allow our caller to
10392    make sure that the right thing happens, but we don't try to do this
10393    yet.
10394
10395    This function is used for dealing with types, decls and the like;
10396    for expressions, use tsubst_expr or tsubst_copy.  */
10397
10398 tree
10399 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10400 {
10401   enum tree_code code;
10402   tree type, r;
10403
10404   if (t == NULL_TREE || t == error_mark_node
10405       || t == integer_type_node
10406       || t == void_type_node
10407       || t == char_type_node
10408       || t == unknown_type_node
10409       || TREE_CODE (t) == NAMESPACE_DECL
10410       || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
10411     return t;
10412
10413   if (DECL_P (t))
10414     return tsubst_decl (t, args, complain);
10415
10416   if (args == NULL_TREE)
10417     return t;
10418
10419   code = TREE_CODE (t);
10420
10421   if (code == IDENTIFIER_NODE)
10422     type = IDENTIFIER_TYPE_VALUE (t);
10423   else
10424     type = TREE_TYPE (t);
10425
10426   gcc_assert (type != unknown_type_node);
10427
10428   /* Reuse typedefs.  We need to do this to handle dependent attributes,
10429      such as attribute aligned.  */
10430   if (TYPE_P (t)
10431       && typedef_variant_p (t))
10432     {
10433       tree decl = TYPE_NAME (t);
10434       
10435       if (DECL_CLASS_SCOPE_P (decl)
10436           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
10437           && uses_template_parms (DECL_CONTEXT (decl)))
10438         {
10439           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
10440           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
10441           r = retrieve_specialization (tmpl, gen_args, 0);
10442         }
10443       else if (DECL_FUNCTION_SCOPE_P (decl)
10444                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
10445                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
10446         r = retrieve_local_specialization (decl);
10447       else
10448         /* The typedef is from a non-template context.  */
10449         return t;
10450
10451       if (r)
10452         {
10453           r = TREE_TYPE (r);
10454           r = cp_build_qualified_type_real
10455             (r, cp_type_quals (t) | cp_type_quals (r),
10456              complain | tf_ignore_bad_quals);
10457           return r;
10458         }
10459       /* Else we must be instantiating the typedef, so fall through.  */
10460     }
10461
10462   if (type
10463       && code != TYPENAME_TYPE
10464       && code != TEMPLATE_TYPE_PARM
10465       && code != IDENTIFIER_NODE
10466       && code != FUNCTION_TYPE
10467       && code != METHOD_TYPE)
10468     type = tsubst (type, args, complain, in_decl);
10469   if (type == error_mark_node)
10470     return error_mark_node;
10471
10472   switch (code)
10473     {
10474     case RECORD_TYPE:
10475     case UNION_TYPE:
10476     case ENUMERAL_TYPE:
10477       return tsubst_aggr_type (t, args, complain, in_decl,
10478                                /*entering_scope=*/0);
10479
10480     case ERROR_MARK:
10481     case IDENTIFIER_NODE:
10482     case VOID_TYPE:
10483     case REAL_TYPE:
10484     case COMPLEX_TYPE:
10485     case VECTOR_TYPE:
10486     case BOOLEAN_TYPE:
10487     case NULLPTR_TYPE:
10488     case LANG_TYPE:
10489       return t;
10490
10491     case INTEGER_TYPE:
10492       if (t == integer_type_node)
10493         return t;
10494
10495       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
10496           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
10497         return t;
10498
10499       {
10500         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
10501
10502         max = tsubst_expr (omax, args, complain, in_decl,
10503                            /*integral_constant_expression_p=*/false);
10504
10505         /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
10506            needed.  */
10507         if (TREE_CODE (max) == NOP_EXPR
10508             && TREE_SIDE_EFFECTS (omax)
10509             && !TREE_TYPE (max))
10510           TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
10511
10512         /* If we're in a partial instantiation, preserve the magic NOP_EXPR
10513            with TREE_SIDE_EFFECTS that indicates this is not an integral
10514            constant expression.  */
10515         if (processing_template_decl
10516             && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
10517           {
10518             gcc_assert (TREE_CODE (max) == NOP_EXPR);
10519             TREE_SIDE_EFFECTS (max) = 1;
10520           }
10521
10522         return compute_array_index_type (NULL_TREE, max, complain);
10523       }
10524
10525     case TEMPLATE_TYPE_PARM:
10526     case TEMPLATE_TEMPLATE_PARM:
10527     case BOUND_TEMPLATE_TEMPLATE_PARM:
10528     case TEMPLATE_PARM_INDEX:
10529       {
10530         int idx;
10531         int level;
10532         int levels;
10533         tree arg = NULL_TREE;
10534
10535         r = NULL_TREE;
10536
10537         gcc_assert (TREE_VEC_LENGTH (args) > 0);
10538         template_parm_level_and_index (t, &level, &idx); 
10539
10540         levels = TMPL_ARGS_DEPTH (args);
10541         if (level <= levels)
10542           {
10543             arg = TMPL_ARG (args, level, idx);
10544
10545             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
10546               /* See through ARGUMENT_PACK_SELECT arguments. */
10547               arg = ARGUMENT_PACK_SELECT_ARG (arg);
10548           }
10549
10550         if (arg == error_mark_node)
10551           return error_mark_node;
10552         else if (arg != NULL_TREE)
10553           {
10554             if (ARGUMENT_PACK_P (arg))
10555               /* If ARG is an argument pack, we don't actually want to
10556                  perform a substitution here, because substitutions
10557                  for argument packs are only done
10558                  element-by-element. We can get to this point when
10559                  substituting the type of a non-type template
10560                  parameter pack, when that type actually contains
10561                  template parameter packs from an outer template, e.g.,
10562
10563                  template<typename... Types> struct A {
10564                    template<Types... Values> struct B { };
10565                  };  */
10566               return t;
10567
10568             if (code == TEMPLATE_TYPE_PARM)
10569               {
10570                 int quals;
10571                 gcc_assert (TYPE_P (arg));
10572
10573                 quals = cp_type_quals (arg) | cp_type_quals (t);
10574                   
10575                 return cp_build_qualified_type_real
10576                   (arg, quals, complain | tf_ignore_bad_quals);
10577               }
10578             else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
10579               {
10580                 /* We are processing a type constructed from a
10581                    template template parameter.  */
10582                 tree argvec = tsubst (TYPE_TI_ARGS (t),
10583                                       args, complain, in_decl);
10584                 if (argvec == error_mark_node)
10585                   return error_mark_node;
10586
10587                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
10588                    are resolving nested-types in the signature of a
10589                    member function templates.  Otherwise ARG is a
10590                    TEMPLATE_DECL and is the real template to be
10591                    instantiated.  */
10592                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
10593                   arg = TYPE_NAME (arg);
10594
10595                 r = lookup_template_class (arg,
10596                                            argvec, in_decl,
10597                                            DECL_CONTEXT (arg),
10598                                             /*entering_scope=*/0,
10599                                            complain);
10600                 return cp_build_qualified_type_real
10601                   (r, cp_type_quals (t), complain);
10602               }
10603             else
10604               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
10605               return unshare_expr (arg);
10606           }
10607
10608         if (level == 1)
10609           /* This can happen during the attempted tsubst'ing in
10610              unify.  This means that we don't yet have any information
10611              about the template parameter in question.  */
10612           return t;
10613
10614         /* If we get here, we must have been looking at a parm for a
10615            more deeply nested template.  Make a new version of this
10616            template parameter, but with a lower level.  */
10617         switch (code)
10618           {
10619           case TEMPLATE_TYPE_PARM:
10620           case TEMPLATE_TEMPLATE_PARM:
10621           case BOUND_TEMPLATE_TEMPLATE_PARM:
10622             if (cp_type_quals (t))
10623               {
10624                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
10625                 r = cp_build_qualified_type_real
10626                   (r, cp_type_quals (t),
10627                    complain | (code == TEMPLATE_TYPE_PARM
10628                                ? tf_ignore_bad_quals : 0));
10629               }
10630             else
10631               {
10632                 r = copy_type (t);
10633                 TEMPLATE_TYPE_PARM_INDEX (r)
10634                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
10635                                                 r, levels, args, complain);
10636                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
10637                 TYPE_MAIN_VARIANT (r) = r;
10638                 TYPE_POINTER_TO (r) = NULL_TREE;
10639                 TYPE_REFERENCE_TO (r) = NULL_TREE;
10640
10641                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
10642                   /* We have reduced the level of the template
10643                      template parameter, but not the levels of its
10644                      template parameters, so canonical_type_parameter
10645                      will not be able to find the canonical template
10646                      template parameter for this level. Thus, we
10647                      require structural equality checking to compare
10648                      TEMPLATE_TEMPLATE_PARMs. */
10649                   SET_TYPE_STRUCTURAL_EQUALITY (r);
10650                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
10651                   SET_TYPE_STRUCTURAL_EQUALITY (r);
10652                 else
10653                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
10654
10655                 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
10656                   {
10657                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
10658                                           complain, in_decl);
10659                     if (argvec == error_mark_node)
10660                       return error_mark_node;
10661
10662                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
10663                       = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
10664                   }
10665               }
10666             break;
10667
10668           case TEMPLATE_PARM_INDEX:
10669             r = reduce_template_parm_level (t, type, levels, args, complain);
10670             break;
10671
10672           default:
10673             gcc_unreachable ();
10674           }
10675
10676         return r;
10677       }
10678
10679     case TREE_LIST:
10680       {
10681         tree purpose, value, chain;
10682
10683         if (t == void_list_node)
10684           return t;
10685
10686         purpose = TREE_PURPOSE (t);
10687         if (purpose)
10688           {
10689             purpose = tsubst (purpose, args, complain, in_decl);
10690             if (purpose == error_mark_node)
10691               return error_mark_node;
10692           }
10693         value = TREE_VALUE (t);
10694         if (value)
10695           {
10696             value = tsubst (value, args, complain, in_decl);
10697             if (value == error_mark_node)
10698               return error_mark_node;
10699           }
10700         chain = TREE_CHAIN (t);
10701         if (chain && chain != void_type_node)
10702           {
10703             chain = tsubst (chain, args, complain, in_decl);
10704             if (chain == error_mark_node)
10705               return error_mark_node;
10706           }
10707         if (purpose == TREE_PURPOSE (t)
10708             && value == TREE_VALUE (t)
10709             && chain == TREE_CHAIN (t))
10710           return t;
10711         return hash_tree_cons (purpose, value, chain);
10712       }
10713
10714     case TREE_BINFO:
10715       /* We should never be tsubsting a binfo.  */
10716       gcc_unreachable ();
10717
10718     case TREE_VEC:
10719       /* A vector of template arguments.  */
10720       gcc_assert (!type);
10721       return tsubst_template_args (t, args, complain, in_decl);
10722
10723     case POINTER_TYPE:
10724     case REFERENCE_TYPE:
10725       {
10726         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
10727           return t;
10728
10729         /* [temp.deduct]
10730
10731            Type deduction may fail for any of the following
10732            reasons:
10733
10734            -- Attempting to create a pointer to reference type.
10735            -- Attempting to create a reference to a reference type or
10736               a reference to void.
10737
10738           Core issue 106 says that creating a reference to a reference
10739           during instantiation is no longer a cause for failure. We
10740           only enforce this check in strict C++98 mode.  */
10741         if ((TREE_CODE (type) == REFERENCE_TYPE
10742              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
10743             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
10744           {
10745             static location_t last_loc;
10746
10747             /* We keep track of the last time we issued this error
10748                message to avoid spewing a ton of messages during a
10749                single bad template instantiation.  */
10750             if (complain & tf_error
10751                 && last_loc != input_location)
10752               {
10753                 if (TREE_CODE (type) == VOID_TYPE)
10754                   error ("forming reference to void");
10755                else if (code == POINTER_TYPE)
10756                  error ("forming pointer to reference type %qT", type);
10757                else
10758                   error ("forming reference to reference type %qT", type);
10759                 last_loc = input_location;
10760               }
10761
10762             return error_mark_node;
10763           }
10764         else if (code == POINTER_TYPE)
10765           {
10766             r = build_pointer_type (type);
10767             if (TREE_CODE (type) == METHOD_TYPE)
10768               r = build_ptrmemfunc_type (r);
10769           }
10770         else if (TREE_CODE (type) == REFERENCE_TYPE)
10771           /* In C++0x, during template argument substitution, when there is an
10772              attempt to create a reference to a reference type, reference
10773              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
10774
10775              "If a template-argument for a template-parameter T names a type
10776              that is a reference to a type A, an attempt to create the type
10777              'lvalue reference to cv T' creates the type 'lvalue reference to
10778              A,' while an attempt to create the type type rvalue reference to
10779              cv T' creates the type T"
10780           */
10781           r = cp_build_reference_type
10782               (TREE_TYPE (type),
10783                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
10784         else
10785           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
10786         r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
10787
10788         if (r != error_mark_node)
10789           /* Will this ever be needed for TYPE_..._TO values?  */
10790           layout_type (r);
10791
10792         return r;
10793       }
10794     case OFFSET_TYPE:
10795       {
10796         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
10797         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
10798           {
10799             /* [temp.deduct]
10800
10801                Type deduction may fail for any of the following
10802                reasons:
10803
10804                -- Attempting to create "pointer to member of T" when T
10805                   is not a class type.  */
10806             if (complain & tf_error)
10807               error ("creating pointer to member of non-class type %qT", r);
10808             return error_mark_node;
10809           }
10810         if (TREE_CODE (type) == REFERENCE_TYPE)
10811           {
10812             if (complain & tf_error)
10813               error ("creating pointer to member reference type %qT", type);
10814             return error_mark_node;
10815           }
10816         if (TREE_CODE (type) == VOID_TYPE)
10817           {
10818             if (complain & tf_error)
10819               error ("creating pointer to member of type void");
10820             return error_mark_node;
10821           }
10822         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
10823         if (TREE_CODE (type) == FUNCTION_TYPE)
10824           {
10825             /* The type of the implicit object parameter gets its
10826                cv-qualifiers from the FUNCTION_TYPE. */
10827             tree memptr;
10828             tree method_type = build_memfn_type (type, r, type_memfn_quals (type));
10829             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
10830             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
10831                                                  complain);
10832           }
10833         else
10834           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
10835                                                cp_type_quals (t),
10836                                                complain);
10837       }
10838     case FUNCTION_TYPE:
10839     case METHOD_TYPE:
10840       {
10841         tree fntype;
10842         tree specs;
10843         fntype = tsubst_function_type (t, args, complain, in_decl);
10844         if (fntype == error_mark_node)
10845           return error_mark_node;
10846
10847         /* Substitute the exception specification.  */
10848         specs = tsubst_exception_specification (t, args, complain,
10849                                                 in_decl);
10850         if (specs == error_mark_node)
10851           return error_mark_node;
10852         if (specs)
10853           fntype = build_exception_variant (fntype, specs);
10854         return fntype;
10855       }
10856     case ARRAY_TYPE:
10857       {
10858         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
10859         if (domain == error_mark_node)
10860           return error_mark_node;
10861
10862         /* As an optimization, we avoid regenerating the array type if
10863            it will obviously be the same as T.  */
10864         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
10865           return t;
10866
10867         /* These checks should match the ones in grokdeclarator.
10868
10869            [temp.deduct]
10870
10871            The deduction may fail for any of the following reasons:
10872
10873            -- Attempting to create an array with an element type that
10874               is void, a function type, or a reference type, or [DR337]
10875               an abstract class type.  */
10876         if (TREE_CODE (type) == VOID_TYPE
10877             || TREE_CODE (type) == FUNCTION_TYPE
10878             || TREE_CODE (type) == REFERENCE_TYPE)
10879           {
10880             if (complain & tf_error)
10881               error ("creating array of %qT", type);
10882             return error_mark_node;
10883           }
10884         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
10885           {
10886             if (complain & tf_error)
10887               error ("creating array of %qT, which is an abstract class type",
10888                      type);
10889             return error_mark_node;
10890           }
10891
10892         r = build_cplus_array_type (type, domain);
10893
10894         if (TYPE_USER_ALIGN (t))
10895           {
10896             TYPE_ALIGN (r) = TYPE_ALIGN (t);
10897             TYPE_USER_ALIGN (r) = 1;
10898           }
10899
10900         return r;
10901       }
10902
10903     case TYPENAME_TYPE:
10904       {
10905         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
10906                                      in_decl, /*entering_scope=*/1);
10907         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
10908                               complain, in_decl);
10909
10910         if (ctx == error_mark_node || f == error_mark_node)
10911           return error_mark_node;
10912
10913         if (!MAYBE_CLASS_TYPE_P (ctx))
10914           {
10915             if (complain & tf_error)
10916               error ("%qT is not a class, struct, or union type", ctx);
10917             return error_mark_node;
10918           }
10919         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
10920           {
10921             /* Normally, make_typename_type does not require that the CTX
10922                have complete type in order to allow things like:
10923
10924                  template <class T> struct S { typename S<T>::X Y; };
10925
10926                But, such constructs have already been resolved by this
10927                point, so here CTX really should have complete type, unless
10928                it's a partial instantiation.  */
10929             ctx = complete_type (ctx);
10930             if (!COMPLETE_TYPE_P (ctx))
10931               {
10932                 if (complain & tf_error)
10933                   cxx_incomplete_type_error (NULL_TREE, ctx);
10934                 return error_mark_node;
10935               }
10936           }
10937
10938         f = make_typename_type (ctx, f, typename_type,
10939                                 (complain & tf_error) | tf_keep_type_decl);
10940         if (f == error_mark_node)
10941           return f;
10942         if (TREE_CODE (f) == TYPE_DECL)
10943           {
10944             complain |= tf_ignore_bad_quals;
10945             f = TREE_TYPE (f);
10946           }
10947
10948         if (TREE_CODE (f) != TYPENAME_TYPE)
10949           {
10950             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
10951               {
10952                 if (complain & tf_error)
10953                   error ("%qT resolves to %qT, which is not an enumeration type",
10954                          t, f);
10955                 else
10956                   return error_mark_node;
10957               }
10958             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
10959               {
10960                 if (complain & tf_error)
10961                   error ("%qT resolves to %qT, which is is not a class type",
10962                          t, f);
10963                 else
10964                   return error_mark_node;
10965               }
10966           }
10967
10968         return cp_build_qualified_type_real
10969           (f, cp_type_quals (f) | cp_type_quals (t), complain);
10970       }
10971
10972     case UNBOUND_CLASS_TEMPLATE:
10973       {
10974         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
10975                                      in_decl, /*entering_scope=*/1);
10976         tree name = TYPE_IDENTIFIER (t);
10977         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
10978
10979         if (ctx == error_mark_node || name == error_mark_node)
10980           return error_mark_node;
10981
10982         if (parm_list)
10983           parm_list = tsubst_template_parms (parm_list, args, complain);
10984         return make_unbound_class_template (ctx, name, parm_list, complain);
10985       }
10986
10987     case TYPEOF_TYPE:
10988       {
10989         tree type;
10990
10991         ++cp_unevaluated_operand;
10992         ++c_inhibit_evaluation_warnings;
10993
10994         type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
10995                             complain, in_decl,
10996                             /*integral_constant_expression_p=*/false);
10997
10998         --cp_unevaluated_operand;
10999         --c_inhibit_evaluation_warnings;
11000
11001         type = finish_typeof (type);
11002         return cp_build_qualified_type_real (type,
11003                                              cp_type_quals (t)
11004                                              | cp_type_quals (type),
11005                                              complain);
11006       }
11007
11008     case DECLTYPE_TYPE:
11009       {
11010         tree type;
11011
11012         ++cp_unevaluated_operand;
11013         ++c_inhibit_evaluation_warnings;
11014
11015         type = tsubst_expr (DECLTYPE_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         if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
11023           type = lambda_capture_field_type (type);
11024         else if (DECLTYPE_FOR_LAMBDA_RETURN (t))
11025           type = lambda_return_type (type);
11026         else
11027           type = finish_decltype_type
11028             (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t), complain);
11029         return cp_build_qualified_type_real (type,
11030                                              cp_type_quals (t)
11031                                              | cp_type_quals (type),
11032                                              complain);
11033       }
11034
11035     case TYPE_ARGUMENT_PACK:
11036     case NONTYPE_ARGUMENT_PACK:
11037       {
11038         tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
11039         tree packed_out = 
11040           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
11041                                 args,
11042                                 complain,
11043                                 in_decl);
11044         SET_ARGUMENT_PACK_ARGS (r, packed_out);
11045
11046         /* For template nontype argument packs, also substitute into
11047            the type.  */
11048         if (code == NONTYPE_ARGUMENT_PACK)
11049           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
11050
11051         return r;
11052       }
11053       break;
11054
11055     case INTEGER_CST:
11056     case REAL_CST:
11057     case STRING_CST:
11058     case PLUS_EXPR:
11059     case MINUS_EXPR:
11060     case NEGATE_EXPR:
11061     case NOP_EXPR:
11062     case INDIRECT_REF:
11063     case ADDR_EXPR:
11064     case CALL_EXPR:
11065     case ARRAY_REF:
11066     case SCOPE_REF:
11067       /* We should use one of the expression tsubsts for these codes.  */
11068       gcc_unreachable ();
11069
11070     default:
11071       sorry ("use of %qs in template", tree_code_name [(int) code]);
11072       return error_mark_node;
11073     }
11074 }
11075
11076 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
11077    type of the expression on the left-hand side of the "." or "->"
11078    operator.  */
11079
11080 static tree
11081 tsubst_baselink (tree baselink, tree object_type,
11082                  tree args, tsubst_flags_t complain, tree in_decl)
11083 {
11084     tree name;
11085     tree qualifying_scope;
11086     tree fns;
11087     tree optype;
11088     tree template_args = 0;
11089     bool template_id_p = false;
11090
11091     /* A baselink indicates a function from a base class.  Both the
11092        BASELINK_ACCESS_BINFO and the base class referenced may
11093        indicate bases of the template class, rather than the
11094        instantiated class.  In addition, lookups that were not
11095        ambiguous before may be ambiguous now.  Therefore, we perform
11096        the lookup again.  */
11097     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
11098     qualifying_scope = tsubst (qualifying_scope, args,
11099                                complain, in_decl);
11100     fns = BASELINK_FUNCTIONS (baselink);
11101     optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
11102     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
11103       {
11104         template_id_p = true;
11105         template_args = TREE_OPERAND (fns, 1);
11106         fns = TREE_OPERAND (fns, 0);
11107         if (template_args)
11108           template_args = tsubst_template_args (template_args, args,
11109                                                 complain, in_decl);
11110       }
11111     name = DECL_NAME (get_first_fn (fns));
11112     if (IDENTIFIER_TYPENAME_P (name))
11113       name = mangle_conv_op_name_for_type (optype);
11114     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
11115     if (!baselink)
11116       return error_mark_node;
11117
11118     /* If lookup found a single function, mark it as used at this
11119        point.  (If it lookup found multiple functions the one selected
11120        later by overload resolution will be marked as used at that
11121        point.)  */
11122     if (BASELINK_P (baselink))
11123       fns = BASELINK_FUNCTIONS (baselink);
11124     if (!template_id_p && !really_overloaded_fn (fns))
11125       mark_used (OVL_CURRENT (fns));
11126
11127     /* Add back the template arguments, if present.  */
11128     if (BASELINK_P (baselink) && template_id_p)
11129       BASELINK_FUNCTIONS (baselink)
11130         = build_nt (TEMPLATE_ID_EXPR,
11131                     BASELINK_FUNCTIONS (baselink),
11132                     template_args);
11133     /* Update the conversion operator type.  */
11134     BASELINK_OPTYPE (baselink) = optype;
11135
11136     if (!object_type)
11137       object_type = current_class_type;
11138     return adjust_result_of_qualified_name_lookup (baselink,
11139                                                    qualifying_scope,
11140                                                    object_type);
11141 }
11142
11143 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
11144    true if the qualified-id will be a postfix-expression in-and-of
11145    itself; false if more of the postfix-expression follows the
11146    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
11147    of "&".  */
11148
11149 static tree
11150 tsubst_qualified_id (tree qualified_id, tree args,
11151                      tsubst_flags_t complain, tree in_decl,
11152                      bool done, bool address_p)
11153 {
11154   tree expr;
11155   tree scope;
11156   tree name;
11157   bool is_template;
11158   tree template_args;
11159
11160   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
11161
11162   /* Figure out what name to look up.  */
11163   name = TREE_OPERAND (qualified_id, 1);
11164   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11165     {
11166       is_template = true;
11167       template_args = TREE_OPERAND (name, 1);
11168       if (template_args)
11169         template_args = tsubst_template_args (template_args, args,
11170                                               complain, in_decl);
11171       name = TREE_OPERAND (name, 0);
11172     }
11173   else
11174     {
11175       is_template = false;
11176       template_args = NULL_TREE;
11177     }
11178
11179   /* Substitute into the qualifying scope.  When there are no ARGS, we
11180      are just trying to simplify a non-dependent expression.  In that
11181      case the qualifying scope may be dependent, and, in any case,
11182      substituting will not help.  */
11183   scope = TREE_OPERAND (qualified_id, 0);
11184   if (args)
11185     {
11186       scope = tsubst (scope, args, complain, in_decl);
11187       expr = tsubst_copy (name, args, complain, in_decl);
11188     }
11189   else
11190     expr = name;
11191
11192   if (dependent_scope_p (scope))
11193     return build_qualified_name (NULL_TREE, scope, expr,
11194                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
11195
11196   if (!BASELINK_P (name) && !DECL_P (expr))
11197     {
11198       if (TREE_CODE (expr) == BIT_NOT_EXPR)
11199         {
11200           /* A BIT_NOT_EXPR is used to represent a destructor.  */
11201           if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
11202             {
11203               error ("qualifying type %qT does not match destructor name ~%qT",
11204                      scope, TREE_OPERAND (expr, 0));
11205               expr = error_mark_node;
11206             }
11207           else
11208             expr = lookup_qualified_name (scope, complete_dtor_identifier,
11209                                           /*is_type_p=*/0, false);
11210         }
11211       else
11212         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
11213       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
11214                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
11215         {
11216           if (complain & tf_error)
11217             {
11218               error ("dependent-name %qE is parsed as a non-type, but "
11219                      "instantiation yields a type", qualified_id);
11220               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
11221             }
11222           return error_mark_node;
11223         }
11224     }
11225
11226   if (DECL_P (expr))
11227     {
11228       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
11229                                            scope);
11230       /* Remember that there was a reference to this entity.  */
11231       mark_used (expr);
11232     }
11233
11234   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
11235     {
11236       if (complain & tf_error)
11237         qualified_name_lookup_error (scope,
11238                                      TREE_OPERAND (qualified_id, 1),
11239                                      expr, input_location);
11240       return error_mark_node;
11241     }
11242
11243   if (is_template)
11244     expr = lookup_template_function (expr, template_args);
11245
11246   if (expr == error_mark_node && complain & tf_error)
11247     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
11248                                  expr, input_location);
11249   else if (TYPE_P (scope))
11250     {
11251       expr = (adjust_result_of_qualified_name_lookup
11252               (expr, scope, current_class_type));
11253       expr = (finish_qualified_id_expr
11254               (scope, expr, done, address_p,
11255                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
11256                /*template_arg_p=*/false));
11257     }
11258
11259   /* Expressions do not generally have reference type.  */
11260   if (TREE_CODE (expr) != SCOPE_REF
11261       /* However, if we're about to form a pointer-to-member, we just
11262          want the referenced member referenced.  */
11263       && TREE_CODE (expr) != OFFSET_REF)
11264     expr = convert_from_reference (expr);
11265
11266   return expr;
11267 }
11268
11269 /* Like tsubst, but deals with expressions.  This function just replaces
11270    template parms; to finish processing the resultant expression, use
11271    tsubst_expr.  */
11272
11273 static tree
11274 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11275 {
11276   enum tree_code code;
11277   tree r;
11278
11279   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
11280     return t;
11281
11282   code = TREE_CODE (t);
11283
11284   switch (code)
11285     {
11286     case PARM_DECL:
11287       r = retrieve_local_specialization (t);
11288
11289       if (r == NULL)
11290         {
11291           tree c;
11292           /* This can happen for a parameter name used later in a function
11293              declaration (such as in a late-specified return type).  Just
11294              make a dummy decl, since it's only used for its type.  */
11295           gcc_assert (cp_unevaluated_operand != 0);
11296           /* We copy T because want to tsubst the PARM_DECL only,
11297              not the following PARM_DECLs that are chained to T.  */
11298           c = copy_node (t);
11299           r = tsubst_decl (c, args, complain);
11300           /* Give it the template pattern as its context; its true context
11301              hasn't been instantiated yet and this is good enough for
11302              mangling.  */
11303           DECL_CONTEXT (r) = DECL_CONTEXT (t);
11304         }
11305       
11306       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
11307         r = ARGUMENT_PACK_SELECT_ARG (r);
11308       mark_used (r);
11309       return r;
11310
11311     case CONST_DECL:
11312       {
11313         tree enum_type;
11314         tree v;
11315
11316         if (DECL_TEMPLATE_PARM_P (t))
11317           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
11318         /* There is no need to substitute into namespace-scope
11319            enumerators.  */
11320         if (DECL_NAMESPACE_SCOPE_P (t))
11321           return t;
11322         /* If ARGS is NULL, then T is known to be non-dependent.  */
11323         if (args == NULL_TREE)
11324           return integral_constant_value (t);
11325
11326         /* Unfortunately, we cannot just call lookup_name here.
11327            Consider:
11328
11329              template <int I> int f() {
11330              enum E { a = I };
11331              struct S { void g() { E e = a; } };
11332              };
11333
11334            When we instantiate f<7>::S::g(), say, lookup_name is not
11335            clever enough to find f<7>::a.  */
11336         enum_type
11337           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
11338                               /*entering_scope=*/0);
11339
11340         for (v = TYPE_VALUES (enum_type);
11341              v != NULL_TREE;
11342              v = TREE_CHAIN (v))
11343           if (TREE_PURPOSE (v) == DECL_NAME (t))
11344             return TREE_VALUE (v);
11345
11346           /* We didn't find the name.  That should never happen; if
11347              name-lookup found it during preliminary parsing, we
11348              should find it again here during instantiation.  */
11349         gcc_unreachable ();
11350       }
11351       return t;
11352
11353     case FIELD_DECL:
11354       if (DECL_CONTEXT (t))
11355         {
11356           tree ctx;
11357
11358           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
11359                                   /*entering_scope=*/1);
11360           if (ctx != DECL_CONTEXT (t))
11361             {
11362               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
11363               if (!r)
11364                 {
11365                   if (complain & tf_error)
11366                     error ("using invalid field %qD", t);
11367                   return error_mark_node;
11368                 }
11369               return r;
11370             }
11371         }
11372
11373       return t;
11374
11375     case VAR_DECL:
11376     case FUNCTION_DECL:
11377       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
11378           || local_variable_p (t))
11379         t = tsubst (t, args, complain, in_decl);
11380       mark_used (t);
11381       return t;
11382
11383     case OVERLOAD:
11384       /* An OVERLOAD will always be a non-dependent overload set; an
11385          overload set from function scope will just be represented with an
11386          IDENTIFIER_NODE, and from class scope with a BASELINK.  */
11387       gcc_assert (!uses_template_parms (t));
11388       return t;
11389
11390     case BASELINK:
11391       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
11392
11393     case TEMPLATE_DECL:
11394       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
11395         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
11396                        args, complain, in_decl);
11397       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
11398         return tsubst (t, args, complain, in_decl);
11399       else if (DECL_CLASS_SCOPE_P (t)
11400                && uses_template_parms (DECL_CONTEXT (t)))
11401         {
11402           /* Template template argument like the following example need
11403              special treatment:
11404
11405                template <template <class> class TT> struct C {};
11406                template <class T> struct D {
11407                  template <class U> struct E {};
11408                  C<E> c;                                // #1
11409                };
11410                D<int> d;                                // #2
11411
11412              We are processing the template argument `E' in #1 for
11413              the template instantiation #2.  Originally, `E' is a
11414              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
11415              have to substitute this with one having context `D<int>'.  */
11416
11417           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
11418           return lookup_field (context, DECL_NAME(t), 0, false);
11419         }
11420       else
11421         /* Ordinary template template argument.  */
11422         return t;
11423
11424     case CAST_EXPR:
11425     case REINTERPRET_CAST_EXPR:
11426     case CONST_CAST_EXPR:
11427     case STATIC_CAST_EXPR:
11428     case DYNAMIC_CAST_EXPR:
11429     case NOP_EXPR:
11430       return build1
11431         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11432          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
11433
11434     case SIZEOF_EXPR:
11435       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
11436         {
11437
11438           tree expanded;
11439           int len = 0;
11440
11441           ++cp_unevaluated_operand;
11442           ++c_inhibit_evaluation_warnings;
11443           /* We only want to compute the number of arguments.  */
11444           expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
11445                                             complain, in_decl);
11446           --cp_unevaluated_operand;
11447           --c_inhibit_evaluation_warnings;
11448
11449           if (TREE_CODE (expanded) == TREE_VEC)
11450             len = TREE_VEC_LENGTH (expanded);
11451
11452           if (expanded == error_mark_node)
11453             return error_mark_node;
11454           else if (PACK_EXPANSION_P (expanded)
11455                    || (TREE_CODE (expanded) == TREE_VEC
11456                        && len > 0
11457                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
11458             {
11459               if (TREE_CODE (expanded) == TREE_VEC)
11460                 expanded = TREE_VEC_ELT (expanded, len - 1);
11461
11462               if (TYPE_P (expanded))
11463                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
11464                                                    complain & tf_error);
11465               else
11466                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
11467                                                    complain & tf_error);
11468             }
11469           else
11470             return build_int_cst (size_type_node, len);
11471         }
11472       /* Fall through */
11473
11474     case INDIRECT_REF:
11475     case NEGATE_EXPR:
11476     case TRUTH_NOT_EXPR:
11477     case BIT_NOT_EXPR:
11478     case ADDR_EXPR:
11479     case UNARY_PLUS_EXPR:      /* Unary + */
11480     case ALIGNOF_EXPR:
11481     case AT_ENCODE_EXPR:
11482     case ARROW_EXPR:
11483     case THROW_EXPR:
11484     case TYPEID_EXPR:
11485     case REALPART_EXPR:
11486     case IMAGPART_EXPR:
11487       return build1
11488         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11489          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
11490
11491     case COMPONENT_REF:
11492       {
11493         tree object;
11494         tree name;
11495
11496         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
11497         name = TREE_OPERAND (t, 1);
11498         if (TREE_CODE (name) == BIT_NOT_EXPR)
11499           {
11500             name = tsubst_copy (TREE_OPERAND (name, 0), args,
11501                                 complain, in_decl);
11502             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
11503           }
11504         else if (TREE_CODE (name) == SCOPE_REF
11505                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
11506           {
11507             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
11508                                      complain, in_decl);
11509             name = TREE_OPERAND (name, 1);
11510             name = tsubst_copy (TREE_OPERAND (name, 0), args,
11511                                 complain, in_decl);
11512             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
11513             name = build_qualified_name (/*type=*/NULL_TREE,
11514                                          base, name,
11515                                          /*template_p=*/false);
11516           }
11517         else if (TREE_CODE (name) == BASELINK)
11518           name = tsubst_baselink (name,
11519                                   non_reference (TREE_TYPE (object)),
11520                                   args, complain,
11521                                   in_decl);
11522         else
11523           name = tsubst_copy (name, args, complain, in_decl);
11524         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
11525       }
11526
11527     case PLUS_EXPR:
11528     case MINUS_EXPR:
11529     case MULT_EXPR:
11530     case TRUNC_DIV_EXPR:
11531     case CEIL_DIV_EXPR:
11532     case FLOOR_DIV_EXPR:
11533     case ROUND_DIV_EXPR:
11534     case EXACT_DIV_EXPR:
11535     case BIT_AND_EXPR:
11536     case BIT_IOR_EXPR:
11537     case BIT_XOR_EXPR:
11538     case TRUNC_MOD_EXPR:
11539     case FLOOR_MOD_EXPR:
11540     case TRUTH_ANDIF_EXPR:
11541     case TRUTH_ORIF_EXPR:
11542     case TRUTH_AND_EXPR:
11543     case TRUTH_OR_EXPR:
11544     case RSHIFT_EXPR:
11545     case LSHIFT_EXPR:
11546     case RROTATE_EXPR:
11547     case LROTATE_EXPR:
11548     case EQ_EXPR:
11549     case NE_EXPR:
11550     case MAX_EXPR:
11551     case MIN_EXPR:
11552     case LE_EXPR:
11553     case GE_EXPR:
11554     case LT_EXPR:
11555     case GT_EXPR:
11556     case COMPOUND_EXPR:
11557     case DOTSTAR_EXPR:
11558     case MEMBER_REF:
11559     case PREDECREMENT_EXPR:
11560     case PREINCREMENT_EXPR:
11561     case POSTDECREMENT_EXPR:
11562     case POSTINCREMENT_EXPR:
11563       return build_nt
11564         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11565          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11566
11567     case SCOPE_REF:
11568       return build_qualified_name (/*type=*/NULL_TREE,
11569                                    tsubst_copy (TREE_OPERAND (t, 0),
11570                                                 args, complain, in_decl),
11571                                    tsubst_copy (TREE_OPERAND (t, 1),
11572                                                 args, complain, in_decl),
11573                                    QUALIFIED_NAME_IS_TEMPLATE (t));
11574
11575     case ARRAY_REF:
11576       return build_nt
11577         (ARRAY_REF,
11578          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11579          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11580          NULL_TREE, NULL_TREE);
11581
11582     case CALL_EXPR:
11583       {
11584         int n = VL_EXP_OPERAND_LENGTH (t);
11585         tree result = build_vl_exp (CALL_EXPR, n);
11586         int i;
11587         for (i = 0; i < n; i++)
11588           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
11589                                              complain, in_decl);
11590         return result;
11591       }
11592
11593     case COND_EXPR:
11594     case MODOP_EXPR:
11595     case PSEUDO_DTOR_EXPR:
11596       {
11597         r = build_nt
11598           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11599            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11600            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
11601         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
11602         return r;
11603       }
11604
11605     case NEW_EXPR:
11606       {
11607         r = build_nt
11608         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11609          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11610          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
11611         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
11612         return r;
11613       }
11614
11615     case DELETE_EXPR:
11616       {
11617         r = build_nt
11618         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11619          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11620         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
11621         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
11622         return r;
11623       }
11624
11625     case TEMPLATE_ID_EXPR:
11626       {
11627         /* Substituted template arguments */
11628         tree fn = TREE_OPERAND (t, 0);
11629         tree targs = TREE_OPERAND (t, 1);
11630
11631         fn = tsubst_copy (fn, args, complain, in_decl);
11632         if (targs)
11633           targs = tsubst_template_args (targs, args, complain, in_decl);
11634
11635         return lookup_template_function (fn, targs);
11636       }
11637
11638     case TREE_LIST:
11639       {
11640         tree purpose, value, chain;
11641
11642         if (t == void_list_node)
11643           return t;
11644
11645         purpose = TREE_PURPOSE (t);
11646         if (purpose)
11647           purpose = tsubst_copy (purpose, args, complain, in_decl);
11648         value = TREE_VALUE (t);
11649         if (value)
11650           value = tsubst_copy (value, args, complain, in_decl);
11651         chain = TREE_CHAIN (t);
11652         if (chain && chain != void_type_node)
11653           chain = tsubst_copy (chain, args, complain, in_decl);
11654         if (purpose == TREE_PURPOSE (t)
11655             && value == TREE_VALUE (t)
11656             && chain == TREE_CHAIN (t))
11657           return t;
11658         return tree_cons (purpose, value, chain);
11659       }
11660
11661     case RECORD_TYPE:
11662     case UNION_TYPE:
11663     case ENUMERAL_TYPE:
11664     case INTEGER_TYPE:
11665     case TEMPLATE_TYPE_PARM:
11666     case TEMPLATE_TEMPLATE_PARM:
11667     case BOUND_TEMPLATE_TEMPLATE_PARM:
11668     case TEMPLATE_PARM_INDEX:
11669     case POINTER_TYPE:
11670     case REFERENCE_TYPE:
11671     case OFFSET_TYPE:
11672     case FUNCTION_TYPE:
11673     case METHOD_TYPE:
11674     case ARRAY_TYPE:
11675     case TYPENAME_TYPE:
11676     case UNBOUND_CLASS_TEMPLATE:
11677     case TYPEOF_TYPE:
11678     case DECLTYPE_TYPE:
11679     case TYPE_DECL:
11680       return tsubst (t, args, complain, in_decl);
11681
11682     case IDENTIFIER_NODE:
11683       if (IDENTIFIER_TYPENAME_P (t))
11684         {
11685           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11686           return mangle_conv_op_name_for_type (new_type);
11687         }
11688       else
11689         return t;
11690
11691     case CONSTRUCTOR:
11692       /* This is handled by tsubst_copy_and_build.  */
11693       gcc_unreachable ();
11694
11695     case VA_ARG_EXPR:
11696       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
11697                                           in_decl),
11698                              tsubst (TREE_TYPE (t), args, complain, in_decl));
11699
11700     case CLEANUP_POINT_EXPR:
11701       /* We shouldn't have built any of these during initial template
11702          generation.  Instead, they should be built during instantiation
11703          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
11704       gcc_unreachable ();
11705
11706     case OFFSET_REF:
11707       r = build2
11708         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11709          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11710          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11711       PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
11712       mark_used (TREE_OPERAND (r, 1));
11713       return r;
11714
11715     case EXPR_PACK_EXPANSION:
11716       error ("invalid use of pack expansion expression");
11717       return error_mark_node;
11718
11719     case NONTYPE_ARGUMENT_PACK:
11720       error ("use %<...%> to expand argument pack");
11721       return error_mark_node;
11722
11723     case INTEGER_CST:
11724     case REAL_CST:
11725     case STRING_CST:
11726     case COMPLEX_CST:
11727       {
11728         /* Instantiate any typedefs in the type.  */
11729         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11730         r = fold_convert (type, t);
11731         gcc_assert (TREE_CODE (r) == code);
11732         return r;
11733       }
11734
11735     case PTRMEM_CST:
11736       /* These can sometimes show up in a partial instantiation, but never
11737          involve template parms.  */
11738       gcc_assert (!uses_template_parms (t));
11739       return t;
11740
11741     default:
11742       /* We shouldn't get here, but keep going if !ENABLE_CHECKING.  */
11743       gcc_checking_assert (false);
11744       return t;
11745     }
11746 }
11747
11748 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
11749
11750 static tree
11751 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
11752                     tree in_decl)
11753 {
11754   tree new_clauses = NULL, nc, oc;
11755
11756   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
11757     {
11758       nc = copy_node (oc);
11759       OMP_CLAUSE_CHAIN (nc) = new_clauses;
11760       new_clauses = nc;
11761
11762       switch (OMP_CLAUSE_CODE (nc))
11763         {
11764         case OMP_CLAUSE_LASTPRIVATE:
11765           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
11766             {
11767               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
11768               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
11769                            in_decl, /*integral_constant_expression_p=*/false);
11770               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
11771                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
11772             }
11773           /* FALLTHRU */
11774         case OMP_CLAUSE_PRIVATE:
11775         case OMP_CLAUSE_SHARED:
11776         case OMP_CLAUSE_FIRSTPRIVATE:
11777         case OMP_CLAUSE_REDUCTION:
11778         case OMP_CLAUSE_COPYIN:
11779         case OMP_CLAUSE_COPYPRIVATE:
11780         case OMP_CLAUSE_IF:
11781         case OMP_CLAUSE_NUM_THREADS:
11782         case OMP_CLAUSE_SCHEDULE:
11783         case OMP_CLAUSE_COLLAPSE:
11784           OMP_CLAUSE_OPERAND (nc, 0)
11785             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
11786                            in_decl, /*integral_constant_expression_p=*/false);
11787           break;
11788         case OMP_CLAUSE_NOWAIT:
11789         case OMP_CLAUSE_ORDERED:
11790         case OMP_CLAUSE_DEFAULT:
11791         case OMP_CLAUSE_UNTIED:
11792           break;
11793         default:
11794           gcc_unreachable ();
11795         }
11796     }
11797
11798   return finish_omp_clauses (nreverse (new_clauses));
11799 }
11800
11801 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
11802
11803 static tree
11804 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
11805                           tree in_decl)
11806 {
11807 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
11808
11809   tree purpose, value, chain;
11810
11811   if (t == NULL)
11812     return t;
11813
11814   if (TREE_CODE (t) != TREE_LIST)
11815     return tsubst_copy_and_build (t, args, complain, in_decl,
11816                                   /*function_p=*/false,
11817                                   /*integral_constant_expression_p=*/false);
11818
11819   if (t == void_list_node)
11820     return t;
11821
11822   purpose = TREE_PURPOSE (t);
11823   if (purpose)
11824     purpose = RECUR (purpose);
11825   value = TREE_VALUE (t);
11826   if (value && TREE_CODE (value) != LABEL_DECL)
11827     value = RECUR (value);
11828   chain = TREE_CHAIN (t);
11829   if (chain && chain != void_type_node)
11830     chain = RECUR (chain);
11831   return tree_cons (purpose, value, chain);
11832 #undef RECUR
11833 }
11834
11835 /* Substitute one OMP_FOR iterator.  */
11836
11837 static void
11838 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
11839                          tree condv, tree incrv, tree *clauses,
11840                          tree args, tsubst_flags_t complain, tree in_decl,
11841                          bool integral_constant_expression_p)
11842 {
11843 #define RECUR(NODE)                             \
11844   tsubst_expr ((NODE), args, complain, in_decl, \
11845                integral_constant_expression_p)
11846   tree decl, init, cond, incr, auto_node;
11847
11848   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
11849   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
11850   decl = RECUR (TREE_OPERAND (init, 0));
11851   init = TREE_OPERAND (init, 1);
11852   auto_node = type_uses_auto (TREE_TYPE (decl));
11853   if (auto_node && init)
11854     {
11855       tree init_expr = init;
11856       if (TREE_CODE (init_expr) == DECL_EXPR)
11857         init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
11858       init_expr = RECUR (init_expr);
11859       TREE_TYPE (decl)
11860         = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
11861     }
11862   gcc_assert (!type_dependent_expression_p (decl));
11863
11864   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
11865     {
11866       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
11867       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
11868       if (TREE_CODE (incr) == MODIFY_EXPR)
11869         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
11870                                     RECUR (TREE_OPERAND (incr, 1)),
11871                                     complain);
11872       else
11873         incr = RECUR (incr);
11874       TREE_VEC_ELT (declv, i) = decl;
11875       TREE_VEC_ELT (initv, i) = init;
11876       TREE_VEC_ELT (condv, i) = cond;
11877       TREE_VEC_ELT (incrv, i) = incr;
11878       return;
11879     }
11880
11881   if (init && TREE_CODE (init) != DECL_EXPR)
11882     {
11883       tree c;
11884       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
11885         {
11886           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
11887                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
11888               && OMP_CLAUSE_DECL (c) == decl)
11889             break;
11890           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
11891                    && OMP_CLAUSE_DECL (c) == decl)
11892             error ("iteration variable %qD should not be firstprivate", decl);
11893           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
11894                    && OMP_CLAUSE_DECL (c) == decl)
11895             error ("iteration variable %qD should not be reduction", decl);
11896         }
11897       if (c == NULL)
11898         {
11899           c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
11900           OMP_CLAUSE_DECL (c) = decl;
11901           c = finish_omp_clauses (c);
11902           if (c)
11903             {
11904               OMP_CLAUSE_CHAIN (c) = *clauses;
11905               *clauses = c;
11906             }
11907         }
11908     }
11909   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
11910   if (COMPARISON_CLASS_P (cond))
11911     cond = build2 (TREE_CODE (cond), boolean_type_node,
11912                    RECUR (TREE_OPERAND (cond, 0)),
11913                    RECUR (TREE_OPERAND (cond, 1)));
11914   else
11915     cond = RECUR (cond);
11916   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
11917   switch (TREE_CODE (incr))
11918     {
11919     case PREINCREMENT_EXPR:
11920     case PREDECREMENT_EXPR:
11921     case POSTINCREMENT_EXPR:
11922     case POSTDECREMENT_EXPR:
11923       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
11924                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
11925       break;
11926     case MODIFY_EXPR:
11927       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
11928           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
11929         {
11930           tree rhs = TREE_OPERAND (incr, 1);
11931           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
11932                          RECUR (TREE_OPERAND (incr, 0)),
11933                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
11934                                  RECUR (TREE_OPERAND (rhs, 0)),
11935                                  RECUR (TREE_OPERAND (rhs, 1))));
11936         }
11937       else
11938         incr = RECUR (incr);
11939       break;
11940     case MODOP_EXPR:
11941       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
11942           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
11943         {
11944           tree lhs = RECUR (TREE_OPERAND (incr, 0));
11945           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
11946                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
11947                                  TREE_TYPE (decl), lhs,
11948                                  RECUR (TREE_OPERAND (incr, 2))));
11949         }
11950       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
11951                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
11952                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
11953         {
11954           tree rhs = TREE_OPERAND (incr, 2);
11955           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
11956                          RECUR (TREE_OPERAND (incr, 0)),
11957                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
11958                                  RECUR (TREE_OPERAND (rhs, 0)),
11959                                  RECUR (TREE_OPERAND (rhs, 1))));
11960         }
11961       else
11962         incr = RECUR (incr);
11963       break;
11964     default:
11965       incr = RECUR (incr);
11966       break;
11967     }
11968
11969   TREE_VEC_ELT (declv, i) = decl;
11970   TREE_VEC_ELT (initv, i) = init;
11971   TREE_VEC_ELT (condv, i) = cond;
11972   TREE_VEC_ELT (incrv, i) = incr;
11973 #undef RECUR
11974 }
11975
11976 /* Like tsubst_copy for expressions, etc. but also does semantic
11977    processing.  */
11978
11979 static tree
11980 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
11981              bool integral_constant_expression_p)
11982 {
11983 #define RECUR(NODE)                             \
11984   tsubst_expr ((NODE), args, complain, in_decl, \
11985                integral_constant_expression_p)
11986
11987   tree stmt, tmp;
11988
11989   if (t == NULL_TREE || t == error_mark_node)
11990     return t;
11991
11992   if (EXPR_HAS_LOCATION (t))
11993     input_location = EXPR_LOCATION (t);
11994   if (STATEMENT_CODE_P (TREE_CODE (t)))
11995     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
11996
11997   switch (TREE_CODE (t))
11998     {
11999     case STATEMENT_LIST:
12000       {
12001         tree_stmt_iterator i;
12002         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
12003           RECUR (tsi_stmt (i));
12004         break;
12005       }
12006
12007     case CTOR_INITIALIZER:
12008       finish_mem_initializers (tsubst_initializer_list
12009                                (TREE_OPERAND (t, 0), args));
12010       break;
12011
12012     case RETURN_EXPR:
12013       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
12014       break;
12015
12016     case EXPR_STMT:
12017       tmp = RECUR (EXPR_STMT_EXPR (t));
12018       if (EXPR_STMT_STMT_EXPR_RESULT (t))
12019         finish_stmt_expr_expr (tmp, cur_stmt_expr);
12020       else
12021         finish_expr_stmt (tmp);
12022       break;
12023
12024     case USING_STMT:
12025       do_using_directive (USING_STMT_NAMESPACE (t));
12026       break;
12027
12028     case DECL_EXPR:
12029       {
12030         tree decl, pattern_decl;
12031         tree init;
12032
12033         pattern_decl = decl = DECL_EXPR_DECL (t);
12034         if (TREE_CODE (decl) == LABEL_DECL)
12035           finish_label_decl (DECL_NAME (decl));
12036         else if (TREE_CODE (decl) == USING_DECL)
12037           {
12038             tree scope = USING_DECL_SCOPE (decl);
12039             tree name = DECL_NAME (decl);
12040             tree decl;
12041
12042             scope = tsubst (scope, args, complain, in_decl);
12043             decl = lookup_qualified_name (scope, name,
12044                                           /*is_type_p=*/false,
12045                                           /*complain=*/false);
12046             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
12047               qualified_name_lookup_error (scope, name, decl, input_location);
12048             else
12049               do_local_using_decl (decl, scope, name);
12050           }
12051         else
12052           {
12053             init = DECL_INITIAL (decl);
12054             decl = tsubst (decl, args, complain, in_decl);
12055             if (decl != error_mark_node)
12056               {
12057                 /* By marking the declaration as instantiated, we avoid
12058                    trying to instantiate it.  Since instantiate_decl can't
12059                    handle local variables, and since we've already done
12060                    all that needs to be done, that's the right thing to
12061                    do.  */
12062                 if (TREE_CODE (decl) == VAR_DECL)
12063                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12064                 if (TREE_CODE (decl) == VAR_DECL
12065                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
12066                   /* Anonymous aggregates are a special case.  */
12067                   finish_anon_union (decl);
12068                 else
12069                   {
12070                     int const_init = false;
12071                     maybe_push_decl (decl);
12072                     if (TREE_CODE (decl) == VAR_DECL
12073                         && DECL_PRETTY_FUNCTION_P (decl))
12074                       {
12075                         /* For __PRETTY_FUNCTION__ we have to adjust the
12076                            initializer.  */
12077                         const char *const name
12078                           = cxx_printable_name (current_function_decl, 2);
12079                         init = cp_fname_init (name, &TREE_TYPE (decl));
12080                       }
12081                     else
12082                       {
12083                         tree t = RECUR (init);
12084
12085                         if (init && !t)
12086                           {
12087                             /* If we had an initializer but it
12088                                instantiated to nothing,
12089                                value-initialize the object.  This will
12090                                only occur when the initializer was a
12091                                pack expansion where the parameter packs
12092                                used in that expansion were of length
12093                                zero.  */
12094                             init = build_value_init (TREE_TYPE (decl),
12095                                                      complain);
12096                             if (TREE_CODE (init) == AGGR_INIT_EXPR)
12097                               init = get_target_expr (init);
12098                           }
12099                         else
12100                           init = t;
12101                       }
12102
12103                     if (TREE_CODE (decl) == VAR_DECL)
12104                       const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
12105                                     (pattern_decl));
12106                     cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
12107                   }
12108               }
12109           }
12110
12111         /* A DECL_EXPR can also be used as an expression, in the condition
12112            clause of an if/for/while construct.  */
12113         return decl;
12114       }
12115
12116     case FOR_STMT:
12117       stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12118       RECUR (FOR_INIT_STMT (t));
12119       finish_for_init_stmt (stmt);
12120       tmp = RECUR (FOR_COND (t));
12121       finish_for_cond (tmp, stmt);
12122       tmp = RECUR (FOR_EXPR (t));
12123       finish_for_expr (tmp, stmt);
12124       RECUR (FOR_BODY (t));
12125       finish_for_stmt (stmt);
12126       break;
12127
12128     case RANGE_FOR_STMT:
12129       {
12130         tree decl, expr;
12131         stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12132         decl = RANGE_FOR_DECL (t);
12133         decl = tsubst (decl, args, complain, in_decl);
12134         maybe_push_decl (decl);
12135         expr = RECUR (RANGE_FOR_EXPR (t));
12136         stmt = cp_convert_range_for (stmt, decl, expr);
12137         RECUR (RANGE_FOR_BODY (t));
12138         finish_for_stmt (stmt);
12139       }
12140       break;
12141
12142     case WHILE_STMT:
12143       stmt = begin_while_stmt ();
12144       tmp = RECUR (WHILE_COND (t));
12145       finish_while_stmt_cond (tmp, stmt);
12146       RECUR (WHILE_BODY (t));
12147       finish_while_stmt (stmt);
12148       break;
12149
12150     case DO_STMT:
12151       stmt = begin_do_stmt ();
12152       RECUR (DO_BODY (t));
12153       finish_do_body (stmt);
12154       tmp = RECUR (DO_COND (t));
12155       finish_do_stmt (tmp, stmt);
12156       break;
12157
12158     case IF_STMT:
12159       stmt = begin_if_stmt ();
12160       tmp = RECUR (IF_COND (t));
12161       finish_if_stmt_cond (tmp, stmt);
12162       RECUR (THEN_CLAUSE (t));
12163       finish_then_clause (stmt);
12164
12165       if (ELSE_CLAUSE (t))
12166         {
12167           begin_else_clause (stmt);
12168           RECUR (ELSE_CLAUSE (t));
12169           finish_else_clause (stmt);
12170         }
12171
12172       finish_if_stmt (stmt);
12173       break;
12174
12175     case BIND_EXPR:
12176       if (BIND_EXPR_BODY_BLOCK (t))
12177         stmt = begin_function_body ();
12178       else
12179         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
12180                                     ? BCS_TRY_BLOCK : 0);
12181
12182       RECUR (BIND_EXPR_BODY (t));
12183
12184       if (BIND_EXPR_BODY_BLOCK (t))
12185         finish_function_body (stmt);
12186       else
12187         finish_compound_stmt (stmt);
12188       break;
12189
12190     case BREAK_STMT:
12191       finish_break_stmt ();
12192       break;
12193
12194     case CONTINUE_STMT:
12195       finish_continue_stmt ();
12196       break;
12197
12198     case SWITCH_STMT:
12199       stmt = begin_switch_stmt ();
12200       tmp = RECUR (SWITCH_STMT_COND (t));
12201       finish_switch_cond (tmp, stmt);
12202       RECUR (SWITCH_STMT_BODY (t));
12203       finish_switch_stmt (stmt);
12204       break;
12205
12206     case CASE_LABEL_EXPR:
12207       finish_case_label (EXPR_LOCATION (t),
12208                          RECUR (CASE_LOW (t)),
12209                          RECUR (CASE_HIGH (t)));
12210       break;
12211
12212     case LABEL_EXPR:
12213       {
12214         tree decl = LABEL_EXPR_LABEL (t);
12215         tree label;
12216
12217         label = finish_label_stmt (DECL_NAME (decl));
12218         if (DECL_ATTRIBUTES (decl) != NULL_TREE)
12219           cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
12220       }
12221       break;
12222
12223     case GOTO_EXPR:
12224       tmp = GOTO_DESTINATION (t);
12225       if (TREE_CODE (tmp) != LABEL_DECL)
12226         /* Computed goto's must be tsubst'd into.  On the other hand,
12227            non-computed gotos must not be; the identifier in question
12228            will have no binding.  */
12229         tmp = RECUR (tmp);
12230       else
12231         tmp = DECL_NAME (tmp);
12232       finish_goto_stmt (tmp);
12233       break;
12234
12235     case ASM_EXPR:
12236       tmp = finish_asm_stmt
12237         (ASM_VOLATILE_P (t),
12238          RECUR (ASM_STRING (t)),
12239          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
12240          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
12241          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
12242          tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
12243       {
12244         tree asm_expr = tmp;
12245         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
12246           asm_expr = TREE_OPERAND (asm_expr, 0);
12247         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
12248       }
12249       break;
12250
12251     case TRY_BLOCK:
12252       if (CLEANUP_P (t))
12253         {
12254           stmt = begin_try_block ();
12255           RECUR (TRY_STMTS (t));
12256           finish_cleanup_try_block (stmt);
12257           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
12258         }
12259       else
12260         {
12261           tree compound_stmt = NULL_TREE;
12262
12263           if (FN_TRY_BLOCK_P (t))
12264             stmt = begin_function_try_block (&compound_stmt);
12265           else
12266             stmt = begin_try_block ();
12267
12268           RECUR (TRY_STMTS (t));
12269
12270           if (FN_TRY_BLOCK_P (t))
12271             finish_function_try_block (stmt);
12272           else
12273             finish_try_block (stmt);
12274
12275           RECUR (TRY_HANDLERS (t));
12276           if (FN_TRY_BLOCK_P (t))
12277             finish_function_handler_sequence (stmt, compound_stmt);
12278           else
12279             finish_handler_sequence (stmt);
12280         }
12281       break;
12282
12283     case HANDLER:
12284       {
12285         tree decl = HANDLER_PARMS (t);
12286
12287         if (decl)
12288           {
12289             decl = tsubst (decl, args, complain, in_decl);
12290             /* Prevent instantiate_decl from trying to instantiate
12291                this variable.  We've already done all that needs to be
12292                done.  */
12293             if (decl != error_mark_node)
12294               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12295           }
12296         stmt = begin_handler ();
12297         finish_handler_parms (decl, stmt);
12298         RECUR (HANDLER_BODY (t));
12299         finish_handler (stmt);
12300       }
12301       break;
12302
12303     case TAG_DEFN:
12304       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
12305       break;
12306
12307     case STATIC_ASSERT:
12308       {
12309         tree condition = 
12310           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
12311                        args,
12312                        complain, in_decl,
12313                        /*integral_constant_expression_p=*/true);
12314         finish_static_assert (condition,
12315                               STATIC_ASSERT_MESSAGE (t),
12316                               STATIC_ASSERT_SOURCE_LOCATION (t),
12317                               /*member_p=*/false);
12318       }
12319       break;
12320
12321     case OMP_PARALLEL:
12322       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
12323                                 args, complain, in_decl);
12324       stmt = begin_omp_parallel ();
12325       RECUR (OMP_PARALLEL_BODY (t));
12326       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
12327         = OMP_PARALLEL_COMBINED (t);
12328       break;
12329
12330     case OMP_TASK:
12331       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
12332                                 args, complain, in_decl);
12333       stmt = begin_omp_task ();
12334       RECUR (OMP_TASK_BODY (t));
12335       finish_omp_task (tmp, stmt);
12336       break;
12337
12338     case OMP_FOR:
12339       {
12340         tree clauses, body, pre_body;
12341         tree declv, initv, condv, incrv;
12342         int i;
12343
12344         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
12345                                       args, complain, in_decl);
12346         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12347         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12348         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12349         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12350
12351         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
12352           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
12353                                    &clauses, args, complain, in_decl,
12354                                    integral_constant_expression_p);
12355
12356         stmt = begin_omp_structured_block ();
12357
12358         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
12359           if (TREE_VEC_ELT (initv, i) == NULL
12360               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
12361             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
12362           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
12363             {
12364               tree init = RECUR (TREE_VEC_ELT (initv, i));
12365               gcc_assert (init == TREE_VEC_ELT (declv, i));
12366               TREE_VEC_ELT (initv, i) = NULL_TREE;
12367             }
12368           else
12369             {
12370               tree decl_expr = TREE_VEC_ELT (initv, i);
12371               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
12372               gcc_assert (init != NULL);
12373               TREE_VEC_ELT (initv, i) = RECUR (init);
12374               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
12375               RECUR (decl_expr);
12376               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
12377             }
12378
12379         pre_body = push_stmt_list ();
12380         RECUR (OMP_FOR_PRE_BODY (t));
12381         pre_body = pop_stmt_list (pre_body);
12382
12383         body = push_stmt_list ();
12384         RECUR (OMP_FOR_BODY (t));
12385         body = pop_stmt_list (body);
12386
12387         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
12388                             body, pre_body, clauses);
12389
12390         add_stmt (finish_omp_structured_block (stmt));
12391       }
12392       break;
12393
12394     case OMP_SECTIONS:
12395     case OMP_SINGLE:
12396       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
12397       stmt = push_stmt_list ();
12398       RECUR (OMP_BODY (t));
12399       stmt = pop_stmt_list (stmt);
12400
12401       t = copy_node (t);
12402       OMP_BODY (t) = stmt;
12403       OMP_CLAUSES (t) = tmp;
12404       add_stmt (t);
12405       break;
12406
12407     case OMP_SECTION:
12408     case OMP_CRITICAL:
12409     case OMP_MASTER:
12410     case OMP_ORDERED:
12411       stmt = push_stmt_list ();
12412       RECUR (OMP_BODY (t));
12413       stmt = pop_stmt_list (stmt);
12414
12415       t = copy_node (t);
12416       OMP_BODY (t) = stmt;
12417       add_stmt (t);
12418       break;
12419
12420     case OMP_ATOMIC:
12421       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
12422       {
12423         tree op1 = TREE_OPERAND (t, 1);
12424         tree lhs = RECUR (TREE_OPERAND (op1, 0));
12425         tree rhs = RECUR (TREE_OPERAND (op1, 1));
12426         finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
12427       }
12428       break;
12429
12430     case EXPR_PACK_EXPANSION:
12431       error ("invalid use of pack expansion expression");
12432       return error_mark_node;
12433
12434     case NONTYPE_ARGUMENT_PACK:
12435       error ("use %<...%> to expand argument pack");
12436       return error_mark_node;
12437
12438     default:
12439       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
12440
12441       return tsubst_copy_and_build (t, args, complain, in_decl,
12442                                     /*function_p=*/false,
12443                                     integral_constant_expression_p);
12444     }
12445
12446   return NULL_TREE;
12447 #undef RECUR
12448 }
12449
12450 /* T is a postfix-expression that is not being used in a function
12451    call.  Return the substituted version of T.  */
12452
12453 static tree
12454 tsubst_non_call_postfix_expression (tree t, tree args,
12455                                     tsubst_flags_t complain,
12456                                     tree in_decl)
12457 {
12458   if (TREE_CODE (t) == SCOPE_REF)
12459     t = tsubst_qualified_id (t, args, complain, in_decl,
12460                              /*done=*/false, /*address_p=*/false);
12461   else
12462     t = tsubst_copy_and_build (t, args, complain, in_decl,
12463                                /*function_p=*/false,
12464                                /*integral_constant_expression_p=*/false);
12465
12466   return t;
12467 }
12468
12469 /* Like tsubst but deals with expressions and performs semantic
12470    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
12471
12472 tree
12473 tsubst_copy_and_build (tree t,
12474                        tree args,
12475                        tsubst_flags_t complain,
12476                        tree in_decl,
12477                        bool function_p,
12478                        bool integral_constant_expression_p)
12479 {
12480 #define RECUR(NODE)                                             \
12481   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
12482                          /*function_p=*/false,                  \
12483                          integral_constant_expression_p)
12484
12485   tree op1;
12486
12487   if (t == NULL_TREE || t == error_mark_node)
12488     return t;
12489
12490   switch (TREE_CODE (t))
12491     {
12492     case USING_DECL:
12493       t = DECL_NAME (t);
12494       /* Fall through.  */
12495     case IDENTIFIER_NODE:
12496       {
12497         tree decl;
12498         cp_id_kind idk;
12499         bool non_integral_constant_expression_p;
12500         const char *error_msg;
12501
12502         if (IDENTIFIER_TYPENAME_P (t))
12503           {
12504             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12505             t = mangle_conv_op_name_for_type (new_type);
12506           }
12507
12508         /* Look up the name.  */
12509         decl = lookup_name (t);
12510
12511         /* By convention, expressions use ERROR_MARK_NODE to indicate
12512            failure, not NULL_TREE.  */
12513         if (decl == NULL_TREE)
12514           decl = error_mark_node;
12515
12516         decl = finish_id_expression (t, decl, NULL_TREE,
12517                                      &idk,
12518                                      integral_constant_expression_p,
12519                                      /*allow_non_integral_constant_expression_p=*/false,
12520                                      &non_integral_constant_expression_p,
12521                                      /*template_p=*/false,
12522                                      /*done=*/true,
12523                                      /*address_p=*/false,
12524                                      /*template_arg_p=*/false,
12525                                      &error_msg,
12526                                      input_location);
12527         if (error_msg)
12528           error (error_msg);
12529         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
12530           decl = unqualified_name_lookup_error (decl);
12531         return decl;
12532       }
12533
12534     case TEMPLATE_ID_EXPR:
12535       {
12536         tree object;
12537         tree templ = RECUR (TREE_OPERAND (t, 0));
12538         tree targs = TREE_OPERAND (t, 1);
12539
12540         if (targs)
12541           targs = tsubst_template_args (targs, args, complain, in_decl);
12542
12543         if (TREE_CODE (templ) == COMPONENT_REF)
12544           {
12545             object = TREE_OPERAND (templ, 0);
12546             templ = TREE_OPERAND (templ, 1);
12547           }
12548         else
12549           object = NULL_TREE;
12550         templ = lookup_template_function (templ, targs);
12551
12552         if (object)
12553           return build3 (COMPONENT_REF, TREE_TYPE (templ),
12554                          object, templ, NULL_TREE);
12555         else
12556           return baselink_for_fns (templ);
12557       }
12558
12559     case INDIRECT_REF:
12560       {
12561         tree r = RECUR (TREE_OPERAND (t, 0));
12562
12563         if (REFERENCE_REF_P (t))
12564           {
12565             /* A type conversion to reference type will be enclosed in
12566                such an indirect ref, but the substitution of the cast
12567                will have also added such an indirect ref.  */
12568             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
12569               r = convert_from_reference (r);
12570           }
12571         else
12572           r = build_x_indirect_ref (r, RO_UNARY_STAR, complain);
12573         return r;
12574       }
12575
12576     case NOP_EXPR:
12577       return build_nop
12578         (tsubst (TREE_TYPE (t), args, complain, in_decl),
12579          RECUR (TREE_OPERAND (t, 0)));
12580
12581     case CAST_EXPR:
12582     case REINTERPRET_CAST_EXPR:
12583     case CONST_CAST_EXPR:
12584     case DYNAMIC_CAST_EXPR:
12585     case STATIC_CAST_EXPR:
12586       {
12587         tree type;
12588         tree op;
12589
12590         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12591         if (integral_constant_expression_p
12592             && !cast_valid_in_integral_constant_expression_p (type))
12593           {
12594             if (complain & tf_error)
12595               error ("a cast to a type other than an integral or "
12596                      "enumeration type cannot appear in a constant-expression");
12597             return error_mark_node; 
12598           }
12599
12600         op = RECUR (TREE_OPERAND (t, 0));
12601
12602         switch (TREE_CODE (t))
12603           {
12604           case CAST_EXPR:
12605             return build_functional_cast (type, op, complain);
12606           case REINTERPRET_CAST_EXPR:
12607             return build_reinterpret_cast (type, op, complain);
12608           case CONST_CAST_EXPR:
12609             return build_const_cast (type, op, complain);
12610           case DYNAMIC_CAST_EXPR:
12611             return build_dynamic_cast (type, op, complain);
12612           case STATIC_CAST_EXPR:
12613             return build_static_cast (type, op, complain);
12614           default:
12615             gcc_unreachable ();
12616           }
12617       }
12618
12619     case POSTDECREMENT_EXPR:
12620     case POSTINCREMENT_EXPR:
12621       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12622                                                 args, complain, in_decl);
12623       return build_x_unary_op (TREE_CODE (t), op1, complain);
12624
12625     case PREDECREMENT_EXPR:
12626     case PREINCREMENT_EXPR:
12627     case NEGATE_EXPR:
12628     case BIT_NOT_EXPR:
12629     case ABS_EXPR:
12630     case TRUTH_NOT_EXPR:
12631     case UNARY_PLUS_EXPR:  /* Unary + */
12632     case REALPART_EXPR:
12633     case IMAGPART_EXPR:
12634       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
12635                                complain);
12636
12637     case ADDR_EXPR:
12638       op1 = TREE_OPERAND (t, 0);
12639       if (TREE_CODE (op1) == LABEL_DECL)
12640         return finish_label_address_expr (DECL_NAME (op1),
12641                                           EXPR_LOCATION (op1));
12642       if (TREE_CODE (op1) == SCOPE_REF)
12643         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
12644                                    /*done=*/true, /*address_p=*/true);
12645       else
12646         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
12647                                                   in_decl);
12648       return build_x_unary_op (ADDR_EXPR, op1, complain);
12649
12650     case PLUS_EXPR:
12651     case MINUS_EXPR:
12652     case MULT_EXPR:
12653     case TRUNC_DIV_EXPR:
12654     case CEIL_DIV_EXPR:
12655     case FLOOR_DIV_EXPR:
12656     case ROUND_DIV_EXPR:
12657     case EXACT_DIV_EXPR:
12658     case BIT_AND_EXPR:
12659     case BIT_IOR_EXPR:
12660     case BIT_XOR_EXPR:
12661     case TRUNC_MOD_EXPR:
12662     case FLOOR_MOD_EXPR:
12663     case TRUTH_ANDIF_EXPR:
12664     case TRUTH_ORIF_EXPR:
12665     case TRUTH_AND_EXPR:
12666     case TRUTH_OR_EXPR:
12667     case RSHIFT_EXPR:
12668     case LSHIFT_EXPR:
12669     case RROTATE_EXPR:
12670     case LROTATE_EXPR:
12671     case EQ_EXPR:
12672     case NE_EXPR:
12673     case MAX_EXPR:
12674     case MIN_EXPR:
12675     case LE_EXPR:
12676     case GE_EXPR:
12677     case LT_EXPR:
12678     case GT_EXPR:
12679     case MEMBER_REF:
12680     case DOTSTAR_EXPR:
12681       return build_x_binary_op
12682         (TREE_CODE (t),
12683          RECUR (TREE_OPERAND (t, 0)),
12684          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
12685           ? ERROR_MARK
12686           : TREE_CODE (TREE_OPERAND (t, 0))),
12687          RECUR (TREE_OPERAND (t, 1)),
12688          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
12689           ? ERROR_MARK
12690           : TREE_CODE (TREE_OPERAND (t, 1))),
12691          /*overloaded_p=*/NULL,
12692          complain);
12693
12694     case SCOPE_REF:
12695       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
12696                                   /*address_p=*/false);
12697     case ARRAY_REF:
12698       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12699                                                 args, complain, in_decl);
12700       return build_x_array_ref (op1, RECUR (TREE_OPERAND (t, 1)), complain);
12701
12702     case SIZEOF_EXPR:
12703       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12704         return tsubst_copy (t, args, complain, in_decl);
12705       /* Fall through */
12706       
12707     case ALIGNOF_EXPR:
12708       op1 = TREE_OPERAND (t, 0);
12709       if (!args)
12710         {
12711           /* When there are no ARGS, we are trying to evaluate a
12712              non-dependent expression from the parser.  Trying to do
12713              the substitutions may not work.  */
12714           if (!TYPE_P (op1))
12715             op1 = TREE_TYPE (op1);
12716         }
12717       else
12718         {
12719           ++cp_unevaluated_operand;
12720           ++c_inhibit_evaluation_warnings;
12721           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
12722                                        /*function_p=*/false,
12723                                        /*integral_constant_expression_p=*/false);
12724           --cp_unevaluated_operand;
12725           --c_inhibit_evaluation_warnings;
12726         }
12727       if (TYPE_P (op1))
12728         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
12729                                            complain & tf_error);
12730       else
12731         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
12732                                            complain & tf_error);
12733
12734     case AT_ENCODE_EXPR:
12735       {
12736         op1 = TREE_OPERAND (t, 0);
12737         ++cp_unevaluated_operand;
12738         ++c_inhibit_evaluation_warnings;
12739         op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
12740                                      /*function_p=*/false,
12741                                      /*integral_constant_expression_p=*/false);
12742         --cp_unevaluated_operand;
12743         --c_inhibit_evaluation_warnings;
12744         return objc_build_encode_expr (op1);
12745       }
12746
12747     case NOEXCEPT_EXPR:
12748       op1 = TREE_OPERAND (t, 0);
12749       ++cp_unevaluated_operand;
12750       ++c_inhibit_evaluation_warnings;
12751       op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
12752                                    /*function_p=*/false,
12753                                    /*integral_constant_expression_p=*/false);
12754       --cp_unevaluated_operand;
12755       --c_inhibit_evaluation_warnings;
12756       return finish_noexcept_expr (op1, complain);
12757
12758     case MODOP_EXPR:
12759       {
12760         tree r = build_x_modify_expr
12761           (RECUR (TREE_OPERAND (t, 0)),
12762            TREE_CODE (TREE_OPERAND (t, 1)),
12763            RECUR (TREE_OPERAND (t, 2)),
12764            complain);
12765         /* TREE_NO_WARNING must be set if either the expression was
12766            parenthesized or it uses an operator such as >>= rather
12767            than plain assignment.  In the former case, it was already
12768            set and must be copied.  In the latter case,
12769            build_x_modify_expr sets it and it must not be reset
12770            here.  */
12771         if (TREE_NO_WARNING (t))
12772           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12773         return r;
12774       }
12775
12776     case ARROW_EXPR:
12777       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12778                                                 args, complain, in_decl);
12779       /* Remember that there was a reference to this entity.  */
12780       if (DECL_P (op1))
12781         mark_used (op1);
12782       return build_x_arrow (op1);
12783
12784     case NEW_EXPR:
12785       {
12786         tree placement = RECUR (TREE_OPERAND (t, 0));
12787         tree init = RECUR (TREE_OPERAND (t, 3));
12788         VEC(tree,gc) *placement_vec;
12789         VEC(tree,gc) *init_vec;
12790         tree ret;
12791
12792         if (placement == NULL_TREE)
12793           placement_vec = NULL;
12794         else
12795           {
12796             placement_vec = make_tree_vector ();
12797             for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
12798               VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement));
12799           }
12800
12801         /* If there was an initializer in the original tree, but it
12802            instantiated to an empty list, then we should pass a
12803            non-NULL empty vector to tell build_new that it was an
12804            empty initializer() rather than no initializer.  This can
12805            only happen when the initializer is a pack expansion whose
12806            parameter packs are of length zero.  */
12807         if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
12808           init_vec = NULL;
12809         else
12810           {
12811             init_vec = make_tree_vector ();
12812             if (init == void_zero_node)
12813               gcc_assert (init_vec != NULL);
12814             else
12815               {
12816                 for (; init != NULL_TREE; init = TREE_CHAIN (init))
12817                   VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init));
12818               }
12819           }
12820
12821         ret = build_new (&placement_vec,
12822                          tsubst (TREE_OPERAND (t, 1), args, complain, in_decl),
12823                          RECUR (TREE_OPERAND (t, 2)),
12824                          &init_vec,
12825                          NEW_EXPR_USE_GLOBAL (t),
12826                          complain);
12827
12828         if (placement_vec != NULL)
12829           release_tree_vector (placement_vec);
12830         if (init_vec != NULL)
12831           release_tree_vector (init_vec);
12832
12833         return ret;
12834       }
12835
12836     case DELETE_EXPR:
12837      return delete_sanity
12838        (RECUR (TREE_OPERAND (t, 0)),
12839         RECUR (TREE_OPERAND (t, 1)),
12840         DELETE_EXPR_USE_VEC (t),
12841         DELETE_EXPR_USE_GLOBAL (t));
12842
12843     case COMPOUND_EXPR:
12844       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
12845                                     RECUR (TREE_OPERAND (t, 1)),
12846                                     complain);
12847
12848     case CALL_EXPR:
12849       {
12850         tree function;
12851         VEC(tree,gc) *call_args;
12852         unsigned int nargs, i;
12853         bool qualified_p;
12854         bool koenig_p;
12855         tree ret;
12856
12857         function = CALL_EXPR_FN (t);
12858         /* When we parsed the expression,  we determined whether or
12859            not Koenig lookup should be performed.  */
12860         koenig_p = KOENIG_LOOKUP_P (t);
12861         if (TREE_CODE (function) == SCOPE_REF)
12862           {
12863             qualified_p = true;
12864             function = tsubst_qualified_id (function, args, complain, in_decl,
12865                                             /*done=*/false,
12866                                             /*address_p=*/false);
12867           }
12868         else
12869           {
12870             if (TREE_CODE (function) == COMPONENT_REF)
12871               {
12872                 tree op = TREE_OPERAND (function, 1);
12873
12874                 qualified_p = (TREE_CODE (op) == SCOPE_REF
12875                                || (BASELINK_P (op)
12876                                    && BASELINK_QUALIFIED_P (op)));
12877               }
12878             else
12879               qualified_p = false;
12880
12881             function = tsubst_copy_and_build (function, args, complain,
12882                                               in_decl,
12883                                               !qualified_p,
12884                                               integral_constant_expression_p);
12885
12886             if (BASELINK_P (function))
12887               qualified_p = true;
12888           }
12889
12890         nargs = call_expr_nargs (t);
12891         call_args = make_tree_vector ();
12892         for (i = 0; i < nargs; ++i)
12893           {
12894             tree arg = CALL_EXPR_ARG (t, i);
12895
12896             if (!PACK_EXPANSION_P (arg))
12897               VEC_safe_push (tree, gc, call_args,
12898                              RECUR (CALL_EXPR_ARG (t, i)));
12899             else
12900               {
12901                 /* Expand the pack expansion and push each entry onto
12902                    CALL_ARGS.  */
12903                 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
12904                 if (TREE_CODE (arg) == TREE_VEC)
12905                   {
12906                     unsigned int len, j;
12907
12908                     len = TREE_VEC_LENGTH (arg);
12909                     for (j = 0; j < len; ++j)
12910                       {
12911                         tree value = TREE_VEC_ELT (arg, j);
12912                         if (value != NULL_TREE)
12913                           value = convert_from_reference (value);
12914                         VEC_safe_push (tree, gc, call_args, value);
12915                       }
12916                   }
12917                 else
12918                   {
12919                     /* A partial substitution.  Add one entry.  */
12920                     VEC_safe_push (tree, gc, call_args, arg);
12921                   }
12922               }
12923           }
12924
12925         /* We do not perform argument-dependent lookup if normal
12926            lookup finds a non-function, in accordance with the
12927            expected resolution of DR 218.  */
12928         if (koenig_p
12929             && ((is_overloaded_fn (function)
12930                  /* If lookup found a member function, the Koenig lookup is
12931                     not appropriate, even if an unqualified-name was used
12932                     to denote the function.  */
12933                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
12934                 || TREE_CODE (function) == IDENTIFIER_NODE)
12935             /* Only do this when substitution turns a dependent call
12936                into a non-dependent call.  */
12937             && type_dependent_expression_p_push (t)
12938             && !any_type_dependent_arguments_p (call_args))
12939           function = perform_koenig_lookup (function, call_args, false);
12940
12941         if (TREE_CODE (function) == IDENTIFIER_NODE)
12942           {
12943             unqualified_name_lookup_error (function);
12944             release_tree_vector (call_args);
12945             return error_mark_node;
12946           }
12947
12948         /* Remember that there was a reference to this entity.  */
12949         if (DECL_P (function))
12950           mark_used (function);
12951
12952         if (TREE_CODE (function) == OFFSET_REF)
12953           ret = build_offset_ref_call_from_tree (function, &call_args);
12954         else if (TREE_CODE (function) == COMPONENT_REF)
12955           {
12956             tree instance = TREE_OPERAND (function, 0);
12957             tree fn = TREE_OPERAND (function, 1);
12958
12959             if (processing_template_decl
12960                 && (type_dependent_expression_p (instance)
12961                     || (!BASELINK_P (fn)
12962                         && TREE_CODE (fn) != FIELD_DECL)
12963                     || type_dependent_expression_p (fn)
12964                     || any_type_dependent_arguments_p (call_args)))
12965               ret = build_nt_call_vec (function, call_args);
12966             else if (!BASELINK_P (fn))
12967               ret = finish_call_expr (function, &call_args,
12968                                        /*disallow_virtual=*/false,
12969                                        /*koenig_p=*/false,
12970                                        complain);
12971             else
12972               ret = (build_new_method_call
12973                       (instance, fn,
12974                        &call_args, NULL_TREE,
12975                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
12976                        /*fn_p=*/NULL,
12977                        complain));
12978           }
12979         else
12980           ret = finish_call_expr (function, &call_args,
12981                                   /*disallow_virtual=*/qualified_p,
12982                                   koenig_p,
12983                                   complain);
12984
12985         release_tree_vector (call_args);
12986
12987         return ret;
12988       }
12989
12990     case COND_EXPR:
12991       return build_x_conditional_expr
12992         (RECUR (TREE_OPERAND (t, 0)),
12993          RECUR (TREE_OPERAND (t, 1)),
12994          RECUR (TREE_OPERAND (t, 2)),
12995          complain);
12996
12997     case PSEUDO_DTOR_EXPR:
12998       return finish_pseudo_destructor_expr
12999         (RECUR (TREE_OPERAND (t, 0)),
13000          RECUR (TREE_OPERAND (t, 1)),
13001          tsubst (TREE_OPERAND (t, 2), args, complain, in_decl));
13002
13003     case TREE_LIST:
13004       {
13005         tree purpose, value, chain;
13006
13007         if (t == void_list_node)
13008           return t;
13009
13010         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
13011             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
13012           {
13013             /* We have pack expansions, so expand those and
13014                create a new list out of it.  */
13015             tree purposevec = NULL_TREE;
13016             tree valuevec = NULL_TREE;
13017             tree chain;
13018             int i, len = -1;
13019
13020             /* Expand the argument expressions.  */
13021             if (TREE_PURPOSE (t))
13022               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
13023                                                  complain, in_decl);
13024             if (TREE_VALUE (t))
13025               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
13026                                                complain, in_decl);
13027
13028             /* Build the rest of the list.  */
13029             chain = TREE_CHAIN (t);
13030             if (chain && chain != void_type_node)
13031               chain = RECUR (chain);
13032
13033             /* Determine the number of arguments.  */
13034             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
13035               {
13036                 len = TREE_VEC_LENGTH (purposevec);
13037                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
13038               }
13039             else if (TREE_CODE (valuevec) == TREE_VEC)
13040               len = TREE_VEC_LENGTH (valuevec);
13041             else
13042               {
13043                 /* Since we only performed a partial substitution into
13044                    the argument pack, we only return a single list
13045                    node.  */
13046                 if (purposevec == TREE_PURPOSE (t)
13047                     && valuevec == TREE_VALUE (t)
13048                     && chain == TREE_CHAIN (t))
13049                   return t;
13050
13051                 return tree_cons (purposevec, valuevec, chain);
13052               }
13053             
13054             /* Convert the argument vectors into a TREE_LIST */
13055             i = len;
13056             while (i > 0)
13057               {
13058                 /* Grab the Ith values.  */
13059                 i--;
13060                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
13061                                      : NULL_TREE;
13062                 value 
13063                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
13064                              : NULL_TREE;
13065
13066                 /* Build the list (backwards).  */
13067                 chain = tree_cons (purpose, value, chain);
13068               }
13069
13070             return chain;
13071           }
13072
13073         purpose = TREE_PURPOSE (t);
13074         if (purpose)
13075           purpose = RECUR (purpose);
13076         value = TREE_VALUE (t);
13077         if (value)
13078           value = RECUR (value);
13079         chain = TREE_CHAIN (t);
13080         if (chain && chain != void_type_node)
13081           chain = RECUR (chain);
13082         if (purpose == TREE_PURPOSE (t)
13083             && value == TREE_VALUE (t)
13084             && chain == TREE_CHAIN (t))
13085           return t;
13086         return tree_cons (purpose, value, chain);
13087       }
13088
13089     case COMPONENT_REF:
13090       {
13091         tree object;
13092         tree object_type;
13093         tree member;
13094
13095         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13096                                                      args, complain, in_decl);
13097         /* Remember that there was a reference to this entity.  */
13098         if (DECL_P (object))
13099           mark_used (object);
13100         object_type = TREE_TYPE (object);
13101
13102         member = TREE_OPERAND (t, 1);
13103         if (BASELINK_P (member))
13104           member = tsubst_baselink (member,
13105                                     non_reference (TREE_TYPE (object)),
13106                                     args, complain, in_decl);
13107         else
13108           member = tsubst_copy (member, args, complain, in_decl);
13109         if (member == error_mark_node)
13110           return error_mark_node;
13111
13112         if (object_type && !CLASS_TYPE_P (object_type))
13113           {
13114             if (SCALAR_TYPE_P (object_type))
13115               {
13116                 tree s = NULL_TREE;
13117                 tree dtor = member;
13118
13119                 if (TREE_CODE (dtor) == SCOPE_REF)
13120                   {
13121                     s = TREE_OPERAND (dtor, 0);
13122                     dtor = TREE_OPERAND (dtor, 1);
13123                   }
13124                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
13125                   {
13126                     dtor = TREE_OPERAND (dtor, 0);
13127                     if (TYPE_P (dtor))
13128                       return finish_pseudo_destructor_expr (object, s, dtor);
13129                   }
13130               }
13131           }
13132         else if (TREE_CODE (member) == SCOPE_REF
13133                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
13134           {
13135             tree tmpl;
13136             tree args;
13137
13138             /* Lookup the template functions now that we know what the
13139                scope is.  */
13140             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
13141             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
13142             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
13143                                             /*is_type_p=*/false,
13144                                             /*complain=*/false);
13145             if (BASELINK_P (member))
13146               {
13147                 BASELINK_FUNCTIONS (member)
13148                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
13149                               args);
13150                 member = (adjust_result_of_qualified_name_lookup
13151                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
13152                            object_type));
13153               }
13154             else
13155               {
13156                 qualified_name_lookup_error (object_type, tmpl, member,
13157                                              input_location);
13158                 return error_mark_node;
13159               }
13160           }
13161         else if (TREE_CODE (member) == SCOPE_REF
13162                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
13163                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
13164           {
13165             if (complain & tf_error)
13166               {
13167                 if (TYPE_P (TREE_OPERAND (member, 0)))
13168                   error ("%qT is not a class or namespace",
13169                          TREE_OPERAND (member, 0));
13170                 else
13171                   error ("%qD is not a class or namespace",
13172                          TREE_OPERAND (member, 0));
13173               }
13174             return error_mark_node;
13175           }
13176         else if (TREE_CODE (member) == FIELD_DECL)
13177           return finish_non_static_data_member (member, object, NULL_TREE);
13178
13179         return finish_class_member_access_expr (object, member,
13180                                                 /*template_p=*/false,
13181                                                 complain);
13182       }
13183
13184     case THROW_EXPR:
13185       return build_throw
13186         (RECUR (TREE_OPERAND (t, 0)));
13187
13188     case CONSTRUCTOR:
13189       {
13190         VEC(constructor_elt,gc) *n;
13191         constructor_elt *ce;
13192         unsigned HOST_WIDE_INT idx;
13193         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13194         bool process_index_p;
13195         int newlen;
13196         bool need_copy_p = false;
13197         tree r;
13198
13199         if (type == error_mark_node)
13200           return error_mark_node;
13201
13202         /* digest_init will do the wrong thing if we let it.  */
13203         if (type && TYPE_PTRMEMFUNC_P (type))
13204           return t;
13205
13206         /* We do not want to process the index of aggregate
13207            initializers as they are identifier nodes which will be
13208            looked up by digest_init.  */
13209         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
13210
13211         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
13212         newlen = VEC_length (constructor_elt, n);
13213         FOR_EACH_VEC_ELT (constructor_elt, n, idx, ce)
13214           {
13215             if (ce->index && process_index_p)
13216               ce->index = RECUR (ce->index);
13217
13218             if (PACK_EXPANSION_P (ce->value))
13219               {
13220                 /* Substitute into the pack expansion.  */
13221                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
13222                                                   in_decl);
13223
13224                 if (ce->value == error_mark_node)
13225                   ;
13226                 else if (TREE_VEC_LENGTH (ce->value) == 1)
13227                   /* Just move the argument into place.  */
13228                   ce->value = TREE_VEC_ELT (ce->value, 0);
13229                 else
13230                   {
13231                     /* Update the length of the final CONSTRUCTOR
13232                        arguments vector, and note that we will need to
13233                        copy.*/
13234                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
13235                     need_copy_p = true;
13236                   }
13237               }
13238             else
13239               ce->value = RECUR (ce->value);
13240           }
13241
13242         if (need_copy_p)
13243           {
13244             VEC(constructor_elt,gc) *old_n = n;
13245
13246             n = VEC_alloc (constructor_elt, gc, newlen);
13247             FOR_EACH_VEC_ELT (constructor_elt, old_n, idx, ce)
13248               {
13249                 if (TREE_CODE (ce->value) == TREE_VEC)
13250                   {
13251                     int i, len = TREE_VEC_LENGTH (ce->value);
13252                     for (i = 0; i < len; ++i)
13253                       CONSTRUCTOR_APPEND_ELT (n, 0,
13254                                               TREE_VEC_ELT (ce->value, i));
13255                   }
13256                 else
13257                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
13258               }
13259           }
13260
13261         r = build_constructor (init_list_type_node, n);
13262         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
13263
13264         if (TREE_HAS_CONSTRUCTOR (t))
13265           return finish_compound_literal (type, r);
13266
13267         TREE_TYPE (r) = type;
13268         return r;
13269       }
13270
13271     case TYPEID_EXPR:
13272       {
13273         tree operand_0 = TREE_OPERAND (t, 0);
13274         if (TYPE_P (operand_0))
13275           {
13276             operand_0 = tsubst (operand_0, args, complain, in_decl);
13277             return get_typeid (operand_0);
13278           }
13279         else
13280           {
13281             operand_0 = RECUR (operand_0);
13282             return build_typeid (operand_0);
13283           }
13284       }
13285
13286     case VAR_DECL:
13287       if (!args)
13288         return t;
13289       /* Fall through */
13290
13291     case PARM_DECL:
13292       {
13293         tree r = tsubst_copy (t, args, complain, in_decl);
13294
13295         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
13296           /* If the original type was a reference, we'll be wrapped in
13297              the appropriate INDIRECT_REF.  */
13298           r = convert_from_reference (r);
13299         return r;
13300       }
13301
13302     case VA_ARG_EXPR:
13303       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
13304                              tsubst (TREE_TYPE (t), args, complain, in_decl));
13305
13306     case OFFSETOF_EXPR:
13307       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
13308
13309     case TRAIT_EXPR:
13310       {
13311         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
13312                                   complain, in_decl);
13313
13314         tree type2 = TRAIT_EXPR_TYPE2 (t);
13315         if (type2)
13316           type2 = tsubst_copy (type2, args, complain, in_decl);
13317         
13318         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
13319       }
13320
13321     case STMT_EXPR:
13322       {
13323         tree old_stmt_expr = cur_stmt_expr;
13324         tree stmt_expr = begin_stmt_expr ();
13325
13326         cur_stmt_expr = stmt_expr;
13327         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
13328                      integral_constant_expression_p);
13329         stmt_expr = finish_stmt_expr (stmt_expr, false);
13330         cur_stmt_expr = old_stmt_expr;
13331
13332         /* If the resulting list of expression statement is empty,
13333            fold it further into void_zero_node.  */
13334         if (empty_expr_stmt_p (stmt_expr))
13335           stmt_expr = void_zero_node;
13336
13337         return stmt_expr;
13338       }
13339
13340     case CONST_DECL:
13341       t = tsubst_copy (t, args, complain, in_decl);
13342       /* As in finish_id_expression, we resolve enumeration constants
13343          to their underlying values.  */
13344       if (TREE_CODE (t) == CONST_DECL)
13345         {
13346           used_types_insert (TREE_TYPE (t));
13347           return DECL_INITIAL (t);
13348         }
13349       return t;
13350
13351     case LAMBDA_EXPR:
13352       {
13353         tree r = build_lambda_expr ();
13354
13355         tree type = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
13356         TREE_TYPE (r) = type;
13357         CLASSTYPE_LAMBDA_EXPR (type) = r;
13358
13359         LAMBDA_EXPR_LOCATION (r)
13360           = LAMBDA_EXPR_LOCATION (t);
13361         LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
13362           = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
13363         LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
13364         LAMBDA_EXPR_DISCRIMINATOR (r)
13365           = (LAMBDA_EXPR_DISCRIMINATOR (t));
13366         LAMBDA_EXPR_CAPTURE_LIST (r)
13367           = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
13368         LAMBDA_EXPR_THIS_CAPTURE (r)
13369           = RECUR (LAMBDA_EXPR_THIS_CAPTURE (t));
13370         LAMBDA_EXPR_EXTRA_SCOPE (r)
13371           = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
13372
13373         /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
13374         determine_visibility (TYPE_NAME (type));
13375         /* Now that we know visibility, instantiate the type so we have a
13376            declaration of the op() for later calls to lambda_function.  */
13377         complete_type (type);
13378
13379         type = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
13380         if (type)
13381           apply_lambda_return_type (r, type);
13382
13383         return build_lambda_object (r);
13384       }
13385
13386     case TARGET_EXPR:
13387       /* We can get here for a constant initializer of non-dependent type.
13388          FIXME stop folding in cp_parser_initializer_clause.  */
13389       gcc_assert (TREE_CONSTANT (t));
13390       {
13391         tree r = get_target_expr (RECUR (TARGET_EXPR_INITIAL (t)));
13392         TREE_CONSTANT (r) = true;
13393         return r;
13394       }
13395
13396     default:
13397       /* Handle Objective-C++ constructs, if appropriate.  */
13398       {
13399         tree subst
13400           = objcp_tsubst_copy_and_build (t, args, complain,
13401                                          in_decl, /*function_p=*/false);
13402         if (subst)
13403           return subst;
13404       }
13405       return tsubst_copy (t, args, complain, in_decl);
13406     }
13407
13408 #undef RECUR
13409 }
13410
13411 /* Verify that the instantiated ARGS are valid. For type arguments,
13412    make sure that the type's linkage is ok. For non-type arguments,
13413    make sure they are constants if they are integral or enumerations.
13414    Emit an error under control of COMPLAIN, and return TRUE on error.  */
13415
13416 static bool
13417 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
13418 {
13419   if (ARGUMENT_PACK_P (t))
13420     {
13421       tree vec = ARGUMENT_PACK_ARGS (t);
13422       int len = TREE_VEC_LENGTH (vec);
13423       bool result = false;
13424       int i;
13425
13426       for (i = 0; i < len; ++i)
13427         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
13428           result = true;
13429       return result;
13430     }
13431   else if (TYPE_P (t))
13432     {
13433       /* [basic.link]: A name with no linkage (notably, the name
13434          of a class or enumeration declared in a local scope)
13435          shall not be used to declare an entity with linkage.
13436          This implies that names with no linkage cannot be used as
13437          template arguments
13438
13439          DR 757 relaxes this restriction for C++0x.  */
13440       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
13441                  : no_linkage_check (t, /*relaxed_p=*/false));
13442
13443       if (nt)
13444         {
13445           /* DR 488 makes use of a type with no linkage cause
13446              type deduction to fail.  */
13447           if (complain & tf_error)
13448             {
13449               if (TYPE_ANONYMOUS_P (nt))
13450                 error ("%qT is/uses anonymous type", t);
13451               else
13452                 error ("template argument for %qD uses local type %qT",
13453                        tmpl, t);
13454             }
13455           return true;
13456         }
13457       /* In order to avoid all sorts of complications, we do not
13458          allow variably-modified types as template arguments.  */
13459       else if (variably_modified_type_p (t, NULL_TREE))
13460         {
13461           if (complain & tf_error)
13462             error ("%qT is a variably modified type", t);
13463           return true;
13464         }
13465     }
13466   /* A non-type argument of integral or enumerated type must be a
13467      constant.  */
13468   else if (TREE_TYPE (t)
13469            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
13470            && !TREE_CONSTANT (t))
13471     {
13472       if (complain & tf_error)
13473         error ("integral expression %qE is not constant", t);
13474       return true;
13475     }
13476   return false;
13477 }
13478
13479 static bool
13480 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
13481 {
13482   int ix, len = DECL_NTPARMS (tmpl);
13483   bool result = false;
13484
13485   for (ix = 0; ix != len; ix++)
13486     {
13487       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
13488         result = true;
13489     }
13490   if (result && (complain & tf_error))
13491     error ("  trying to instantiate %qD", tmpl);
13492   return result;
13493 }
13494
13495 /* Instantiate the indicated variable or function template TMPL with
13496    the template arguments in TARG_PTR.  */
13497
13498 tree
13499 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
13500 {
13501   tree targ_ptr = orig_args;
13502   tree fndecl;
13503   tree gen_tmpl;
13504   tree spec;
13505   HOST_WIDE_INT saved_processing_template_decl;
13506
13507   if (tmpl == error_mark_node)
13508     return error_mark_node;
13509
13510   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
13511
13512   /* If this function is a clone, handle it specially.  */
13513   if (DECL_CLONED_FUNCTION_P (tmpl))
13514     {
13515       tree spec;
13516       tree clone;
13517
13518       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
13519          DECL_CLONED_FUNCTION.  */
13520       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
13521                                    targ_ptr, complain);
13522       if (spec == error_mark_node)
13523         return error_mark_node;
13524
13525       /* Look for the clone.  */
13526       FOR_EACH_CLONE (clone, spec)
13527         if (DECL_NAME (clone) == DECL_NAME (tmpl))
13528           return clone;
13529       /* We should always have found the clone by now.  */
13530       gcc_unreachable ();
13531       return NULL_TREE;
13532     }
13533
13534   /* Check to see if we already have this specialization.  */
13535   gen_tmpl = most_general_template (tmpl);
13536   if (tmpl != gen_tmpl)
13537     /* The TMPL is a partial instantiation.  To get a full set of
13538        arguments we must add the arguments used to perform the
13539        partial instantiation.  */
13540     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
13541                                             targ_ptr);
13542
13543   /* It would be nice to avoid hashing here and then again in tsubst_decl,
13544      but it doesn't seem to be on the hot path.  */
13545   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
13546
13547   gcc_assert (tmpl == gen_tmpl
13548               || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
13549                   == spec)
13550               || fndecl == NULL_TREE);
13551
13552   if (spec != NULL_TREE)
13553     return spec;
13554
13555   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
13556                                complain))
13557     return error_mark_node;
13558
13559   /* We are building a FUNCTION_DECL, during which the access of its
13560      parameters and return types have to be checked.  However this
13561      FUNCTION_DECL which is the desired context for access checking
13562      is not built yet.  We solve this chicken-and-egg problem by
13563      deferring all checks until we have the FUNCTION_DECL.  */
13564   push_deferring_access_checks (dk_deferred);
13565
13566   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
13567      (because, for example, we have encountered a non-dependent
13568      function call in the body of a template function and must now
13569      determine which of several overloaded functions will be called),
13570      within the instantiation itself we are not processing a
13571      template.  */  
13572   saved_processing_template_decl = processing_template_decl;
13573   processing_template_decl = 0;
13574   /* Substitute template parameters to obtain the specialization.  */
13575   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
13576                    targ_ptr, complain, gen_tmpl);
13577   processing_template_decl = saved_processing_template_decl;
13578   if (fndecl == error_mark_node)
13579     return error_mark_node;
13580
13581   /* Now we know the specialization, compute access previously
13582      deferred.  */
13583   push_access_scope (fndecl);
13584
13585   /* Some typedefs referenced from within the template code need to be access
13586      checked at template instantiation time, i.e now. These types were
13587      added to the template at parsing time. Let's get those and perfom
13588      the acces checks then.  */
13589   perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
13590   perform_deferred_access_checks ();
13591   pop_access_scope (fndecl);
13592   pop_deferring_access_checks ();
13593
13594   /* The DECL_TI_TEMPLATE should always be the immediate parent
13595      template, not the most general template.  */
13596   DECL_TI_TEMPLATE (fndecl) = tmpl;
13597
13598   /* If we've just instantiated the main entry point for a function,
13599      instantiate all the alternate entry points as well.  We do this
13600      by cloning the instantiation of the main entry point, not by
13601      instantiating the template clones.  */
13602   if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
13603     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
13604
13605   return fndecl;
13606 }
13607
13608 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
13609    NARGS elements of the arguments that are being used when calling
13610    it.  TARGS is a vector into which the deduced template arguments
13611    are placed.
13612
13613    Return zero for success, 2 for an incomplete match that doesn't resolve
13614    all the types, and 1 for complete failure.  An error message will be
13615    printed only for an incomplete match.
13616
13617    If FN is a conversion operator, or we are trying to produce a specific
13618    specialization, RETURN_TYPE is the return type desired.
13619
13620    The EXPLICIT_TARGS are explicit template arguments provided via a
13621    template-id.
13622
13623    The parameter STRICT is one of:
13624
13625    DEDUCE_CALL:
13626      We are deducing arguments for a function call, as in
13627      [temp.deduct.call].
13628
13629    DEDUCE_CONV:
13630      We are deducing arguments for a conversion function, as in
13631      [temp.deduct.conv].
13632
13633    DEDUCE_EXACT:
13634      We are deducing arguments when doing an explicit instantiation
13635      as in [temp.explicit], when determining an explicit specialization
13636      as in [temp.expl.spec], or when taking the address of a function
13637      template, as in [temp.deduct.funcaddr].  */
13638
13639 int
13640 fn_type_unification (tree fn,
13641                      tree explicit_targs,
13642                      tree targs,
13643                      const tree *args,
13644                      unsigned int nargs,
13645                      tree return_type,
13646                      unification_kind_t strict,
13647                      int flags)
13648 {
13649   tree parms;
13650   tree fntype;
13651   int result;
13652   bool incomplete_argument_packs_p = false;
13653
13654   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
13655
13656   fntype = TREE_TYPE (fn);
13657   if (explicit_targs)
13658     {
13659       /* [temp.deduct]
13660
13661          The specified template arguments must match the template
13662          parameters in kind (i.e., type, nontype, template), and there
13663          must not be more arguments than there are parameters;
13664          otherwise type deduction fails.
13665
13666          Nontype arguments must match the types of the corresponding
13667          nontype template parameters, or must be convertible to the
13668          types of the corresponding nontype parameters as specified in
13669          _temp.arg.nontype_, otherwise type deduction fails.
13670
13671          All references in the function type of the function template
13672          to the corresponding template parameters are replaced by the
13673          specified template argument values.  If a substitution in a
13674          template parameter or in the function type of the function
13675          template results in an invalid type, type deduction fails.  */
13676       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
13677       int i, len = TREE_VEC_LENGTH (tparms);
13678       tree converted_args;
13679       bool incomplete = false;
13680
13681       if (explicit_targs == error_mark_node)
13682         return 1;
13683
13684       converted_args
13685         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
13686                                   /*require_all_args=*/false,
13687                                   /*use_default_args=*/false));
13688       if (converted_args == error_mark_node)
13689         return 1;
13690
13691       /* Substitute the explicit args into the function type.  This is
13692          necessary so that, for instance, explicitly declared function
13693          arguments can match null pointed constants.  If we were given
13694          an incomplete set of explicit args, we must not do semantic
13695          processing during substitution as we could create partial
13696          instantiations.  */
13697       for (i = 0; i < len; i++)
13698         {
13699           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
13700           bool parameter_pack = false;
13701
13702           /* Dig out the actual parm.  */
13703           if (TREE_CODE (parm) == TYPE_DECL
13704               || TREE_CODE (parm) == TEMPLATE_DECL)
13705             {
13706               parm = TREE_TYPE (parm);
13707               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
13708             }
13709           else if (TREE_CODE (parm) == PARM_DECL)
13710             {
13711               parm = DECL_INITIAL (parm);
13712               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
13713             }
13714
13715           if (parameter_pack)
13716             {
13717               int level, idx;
13718               tree targ;
13719               template_parm_level_and_index (parm, &level, &idx);
13720
13721               /* Mark the argument pack as "incomplete". We could
13722                  still deduce more arguments during unification.  */
13723               targ = TMPL_ARG (converted_args, level, idx);
13724               if (targ)
13725                 {
13726                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
13727                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
13728                     = ARGUMENT_PACK_ARGS (targ);
13729                 }
13730
13731               /* We have some incomplete argument packs.  */
13732               incomplete_argument_packs_p = true;
13733             }
13734         }
13735
13736       if (incomplete_argument_packs_p)
13737         /* Any substitution is guaranteed to be incomplete if there
13738            are incomplete argument packs, because we can still deduce
13739            more arguments.  */
13740         incomplete = 1;
13741       else
13742         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
13743
13744       processing_template_decl += incomplete;
13745       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
13746       processing_template_decl -= incomplete;
13747
13748       if (fntype == error_mark_node)
13749         return 1;
13750
13751       /* Place the explicitly specified arguments in TARGS.  */
13752       for (i = NUM_TMPL_ARGS (converted_args); i--;)
13753         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
13754     }
13755
13756   /* Never do unification on the 'this' parameter.  */
13757   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
13758
13759   if (return_type)
13760     {
13761       tree *new_args;
13762
13763       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
13764       new_args = XALLOCAVEC (tree, nargs + 1);
13765       new_args[0] = return_type;
13766       memcpy (new_args + 1, args, nargs * sizeof (tree));
13767       args = new_args;
13768       ++nargs;
13769     }
13770
13771   /* We allow incomplete unification without an error message here
13772      because the standard doesn't seem to explicitly prohibit it.  Our
13773      callers must be ready to deal with unification failures in any
13774      event.  */
13775   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
13776                                   targs, parms, args, nargs, /*subr=*/0,
13777                                   strict, flags);
13778
13779   if (result == 0 && incomplete_argument_packs_p)
13780     {
13781       int i, len = NUM_TMPL_ARGS (targs);
13782
13783       /* Clear the "incomplete" flags on all argument packs.  */
13784       for (i = 0; i < len; i++)
13785         {
13786           tree arg = TREE_VEC_ELT (targs, i);
13787           if (ARGUMENT_PACK_P (arg))
13788             {
13789               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
13790               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
13791             }
13792         }
13793     }
13794
13795   /* Now that we have bindings for all of the template arguments,
13796      ensure that the arguments deduced for the template template
13797      parameters have compatible template parameter lists.  We cannot
13798      check this property before we have deduced all template
13799      arguments, because the template parameter types of a template
13800      template parameter might depend on prior template parameters
13801      deduced after the template template parameter.  The following
13802      ill-formed example illustrates this issue:
13803
13804        template<typename T, template<T> class C> void f(C<5>, T);
13805
13806        template<int N> struct X {};
13807
13808        void g() {
13809          f(X<5>(), 5l); // error: template argument deduction fails
13810        }
13811
13812      The template parameter list of 'C' depends on the template type
13813      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
13814      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
13815      time that we deduce 'C'.  */
13816   if (result == 0
13817       && !template_template_parm_bindings_ok_p 
13818            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
13819     return 1;
13820
13821   if (result == 0)
13822     /* All is well so far.  Now, check:
13823
13824        [temp.deduct]
13825
13826        When all template arguments have been deduced, all uses of
13827        template parameters in nondeduced contexts are replaced with
13828        the corresponding deduced argument values.  If the
13829        substitution results in an invalid type, as described above,
13830        type deduction fails.  */
13831     {
13832       tree substed = tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE);
13833       if (substed == error_mark_node)
13834         return 1;
13835
13836       /* If we're looking for an exact match, check that what we got
13837          is indeed an exact match.  It might not be if some template
13838          parameters are used in non-deduced contexts.  */
13839       if (strict == DEDUCE_EXACT)
13840         {
13841           unsigned int i;
13842
13843           tree sarg
13844             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
13845           if (return_type)
13846             sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
13847           for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
13848             if (!same_type_p (args[i], TREE_VALUE (sarg)))
13849               return 1;
13850         }
13851     }
13852
13853   return result;
13854 }
13855
13856 /* Adjust types before performing type deduction, as described in
13857    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
13858    sections are symmetric.  PARM is the type of a function parameter
13859    or the return type of the conversion function.  ARG is the type of
13860    the argument passed to the call, or the type of the value
13861    initialized with the result of the conversion function.
13862    ARG_EXPR is the original argument expression, which may be null.  */
13863
13864 static int
13865 maybe_adjust_types_for_deduction (unification_kind_t strict,
13866                                   tree* parm,
13867                                   tree* arg,
13868                                   tree arg_expr)
13869 {
13870   int result = 0;
13871
13872   switch (strict)
13873     {
13874     case DEDUCE_CALL:
13875       break;
13876
13877     case DEDUCE_CONV:
13878       {
13879         /* Swap PARM and ARG throughout the remainder of this
13880            function; the handling is precisely symmetric since PARM
13881            will initialize ARG rather than vice versa.  */
13882         tree* temp = parm;
13883         parm = arg;
13884         arg = temp;
13885         break;
13886       }
13887
13888     case DEDUCE_EXACT:
13889       /* Core issue #873: Do the DR606 thing (see below) for these cases,
13890          too, but here handle it by stripping the reference from PARM
13891          rather than by adding it to ARG.  */
13892       if (TREE_CODE (*parm) == REFERENCE_TYPE
13893           && TYPE_REF_IS_RVALUE (*parm)
13894           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
13895           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
13896           && TREE_CODE (*arg) == REFERENCE_TYPE
13897           && !TYPE_REF_IS_RVALUE (*arg))
13898         *parm = TREE_TYPE (*parm);
13899       /* Nothing else to do in this case.  */
13900       return 0;
13901
13902     default:
13903       gcc_unreachable ();
13904     }
13905
13906   if (TREE_CODE (*parm) != REFERENCE_TYPE)
13907     {
13908       /* [temp.deduct.call]
13909
13910          If P is not a reference type:
13911
13912          --If A is an array type, the pointer type produced by the
13913          array-to-pointer standard conversion (_conv.array_) is
13914          used in place of A for type deduction; otherwise,
13915
13916          --If A is a function type, the pointer type produced by
13917          the function-to-pointer standard conversion
13918          (_conv.func_) is used in place of A for type deduction;
13919          otherwise,
13920
13921          --If A is a cv-qualified type, the top level
13922          cv-qualifiers of A's type are ignored for type
13923          deduction.  */
13924       if (TREE_CODE (*arg) == ARRAY_TYPE)
13925         *arg = build_pointer_type (TREE_TYPE (*arg));
13926       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
13927         *arg = build_pointer_type (*arg);
13928       else
13929         *arg = TYPE_MAIN_VARIANT (*arg);
13930     }
13931
13932   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
13933      of the form T&&, where T is a template parameter, and the argument
13934      is an lvalue, T is deduced as A& */
13935   if (TREE_CODE (*parm) == REFERENCE_TYPE
13936       && TYPE_REF_IS_RVALUE (*parm)
13937       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
13938       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
13939       && (arg_expr ? real_lvalue_p (arg_expr)
13940           /* try_one_overload doesn't provide an arg_expr, but
13941              functions are always lvalues.  */
13942           : TREE_CODE (*arg) == FUNCTION_TYPE))
13943     *arg = build_reference_type (*arg);
13944
13945   /* [temp.deduct.call]
13946
13947      If P is a cv-qualified type, the top level cv-qualifiers
13948      of P's type are ignored for type deduction.  If P is a
13949      reference type, the type referred to by P is used for
13950      type deduction.  */
13951   *parm = TYPE_MAIN_VARIANT (*parm);
13952   if (TREE_CODE (*parm) == REFERENCE_TYPE)
13953     {
13954       *parm = TREE_TYPE (*parm);
13955       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
13956     }
13957
13958   /* DR 322. For conversion deduction, remove a reference type on parm
13959      too (which has been swapped into ARG).  */
13960   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
13961     *arg = TREE_TYPE (*arg);
13962
13963   return result;
13964 }
13965
13966 /* Most parms like fn_type_unification.
13967
13968    If SUBR is 1, we're being called recursively (to unify the
13969    arguments of a function or method parameter of a function
13970    template). */
13971
13972 static int
13973 type_unification_real (tree tparms,
13974                        tree targs,
13975                        tree xparms,
13976                        const tree *xargs,
13977                        unsigned int xnargs,
13978                        int subr,
13979                        unification_kind_t strict,
13980                        int flags)
13981 {
13982   tree parm, arg, arg_expr;
13983   int i;
13984   int ntparms = TREE_VEC_LENGTH (tparms);
13985   int sub_strict;
13986   int saw_undeduced = 0;
13987   tree parms;
13988   const tree *args;
13989   unsigned int nargs;
13990   unsigned int ia;
13991
13992   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
13993   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
13994   gcc_assert (ntparms > 0);
13995
13996   /* Reset the number of non-defaulted template arguments contained
13997      in in TARGS.  */
13998   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
13999
14000   switch (strict)
14001     {
14002     case DEDUCE_CALL:
14003       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
14004                     | UNIFY_ALLOW_DERIVED);
14005       break;
14006
14007     case DEDUCE_CONV:
14008       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
14009       break;
14010
14011     case DEDUCE_EXACT:
14012       sub_strict = UNIFY_ALLOW_NONE;
14013       break;
14014
14015     default:
14016       gcc_unreachable ();
14017     }
14018
14019  again:
14020   parms = xparms;
14021   args = xargs;
14022   nargs = xnargs;
14023
14024   ia = 0;
14025   while (parms && parms != void_list_node
14026          && ia < nargs)
14027     {
14028       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
14029         break;
14030
14031       parm = TREE_VALUE (parms);
14032       parms = TREE_CHAIN (parms);
14033       arg = args[ia];
14034       ++ia;
14035       arg_expr = NULL;
14036
14037       if (arg == error_mark_node)
14038         return 1;
14039       if (arg == unknown_type_node)
14040         /* We can't deduce anything from this, but we might get all the
14041            template args from other function args.  */
14042         continue;
14043
14044       /* Conversions will be performed on a function argument that
14045          corresponds with a function parameter that contains only
14046          non-deducible template parameters and explicitly specified
14047          template parameters.  */
14048       if (!uses_template_parms (parm))
14049         {
14050           tree type;
14051
14052           if (!TYPE_P (arg))
14053             type = TREE_TYPE (arg);
14054           else
14055             type = arg;
14056
14057           if (same_type_p (parm, type))
14058             continue;
14059           if (strict != DEDUCE_EXACT
14060               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
14061                                   flags))
14062             continue;
14063
14064           return 1;
14065         }
14066
14067       if (!TYPE_P (arg))
14068         {
14069           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
14070           if (type_unknown_p (arg))
14071             {
14072               /* [temp.deduct.type] 
14073
14074                  A template-argument can be deduced from a pointer to
14075                  function or pointer to member function argument if
14076                  the set of overloaded functions does not contain
14077                  function templates and at most one of a set of
14078                  overloaded functions provides a unique match.  */
14079               if (resolve_overloaded_unification
14080                   (tparms, targs, parm, arg, strict, sub_strict))
14081                 continue;
14082
14083               return 1;
14084             }
14085           arg_expr = arg;
14086           arg = unlowered_expr_type (arg);
14087           if (arg == error_mark_node)
14088             return 1;
14089         }
14090
14091       {
14092         int arg_strict = sub_strict;
14093
14094         if (!subr)
14095           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
14096                                                           arg_expr);
14097
14098         if (arg == init_list_type_node && arg_expr)
14099           arg = arg_expr;
14100         if (unify (tparms, targs, parm, arg, arg_strict))
14101           return 1;
14102       }
14103     }
14104
14105
14106   if (parms 
14107       && parms != void_list_node
14108       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
14109     {
14110       /* Unify the remaining arguments with the pack expansion type.  */
14111       tree argvec;
14112       tree parmvec = make_tree_vec (1);
14113
14114       /* Allocate a TREE_VEC and copy in all of the arguments */ 
14115       argvec = make_tree_vec (nargs - ia);
14116       for (i = 0; ia < nargs; ++ia, ++i)
14117         TREE_VEC_ELT (argvec, i) = args[ia];
14118
14119       /* Copy the parameter into parmvec.  */
14120       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
14121       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
14122                                 /*call_args_p=*/true, /*subr=*/subr))
14123         return 1;
14124
14125       /* Advance to the end of the list of parameters.  */
14126       parms = TREE_CHAIN (parms);
14127     }
14128
14129   /* Fail if we've reached the end of the parm list, and more args
14130      are present, and the parm list isn't variadic.  */
14131   if (ia < nargs && parms == void_list_node)
14132     return 1;
14133   /* Fail if parms are left and they don't have default values.  */
14134   if (parms && parms != void_list_node
14135       && TREE_PURPOSE (parms) == NULL_TREE)
14136     return 1;
14137
14138   if (!subr)
14139     for (i = 0; i < ntparms; i++)
14140       if (!TREE_VEC_ELT (targs, i))
14141         {
14142           tree tparm;
14143
14144           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
14145             continue;
14146
14147           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14148
14149           /* If this is an undeduced nontype parameter that depends on
14150              a type parameter, try another pass; its type may have been
14151              deduced from a later argument than the one from which
14152              this parameter can be deduced.  */
14153           if (TREE_CODE (tparm) == PARM_DECL
14154               && uses_template_parms (TREE_TYPE (tparm))
14155               && !saw_undeduced++)
14156             goto again;
14157
14158           /* Core issue #226 (C++0x) [temp.deduct]:
14159
14160                If a template argument has not been deduced, its
14161                default template argument, if any, is used. 
14162
14163              When we are in C++98 mode, TREE_PURPOSE will either
14164              be NULL_TREE or ERROR_MARK_NODE, so we do not need
14165              to explicitly check cxx_dialect here.  */
14166           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
14167             {
14168               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14169               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
14170               arg = tsubst_template_arg (arg, targs, tf_none, NULL_TREE);
14171               arg = convert_template_argument (parm, arg, targs, tf_none,
14172                                                i, NULL_TREE);
14173               if (arg == error_mark_node)
14174                 return 1;
14175               else
14176                 {
14177                   TREE_VEC_ELT (targs, i) = arg;
14178                   /* The position of the first default template argument,
14179                      is also the number of non-defaulted arguments in TARGS.
14180                      Record that.  */
14181                   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
14182                     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
14183                   continue;
14184                 }
14185             }
14186
14187           /* If the type parameter is a parameter pack, then it will
14188              be deduced to an empty parameter pack.  */
14189           if (template_parameter_pack_p (tparm))
14190             {
14191               tree arg;
14192
14193               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
14194                 {
14195                   arg = make_node (NONTYPE_ARGUMENT_PACK);
14196                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
14197                   TREE_CONSTANT (arg) = 1;
14198                 }
14199               else
14200                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
14201
14202               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
14203
14204               TREE_VEC_ELT (targs, i) = arg;
14205               continue;
14206             }
14207
14208           return 2;
14209         }
14210 #ifdef ENABLE_CHECKING
14211   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
14212     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
14213 #endif
14214
14215   return 0;
14216 }
14217
14218 /* Subroutine of type_unification_real.  Args are like the variables
14219    at the call site.  ARG is an overloaded function (or template-id);
14220    we try deducing template args from each of the overloads, and if
14221    only one succeeds, we go with that.  Modifies TARGS and returns
14222    true on success.  */
14223
14224 static bool
14225 resolve_overloaded_unification (tree tparms,
14226                                 tree targs,
14227                                 tree parm,
14228                                 tree arg,
14229                                 unification_kind_t strict,
14230                                 int sub_strict)
14231 {
14232   tree tempargs = copy_node (targs);
14233   int good = 0;
14234   tree goodfn = NULL_TREE;
14235   bool addr_p;
14236
14237   if (TREE_CODE (arg) == ADDR_EXPR)
14238     {
14239       arg = TREE_OPERAND (arg, 0);
14240       addr_p = true;
14241     }
14242   else
14243     addr_p = false;
14244
14245   if (TREE_CODE (arg) == COMPONENT_REF)
14246     /* Handle `&x' where `x' is some static or non-static member
14247        function name.  */
14248     arg = TREE_OPERAND (arg, 1);
14249
14250   if (TREE_CODE (arg) == OFFSET_REF)
14251     arg = TREE_OPERAND (arg, 1);
14252
14253   /* Strip baselink information.  */
14254   if (BASELINK_P (arg))
14255     arg = BASELINK_FUNCTIONS (arg);
14256
14257   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
14258     {
14259       /* If we got some explicit template args, we need to plug them into
14260          the affected templates before we try to unify, in case the
14261          explicit args will completely resolve the templates in question.  */
14262
14263       tree expl_subargs = TREE_OPERAND (arg, 1);
14264       arg = TREE_OPERAND (arg, 0);
14265
14266       for (; arg; arg = OVL_NEXT (arg))
14267         {
14268           tree fn = OVL_CURRENT (arg);
14269           tree subargs, elem;
14270
14271           if (TREE_CODE (fn) != TEMPLATE_DECL)
14272             continue;
14273
14274           ++processing_template_decl;
14275           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
14276                                   expl_subargs, /*check_ret=*/false);
14277           if (subargs)
14278             {
14279               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
14280               if (try_one_overload (tparms, targs, tempargs, parm,
14281                                     elem, strict, sub_strict, addr_p)
14282                   && (!goodfn || !decls_match (goodfn, elem)))
14283                 {
14284                   goodfn = elem;
14285                   ++good;
14286                 }
14287             }
14288           --processing_template_decl;
14289         }
14290     }
14291   else if (TREE_CODE (arg) != OVERLOAD
14292            && TREE_CODE (arg) != FUNCTION_DECL)
14293     /* If ARG is, for example, "(0, &f)" then its type will be unknown
14294        -- but the deduction does not succeed because the expression is
14295        not just the function on its own.  */
14296     return false;
14297   else
14298     for (; arg; arg = OVL_NEXT (arg))
14299       if (try_one_overload (tparms, targs, tempargs, parm,
14300                             TREE_TYPE (OVL_CURRENT (arg)),
14301                             strict, sub_strict, addr_p)
14302           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
14303         {
14304           goodfn = OVL_CURRENT (arg);
14305           ++good;
14306         }
14307
14308   /* [temp.deduct.type] A template-argument can be deduced from a pointer
14309      to function or pointer to member function argument if the set of
14310      overloaded functions does not contain function templates and at most
14311      one of a set of overloaded functions provides a unique match.
14312
14313      So if we found multiple possibilities, we return success but don't
14314      deduce anything.  */
14315
14316   if (good == 1)
14317     {
14318       int i = TREE_VEC_LENGTH (targs);
14319       for (; i--; )
14320         if (TREE_VEC_ELT (tempargs, i))
14321           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
14322     }
14323   if (good)
14324     return true;
14325
14326   return false;
14327 }
14328
14329 /* Core DR 115: In contexts where deduction is done and fails, or in
14330    contexts where deduction is not done, if a template argument list is
14331    specified and it, along with any default template arguments, identifies
14332    a single function template specialization, then the template-id is an
14333    lvalue for the function template specialization.  */
14334
14335 tree
14336 resolve_nondeduced_context (tree orig_expr)
14337 {
14338   tree expr, offset, baselink;
14339   bool addr;
14340
14341   if (!type_unknown_p (orig_expr))
14342     return orig_expr;
14343
14344   expr = orig_expr;
14345   addr = false;
14346   offset = NULL_TREE;
14347   baselink = NULL_TREE;
14348
14349   if (TREE_CODE (expr) == ADDR_EXPR)
14350     {
14351       expr = TREE_OPERAND (expr, 0);
14352       addr = true;
14353     }
14354   if (TREE_CODE (expr) == OFFSET_REF)
14355     {
14356       offset = expr;
14357       expr = TREE_OPERAND (expr, 1);
14358     }
14359   if (TREE_CODE (expr) == BASELINK)
14360     {
14361       baselink = expr;
14362       expr = BASELINK_FUNCTIONS (expr);
14363     }
14364
14365   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
14366     {
14367       int good = 0;
14368       tree goodfn = NULL_TREE;
14369
14370       /* If we got some explicit template args, we need to plug them into
14371          the affected templates before we try to unify, in case the
14372          explicit args will completely resolve the templates in question.  */
14373
14374       tree expl_subargs = TREE_OPERAND (expr, 1);
14375       tree arg = TREE_OPERAND (expr, 0);
14376       tree badfn = NULL_TREE;
14377       tree badargs = NULL_TREE;
14378
14379       for (; arg; arg = OVL_NEXT (arg))
14380         {
14381           tree fn = OVL_CURRENT (arg);
14382           tree subargs, elem;
14383
14384           if (TREE_CODE (fn) != TEMPLATE_DECL)
14385             continue;
14386
14387           ++processing_template_decl;
14388           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
14389                                   expl_subargs, /*check_ret=*/false);
14390           if (subargs && !any_dependent_template_arguments_p (subargs))
14391             {
14392               elem = instantiate_template (fn, subargs, tf_none);
14393               if (elem == error_mark_node)
14394                 {
14395                   badfn = fn;
14396                   badargs = subargs;
14397                 }
14398               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
14399                 {
14400                   goodfn = elem;
14401                   ++good;
14402                 }
14403             }
14404           --processing_template_decl;
14405         }
14406       if (good == 1)
14407         {
14408           expr = goodfn;
14409           if (baselink)
14410             expr = build_baselink (BASELINK_BINFO (baselink),
14411                                    BASELINK_ACCESS_BINFO (baselink),
14412                                    expr, BASELINK_OPTYPE (baselink));
14413           if (offset)
14414             {
14415               tree base
14416                 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
14417               expr = build_offset_ref (base, expr, addr);
14418             }
14419           if (addr)
14420             expr = cp_build_addr_expr (expr, tf_warning_or_error);
14421           return expr;
14422         }
14423       else if (good == 0 && badargs)
14424         /* There were no good options and at least one bad one, so let the
14425            user know what the problem is.  */
14426         instantiate_template (badfn, badargs, tf_warning_or_error);
14427     }
14428   return orig_expr;
14429 }
14430
14431 /* Subroutine of resolve_overloaded_unification; does deduction for a single
14432    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
14433    different overloads deduce different arguments for a given parm.
14434    ADDR_P is true if the expression for which deduction is being
14435    performed was of the form "& fn" rather than simply "fn".
14436
14437    Returns 1 on success.  */
14438
14439 static int
14440 try_one_overload (tree tparms,
14441                   tree orig_targs,
14442                   tree targs,
14443                   tree parm,
14444                   tree arg,
14445                   unification_kind_t strict,
14446                   int sub_strict,
14447                   bool addr_p)
14448 {
14449   int nargs;
14450   tree tempargs;
14451   int i;
14452
14453   /* [temp.deduct.type] A template-argument can be deduced from a pointer
14454      to function or pointer to member function argument if the set of
14455      overloaded functions does not contain function templates and at most
14456      one of a set of overloaded functions provides a unique match.
14457
14458      So if this is a template, just return success.  */
14459
14460   if (uses_template_parms (arg))
14461     return 1;
14462
14463   if (TREE_CODE (arg) == METHOD_TYPE)
14464     arg = build_ptrmemfunc_type (build_pointer_type (arg));
14465   else if (addr_p)
14466     arg = build_pointer_type (arg);
14467
14468   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
14469
14470   /* We don't copy orig_targs for this because if we have already deduced
14471      some template args from previous args, unify would complain when we
14472      try to deduce a template parameter for the same argument, even though
14473      there isn't really a conflict.  */
14474   nargs = TREE_VEC_LENGTH (targs);
14475   tempargs = make_tree_vec (nargs);
14476
14477   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
14478     return 0;
14479
14480   /* First make sure we didn't deduce anything that conflicts with
14481      explicitly specified args.  */
14482   for (i = nargs; i--; )
14483     {
14484       tree elt = TREE_VEC_ELT (tempargs, i);
14485       tree oldelt = TREE_VEC_ELT (orig_targs, i);
14486
14487       if (!elt)
14488         /*NOP*/;
14489       else if (uses_template_parms (elt))
14490         /* Since we're unifying against ourselves, we will fill in
14491            template args used in the function parm list with our own
14492            template parms.  Discard them.  */
14493         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
14494       else if (oldelt && !template_args_equal (oldelt, elt))
14495         return 0;
14496     }
14497
14498   for (i = nargs; i--; )
14499     {
14500       tree elt = TREE_VEC_ELT (tempargs, i);
14501
14502       if (elt)
14503         TREE_VEC_ELT (targs, i) = elt;
14504     }
14505
14506   return 1;
14507 }
14508
14509 /* PARM is a template class (perhaps with unbound template
14510    parameters).  ARG is a fully instantiated type.  If ARG can be
14511    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
14512    TARGS are as for unify.  */
14513
14514 static tree
14515 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
14516 {
14517   tree copy_of_targs;
14518
14519   if (!CLASSTYPE_TEMPLATE_INFO (arg)
14520       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
14521           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
14522     return NULL_TREE;
14523
14524   /* We need to make a new template argument vector for the call to
14525      unify.  If we used TARGS, we'd clutter it up with the result of
14526      the attempted unification, even if this class didn't work out.
14527      We also don't want to commit ourselves to all the unifications
14528      we've already done, since unification is supposed to be done on
14529      an argument-by-argument basis.  In other words, consider the
14530      following pathological case:
14531
14532        template <int I, int J, int K>
14533        struct S {};
14534
14535        template <int I, int J>
14536        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
14537
14538        template <int I, int J, int K>
14539        void f(S<I, J, K>, S<I, I, I>);
14540
14541        void g() {
14542          S<0, 0, 0> s0;
14543          S<0, 1, 2> s2;
14544
14545          f(s0, s2);
14546        }
14547
14548      Now, by the time we consider the unification involving `s2', we
14549      already know that we must have `f<0, 0, 0>'.  But, even though
14550      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
14551      because there are two ways to unify base classes of S<0, 1, 2>
14552      with S<I, I, I>.  If we kept the already deduced knowledge, we
14553      would reject the possibility I=1.  */
14554   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
14555
14556   /* If unification failed, we're done.  */
14557   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
14558              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
14559     return NULL_TREE;
14560
14561   return arg;
14562 }
14563
14564 /* Given a template type PARM and a class type ARG, find the unique
14565    base type in ARG that is an instance of PARM.  We do not examine
14566    ARG itself; only its base-classes.  If there is not exactly one
14567    appropriate base class, return NULL_TREE.  PARM may be the type of
14568    a partial specialization, as well as a plain template type.  Used
14569    by unify.  */
14570
14571 static tree
14572 get_template_base (tree tparms, tree targs, tree parm, tree arg)
14573 {
14574   tree rval = NULL_TREE;
14575   tree binfo;
14576
14577   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
14578
14579   binfo = TYPE_BINFO (complete_type (arg));
14580   if (!binfo)
14581     /* The type could not be completed.  */
14582     return NULL_TREE;
14583
14584   /* Walk in inheritance graph order.  The search order is not
14585      important, and this avoids multiple walks of virtual bases.  */
14586   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
14587     {
14588       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
14589
14590       if (r)
14591         {
14592           /* If there is more than one satisfactory baseclass, then:
14593
14594                [temp.deduct.call]
14595
14596               If they yield more than one possible deduced A, the type
14597               deduction fails.
14598
14599              applies.  */
14600           if (rval && !same_type_p (r, rval))
14601             return NULL_TREE;
14602
14603           rval = r;
14604         }
14605     }
14606
14607   return rval;
14608 }
14609
14610 /* Returns the level of DECL, which declares a template parameter.  */
14611
14612 static int
14613 template_decl_level (tree decl)
14614 {
14615   switch (TREE_CODE (decl))
14616     {
14617     case TYPE_DECL:
14618     case TEMPLATE_DECL:
14619       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
14620
14621     case PARM_DECL:
14622       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
14623
14624     default:
14625       gcc_unreachable ();
14626     }
14627   return 0;
14628 }
14629
14630 /* Decide whether ARG can be unified with PARM, considering only the
14631    cv-qualifiers of each type, given STRICT as documented for unify.
14632    Returns nonzero iff the unification is OK on that basis.  */
14633
14634 static int
14635 check_cv_quals_for_unify (int strict, tree arg, tree parm)
14636 {
14637   int arg_quals = cp_type_quals (arg);
14638   int parm_quals = cp_type_quals (parm);
14639
14640   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14641       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
14642     {
14643       /*  Although a CVR qualifier is ignored when being applied to a
14644           substituted template parameter ([8.3.2]/1 for example), that
14645           does not allow us to unify "const T" with "int&" because both
14646           types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
14647           It is ok when we're allowing additional CV qualifiers
14648           at the outer level [14.8.2.1]/3,1st bullet.  */
14649       if ((TREE_CODE (arg) == REFERENCE_TYPE
14650            || TREE_CODE (arg) == FUNCTION_TYPE
14651            || TREE_CODE (arg) == METHOD_TYPE)
14652           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
14653         return 0;
14654
14655       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
14656           && (parm_quals & TYPE_QUAL_RESTRICT))
14657         return 0;
14658     }
14659
14660   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
14661       && (arg_quals & parm_quals) != parm_quals)
14662     return 0;
14663
14664   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
14665       && (parm_quals & arg_quals) != arg_quals)
14666     return 0;
14667
14668   return 1;
14669 }
14670
14671 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
14672 void 
14673 template_parm_level_and_index (tree parm, int* level, int* index)
14674 {
14675   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14676       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
14677       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
14678     {
14679       *index = TEMPLATE_TYPE_IDX (parm);
14680       *level = TEMPLATE_TYPE_LEVEL (parm);
14681     }
14682   else
14683     {
14684       *index = TEMPLATE_PARM_IDX (parm);
14685       *level = TEMPLATE_PARM_LEVEL (parm);
14686     }
14687 }
14688
14689 /* Unifies the remaining arguments in PACKED_ARGS with the pack
14690    expansion at the end of PACKED_PARMS. Returns 0 if the type
14691    deduction succeeds, 1 otherwise. STRICT is the same as in
14692    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
14693    call argument list. We'll need to adjust the arguments to make them
14694    types. SUBR tells us if this is from a recursive call to
14695    type_unification_real.  */
14696 int
14697 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
14698                       tree packed_args, int strict, bool call_args_p,
14699                       bool subr)
14700 {
14701   tree parm 
14702     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
14703   tree pattern = PACK_EXPANSION_PATTERN (parm);
14704   tree pack, packs = NULL_TREE;
14705   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
14706   int len = TREE_VEC_LENGTH (packed_args);
14707
14708   /* Determine the parameter packs we will be deducing from the
14709      pattern, and record their current deductions.  */
14710   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
14711        pack; pack = TREE_CHAIN (pack))
14712     {
14713       tree parm_pack = TREE_VALUE (pack);
14714       int idx, level;
14715
14716       /* Determine the index and level of this parameter pack.  */
14717       template_parm_level_and_index (parm_pack, &level, &idx);
14718
14719       /* Keep track of the parameter packs and their corresponding
14720          argument packs.  */
14721       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
14722       TREE_TYPE (packs) = make_tree_vec (len - start);
14723     }
14724   
14725   /* Loop through all of the arguments that have not yet been
14726      unified and unify each with the pattern.  */
14727   for (i = start; i < len; i++)
14728     {
14729       tree parm = pattern;
14730
14731       /* For each parameter pack, clear out the deduced value so that
14732          we can deduce it again.  */
14733       for (pack = packs; pack; pack = TREE_CHAIN (pack))
14734         {
14735           int idx, level;
14736           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14737
14738           TMPL_ARG (targs, level, idx) = NULL_TREE;
14739         }
14740
14741       /* Unify the pattern with the current argument.  */
14742       {
14743         tree arg = TREE_VEC_ELT (packed_args, i);
14744         tree arg_expr = NULL_TREE;
14745         int arg_strict = strict;
14746         bool skip_arg_p = false;
14747
14748         if (call_args_p)
14749           {
14750             int sub_strict;
14751
14752             /* This mirrors what we do in type_unification_real.  */
14753             switch (strict)
14754               {
14755               case DEDUCE_CALL:
14756                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
14757                               | UNIFY_ALLOW_MORE_CV_QUAL
14758                               | UNIFY_ALLOW_DERIVED);
14759                 break;
14760                 
14761               case DEDUCE_CONV:
14762                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
14763                 break;
14764                 
14765               case DEDUCE_EXACT:
14766                 sub_strict = UNIFY_ALLOW_NONE;
14767                 break;
14768                 
14769               default:
14770                 gcc_unreachable ();
14771               }
14772
14773             if (!TYPE_P (arg))
14774               {
14775                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
14776                 if (type_unknown_p (arg))
14777                   {
14778                     /* [temp.deduct.type] A template-argument can be
14779                        deduced from a pointer to function or pointer
14780                        to member function argument if the set of
14781                        overloaded functions does not contain function
14782                        templates and at most one of a set of
14783                        overloaded functions provides a unique
14784                        match.  */
14785
14786                     if (resolve_overloaded_unification
14787                         (tparms, targs, parm, arg,
14788                          (unification_kind_t) strict,
14789                          sub_strict)
14790                         != 0)
14791                       return 1;
14792                     skip_arg_p = true;
14793                   }
14794
14795                 if (!skip_arg_p)
14796                   {
14797                     arg_expr = arg;
14798                     arg = unlowered_expr_type (arg);
14799                     if (arg == error_mark_node)
14800                       return 1;
14801                   }
14802               }
14803       
14804             arg_strict = sub_strict;
14805
14806             if (!subr)
14807               arg_strict |= 
14808                 maybe_adjust_types_for_deduction ((unification_kind_t) strict,
14809                                                   &parm, &arg, arg_expr);
14810           }
14811
14812         if (!skip_arg_p)
14813           {
14814             /* For deduction from an init-list we need the actual list.  */
14815             if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
14816               arg = arg_expr;
14817             if (unify (tparms, targs, parm, arg, arg_strict))
14818               return 1;
14819           }
14820       }
14821
14822       /* For each parameter pack, collect the deduced value.  */
14823       for (pack = packs; pack; pack = TREE_CHAIN (pack))
14824         {
14825           int idx, level;
14826           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14827
14828           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
14829             TMPL_ARG (targs, level, idx);
14830         }
14831     }
14832
14833   /* Verify that the results of unification with the parameter packs
14834      produce results consistent with what we've seen before, and make
14835      the deduced argument packs available.  */
14836   for (pack = packs; pack; pack = TREE_CHAIN (pack))
14837     {
14838       tree old_pack = TREE_VALUE (pack);
14839       tree new_args = TREE_TYPE (pack);
14840       int i, len = TREE_VEC_LENGTH (new_args);
14841       int idx, level;
14842       bool nondeduced_p = false;
14843
14844       /* By default keep the original deduced argument pack.
14845          If necessary, more specific code is going to update the
14846          resulting deduced argument later down in this function.  */
14847       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14848       TMPL_ARG (targs, level, idx) = old_pack;
14849
14850       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
14851          actually deduce anything.  */
14852       for (i = 0; i < len && !nondeduced_p; ++i)
14853         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
14854           nondeduced_p = true;
14855       if (nondeduced_p)
14856         continue;
14857
14858       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
14859         {
14860           /* Prepend the explicit arguments onto NEW_ARGS.  */
14861           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
14862           tree old_args = new_args;
14863           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
14864           int len = explicit_len + TREE_VEC_LENGTH (old_args);
14865
14866           /* Copy the explicit arguments.  */
14867           new_args = make_tree_vec (len);
14868           for (i = 0; i < explicit_len; i++)
14869             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
14870
14871           /* Copy the deduced arguments.  */
14872           for (; i < len; i++)
14873             TREE_VEC_ELT (new_args, i) =
14874               TREE_VEC_ELT (old_args, i - explicit_len);
14875         }
14876
14877       if (!old_pack)
14878         {
14879           tree result;
14880           /* Build the deduced *_ARGUMENT_PACK.  */
14881           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
14882             {
14883               result = make_node (NONTYPE_ARGUMENT_PACK);
14884               TREE_TYPE (result) = 
14885                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
14886               TREE_CONSTANT (result) = 1;
14887             }
14888           else
14889             result = cxx_make_type (TYPE_ARGUMENT_PACK);
14890
14891           SET_ARGUMENT_PACK_ARGS (result, new_args);
14892
14893           /* Note the deduced argument packs for this parameter
14894              pack.  */
14895           TMPL_ARG (targs, level, idx) = result;
14896         }
14897       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
14898                && (ARGUMENT_PACK_ARGS (old_pack) 
14899                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
14900         {
14901           /* We only had the explicitly-provided arguments before, but
14902              now we have a complete set of arguments.  */
14903           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
14904
14905           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
14906           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
14907           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
14908         }
14909       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
14910                                     new_args))
14911         /* Inconsistent unification of this parameter pack.  */
14912         return 1;
14913     }
14914
14915   return 0;
14916 }
14917
14918 /* Deduce the value of template parameters.  TPARMS is the (innermost)
14919    set of template parameters to a template.  TARGS is the bindings
14920    for those template parameters, as determined thus far; TARGS may
14921    include template arguments for outer levels of template parameters
14922    as well.  PARM is a parameter to a template function, or a
14923    subcomponent of that parameter; ARG is the corresponding argument.
14924    This function attempts to match PARM with ARG in a manner
14925    consistent with the existing assignments in TARGS.  If more values
14926    are deduced, then TARGS is updated.
14927
14928    Returns 0 if the type deduction succeeds, 1 otherwise.  The
14929    parameter STRICT is a bitwise or of the following flags:
14930
14931      UNIFY_ALLOW_NONE:
14932        Require an exact match between PARM and ARG.
14933      UNIFY_ALLOW_MORE_CV_QUAL:
14934        Allow the deduced ARG to be more cv-qualified (by qualification
14935        conversion) than ARG.
14936      UNIFY_ALLOW_LESS_CV_QUAL:
14937        Allow the deduced ARG to be less cv-qualified than ARG.
14938      UNIFY_ALLOW_DERIVED:
14939        Allow the deduced ARG to be a template base class of ARG,
14940        or a pointer to a template base class of the type pointed to by
14941        ARG.
14942      UNIFY_ALLOW_INTEGER:
14943        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
14944        case for more information.
14945      UNIFY_ALLOW_OUTER_LEVEL:
14946        This is the outermost level of a deduction. Used to determine validity
14947        of qualification conversions. A valid qualification conversion must
14948        have const qualified pointers leading up to the inner type which
14949        requires additional CV quals, except at the outer level, where const
14950        is not required [conv.qual]. It would be normal to set this flag in
14951        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
14952      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
14953        This is the outermost level of a deduction, and PARM can be more CV
14954        qualified at this point.
14955      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
14956        This is the outermost level of a deduction, and PARM can be less CV
14957        qualified at this point.  */
14958
14959 static int
14960 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
14961 {
14962   int idx;
14963   tree targ;
14964   tree tparm;
14965   int strict_in = strict;
14966
14967   /* I don't think this will do the right thing with respect to types.
14968      But the only case I've seen it in so far has been array bounds, where
14969      signedness is the only information lost, and I think that will be
14970      okay.  */
14971   while (TREE_CODE (parm) == NOP_EXPR)
14972     parm = TREE_OPERAND (parm, 0);
14973
14974   if (arg == error_mark_node)
14975     return 1;
14976   if (arg == unknown_type_node
14977       || arg == init_list_type_node)
14978     /* We can't deduce anything from this, but we might get all the
14979        template args from other function args.  */
14980     return 0;
14981
14982   /* If PARM uses template parameters, then we can't bail out here,
14983      even if ARG == PARM, since we won't record unifications for the
14984      template parameters.  We might need them if we're trying to
14985      figure out which of two things is more specialized.  */
14986   if (arg == parm && !uses_template_parms (parm))
14987     return 0;
14988
14989   /* Handle init lists early, so the rest of the function can assume
14990      we're dealing with a type. */
14991   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
14992     {
14993       tree elt, elttype;
14994       unsigned i;
14995       tree orig_parm = parm;
14996
14997       /* Replace T with std::initializer_list<T> for deduction.  */
14998       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14999           && flag_deduce_init_list)
15000         parm = listify (parm);
15001
15002       if (!is_std_init_list (parm))
15003         /* We can only deduce from an initializer list argument if the
15004            parameter is std::initializer_list; otherwise this is a
15005            non-deduced context. */
15006         return 0;
15007
15008       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
15009
15010       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
15011         {
15012           int elt_strict = strict;
15013
15014           if (elt == error_mark_node)
15015             return 1;
15016
15017           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
15018             {
15019               tree type = TREE_TYPE (elt);
15020               /* It should only be possible to get here for a call.  */
15021               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
15022               elt_strict |= maybe_adjust_types_for_deduction
15023                 (DEDUCE_CALL, &elttype, &type, elt);
15024               elt = type;
15025             }
15026
15027           if (unify (tparms, targs, elttype, elt, elt_strict))
15028             return 1;
15029         }
15030
15031       /* If the std::initializer_list<T> deduction worked, replace the
15032          deduced A with std::initializer_list<A>.  */
15033       if (orig_parm != parm)
15034         {
15035           idx = TEMPLATE_TYPE_IDX (orig_parm);
15036           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15037           targ = listify (targ);
15038           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
15039         }
15040       return 0;
15041     }
15042
15043   /* Immediately reject some pairs that won't unify because of
15044      cv-qualification mismatches.  */
15045   if (TREE_CODE (arg) == TREE_CODE (parm)
15046       && TYPE_P (arg)
15047       /* It is the elements of the array which hold the cv quals of an array
15048          type, and the elements might be template type parms. We'll check
15049          when we recurse.  */
15050       && TREE_CODE (arg) != ARRAY_TYPE
15051       /* We check the cv-qualifiers when unifying with template type
15052          parameters below.  We want to allow ARG `const T' to unify with
15053          PARM `T' for example, when computing which of two templates
15054          is more specialized, for example.  */
15055       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
15056       && !check_cv_quals_for_unify (strict_in, arg, parm))
15057     return 1;
15058
15059   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
15060       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
15061     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
15062   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
15063   strict &= ~UNIFY_ALLOW_DERIVED;
15064   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
15065   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
15066
15067   switch (TREE_CODE (parm))
15068     {
15069     case TYPENAME_TYPE:
15070     case SCOPE_REF:
15071     case UNBOUND_CLASS_TEMPLATE:
15072       /* In a type which contains a nested-name-specifier, template
15073          argument values cannot be deduced for template parameters used
15074          within the nested-name-specifier.  */
15075       return 0;
15076
15077     case TEMPLATE_TYPE_PARM:
15078     case TEMPLATE_TEMPLATE_PARM:
15079     case BOUND_TEMPLATE_TEMPLATE_PARM:
15080       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
15081       if (tparm == error_mark_node)
15082         return 1;
15083
15084       if (TEMPLATE_TYPE_LEVEL (parm)
15085           != template_decl_level (tparm))
15086         /* The PARM is not one we're trying to unify.  Just check
15087            to see if it matches ARG.  */
15088         return (TREE_CODE (arg) == TREE_CODE (parm)
15089                 && same_type_p (parm, arg)) ? 0 : 1;
15090       idx = TEMPLATE_TYPE_IDX (parm);
15091       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15092       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
15093
15094       /* Check for mixed types and values.  */
15095       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15096            && TREE_CODE (tparm) != TYPE_DECL)
15097           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15098               && TREE_CODE (tparm) != TEMPLATE_DECL))
15099         return 1;
15100
15101       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15102         {
15103           /* ARG must be constructed from a template class or a template
15104              template parameter.  */
15105           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
15106               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
15107             return 1;
15108
15109           {
15110             tree parmvec = TYPE_TI_ARGS (parm);
15111             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
15112             tree full_argvec = add_to_template_args (targs, argvec);
15113             tree parm_parms 
15114               = DECL_INNERMOST_TEMPLATE_PARMS
15115                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
15116             int i, len;
15117             int parm_variadic_p = 0;
15118
15119             /* The resolution to DR150 makes clear that default
15120                arguments for an N-argument may not be used to bind T
15121                to a template template parameter with fewer than N
15122                parameters.  It is not safe to permit the binding of
15123                default arguments as an extension, as that may change
15124                the meaning of a conforming program.  Consider:
15125
15126                   struct Dense { static const unsigned int dim = 1; };
15127
15128                   template <template <typename> class View,
15129                             typename Block>
15130                   void operator+(float, View<Block> const&);
15131
15132                   template <typename Block,
15133                             unsigned int Dim = Block::dim>
15134                   struct Lvalue_proxy { operator float() const; };
15135
15136                   void
15137                   test_1d (void) {
15138                     Lvalue_proxy<Dense> p;
15139                     float b;
15140                     b + p;
15141                   }
15142
15143               Here, if Lvalue_proxy is permitted to bind to View, then
15144               the global operator+ will be used; if they are not, the
15145               Lvalue_proxy will be converted to float.  */
15146             if (coerce_template_parms (parm_parms,
15147                                        full_argvec,
15148                                        TYPE_TI_TEMPLATE (parm),
15149                                        tf_none,
15150                                        /*require_all_args=*/true,
15151                                        /*use_default_args=*/false)
15152                 == error_mark_node)
15153               return 1;
15154
15155             /* Deduce arguments T, i from TT<T> or TT<i>.
15156                We check each element of PARMVEC and ARGVEC individually
15157                rather than the whole TREE_VEC since they can have
15158                different number of elements.  */
15159
15160             parmvec = expand_template_argument_pack (parmvec);
15161             argvec = expand_template_argument_pack (argvec);
15162
15163             len = TREE_VEC_LENGTH (parmvec);
15164
15165             /* Check if the parameters end in a pack, making them
15166                variadic.  */
15167             if (len > 0
15168                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
15169               parm_variadic_p = 1;
15170             
15171             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
15172               return 1;
15173
15174              for (i = 0; i < len - parm_variadic_p; ++i)
15175               {
15176                 if (unify (tparms, targs,
15177                            TREE_VEC_ELT (parmvec, i),
15178                            TREE_VEC_ELT (argvec, i),
15179                            UNIFY_ALLOW_NONE))
15180                   return 1;
15181               }
15182
15183             if (parm_variadic_p
15184                 && unify_pack_expansion (tparms, targs,
15185                                          parmvec, argvec,
15186                                          UNIFY_ALLOW_NONE,
15187                                          /*call_args_p=*/false,
15188                                          /*subr=*/false))
15189               return 1;
15190           }
15191           arg = TYPE_TI_TEMPLATE (arg);
15192
15193           /* Fall through to deduce template name.  */
15194         }
15195
15196       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15197           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15198         {
15199           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
15200
15201           /* Simple cases: Value already set, does match or doesn't.  */
15202           if (targ != NULL_TREE && template_args_equal (targ, arg))
15203             return 0;
15204           else if (targ)
15205             return 1;
15206         }
15207       else
15208         {
15209           /* If PARM is `const T' and ARG is only `int', we don't have
15210              a match unless we are allowing additional qualification.
15211              If ARG is `const int' and PARM is just `T' that's OK;
15212              that binds `const int' to `T'.  */
15213           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
15214                                          arg, parm))
15215             return 1;
15216
15217           /* Consider the case where ARG is `const volatile int' and
15218              PARM is `const T'.  Then, T should be `volatile int'.  */
15219           arg = cp_build_qualified_type_real
15220             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
15221           if (arg == error_mark_node)
15222             return 1;
15223
15224           /* Simple cases: Value already set, does match or doesn't.  */
15225           if (targ != NULL_TREE && same_type_p (targ, arg))
15226             return 0;
15227           else if (targ)
15228             return 1;
15229
15230           /* Make sure that ARG is not a variable-sized array.  (Note
15231              that were talking about variable-sized arrays (like
15232              `int[n]'), rather than arrays of unknown size (like
15233              `int[]').)  We'll get very confused by such a type since
15234              the bound of the array will not be computable in an
15235              instantiation.  Besides, such types are not allowed in
15236              ISO C++, so we can do as we please here.  */
15237           if (variably_modified_type_p (arg, NULL_TREE))
15238             return 1;
15239
15240           /* Strip typedefs as in convert_template_argument.  */
15241           arg = strip_typedefs (arg);
15242         }
15243
15244       /* If ARG is a parameter pack or an expansion, we cannot unify
15245          against it unless PARM is also a parameter pack.  */
15246       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
15247           && !template_parameter_pack_p (parm))
15248         return 1;
15249
15250       /* If the argument deduction results is a METHOD_TYPE,
15251          then there is a problem.
15252          METHOD_TYPE doesn't map to any real C++ type the result of
15253          the deduction can not be of that type.  */
15254       if (TREE_CODE (arg) == METHOD_TYPE)
15255         return 1;
15256
15257       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
15258       return 0;
15259
15260     case TEMPLATE_PARM_INDEX:
15261       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
15262       if (tparm == error_mark_node)
15263         return 1;
15264
15265       if (TEMPLATE_PARM_LEVEL (parm)
15266           != template_decl_level (tparm))
15267         /* The PARM is not one we're trying to unify.  Just check
15268            to see if it matches ARG.  */
15269         return !(TREE_CODE (arg) == TREE_CODE (parm)
15270                  && cp_tree_equal (parm, arg));
15271
15272       idx = TEMPLATE_PARM_IDX (parm);
15273       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15274
15275       if (targ)
15276         return !cp_tree_equal (targ, arg);
15277
15278       /* [temp.deduct.type] If, in the declaration of a function template
15279          with a non-type template-parameter, the non-type
15280          template-parameter is used in an expression in the function
15281          parameter-list and, if the corresponding template-argument is
15282          deduced, the template-argument type shall match the type of the
15283          template-parameter exactly, except that a template-argument
15284          deduced from an array bound may be of any integral type.
15285          The non-type parameter might use already deduced type parameters.  */
15286       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
15287       if (!TREE_TYPE (arg))
15288         /* Template-parameter dependent expression.  Just accept it for now.
15289            It will later be processed in convert_template_argument.  */
15290         ;
15291       else if (same_type_p (TREE_TYPE (arg), tparm))
15292         /* OK */;
15293       else if ((strict & UNIFY_ALLOW_INTEGER)
15294                && (TREE_CODE (tparm) == INTEGER_TYPE
15295                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
15296         /* Convert the ARG to the type of PARM; the deduced non-type
15297            template argument must exactly match the types of the
15298            corresponding parameter.  */
15299         arg = fold (build_nop (tparm, arg));
15300       else if (uses_template_parms (tparm))
15301         /* We haven't deduced the type of this parameter yet.  Try again
15302            later.  */
15303         return 0;
15304       else
15305         return 1;
15306
15307       /* If ARG is a parameter pack or an expansion, we cannot unify
15308          against it unless PARM is also a parameter pack.  */
15309       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
15310           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
15311         return 1;
15312
15313       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
15314       return 0;
15315
15316     case PTRMEM_CST:
15317      {
15318         /* A pointer-to-member constant can be unified only with
15319          another constant.  */
15320       if (TREE_CODE (arg) != PTRMEM_CST)
15321         return 1;
15322
15323       /* Just unify the class member. It would be useless (and possibly
15324          wrong, depending on the strict flags) to unify also
15325          PTRMEM_CST_CLASS, because we want to be sure that both parm and
15326          arg refer to the same variable, even if through different
15327          classes. For instance:
15328
15329          struct A { int x; };
15330          struct B : A { };
15331
15332          Unification of &A::x and &B::x must succeed.  */
15333       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
15334                     PTRMEM_CST_MEMBER (arg), strict);
15335      }
15336
15337     case POINTER_TYPE:
15338       {
15339         if (TREE_CODE (arg) != POINTER_TYPE)
15340           return 1;
15341
15342         /* [temp.deduct.call]
15343
15344            A can be another pointer or pointer to member type that can
15345            be converted to the deduced A via a qualification
15346            conversion (_conv.qual_).
15347
15348            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
15349            This will allow for additional cv-qualification of the
15350            pointed-to types if appropriate.  */
15351
15352         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
15353           /* The derived-to-base conversion only persists through one
15354              level of pointers.  */
15355           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
15356
15357         return unify (tparms, targs, TREE_TYPE (parm),
15358                       TREE_TYPE (arg), strict);
15359       }
15360
15361     case REFERENCE_TYPE:
15362       if (TREE_CODE (arg) != REFERENCE_TYPE)
15363         return 1;
15364       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15365                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
15366
15367     case ARRAY_TYPE:
15368       if (TREE_CODE (arg) != ARRAY_TYPE)
15369         return 1;
15370       if ((TYPE_DOMAIN (parm) == NULL_TREE)
15371           != (TYPE_DOMAIN (arg) == NULL_TREE))
15372         return 1;
15373       if (TYPE_DOMAIN (parm) != NULL_TREE)
15374         {
15375           tree parm_max;
15376           tree arg_max;
15377           bool parm_cst;
15378           bool arg_cst;
15379
15380           /* Our representation of array types uses "N - 1" as the
15381              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
15382              not an integer constant.  We cannot unify arbitrarily
15383              complex expressions, so we eliminate the MINUS_EXPRs
15384              here.  */
15385           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
15386           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
15387           if (!parm_cst)
15388             {
15389               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
15390               parm_max = TREE_OPERAND (parm_max, 0);
15391             }
15392           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
15393           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
15394           if (!arg_cst)
15395             {
15396               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
15397                  trying to unify the type of a variable with the type
15398                  of a template parameter.  For example:
15399
15400                    template <unsigned int N>
15401                    void f (char (&) [N]);
15402                    int g(); 
15403                    void h(int i) {
15404                      char a[g(i)];
15405                      f(a); 
15406                    }
15407
15408                 Here, the type of the ARG will be "int [g(i)]", and
15409                 may be a SAVE_EXPR, etc.  */
15410               if (TREE_CODE (arg_max) != MINUS_EXPR)
15411                 return 1;
15412               arg_max = TREE_OPERAND (arg_max, 0);
15413             }
15414
15415           /* If only one of the bounds used a MINUS_EXPR, compensate
15416              by adding one to the other bound.  */
15417           if (parm_cst && !arg_cst)
15418             parm_max = fold_build2_loc (input_location, PLUS_EXPR,
15419                                     integer_type_node,
15420                                     parm_max,
15421                                     integer_one_node);
15422           else if (arg_cst && !parm_cst)
15423             arg_max = fold_build2_loc (input_location, PLUS_EXPR,
15424                                    integer_type_node,
15425                                    arg_max,
15426                                    integer_one_node);
15427
15428           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
15429             return 1;
15430         }
15431       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15432                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
15433
15434     case REAL_TYPE:
15435     case COMPLEX_TYPE:
15436     case VECTOR_TYPE:
15437     case INTEGER_TYPE:
15438     case BOOLEAN_TYPE:
15439     case ENUMERAL_TYPE:
15440     case VOID_TYPE:
15441       if (TREE_CODE (arg) != TREE_CODE (parm))
15442         return 1;
15443
15444       /* We have already checked cv-qualification at the top of the
15445          function.  */
15446       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
15447         return 1;
15448
15449       /* As far as unification is concerned, this wins.  Later checks
15450          will invalidate it if necessary.  */
15451       return 0;
15452
15453       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
15454       /* Type INTEGER_CST can come from ordinary constant template args.  */
15455     case INTEGER_CST:
15456       while (TREE_CODE (arg) == NOP_EXPR)
15457         arg = TREE_OPERAND (arg, 0);
15458
15459       if (TREE_CODE (arg) != INTEGER_CST)
15460         return 1;
15461       return !tree_int_cst_equal (parm, arg);
15462
15463     case TREE_VEC:
15464       {
15465         int i;
15466         if (TREE_CODE (arg) != TREE_VEC)
15467           return 1;
15468         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
15469           return 1;
15470         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
15471           if (unify (tparms, targs,
15472                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
15473                      UNIFY_ALLOW_NONE))
15474             return 1;
15475         return 0;
15476       }
15477
15478     case RECORD_TYPE:
15479     case UNION_TYPE:
15480       if (TREE_CODE (arg) != TREE_CODE (parm))
15481         return 1;
15482
15483       if (TYPE_PTRMEMFUNC_P (parm))
15484         {
15485           if (!TYPE_PTRMEMFUNC_P (arg))
15486             return 1;
15487
15488           return unify (tparms, targs,
15489                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
15490                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
15491                         strict);
15492         }
15493
15494       if (CLASSTYPE_TEMPLATE_INFO (parm))
15495         {
15496           tree t = NULL_TREE;
15497
15498           if (strict_in & UNIFY_ALLOW_DERIVED)
15499             {
15500               /* First, we try to unify the PARM and ARG directly.  */
15501               t = try_class_unification (tparms, targs,
15502                                          parm, arg);
15503
15504               if (!t)
15505                 {
15506                   /* Fallback to the special case allowed in
15507                      [temp.deduct.call]:
15508
15509                        If P is a class, and P has the form
15510                        template-id, then A can be a derived class of
15511                        the deduced A.  Likewise, if P is a pointer to
15512                        a class of the form template-id, A can be a
15513                        pointer to a derived class pointed to by the
15514                        deduced A.  */
15515                   t = get_template_base (tparms, targs, parm, arg);
15516
15517                   if (!t)
15518                     return 1;
15519                 }
15520             }
15521           else if (CLASSTYPE_TEMPLATE_INFO (arg)
15522                    && (CLASSTYPE_TI_TEMPLATE (parm)
15523                        == CLASSTYPE_TI_TEMPLATE (arg)))
15524             /* Perhaps PARM is something like S<U> and ARG is S<int>.
15525                Then, we should unify `int' and `U'.  */
15526             t = arg;
15527           else
15528             /* There's no chance of unification succeeding.  */
15529             return 1;
15530
15531           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
15532                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
15533         }
15534       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
15535         return 1;
15536       return 0;
15537
15538     case METHOD_TYPE:
15539     case FUNCTION_TYPE:
15540       {
15541         unsigned int nargs;
15542         tree *args;
15543         tree a;
15544         unsigned int i;
15545
15546         if (TREE_CODE (arg) != TREE_CODE (parm))
15547           return 1;
15548
15549         /* CV qualifications for methods can never be deduced, they must
15550            match exactly.  We need to check them explicitly here,
15551            because type_unification_real treats them as any other
15552            cv-qualified parameter.  */
15553         if (TREE_CODE (parm) == METHOD_TYPE
15554             && (!check_cv_quals_for_unify
15555                 (UNIFY_ALLOW_NONE,
15556                  TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
15557                  TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
15558           return 1;
15559
15560         if (unify (tparms, targs, TREE_TYPE (parm),
15561                    TREE_TYPE (arg), UNIFY_ALLOW_NONE))
15562           return 1;
15563
15564         nargs = list_length (TYPE_ARG_TYPES (arg));
15565         args = XALLOCAVEC (tree, nargs);
15566         for (a = TYPE_ARG_TYPES (arg), i = 0;
15567              a != NULL_TREE && a != void_list_node;
15568              a = TREE_CHAIN (a), ++i)
15569           args[i] = TREE_VALUE (a);
15570         nargs = i;
15571
15572         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
15573                                       args, nargs, 1, DEDUCE_EXACT,
15574                                       LOOKUP_NORMAL);
15575       }
15576
15577     case OFFSET_TYPE:
15578       /* Unify a pointer to member with a pointer to member function, which
15579          deduces the type of the member as a function type. */
15580       if (TYPE_PTRMEMFUNC_P (arg))
15581         {
15582           tree method_type;
15583           tree fntype;
15584
15585           /* Check top-level cv qualifiers */
15586           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
15587             return 1;
15588
15589           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
15590                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
15591             return 1;
15592
15593           /* Determine the type of the function we are unifying against. */
15594           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
15595           fntype =
15596             build_function_type (TREE_TYPE (method_type),
15597                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
15598
15599           /* Extract the cv-qualifiers of the member function from the
15600              implicit object parameter and place them on the function
15601              type to be restored later. */
15602           fntype = apply_memfn_quals (fntype, type_memfn_quals (method_type));
15603           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
15604         }
15605
15606       if (TREE_CODE (arg) != OFFSET_TYPE)
15607         return 1;
15608       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
15609                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
15610         return 1;
15611       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15612                     strict);
15613
15614     case CONST_DECL:
15615       if (DECL_TEMPLATE_PARM_P (parm))
15616         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
15617       if (arg != integral_constant_value (parm))
15618         return 1;
15619       return 0;
15620
15621     case FIELD_DECL:
15622     case TEMPLATE_DECL:
15623       /* Matched cases are handled by the ARG == PARM test above.  */
15624       return 1;
15625
15626     case VAR_DECL:
15627       /* A non-type template parameter that is a variable should be a
15628          an integral constant, in which case, it whould have been
15629          folded into its (constant) value. So we should not be getting
15630          a variable here.  */
15631       gcc_unreachable ();
15632
15633     case TYPE_ARGUMENT_PACK:
15634     case NONTYPE_ARGUMENT_PACK:
15635       {
15636         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
15637         tree packed_args = ARGUMENT_PACK_ARGS (arg);
15638         int i, len = TREE_VEC_LENGTH (packed_parms);
15639         int argslen = TREE_VEC_LENGTH (packed_args);
15640         int parm_variadic_p = 0;
15641
15642         for (i = 0; i < len; ++i)
15643           {
15644             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
15645               {
15646                 if (i == len - 1)
15647                   /* We can unify against something with a trailing
15648                      parameter pack.  */
15649                   parm_variadic_p = 1;
15650                 else
15651                   /* Since there is something following the pack
15652                      expansion, we cannot unify this template argument
15653                      list.  */
15654                   return 0;
15655               }
15656           }
15657           
15658
15659         /* If we don't have enough arguments to satisfy the parameters
15660            (not counting the pack expression at the end), or we have
15661            too many arguments for a parameter list that doesn't end in
15662            a pack expression, we can't unify.  */
15663         if (argslen < (len - parm_variadic_p)
15664             || (argslen > len && !parm_variadic_p))
15665           return 1;
15666
15667         /* Unify all of the parameters that precede the (optional)
15668            pack expression.  */
15669         for (i = 0; i < len - parm_variadic_p; ++i)
15670           {
15671             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
15672                        TREE_VEC_ELT (packed_args, i), strict))
15673               return 1;
15674           }
15675
15676         if (parm_variadic_p)
15677           return unify_pack_expansion (tparms, targs, 
15678                                        packed_parms, packed_args,
15679                                        strict, /*call_args_p=*/false,
15680                                        /*subr=*/false);
15681         return 0;
15682       }
15683
15684       break;
15685
15686     case TYPEOF_TYPE:
15687     case DECLTYPE_TYPE:
15688       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
15689          nodes.  */
15690       return 0;
15691
15692     case ERROR_MARK:
15693       /* Unification fails if we hit an error node.  */
15694       return 1;
15695
15696     default:
15697       /* An unresolved overload is a nondeduced context.  */
15698       if (type_unknown_p (parm))
15699         return 0;
15700       gcc_assert (EXPR_P (parm));
15701
15702       /* We must be looking at an expression.  This can happen with
15703          something like:
15704
15705            template <int I>
15706            void foo(S<I>, S<I + 2>);
15707
15708          This is a "nondeduced context":
15709
15710            [deduct.type]
15711
15712            The nondeduced contexts are:
15713
15714            --A type that is a template-id in which one or more of
15715              the template-arguments is an expression that references
15716              a template-parameter.
15717
15718          In these cases, we assume deduction succeeded, but don't
15719          actually infer any unifications.  */
15720
15721       if (!uses_template_parms (parm)
15722           && !template_args_equal (parm, arg))
15723         return 1;
15724       else
15725         return 0;
15726     }
15727 }
15728 \f
15729 /* Note that DECL can be defined in this translation unit, if
15730    required.  */
15731
15732 static void
15733 mark_definable (tree decl)
15734 {
15735   tree clone;
15736   DECL_NOT_REALLY_EXTERN (decl) = 1;
15737   FOR_EACH_CLONE (clone, decl)
15738     DECL_NOT_REALLY_EXTERN (clone) = 1;
15739 }
15740
15741 /* Called if RESULT is explicitly instantiated, or is a member of an
15742    explicitly instantiated class.  */
15743
15744 void
15745 mark_decl_instantiated (tree result, int extern_p)
15746 {
15747   SET_DECL_EXPLICIT_INSTANTIATION (result);
15748
15749   /* If this entity has already been written out, it's too late to
15750      make any modifications.  */
15751   if (TREE_ASM_WRITTEN (result))
15752     return;
15753
15754   if (TREE_CODE (result) != FUNCTION_DECL)
15755     /* The TREE_PUBLIC flag for function declarations will have been
15756        set correctly by tsubst.  */
15757     TREE_PUBLIC (result) = 1;
15758
15759   /* This might have been set by an earlier implicit instantiation.  */
15760   DECL_COMDAT (result) = 0;
15761
15762   if (extern_p)
15763     DECL_NOT_REALLY_EXTERN (result) = 0;
15764   else
15765     {
15766       mark_definable (result);
15767       /* Always make artificials weak.  */
15768       if (DECL_ARTIFICIAL (result) && flag_weak)
15769         comdat_linkage (result);
15770       /* For WIN32 we also want to put explicit instantiations in
15771          linkonce sections.  */
15772       else if (TREE_PUBLIC (result))
15773         maybe_make_one_only (result);
15774     }
15775
15776   /* If EXTERN_P, then this function will not be emitted -- unless
15777      followed by an explicit instantiation, at which point its linkage
15778      will be adjusted.  If !EXTERN_P, then this function will be
15779      emitted here.  In neither circumstance do we want
15780      import_export_decl to adjust the linkage.  */
15781   DECL_INTERFACE_KNOWN (result) = 1;
15782 }
15783
15784 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
15785    important template arguments.  If any are missing, we check whether
15786    they're important by using error_mark_node for substituting into any
15787    args that were used for partial ordering (the ones between ARGS and END)
15788    and seeing if it bubbles up.  */
15789
15790 static bool
15791 check_undeduced_parms (tree targs, tree args, tree end)
15792 {
15793   bool found = false;
15794   int i;
15795   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
15796     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
15797       {
15798         found = true;
15799         TREE_VEC_ELT (targs, i) = error_mark_node;
15800       }
15801   if (found)
15802     {
15803       for (; args != end; args = TREE_CHAIN (args))
15804         {
15805           tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
15806           if (substed == error_mark_node)
15807             return true;
15808         }
15809     }
15810   return false;
15811 }
15812
15813 /* Given two function templates PAT1 and PAT2, return:
15814
15815    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
15816    -1 if PAT2 is more specialized than PAT1.
15817    0 if neither is more specialized.
15818
15819    LEN indicates the number of parameters we should consider
15820    (defaulted parameters should not be considered).
15821
15822    The 1998 std underspecified function template partial ordering, and
15823    DR214 addresses the issue.  We take pairs of arguments, one from
15824    each of the templates, and deduce them against each other.  One of
15825    the templates will be more specialized if all the *other*
15826    template's arguments deduce against its arguments and at least one
15827    of its arguments *does* *not* deduce against the other template's
15828    corresponding argument.  Deduction is done as for class templates.
15829    The arguments used in deduction have reference and top level cv
15830    qualifiers removed.  Iff both arguments were originally reference
15831    types *and* deduction succeeds in both directions, the template
15832    with the more cv-qualified argument wins for that pairing (if
15833    neither is more cv-qualified, they both are equal).  Unlike regular
15834    deduction, after all the arguments have been deduced in this way,
15835    we do *not* verify the deduced template argument values can be
15836    substituted into non-deduced contexts.
15837
15838    The logic can be a bit confusing here, because we look at deduce1 and
15839    targs1 to see if pat2 is at least as specialized, and vice versa; if we
15840    can find template arguments for pat1 to make arg1 look like arg2, that
15841    means that arg2 is at least as specialized as arg1.  */
15842
15843 int
15844 more_specialized_fn (tree pat1, tree pat2, int len)
15845 {
15846   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
15847   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
15848   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
15849   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
15850   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
15851   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
15852   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
15853   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
15854   tree origs1, origs2;
15855   bool lose1 = false;
15856   bool lose2 = false;
15857
15858   /* Remove the this parameter from non-static member functions.  If
15859      one is a non-static member function and the other is not a static
15860      member function, remove the first parameter from that function
15861      also.  This situation occurs for operator functions where we
15862      locate both a member function (with this pointer) and non-member
15863      operator (with explicit first operand).  */
15864   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
15865     {
15866       len--; /* LEN is the number of significant arguments for DECL1 */
15867       args1 = TREE_CHAIN (args1);
15868       if (!DECL_STATIC_FUNCTION_P (decl2))
15869         args2 = TREE_CHAIN (args2);
15870     }
15871   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
15872     {
15873       args2 = TREE_CHAIN (args2);
15874       if (!DECL_STATIC_FUNCTION_P (decl1))
15875         {
15876           len--;
15877           args1 = TREE_CHAIN (args1);
15878         }
15879     }
15880
15881   /* If only one is a conversion operator, they are unordered.  */
15882   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
15883     return 0;
15884
15885   /* Consider the return type for a conversion function */
15886   if (DECL_CONV_FN_P (decl1))
15887     {
15888       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
15889       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
15890       len++;
15891     }
15892
15893   processing_template_decl++;
15894
15895   origs1 = args1;
15896   origs2 = args2;
15897
15898   while (len--
15899          /* Stop when an ellipsis is seen.  */
15900          && args1 != NULL_TREE && args2 != NULL_TREE)
15901     {
15902       tree arg1 = TREE_VALUE (args1);
15903       tree arg2 = TREE_VALUE (args2);
15904       int deduce1, deduce2;
15905       int quals1 = -1;
15906       int quals2 = -1;
15907
15908       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
15909           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15910         {
15911           /* When both arguments are pack expansions, we need only
15912              unify the patterns themselves.  */
15913           arg1 = PACK_EXPANSION_PATTERN (arg1);
15914           arg2 = PACK_EXPANSION_PATTERN (arg2);
15915
15916           /* This is the last comparison we need to do.  */
15917           len = 0;
15918         }
15919
15920       if (TREE_CODE (arg1) == REFERENCE_TYPE)
15921         {
15922           arg1 = TREE_TYPE (arg1);
15923           quals1 = cp_type_quals (arg1);
15924         }
15925
15926       if (TREE_CODE (arg2) == REFERENCE_TYPE)
15927         {
15928           arg2 = TREE_TYPE (arg2);
15929           quals2 = cp_type_quals (arg2);
15930         }
15931
15932       if ((quals1 < 0) != (quals2 < 0))
15933         {
15934           /* Only of the args is a reference, see if we should apply
15935              array/function pointer decay to it.  This is not part of
15936              DR214, but is, IMHO, consistent with the deduction rules
15937              for the function call itself, and with our earlier
15938              implementation of the underspecified partial ordering
15939              rules.  (nathan).  */
15940           if (quals1 >= 0)
15941             {
15942               switch (TREE_CODE (arg1))
15943                 {
15944                 case ARRAY_TYPE:
15945                   arg1 = TREE_TYPE (arg1);
15946                   /* FALLTHROUGH. */
15947                 case FUNCTION_TYPE:
15948                   arg1 = build_pointer_type (arg1);
15949                   break;
15950
15951                 default:
15952                   break;
15953                 }
15954             }
15955           else
15956             {
15957               switch (TREE_CODE (arg2))
15958                 {
15959                 case ARRAY_TYPE:
15960                   arg2 = TREE_TYPE (arg2);
15961                   /* FALLTHROUGH. */
15962                 case FUNCTION_TYPE:
15963                   arg2 = build_pointer_type (arg2);
15964                   break;
15965
15966                 default:
15967                   break;
15968                 }
15969             }
15970         }
15971
15972       arg1 = TYPE_MAIN_VARIANT (arg1);
15973       arg2 = TYPE_MAIN_VARIANT (arg2);
15974
15975       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
15976         {
15977           int i, len2 = list_length (args2);
15978           tree parmvec = make_tree_vec (1);
15979           tree argvec = make_tree_vec (len2);
15980           tree ta = args2;
15981
15982           /* Setup the parameter vector, which contains only ARG1.  */
15983           TREE_VEC_ELT (parmvec, 0) = arg1;
15984
15985           /* Setup the argument vector, which contains the remaining
15986              arguments.  */
15987           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
15988             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
15989
15990           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
15991                                            argvec, UNIFY_ALLOW_NONE, 
15992                                            /*call_args_p=*/false, 
15993                                            /*subr=*/0);
15994
15995           /* We cannot deduce in the other direction, because ARG1 is
15996              a pack expansion but ARG2 is not.  */
15997           deduce2 = 0;
15998         }
15999       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
16000         {
16001           int i, len1 = list_length (args1);
16002           tree parmvec = make_tree_vec (1);
16003           tree argvec = make_tree_vec (len1);
16004           tree ta = args1;
16005
16006           /* Setup the parameter vector, which contains only ARG1.  */
16007           TREE_VEC_ELT (parmvec, 0) = arg2;
16008
16009           /* Setup the argument vector, which contains the remaining
16010              arguments.  */
16011           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
16012             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
16013
16014           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
16015                                            argvec, UNIFY_ALLOW_NONE, 
16016                                            /*call_args_p=*/false, 
16017                                            /*subr=*/0);
16018
16019           /* We cannot deduce in the other direction, because ARG2 is
16020              a pack expansion but ARG1 is not.*/
16021           deduce1 = 0;
16022         }
16023
16024       else
16025         {
16026           /* The normal case, where neither argument is a pack
16027              expansion.  */
16028           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
16029           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
16030         }
16031
16032       /* If we couldn't deduce arguments for tparms1 to make arg1 match
16033          arg2, then arg2 is not as specialized as arg1.  */
16034       if (!deduce1)
16035         lose2 = true;
16036       if (!deduce2)
16037         lose1 = true;
16038
16039       /* "If, for a given type, deduction succeeds in both directions
16040          (i.e., the types are identical after the transformations above)
16041          and if the type from the argument template is more cv-qualified
16042          than the type from the parameter template (as described above)
16043          that type is considered to be more specialized than the other. If
16044          neither type is more cv-qualified than the other then neither type
16045          is more specialized than the other."  */
16046
16047       if (deduce1 && deduce2
16048           && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
16049         {
16050           if ((quals1 & quals2) == quals2)
16051             lose2 = true;
16052           if ((quals1 & quals2) == quals1)
16053             lose1 = true;
16054         }
16055
16056       if (lose1 && lose2)
16057         /* We've failed to deduce something in either direction.
16058            These must be unordered.  */
16059         break;
16060
16061       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
16062           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
16063         /* We have already processed all of the arguments in our
16064            handing of the pack expansion type.  */
16065         len = 0;
16066
16067       args1 = TREE_CHAIN (args1);
16068       args2 = TREE_CHAIN (args2);
16069     }
16070
16071   /* "In most cases, all template parameters must have values in order for
16072      deduction to succeed, but for partial ordering purposes a template
16073      parameter may remain without a value provided it is not used in the
16074      types being used for partial ordering."
16075
16076      Thus, if we are missing any of the targs1 we need to substitute into
16077      origs1, then pat2 is not as specialized as pat1.  This can happen when
16078      there is a nondeduced context.  */
16079   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
16080     lose2 = true;
16081   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
16082     lose1 = true;
16083
16084   processing_template_decl--;
16085
16086   /* All things being equal, if the next argument is a pack expansion
16087      for one function but not for the other, prefer the
16088      non-variadic function.  FIXME this is bogus; see c++/41958.  */
16089   if (lose1 == lose2
16090       && args1 && TREE_VALUE (args1)
16091       && args2 && TREE_VALUE (args2))
16092     {
16093       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
16094       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
16095     }
16096
16097   if (lose1 == lose2)
16098     return 0;
16099   else if (!lose1)
16100     return 1;
16101   else
16102     return -1;
16103 }
16104
16105 /* Determine which of two partial specializations is more specialized.
16106
16107    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
16108    to the first partial specialization.  The TREE_VALUE is the
16109    innermost set of template parameters for the partial
16110    specialization.  PAT2 is similar, but for the second template.
16111
16112    Return 1 if the first partial specialization is more specialized;
16113    -1 if the second is more specialized; 0 if neither is more
16114    specialized.
16115
16116    See [temp.class.order] for information about determining which of
16117    two templates is more specialized.  */
16118
16119 static int
16120 more_specialized_class (tree pat1, tree pat2)
16121 {
16122   tree targs;
16123   tree tmpl1, tmpl2;
16124   int winner = 0;
16125   bool any_deductions = false;
16126
16127   tmpl1 = TREE_TYPE (pat1);
16128   tmpl2 = TREE_TYPE (pat2);
16129
16130   /* Just like what happens for functions, if we are ordering between
16131      different class template specializations, we may encounter dependent
16132      types in the arguments, and we need our dependency check functions
16133      to behave correctly.  */
16134   ++processing_template_decl;
16135   targs = get_class_bindings (TREE_VALUE (pat1),
16136                               CLASSTYPE_TI_ARGS (tmpl1),
16137                               CLASSTYPE_TI_ARGS (tmpl2));
16138   if (targs)
16139     {
16140       --winner;
16141       any_deductions = true;
16142     }
16143
16144   targs = get_class_bindings (TREE_VALUE (pat2),
16145                               CLASSTYPE_TI_ARGS (tmpl2),
16146                               CLASSTYPE_TI_ARGS (tmpl1));
16147   if (targs)
16148     {
16149       ++winner;
16150       any_deductions = true;
16151     }
16152   --processing_template_decl;
16153
16154   /* In the case of a tie where at least one of the class templates
16155      has a parameter pack at the end, the template with the most
16156      non-packed parameters wins.  */
16157   if (winner == 0
16158       && any_deductions
16159       && (template_args_variadic_p (TREE_PURPOSE (pat1))
16160           || template_args_variadic_p (TREE_PURPOSE (pat2))))
16161     {
16162       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
16163       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
16164       int len1 = TREE_VEC_LENGTH (args1);
16165       int len2 = TREE_VEC_LENGTH (args2);
16166
16167       /* We don't count the pack expansion at the end.  */
16168       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
16169         --len1;
16170       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
16171         --len2;
16172
16173       if (len1 > len2)
16174         return 1;
16175       else if (len1 < len2)
16176         return -1;
16177     }
16178
16179   return winner;
16180 }
16181
16182 /* Return the template arguments that will produce the function signature
16183    DECL from the function template FN, with the explicit template
16184    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
16185    also match.  Return NULL_TREE if no satisfactory arguments could be
16186    found.  */
16187
16188 static tree
16189 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
16190 {
16191   int ntparms = DECL_NTPARMS (fn);
16192   tree targs = make_tree_vec (ntparms);
16193   tree decl_type;
16194   tree decl_arg_types;
16195   tree *args;
16196   unsigned int nargs, ix;
16197   tree arg;
16198
16199   /* Substitute the explicit template arguments into the type of DECL.
16200      The call to fn_type_unification will handle substitution into the
16201      FN.  */
16202   decl_type = TREE_TYPE (decl);
16203   if (explicit_args && uses_template_parms (decl_type))
16204     {
16205       tree tmpl;
16206       tree converted_args;
16207
16208       if (DECL_TEMPLATE_INFO (decl))
16209         tmpl = DECL_TI_TEMPLATE (decl);
16210       else
16211         /* We can get here for some invalid specializations.  */
16212         return NULL_TREE;
16213
16214       converted_args
16215         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
16216                                  explicit_args, NULL_TREE,
16217                                  tf_none,
16218                                  /*require_all_args=*/false,
16219                                  /*use_default_args=*/false);
16220       if (converted_args == error_mark_node)
16221         return NULL_TREE;
16222
16223       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
16224       if (decl_type == error_mark_node)
16225         return NULL_TREE;
16226     }
16227
16228   /* Never do unification on the 'this' parameter.  */
16229   decl_arg_types = skip_artificial_parms_for (decl, 
16230                                               TYPE_ARG_TYPES (decl_type));
16231
16232   nargs = list_length (decl_arg_types);
16233   args = XALLOCAVEC (tree, nargs);
16234   for (arg = decl_arg_types, ix = 0;
16235        arg != NULL_TREE && arg != void_list_node;
16236        arg = TREE_CHAIN (arg), ++ix)
16237     args[ix] = TREE_VALUE (arg);
16238
16239   if (fn_type_unification (fn, explicit_args, targs,
16240                            args, ix,
16241                            (check_rettype || DECL_CONV_FN_P (fn)
16242                             ? TREE_TYPE (decl_type) : NULL_TREE),
16243                            DEDUCE_EXACT, LOOKUP_NORMAL))
16244     return NULL_TREE;
16245
16246   return targs;
16247 }
16248
16249 /* Return the innermost template arguments that, when applied to a
16250    template specialization whose innermost template parameters are
16251    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
16252    ARGS.
16253
16254    For example, suppose we have:
16255
16256      template <class T, class U> struct S {};
16257      template <class T> struct S<T*, int> {};
16258
16259    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
16260    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
16261    int}.  The resulting vector will be {double}, indicating that `T'
16262    is bound to `double'.  */
16263
16264 static tree
16265 get_class_bindings (tree tparms, tree spec_args, tree args)
16266 {
16267   int i, ntparms = TREE_VEC_LENGTH (tparms);
16268   tree deduced_args;
16269   tree innermost_deduced_args;
16270
16271   innermost_deduced_args = make_tree_vec (ntparms);
16272   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
16273     {
16274       deduced_args = copy_node (args);
16275       SET_TMPL_ARGS_LEVEL (deduced_args,
16276                            TMPL_ARGS_DEPTH (deduced_args),
16277                            innermost_deduced_args);
16278     }
16279   else
16280     deduced_args = innermost_deduced_args;
16281
16282   if (unify (tparms, deduced_args,
16283              INNERMOST_TEMPLATE_ARGS (spec_args),
16284              INNERMOST_TEMPLATE_ARGS (args),
16285              UNIFY_ALLOW_NONE))
16286     return NULL_TREE;
16287
16288   for (i =  0; i < ntparms; ++i)
16289     if (! TREE_VEC_ELT (innermost_deduced_args, i))
16290       return NULL_TREE;
16291
16292   /* Verify that nondeduced template arguments agree with the type
16293      obtained from argument deduction.
16294
16295      For example:
16296
16297        struct A { typedef int X; };
16298        template <class T, class U> struct C {};
16299        template <class T> struct C<T, typename T::X> {};
16300
16301      Then with the instantiation `C<A, int>', we can deduce that
16302      `T' is `A' but unify () does not check whether `typename T::X'
16303      is `int'.  */
16304   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
16305   if (spec_args == error_mark_node
16306       /* We only need to check the innermost arguments; the other
16307          arguments will always agree.  */
16308       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
16309                               INNERMOST_TEMPLATE_ARGS (args)))
16310     return NULL_TREE;
16311
16312   /* Now that we have bindings for all of the template arguments,
16313      ensure that the arguments deduced for the template template
16314      parameters have compatible template parameter lists.  See the use
16315      of template_template_parm_bindings_ok_p in fn_type_unification
16316      for more information.  */
16317   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
16318     return NULL_TREE;
16319
16320   return deduced_args;
16321 }
16322
16323 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
16324    Return the TREE_LIST node with the most specialized template, if
16325    any.  If there is no most specialized template, the error_mark_node
16326    is returned.
16327
16328    Note that this function does not look at, or modify, the
16329    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
16330    returned is one of the elements of INSTANTIATIONS, callers may
16331    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
16332    and retrieve it from the value returned.  */
16333
16334 tree
16335 most_specialized_instantiation (tree templates)
16336 {
16337   tree fn, champ;
16338
16339   ++processing_template_decl;
16340
16341   champ = templates;
16342   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
16343     {
16344       int fate = 0;
16345
16346       if (get_bindings (TREE_VALUE (champ),
16347                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
16348                         NULL_TREE, /*check_ret=*/false))
16349         fate--;
16350
16351       if (get_bindings (TREE_VALUE (fn),
16352                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
16353                         NULL_TREE, /*check_ret=*/false))
16354         fate++;
16355
16356       if (fate == -1)
16357         champ = fn;
16358       else if (!fate)
16359         {
16360           /* Equally specialized, move to next function.  If there
16361              is no next function, nothing's most specialized.  */
16362           fn = TREE_CHAIN (fn);
16363           champ = fn;
16364           if (!fn)
16365             break;
16366         }
16367     }
16368
16369   if (champ)
16370     /* Now verify that champ is better than everything earlier in the
16371        instantiation list.  */
16372     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
16373       if (get_bindings (TREE_VALUE (champ),
16374                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
16375                         NULL_TREE, /*check_ret=*/false)
16376           || !get_bindings (TREE_VALUE (fn),
16377                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
16378                             NULL_TREE, /*check_ret=*/false))
16379         {
16380           champ = NULL_TREE;
16381           break;
16382         }
16383
16384   processing_template_decl--;
16385
16386   if (!champ)
16387     return error_mark_node;
16388
16389   return champ;
16390 }
16391
16392 /* If DECL is a specialization of some template, return the most
16393    general such template.  Otherwise, returns NULL_TREE.
16394
16395    For example, given:
16396
16397      template <class T> struct S { template <class U> void f(U); };
16398
16399    if TMPL is `template <class U> void S<int>::f(U)' this will return
16400    the full template.  This function will not trace past partial
16401    specializations, however.  For example, given in addition:
16402
16403      template <class T> struct S<T*> { template <class U> void f(U); };
16404
16405    if TMPL is `template <class U> void S<int*>::f(U)' this will return
16406    `template <class T> template <class U> S<T*>::f(U)'.  */
16407
16408 tree
16409 most_general_template (tree decl)
16410 {
16411   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
16412      an immediate specialization.  */
16413   if (TREE_CODE (decl) == FUNCTION_DECL)
16414     {
16415       if (DECL_TEMPLATE_INFO (decl)) {
16416         decl = DECL_TI_TEMPLATE (decl);
16417
16418         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
16419            template friend.  */
16420         if (TREE_CODE (decl) != TEMPLATE_DECL)
16421           return NULL_TREE;
16422       } else
16423         return NULL_TREE;
16424     }
16425
16426   /* Look for more and more general templates.  */
16427   while (DECL_TEMPLATE_INFO (decl))
16428     {
16429       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
16430          (See cp-tree.h for details.)  */
16431       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
16432         break;
16433
16434       if (CLASS_TYPE_P (TREE_TYPE (decl))
16435           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
16436         break;
16437
16438       /* Stop if we run into an explicitly specialized class template.  */
16439       if (!DECL_NAMESPACE_SCOPE_P (decl)
16440           && DECL_CONTEXT (decl)
16441           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
16442         break;
16443
16444       decl = DECL_TI_TEMPLATE (decl);
16445     }
16446
16447   return decl;
16448 }
16449
16450 /* Return the most specialized of the class template partial
16451    specializations of TMPL which can produce TYPE, a specialization of
16452    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
16453    a _TYPE node corresponding to the partial specialization, while the
16454    TREE_PURPOSE is the set of template arguments that must be
16455    substituted into the TREE_TYPE in order to generate TYPE.
16456
16457    If the choice of partial specialization is ambiguous, a diagnostic
16458    is issued, and the error_mark_node is returned.  If there are no
16459    partial specializations of TMPL matching TYPE, then NULL_TREE is
16460    returned.  */
16461
16462 static tree
16463 most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
16464 {
16465   tree list = NULL_TREE;
16466   tree t;
16467   tree champ;
16468   int fate;
16469   bool ambiguous_p;
16470   tree args;
16471   tree outer_args = NULL_TREE;
16472
16473   tmpl = most_general_template (tmpl);
16474   args = CLASSTYPE_TI_ARGS (type);
16475
16476   /* For determining which partial specialization to use, only the
16477      innermost args are interesting.  */
16478   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
16479     {
16480       outer_args = strip_innermost_template_args (args, 1);
16481       args = INNERMOST_TEMPLATE_ARGS (args);
16482     }
16483
16484   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
16485     {
16486       tree partial_spec_args;
16487       tree spec_args;
16488       tree parms = TREE_VALUE (t);
16489
16490       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
16491
16492       ++processing_template_decl;
16493
16494       if (outer_args)
16495         {
16496           int i;
16497
16498           /* Discard the outer levels of args, and then substitute in the
16499              template args from the enclosing class.  */
16500           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
16501           partial_spec_args = tsubst_template_args
16502             (partial_spec_args, outer_args, tf_none, NULL_TREE);
16503
16504           /* PARMS already refers to just the innermost parms, but the
16505              template parms in partial_spec_args had their levels lowered
16506              by tsubst, so we need to do the same for the parm list.  We
16507              can't just tsubst the TREE_VEC itself, as tsubst wants to
16508              treat a TREE_VEC as an argument vector.  */
16509           parms = copy_node (parms);
16510           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
16511             TREE_VEC_ELT (parms, i) =
16512               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
16513
16514         }
16515
16516       partial_spec_args =
16517           coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
16518                                  add_to_template_args (outer_args,
16519                                                        partial_spec_args),
16520                                  tmpl, tf_none,
16521                                  /*require_all_args=*/true,
16522                                  /*use_default_args=*/true);
16523
16524       --processing_template_decl;
16525
16526       if (partial_spec_args == error_mark_node)
16527         return error_mark_node;
16528
16529       spec_args = get_class_bindings (parms,
16530                                       partial_spec_args,
16531                                       args);
16532       if (spec_args)
16533         {
16534           if (outer_args)
16535             spec_args = add_to_template_args (outer_args, spec_args);
16536           list = tree_cons (spec_args, TREE_VALUE (t), list);
16537           TREE_TYPE (list) = TREE_TYPE (t);
16538         }
16539     }
16540
16541   if (! list)
16542     return NULL_TREE;
16543
16544   ambiguous_p = false;
16545   t = list;
16546   champ = t;
16547   t = TREE_CHAIN (t);
16548   for (; t; t = TREE_CHAIN (t))
16549     {
16550       fate = more_specialized_class (champ, t);
16551       if (fate == 1)
16552         ;
16553       else
16554         {
16555           if (fate == 0)
16556             {
16557               t = TREE_CHAIN (t);
16558               if (! t)
16559                 {
16560                   ambiguous_p = true;
16561                   break;
16562                 }
16563             }
16564           champ = t;
16565         }
16566     }
16567
16568   if (!ambiguous_p)
16569     for (t = list; t && t != champ; t = TREE_CHAIN (t))
16570       {
16571         fate = more_specialized_class (champ, t);
16572         if (fate != 1)
16573           {
16574             ambiguous_p = true;
16575             break;
16576           }
16577       }
16578
16579   if (ambiguous_p)
16580     {
16581       const char *str;
16582       char *spaces = NULL;
16583       if (!(complain & tf_error))
16584         return error_mark_node;
16585       error ("ambiguous class template instantiation for %q#T", type);
16586       str = ngettext ("candidate is:", "candidates are:", list_length (list));
16587       for (t = list; t; t = TREE_CHAIN (t))
16588         {
16589           error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
16590           spaces = spaces ? spaces : get_spaces (str);
16591         }
16592       free (spaces);
16593       return error_mark_node;
16594     }
16595
16596   return champ;
16597 }
16598
16599 /* Explicitly instantiate DECL.  */
16600
16601 void
16602 do_decl_instantiation (tree decl, tree storage)
16603 {
16604   tree result = NULL_TREE;
16605   int extern_p = 0;
16606
16607   if (!decl || decl == error_mark_node)
16608     /* An error occurred, for which grokdeclarator has already issued
16609        an appropriate message.  */
16610     return;
16611   else if (! DECL_LANG_SPECIFIC (decl))
16612     {
16613       error ("explicit instantiation of non-template %q#D", decl);
16614       return;
16615     }
16616   else if (TREE_CODE (decl) == VAR_DECL)
16617     {
16618       /* There is an asymmetry here in the way VAR_DECLs and
16619          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
16620          the latter, the DECL we get back will be marked as a
16621          template instantiation, and the appropriate
16622          DECL_TEMPLATE_INFO will be set up.  This does not happen for
16623          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
16624          should handle VAR_DECLs as it currently handles
16625          FUNCTION_DECLs.  */
16626       if (!DECL_CLASS_SCOPE_P (decl))
16627         {
16628           error ("%qD is not a static data member of a class template", decl);
16629           return;
16630         }
16631       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
16632       if (!result || TREE_CODE (result) != VAR_DECL)
16633         {
16634           error ("no matching template for %qD found", decl);
16635           return;
16636         }
16637       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
16638         {
16639           error ("type %qT for explicit instantiation %qD does not match "
16640                  "declared type %qT", TREE_TYPE (result), decl,
16641                  TREE_TYPE (decl));
16642           return;
16643         }
16644     }
16645   else if (TREE_CODE (decl) != FUNCTION_DECL)
16646     {
16647       error ("explicit instantiation of %q#D", decl);
16648       return;
16649     }
16650   else
16651     result = decl;
16652
16653   /* Check for various error cases.  Note that if the explicit
16654      instantiation is valid the RESULT will currently be marked as an
16655      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
16656      until we get here.  */
16657
16658   if (DECL_TEMPLATE_SPECIALIZATION (result))
16659     {
16660       /* DR 259 [temp.spec].
16661
16662          Both an explicit instantiation and a declaration of an explicit
16663          specialization shall not appear in a program unless the explicit
16664          instantiation follows a declaration of the explicit specialization.
16665
16666          For a given set of template parameters, if an explicit
16667          instantiation of a template appears after a declaration of an
16668          explicit specialization for that template, the explicit
16669          instantiation has no effect.  */
16670       return;
16671     }
16672   else if (DECL_EXPLICIT_INSTANTIATION (result))
16673     {
16674       /* [temp.spec]
16675
16676          No program shall explicitly instantiate any template more
16677          than once.
16678
16679          We check DECL_NOT_REALLY_EXTERN so as not to complain when
16680          the first instantiation was `extern' and the second is not,
16681          and EXTERN_P for the opposite case.  */
16682       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
16683         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
16684       /* If an "extern" explicit instantiation follows an ordinary
16685          explicit instantiation, the template is instantiated.  */
16686       if (extern_p)
16687         return;
16688     }
16689   else if (!DECL_IMPLICIT_INSTANTIATION (result))
16690     {
16691       error ("no matching template for %qD found", result);
16692       return;
16693     }
16694   else if (!DECL_TEMPLATE_INFO (result))
16695     {
16696       permerror (input_location, "explicit instantiation of non-template %q#D", result);
16697       return;
16698     }
16699
16700   if (storage == NULL_TREE)
16701     ;
16702   else if (storage == ridpointers[(int) RID_EXTERN])
16703     {
16704       if (!in_system_header && (cxx_dialect == cxx98))
16705         pedwarn (input_location, OPT_pedantic, 
16706                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
16707                  "instantiations");
16708       extern_p = 1;
16709     }
16710   else
16711     error ("storage class %qD applied to template instantiation", storage);
16712
16713   check_explicit_instantiation_namespace (result);
16714   mark_decl_instantiated (result, extern_p);
16715   if (! extern_p)
16716     instantiate_decl (result, /*defer_ok=*/1,
16717                       /*expl_inst_class_mem_p=*/false);
16718 }
16719
16720 static void
16721 mark_class_instantiated (tree t, int extern_p)
16722 {
16723   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
16724   SET_CLASSTYPE_INTERFACE_KNOWN (t);
16725   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
16726   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
16727   if (! extern_p)
16728     {
16729       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
16730       rest_of_type_compilation (t, 1);
16731     }
16732 }
16733
16734 /* Called from do_type_instantiation through binding_table_foreach to
16735    do recursive instantiation for the type bound in ENTRY.  */
16736 static void
16737 bt_instantiate_type_proc (binding_entry entry, void *data)
16738 {
16739   tree storage = *(tree *) data;
16740
16741   if (MAYBE_CLASS_TYPE_P (entry->type)
16742       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
16743     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
16744 }
16745
16746 /* Called from do_type_instantiation to instantiate a member
16747    (a member function or a static member variable) of an
16748    explicitly instantiated class template.  */
16749 static void
16750 instantiate_class_member (tree decl, int extern_p)
16751 {
16752   mark_decl_instantiated (decl, extern_p);
16753   if (! extern_p)
16754     instantiate_decl (decl, /*defer_ok=*/1,
16755                       /*expl_inst_class_mem_p=*/true);
16756 }
16757
16758 /* Perform an explicit instantiation of template class T.  STORAGE, if
16759    non-null, is the RID for extern, inline or static.  COMPLAIN is
16760    nonzero if this is called from the parser, zero if called recursively,
16761    since the standard is unclear (as detailed below).  */
16762
16763 void
16764 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
16765 {
16766   int extern_p = 0;
16767   int nomem_p = 0;
16768   int static_p = 0;
16769   int previous_instantiation_extern_p = 0;
16770
16771   if (TREE_CODE (t) == TYPE_DECL)
16772     t = TREE_TYPE (t);
16773
16774   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
16775     {
16776       error ("explicit instantiation of non-template type %qT", t);
16777       return;
16778     }
16779
16780   complete_type (t);
16781
16782   if (!COMPLETE_TYPE_P (t))
16783     {
16784       if (complain & tf_error)
16785         error ("explicit instantiation of %q#T before definition of template",
16786                t);
16787       return;
16788     }
16789
16790   if (storage != NULL_TREE)
16791     {
16792       if (!in_system_header)
16793         {
16794           if (storage == ridpointers[(int) RID_EXTERN])
16795             {
16796               if (cxx_dialect == cxx98)
16797                 pedwarn (input_location, OPT_pedantic, 
16798                          "ISO C++ 1998 forbids the use of %<extern%> on "
16799                          "explicit instantiations");
16800             }
16801           else
16802             pedwarn (input_location, OPT_pedantic, 
16803                      "ISO C++ forbids the use of %qE"
16804                      " on explicit instantiations", storage);
16805         }
16806
16807       if (storage == ridpointers[(int) RID_INLINE])
16808         nomem_p = 1;
16809       else if (storage == ridpointers[(int) RID_EXTERN])
16810         extern_p = 1;
16811       else if (storage == ridpointers[(int) RID_STATIC])
16812         static_p = 1;
16813       else
16814         {
16815           error ("storage class %qD applied to template instantiation",
16816                  storage);
16817           extern_p = 0;
16818         }
16819     }
16820
16821   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
16822     {
16823       /* DR 259 [temp.spec].
16824
16825          Both an explicit instantiation and a declaration of an explicit
16826          specialization shall not appear in a program unless the explicit
16827          instantiation follows a declaration of the explicit specialization.
16828
16829          For a given set of template parameters, if an explicit
16830          instantiation of a template appears after a declaration of an
16831          explicit specialization for that template, the explicit
16832          instantiation has no effect.  */
16833       return;
16834     }
16835   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
16836     {
16837       /* [temp.spec]
16838
16839          No program shall explicitly instantiate any template more
16840          than once.
16841
16842          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
16843          instantiation was `extern'.  If EXTERN_P then the second is.
16844          These cases are OK.  */
16845       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
16846
16847       if (!previous_instantiation_extern_p && !extern_p
16848           && (complain & tf_error))
16849         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
16850
16851       /* If we've already instantiated the template, just return now.  */
16852       if (!CLASSTYPE_INTERFACE_ONLY (t))
16853         return;
16854     }
16855
16856   check_explicit_instantiation_namespace (TYPE_NAME (t));
16857   mark_class_instantiated (t, extern_p);
16858
16859   if (nomem_p)
16860     return;
16861
16862   {
16863     tree tmp;
16864
16865     /* In contrast to implicit instantiation, where only the
16866        declarations, and not the definitions, of members are
16867        instantiated, we have here:
16868
16869          [temp.explicit]
16870
16871          The explicit instantiation of a class template specialization
16872          implies the instantiation of all of its members not
16873          previously explicitly specialized in the translation unit
16874          containing the explicit instantiation.
16875
16876        Of course, we can't instantiate member template classes, since
16877        we don't have any arguments for them.  Note that the standard
16878        is unclear on whether the instantiation of the members are
16879        *explicit* instantiations or not.  However, the most natural
16880        interpretation is that it should be an explicit instantiation.  */
16881
16882     if (! static_p)
16883       for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
16884         if (TREE_CODE (tmp) == FUNCTION_DECL
16885             && DECL_TEMPLATE_INSTANTIATION (tmp))
16886           instantiate_class_member (tmp, extern_p);
16887
16888     for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
16889       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
16890         instantiate_class_member (tmp, extern_p);
16891
16892     if (CLASSTYPE_NESTED_UTDS (t))
16893       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
16894                              bt_instantiate_type_proc, &storage);
16895   }
16896 }
16897
16898 /* Given a function DECL, which is a specialization of TMPL, modify
16899    DECL to be a re-instantiation of TMPL with the same template
16900    arguments.  TMPL should be the template into which tsubst'ing
16901    should occur for DECL, not the most general template.
16902
16903    One reason for doing this is a scenario like this:
16904
16905      template <class T>
16906      void f(const T&, int i);
16907
16908      void g() { f(3, 7); }
16909
16910      template <class T>
16911      void f(const T& t, const int i) { }
16912
16913    Note that when the template is first instantiated, with
16914    instantiate_template, the resulting DECL will have no name for the
16915    first parameter, and the wrong type for the second.  So, when we go
16916    to instantiate the DECL, we regenerate it.  */
16917
16918 static void
16919 regenerate_decl_from_template (tree decl, tree tmpl)
16920 {
16921   /* The arguments used to instantiate DECL, from the most general
16922      template.  */
16923   tree args;
16924   tree code_pattern;
16925
16926   args = DECL_TI_ARGS (decl);
16927   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
16928
16929   /* Make sure that we can see identifiers, and compute access
16930      correctly.  */
16931   push_access_scope (decl);
16932
16933   if (TREE_CODE (decl) == FUNCTION_DECL)
16934     {
16935       tree decl_parm;
16936       tree pattern_parm;
16937       tree specs;
16938       int args_depth;
16939       int parms_depth;
16940
16941       args_depth = TMPL_ARGS_DEPTH (args);
16942       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
16943       if (args_depth > parms_depth)
16944         args = get_innermost_template_args (args, parms_depth);
16945
16946       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
16947                                               args, tf_error, NULL_TREE);
16948       if (specs)
16949         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
16950                                                     specs);
16951
16952       /* Merge parameter declarations.  */
16953       decl_parm = skip_artificial_parms_for (decl,
16954                                              DECL_ARGUMENTS (decl));
16955       pattern_parm
16956         = skip_artificial_parms_for (code_pattern,
16957                                      DECL_ARGUMENTS (code_pattern));
16958       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
16959         {
16960           tree parm_type;
16961           tree attributes;
16962           
16963           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
16964             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
16965           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
16966                               NULL_TREE);
16967           parm_type = type_decays_to (parm_type);
16968           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
16969             TREE_TYPE (decl_parm) = parm_type;
16970           attributes = DECL_ATTRIBUTES (pattern_parm);
16971           if (DECL_ATTRIBUTES (decl_parm) != attributes)
16972             {
16973               DECL_ATTRIBUTES (decl_parm) = attributes;
16974               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
16975             }
16976           decl_parm = DECL_CHAIN (decl_parm);
16977           pattern_parm = DECL_CHAIN (pattern_parm);
16978         }
16979       /* Merge any parameters that match with the function parameter
16980          pack.  */
16981       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
16982         {
16983           int i, len;
16984           tree expanded_types;
16985           /* Expand the TYPE_PACK_EXPANSION that provides the types for
16986              the parameters in this function parameter pack.  */
16987           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
16988                                                  args, tf_error, NULL_TREE);
16989           len = TREE_VEC_LENGTH (expanded_types);
16990           for (i = 0; i < len; i++)
16991             {
16992               tree parm_type;
16993               tree attributes;
16994           
16995               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
16996                 /* Rename the parameter to include the index.  */
16997                 DECL_NAME (decl_parm) = 
16998                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
16999               parm_type = TREE_VEC_ELT (expanded_types, i);
17000               parm_type = type_decays_to (parm_type);
17001               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
17002                 TREE_TYPE (decl_parm) = parm_type;
17003               attributes = DECL_ATTRIBUTES (pattern_parm);
17004               if (DECL_ATTRIBUTES (decl_parm) != attributes)
17005                 {
17006                   DECL_ATTRIBUTES (decl_parm) = attributes;
17007                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
17008                 }
17009               decl_parm = DECL_CHAIN (decl_parm);
17010             }
17011         }
17012       /* Merge additional specifiers from the CODE_PATTERN.  */
17013       if (DECL_DECLARED_INLINE_P (code_pattern)
17014           && !DECL_DECLARED_INLINE_P (decl))
17015         DECL_DECLARED_INLINE_P (decl) = 1;
17016     }
17017   else if (TREE_CODE (decl) == VAR_DECL)
17018     {
17019       DECL_INITIAL (decl) =
17020         tsubst_expr (DECL_INITIAL (code_pattern), args,
17021                      tf_error, DECL_TI_TEMPLATE (decl),
17022                      /*integral_constant_expression_p=*/false);
17023       if (VAR_HAD_UNKNOWN_BOUND (decl))
17024         TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
17025                                    tf_error, DECL_TI_TEMPLATE (decl));
17026     }
17027   else
17028     gcc_unreachable ();
17029
17030   pop_access_scope (decl);
17031 }
17032
17033 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
17034    substituted to get DECL.  */
17035
17036 tree
17037 template_for_substitution (tree decl)
17038 {
17039   tree tmpl = DECL_TI_TEMPLATE (decl);
17040
17041   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
17042      for the instantiation.  This is not always the most general
17043      template.  Consider, for example:
17044
17045         template <class T>
17046         struct S { template <class U> void f();
17047                    template <> void f<int>(); };
17048
17049      and an instantiation of S<double>::f<int>.  We want TD to be the
17050      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
17051   while (/* An instantiation cannot have a definition, so we need a
17052             more general template.  */
17053          DECL_TEMPLATE_INSTANTIATION (tmpl)
17054            /* We must also deal with friend templates.  Given:
17055
17056                 template <class T> struct S {
17057                   template <class U> friend void f() {};
17058                 };
17059
17060               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
17061               so far as the language is concerned, but that's still
17062               where we get the pattern for the instantiation from.  On
17063               other hand, if the definition comes outside the class, say:
17064
17065                 template <class T> struct S {
17066                   template <class U> friend void f();
17067                 };
17068                 template <class U> friend void f() {}
17069
17070               we don't need to look any further.  That's what the check for
17071               DECL_INITIAL is for.  */
17072           || (TREE_CODE (decl) == FUNCTION_DECL
17073               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
17074               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
17075     {
17076       /* The present template, TD, should not be a definition.  If it
17077          were a definition, we should be using it!  Note that we
17078          cannot restructure the loop to just keep going until we find
17079          a template with a definition, since that might go too far if
17080          a specialization was declared, but not defined.  */
17081       gcc_assert (TREE_CODE (decl) != VAR_DECL
17082                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
17083
17084       /* Fetch the more general template.  */
17085       tmpl = DECL_TI_TEMPLATE (tmpl);
17086     }
17087
17088   return tmpl;
17089 }
17090
17091 /* Returns true if we need to instantiate this template instance even if we
17092    know we aren't going to emit it..  */
17093
17094 bool
17095 always_instantiate_p (tree decl)
17096 {
17097   /* We always instantiate inline functions so that we can inline them.  An
17098      explicit instantiation declaration prohibits implicit instantiation of
17099      non-inline functions.  With high levels of optimization, we would
17100      normally inline non-inline functions -- but we're not allowed to do
17101      that for "extern template" functions.  Therefore, we check
17102      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
17103   return ((TREE_CODE (decl) == FUNCTION_DECL
17104            && DECL_DECLARED_INLINE_P (decl))
17105           /* And we need to instantiate static data members so that
17106              their initializers are available in integral constant
17107              expressions.  */
17108           || (TREE_CODE (decl) == VAR_DECL
17109               && decl_maybe_constant_var_p (decl)));
17110 }
17111
17112 /* Produce the definition of D, a _DECL generated from a template.  If
17113    DEFER_OK is nonzero, then we don't have to actually do the
17114    instantiation now; we just have to do it sometime.  Normally it is
17115    an error if this is an explicit instantiation but D is undefined.
17116    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
17117    explicitly instantiated class template.  */
17118
17119 tree
17120 instantiate_decl (tree d, int defer_ok,
17121                   bool expl_inst_class_mem_p)
17122 {
17123   tree tmpl = DECL_TI_TEMPLATE (d);
17124   tree gen_args;
17125   tree args;
17126   tree td;
17127   tree code_pattern;
17128   tree spec;
17129   tree gen_tmpl;
17130   bool pattern_defined;
17131   int need_push;
17132   location_t saved_loc = input_location;
17133   bool external_p;
17134
17135   /* This function should only be used to instantiate templates for
17136      functions and static member variables.  */
17137   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
17138               || TREE_CODE (d) == VAR_DECL);
17139
17140   /* Variables are never deferred; if instantiation is required, they
17141      are instantiated right away.  That allows for better code in the
17142      case that an expression refers to the value of the variable --
17143      if the variable has a constant value the referring expression can
17144      take advantage of that fact.  */
17145   if (TREE_CODE (d) == VAR_DECL
17146       || DECL_DECLARED_CONSTEXPR_P (d))
17147     defer_ok = 0;
17148
17149   /* Don't instantiate cloned functions.  Instead, instantiate the
17150      functions they cloned.  */
17151   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
17152     d = DECL_CLONED_FUNCTION (d);
17153
17154   if (DECL_TEMPLATE_INSTANTIATED (d)
17155       || DECL_TEMPLATE_SPECIALIZATION (d))
17156     /* D has already been instantiated or explicitly specialized, so
17157        there's nothing for us to do here.
17158
17159        It might seem reasonable to check whether or not D is an explicit
17160        instantiation, and, if so, stop here.  But when an explicit
17161        instantiation is deferred until the end of the compilation,
17162        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
17163        the instantiation.  */
17164     return d;
17165
17166   /* Check to see whether we know that this template will be
17167      instantiated in some other file, as with "extern template"
17168      extension.  */
17169   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
17170
17171   /* In general, we do not instantiate such templates.  */
17172   if (external_p && !always_instantiate_p (d))
17173     return d;
17174
17175   gen_tmpl = most_general_template (tmpl);
17176   gen_args = DECL_TI_ARGS (d);
17177
17178   if (tmpl != gen_tmpl)
17179     /* We should already have the extra args.  */
17180     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
17181                 == TMPL_ARGS_DEPTH (gen_args));
17182   /* And what's in the hash table should match D.  */
17183   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
17184               || spec == NULL_TREE);
17185
17186   /* This needs to happen before any tsubsting.  */
17187   if (! push_tinst_level (d))
17188     return d;
17189
17190   timevar_push (TV_PARSE);
17191
17192   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
17193      for the instantiation.  */
17194   td = template_for_substitution (d);
17195   code_pattern = DECL_TEMPLATE_RESULT (td);
17196
17197   /* We should never be trying to instantiate a member of a class
17198      template or partial specialization.  */
17199   gcc_assert (d != code_pattern);
17200
17201   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
17202       || DECL_TEMPLATE_SPECIALIZATION (td))
17203     /* In the case of a friend template whose definition is provided
17204        outside the class, we may have too many arguments.  Drop the
17205        ones we don't need.  The same is true for specializations.  */
17206     args = get_innermost_template_args
17207       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
17208   else
17209     args = gen_args;
17210
17211   if (TREE_CODE (d) == FUNCTION_DECL)
17212     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
17213   else
17214     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
17215
17216   /* We may be in the middle of deferred access check.  Disable it now.  */
17217   push_deferring_access_checks (dk_no_deferred);
17218
17219   /* Unless an explicit instantiation directive has already determined
17220      the linkage of D, remember that a definition is available for
17221      this entity.  */
17222   if (pattern_defined
17223       && !DECL_INTERFACE_KNOWN (d)
17224       && !DECL_NOT_REALLY_EXTERN (d))
17225     mark_definable (d);
17226
17227   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
17228   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
17229   input_location = DECL_SOURCE_LOCATION (d);
17230
17231   /* If D is a member of an explicitly instantiated class template,
17232      and no definition is available, treat it like an implicit
17233      instantiation.  */
17234   if (!pattern_defined && expl_inst_class_mem_p
17235       && DECL_EXPLICIT_INSTANTIATION (d))
17236     {
17237       /* Leave linkage flags alone on instantiations with anonymous
17238          visibility.  */
17239       if (TREE_PUBLIC (d))
17240         {
17241           DECL_NOT_REALLY_EXTERN (d) = 0;
17242           DECL_INTERFACE_KNOWN (d) = 0;
17243         }
17244       SET_DECL_IMPLICIT_INSTANTIATION (d);
17245     }
17246
17247   /* Recheck the substitutions to obtain any warning messages
17248      about ignoring cv qualifiers.  Don't do this for artificial decls,
17249      as it breaks the context-sensitive substitution for lambda op(). */
17250   if (!defer_ok && !DECL_ARTIFICIAL (d))
17251     {
17252       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
17253       tree type = TREE_TYPE (gen);
17254
17255       /* Make sure that we can see identifiers, and compute access
17256          correctly.  D is already the target FUNCTION_DECL with the
17257          right context.  */
17258       push_access_scope (d);
17259
17260       if (TREE_CODE (gen) == FUNCTION_DECL)
17261         {
17262           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
17263           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
17264                                           d);
17265           /* Don't simply tsubst the function type, as that will give
17266              duplicate warnings about poor parameter qualifications.
17267              The function arguments are the same as the decl_arguments
17268              without the top level cv qualifiers.  */
17269           type = TREE_TYPE (type);
17270         }
17271       tsubst (type, gen_args, tf_warning_or_error, d);
17272
17273       pop_access_scope (d);
17274     }
17275
17276   /* Defer all other templates, unless we have been explicitly
17277      forbidden from doing so.  */
17278   if (/* If there is no definition, we cannot instantiate the
17279          template.  */
17280       ! pattern_defined
17281       /* If it's OK to postpone instantiation, do so.  */
17282       || defer_ok
17283       /* If this is a static data member that will be defined
17284          elsewhere, we don't want to instantiate the entire data
17285          member, but we do want to instantiate the initializer so that
17286          we can substitute that elsewhere.  */
17287       || (external_p && TREE_CODE (d) == VAR_DECL))
17288     {
17289       /* The definition of the static data member is now required so
17290          we must substitute the initializer.  */
17291       if (TREE_CODE (d) == VAR_DECL
17292           && !DECL_INITIAL (d)
17293           && DECL_INITIAL (code_pattern))
17294         {
17295           tree ns;
17296           tree init;
17297           bool const_init = false;
17298
17299           ns = decl_namespace_context (d);
17300           push_nested_namespace (ns);
17301           push_nested_class (DECL_CONTEXT (d));
17302           init = tsubst_expr (DECL_INITIAL (code_pattern),
17303                               args,
17304                               tf_warning_or_error, NULL_TREE,
17305                               /*integral_constant_expression_p=*/false);
17306           /* Make sure the initializer is still constant, in case of
17307              circular dependency (template/instantiate6.C). */
17308           const_init
17309             = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
17310           cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
17311                           /*asmspec_tree=*/NULL_TREE,
17312                           LOOKUP_ONLYCONVERTING);
17313           pop_nested_class ();
17314           pop_nested_namespace (ns);
17315         }
17316
17317       /* We restore the source position here because it's used by
17318          add_pending_template.  */
17319       input_location = saved_loc;
17320
17321       if (at_eof && !pattern_defined
17322           && DECL_EXPLICIT_INSTANTIATION (d)
17323           && DECL_NOT_REALLY_EXTERN (d))
17324         /* [temp.explicit]
17325
17326            The definition of a non-exported function template, a
17327            non-exported member function template, or a non-exported
17328            member function or static data member of a class template
17329            shall be present in every translation unit in which it is
17330            explicitly instantiated.  */
17331         permerror (input_location,  "explicit instantiation of %qD "
17332                    "but no definition available", d);
17333
17334       /* If we're in unevaluated context, we just wanted to get the
17335          constant value; this isn't an odr use, so don't queue
17336          a full instantiation.  */
17337       if (cp_unevaluated_operand != 0)
17338         goto out;
17339       /* ??? Historically, we have instantiated inline functions, even
17340          when marked as "extern template".  */
17341       if (!(external_p && TREE_CODE (d) == VAR_DECL))
17342         add_pending_template (d);
17343       goto out;
17344     }
17345   /* Tell the repository that D is available in this translation unit
17346      -- and see if it is supposed to be instantiated here.  */
17347   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
17348     {
17349       /* In a PCH file, despite the fact that the repository hasn't
17350          requested instantiation in the PCH it is still possible that
17351          an instantiation will be required in a file that includes the
17352          PCH.  */
17353       if (pch_file)
17354         add_pending_template (d);
17355       /* Instantiate inline functions so that the inliner can do its
17356          job, even though we'll not be emitting a copy of this
17357          function.  */
17358       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
17359         goto out;
17360     }
17361
17362   need_push = !cfun || !global_bindings_p ();
17363   if (need_push)
17364     push_to_top_level ();
17365
17366   /* Mark D as instantiated so that recursive calls to
17367      instantiate_decl do not try to instantiate it again.  */
17368   DECL_TEMPLATE_INSTANTIATED (d) = 1;
17369
17370   /* Regenerate the declaration in case the template has been modified
17371      by a subsequent redeclaration.  */
17372   regenerate_decl_from_template (d, td);
17373
17374   /* We already set the file and line above.  Reset them now in case
17375      they changed as a result of calling regenerate_decl_from_template.  */
17376   input_location = DECL_SOURCE_LOCATION (d);
17377
17378   if (TREE_CODE (d) == VAR_DECL)
17379     {
17380       tree init;
17381       bool const_init = false;
17382
17383       /* Clear out DECL_RTL; whatever was there before may not be right
17384          since we've reset the type of the declaration.  */
17385       SET_DECL_RTL (d, NULL);
17386       DECL_IN_AGGR_P (d) = 0;
17387
17388       /* The initializer is placed in DECL_INITIAL by
17389          regenerate_decl_from_template so we don't need to
17390          push/pop_access_scope again here.  Pull it out so that
17391          cp_finish_decl can process it.  */
17392       init = DECL_INITIAL (d);
17393       DECL_INITIAL (d) = NULL_TREE;
17394       DECL_INITIALIZED_P (d) = 0;
17395
17396       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
17397          initializer.  That function will defer actual emission until
17398          we have a chance to determine linkage.  */
17399       DECL_EXTERNAL (d) = 0;
17400
17401       /* Enter the scope of D so that access-checking works correctly.  */
17402       push_nested_class (DECL_CONTEXT (d));
17403       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
17404       cp_finish_decl (d, init, const_init, NULL_TREE, 0);
17405       pop_nested_class ();
17406     }
17407   else if (TREE_CODE (d) == FUNCTION_DECL)
17408     {
17409       htab_t saved_local_specializations;
17410       tree subst_decl;
17411       tree tmpl_parm;
17412       tree spec_parm;
17413
17414       /* Save away the current list, in case we are instantiating one
17415          template from within the body of another.  */
17416       saved_local_specializations = local_specializations;
17417
17418       /* Set up the list of local specializations.  */
17419       local_specializations = htab_create (37,
17420                                            hash_local_specialization,
17421                                            eq_local_specializations,
17422                                            NULL);
17423
17424       /* Set up context.  */
17425       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
17426
17427       /* Create substitution entries for the parameters.  */
17428       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
17429       tmpl_parm = DECL_ARGUMENTS (subst_decl);
17430       spec_parm = DECL_ARGUMENTS (d);
17431       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
17432         {
17433           register_local_specialization (spec_parm, tmpl_parm);
17434           spec_parm = skip_artificial_parms_for (d, spec_parm);
17435           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
17436         }
17437       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
17438         {
17439           register_local_specialization (spec_parm, tmpl_parm);
17440           tmpl_parm = DECL_CHAIN (tmpl_parm);
17441           spec_parm = DECL_CHAIN (spec_parm);
17442         }
17443       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
17444         {
17445           /* Register the (value) argument pack as a specialization of
17446              TMPL_PARM, then move on.  */
17447           tree argpack = make_fnparm_pack (spec_parm);
17448           register_local_specialization (argpack, tmpl_parm);
17449           tmpl_parm = DECL_CHAIN (tmpl_parm);
17450           spec_parm = NULL_TREE;
17451         }
17452       gcc_assert (!spec_parm);
17453
17454       /* Substitute into the body of the function.  */
17455       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
17456                    tf_warning_or_error, tmpl,
17457                    /*integral_constant_expression_p=*/false);
17458
17459       /* Set the current input_location to the end of the function
17460          so that finish_function knows where we are.  */
17461       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
17462
17463       /* We don't need the local specializations any more.  */
17464       htab_delete (local_specializations);
17465       local_specializations = saved_local_specializations;
17466
17467       /* Finish the function.  */
17468       d = finish_function (0);
17469       expand_or_defer_fn (d);
17470     }
17471
17472   /* We're not deferring instantiation any more.  */
17473   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
17474
17475   if (need_push)
17476     pop_from_top_level ();
17477
17478 out:
17479   input_location = saved_loc;
17480   pop_deferring_access_checks ();
17481   pop_tinst_level ();
17482
17483   timevar_pop (TV_PARSE);
17484
17485   return d;
17486 }
17487
17488 /* Run through the list of templates that we wish we could
17489    instantiate, and instantiate any we can.  RETRIES is the
17490    number of times we retry pending template instantiation.  */
17491
17492 void
17493 instantiate_pending_templates (int retries)
17494 {
17495   int reconsider;
17496   location_t saved_loc = input_location;
17497
17498   /* Instantiating templates may trigger vtable generation.  This in turn
17499      may require further template instantiations.  We place a limit here
17500      to avoid infinite loop.  */
17501   if (pending_templates && retries >= max_tinst_depth)
17502     {
17503       tree decl = pending_templates->tinst->decl;
17504
17505       error ("template instantiation depth exceeds maximum of %d"
17506              " instantiating %q+D, possibly from virtual table generation"
17507              " (use -ftemplate-depth= to increase the maximum)",
17508              max_tinst_depth, decl);
17509       if (TREE_CODE (decl) == FUNCTION_DECL)
17510         /* Pretend that we defined it.  */
17511         DECL_INITIAL (decl) = error_mark_node;
17512       return;
17513     }
17514
17515   do
17516     {
17517       struct pending_template **t = &pending_templates;
17518       struct pending_template *last = NULL;
17519       reconsider = 0;
17520       while (*t)
17521         {
17522           tree instantiation = reopen_tinst_level ((*t)->tinst);
17523           bool complete = false;
17524
17525           if (TYPE_P (instantiation))
17526             {
17527               tree fn;
17528
17529               if (!COMPLETE_TYPE_P (instantiation))
17530                 {
17531                   instantiate_class_template (instantiation);
17532                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
17533                     for (fn = TYPE_METHODS (instantiation);
17534                          fn;
17535                          fn = TREE_CHAIN (fn))
17536                       if (! DECL_ARTIFICIAL (fn))
17537                         instantiate_decl (fn,
17538                                           /*defer_ok=*/0,
17539                                           /*expl_inst_class_mem_p=*/false);
17540                   if (COMPLETE_TYPE_P (instantiation))
17541                     reconsider = 1;
17542                 }
17543
17544               complete = COMPLETE_TYPE_P (instantiation);
17545             }
17546           else
17547             {
17548               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
17549                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
17550                 {
17551                   instantiation
17552                     = instantiate_decl (instantiation,
17553                                         /*defer_ok=*/0,
17554                                         /*expl_inst_class_mem_p=*/false);
17555                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
17556                     reconsider = 1;
17557                 }
17558
17559               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
17560                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
17561             }
17562
17563           if (complete)
17564             /* If INSTANTIATION has been instantiated, then we don't
17565                need to consider it again in the future.  */
17566             *t = (*t)->next;
17567           else
17568             {
17569               last = *t;
17570               t = &(*t)->next;
17571             }
17572           tinst_depth = 0;
17573           current_tinst_level = NULL;
17574         }
17575       last_pending_template = last;
17576     }
17577   while (reconsider);
17578
17579   input_location = saved_loc;
17580 }
17581
17582 /* Substitute ARGVEC into T, which is a list of initializers for
17583    either base class or a non-static data member.  The TREE_PURPOSEs
17584    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
17585    instantiate_decl.  */
17586
17587 static tree
17588 tsubst_initializer_list (tree t, tree argvec)
17589 {
17590   tree inits = NULL_TREE;
17591
17592   for (; t; t = TREE_CHAIN (t))
17593     {
17594       tree decl;
17595       tree init;
17596       tree expanded_bases = NULL_TREE;
17597       tree expanded_arguments = NULL_TREE;
17598       int i, len = 1;
17599
17600       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
17601         {
17602           tree expr;
17603           tree arg;
17604
17605           /* Expand the base class expansion type into separate base
17606              classes.  */
17607           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
17608                                                  tf_warning_or_error,
17609                                                  NULL_TREE);
17610           if (expanded_bases == error_mark_node)
17611             continue;
17612           
17613           /* We'll be building separate TREE_LISTs of arguments for
17614              each base.  */
17615           len = TREE_VEC_LENGTH (expanded_bases);
17616           expanded_arguments = make_tree_vec (len);
17617           for (i = 0; i < len; i++)
17618             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
17619
17620           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
17621              expand each argument in the TREE_VALUE of t.  */
17622           expr = make_node (EXPR_PACK_EXPANSION);
17623           PACK_EXPANSION_PARAMETER_PACKS (expr) =
17624             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
17625
17626           if (TREE_VALUE (t) == void_type_node)
17627             /* VOID_TYPE_NODE is used to indicate
17628                value-initialization.  */
17629             {
17630               for (i = 0; i < len; i++)
17631                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
17632             }
17633           else
17634             {
17635               /* Substitute parameter packs into each argument in the
17636                  TREE_LIST.  */
17637               in_base_initializer = 1;
17638               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
17639                 {
17640                   tree expanded_exprs;
17641
17642                   /* Expand the argument.  */
17643                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
17644                   expanded_exprs 
17645                     = tsubst_pack_expansion (expr, argvec,
17646                                              tf_warning_or_error,
17647                                              NULL_TREE);
17648                   if (expanded_exprs == error_mark_node)
17649                     continue;
17650
17651                   /* Prepend each of the expanded expressions to the
17652                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
17653                   for (i = 0; i < len; i++)
17654                     {
17655                       TREE_VEC_ELT (expanded_arguments, i) = 
17656                         tree_cons (NULL_TREE, 
17657                                    TREE_VEC_ELT (expanded_exprs, i),
17658                                    TREE_VEC_ELT (expanded_arguments, i));
17659                     }
17660                 }
17661               in_base_initializer = 0;
17662
17663               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
17664                  since we built them backwards.  */
17665               for (i = 0; i < len; i++)
17666                 {
17667                   TREE_VEC_ELT (expanded_arguments, i) = 
17668                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
17669                 }
17670             }
17671         }
17672
17673       for (i = 0; i < len; ++i)
17674         {
17675           if (expanded_bases)
17676             {
17677               decl = TREE_VEC_ELT (expanded_bases, i);
17678               decl = expand_member_init (decl);
17679               init = TREE_VEC_ELT (expanded_arguments, i);
17680             }
17681           else
17682             {
17683               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
17684                                   tf_warning_or_error, NULL_TREE);
17685
17686               decl = expand_member_init (decl);
17687               if (decl && !DECL_P (decl))
17688                 in_base_initializer = 1;
17689
17690               init = TREE_VALUE (t);
17691               if (init != void_type_node)
17692                 init = tsubst_expr (init, argvec,
17693                                     tf_warning_or_error, NULL_TREE,
17694                                     /*integral_constant_expression_p=*/false);
17695               in_base_initializer = 0;
17696             }
17697
17698           if (decl)
17699             {
17700               init = build_tree_list (decl, init);
17701               TREE_CHAIN (init) = inits;
17702               inits = init;
17703             }
17704         }
17705     }
17706   return inits;
17707 }
17708
17709 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
17710
17711 static void
17712 set_current_access_from_decl (tree decl)
17713 {
17714   if (TREE_PRIVATE (decl))
17715     current_access_specifier = access_private_node;
17716   else if (TREE_PROTECTED (decl))
17717     current_access_specifier = access_protected_node;
17718   else
17719     current_access_specifier = access_public_node;
17720 }
17721
17722 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
17723    is the instantiation (which should have been created with
17724    start_enum) and ARGS are the template arguments to use.  */
17725
17726 static void
17727 tsubst_enum (tree tag, tree newtag, tree args)
17728 {
17729   tree e;
17730
17731   if (SCOPED_ENUM_P (newtag))
17732     begin_scope (sk_scoped_enum, newtag);
17733
17734   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
17735     {
17736       tree value;
17737       tree decl;
17738
17739       decl = TREE_VALUE (e);
17740       /* Note that in a template enum, the TREE_VALUE is the
17741          CONST_DECL, not the corresponding INTEGER_CST.  */
17742       value = tsubst_expr (DECL_INITIAL (decl),
17743                            args, tf_warning_or_error, NULL_TREE,
17744                            /*integral_constant_expression_p=*/true);
17745
17746       /* Give this enumeration constant the correct access.  */
17747       set_current_access_from_decl (decl);
17748
17749       /* Actually build the enumerator itself.  */
17750       build_enumerator
17751         (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
17752     }
17753
17754   if (SCOPED_ENUM_P (newtag))
17755     finish_scope ();
17756
17757   finish_enum_value_list (newtag);
17758   finish_enum (newtag);
17759
17760   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
17761     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
17762 }
17763
17764 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
17765    its type -- but without substituting the innermost set of template
17766    arguments.  So, innermost set of template parameters will appear in
17767    the type.  */
17768
17769 tree
17770 get_mostly_instantiated_function_type (tree decl)
17771 {
17772   tree fn_type;
17773   tree tmpl;
17774   tree targs;
17775   tree tparms;
17776   int parm_depth;
17777
17778   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
17779   targs = DECL_TI_ARGS (decl);
17780   tparms = DECL_TEMPLATE_PARMS (tmpl);
17781   parm_depth = TMPL_PARMS_DEPTH (tparms);
17782
17783   /* There should be as many levels of arguments as there are levels
17784      of parameters.  */
17785   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
17786
17787   fn_type = TREE_TYPE (tmpl);
17788
17789   if (parm_depth == 1)
17790     /* No substitution is necessary.  */
17791     ;
17792   else
17793     {
17794       int i, save_access_control;
17795       tree partial_args;
17796
17797       /* Replace the innermost level of the TARGS with NULL_TREEs to
17798          let tsubst know not to substitute for those parameters.  */
17799       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
17800       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
17801         SET_TMPL_ARGS_LEVEL (partial_args, i,
17802                              TMPL_ARGS_LEVEL (targs, i));
17803       SET_TMPL_ARGS_LEVEL (partial_args,
17804                            TMPL_ARGS_DEPTH (targs),
17805                            make_tree_vec (DECL_NTPARMS (tmpl)));
17806
17807       /* Disable access control as this function is used only during
17808          name-mangling.  */
17809       save_access_control = flag_access_control;
17810       flag_access_control = 0;
17811
17812       ++processing_template_decl;
17813       /* Now, do the (partial) substitution to figure out the
17814          appropriate function type.  */
17815       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
17816       --processing_template_decl;
17817
17818       /* Substitute into the template parameters to obtain the real
17819          innermost set of parameters.  This step is important if the
17820          innermost set of template parameters contains value
17821          parameters whose types depend on outer template parameters.  */
17822       TREE_VEC_LENGTH (partial_args)--;
17823       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
17824
17825       flag_access_control = save_access_control;
17826     }
17827
17828   return fn_type;
17829 }
17830
17831 /* Return truthvalue if we're processing a template different from
17832    the last one involved in diagnostics.  */
17833 int
17834 problematic_instantiation_changed (void)
17835 {
17836   return last_template_error_tick != tinst_level_tick;
17837 }
17838
17839 /* Remember current template involved in diagnostics.  */
17840 void
17841 record_last_problematic_instantiation (void)
17842 {
17843   last_template_error_tick = tinst_level_tick;
17844 }
17845
17846 struct tinst_level *
17847 current_instantiation (void)
17848 {
17849   return current_tinst_level;
17850 }
17851
17852 /* [temp.param] Check that template non-type parm TYPE is of an allowable
17853    type. Return zero for ok, nonzero for disallowed. Issue error and
17854    warning messages under control of COMPLAIN.  */
17855
17856 static int
17857 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
17858 {
17859   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
17860     return 0;
17861   else if (POINTER_TYPE_P (type))
17862     return 0;
17863   else if (TYPE_PTR_TO_MEMBER_P (type))
17864     return 0;
17865   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
17866     return 0;
17867   else if (TREE_CODE (type) == TYPENAME_TYPE)
17868     return 0;
17869
17870   if (complain & tf_error)
17871     error ("%q#T is not a valid type for a template constant parameter", type);
17872   return 1;
17873 }
17874
17875 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
17876    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
17877
17878 static bool
17879 dependent_type_p_r (tree type)
17880 {
17881   tree scope;
17882
17883   /* [temp.dep.type]
17884
17885      A type is dependent if it is:
17886
17887      -- a template parameter. Template template parameters are types
17888         for us (since TYPE_P holds true for them) so we handle
17889         them here.  */
17890   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
17891       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
17892     return true;
17893   /* -- a qualified-id with a nested-name-specifier which contains a
17894         class-name that names a dependent type or whose unqualified-id
17895         names a dependent type.  */
17896   if (TREE_CODE (type) == TYPENAME_TYPE)
17897     return true;
17898   /* -- a cv-qualified type where the cv-unqualified type is
17899         dependent.  */
17900   type = TYPE_MAIN_VARIANT (type);
17901   /* -- a compound type constructed from any dependent type.  */
17902   if (TYPE_PTR_TO_MEMBER_P (type))
17903     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
17904             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
17905                                            (type)));
17906   else if (TREE_CODE (type) == POINTER_TYPE
17907            || TREE_CODE (type) == REFERENCE_TYPE)
17908     return dependent_type_p (TREE_TYPE (type));
17909   else if (TREE_CODE (type) == FUNCTION_TYPE
17910            || TREE_CODE (type) == METHOD_TYPE)
17911     {
17912       tree arg_type;
17913
17914       if (dependent_type_p (TREE_TYPE (type)))
17915         return true;
17916       for (arg_type = TYPE_ARG_TYPES (type);
17917            arg_type;
17918            arg_type = TREE_CHAIN (arg_type))
17919         if (dependent_type_p (TREE_VALUE (arg_type)))
17920           return true;
17921       return false;
17922     }
17923   /* -- an array type constructed from any dependent type or whose
17924         size is specified by a constant expression that is
17925         value-dependent.
17926
17927         We checked for type- and value-dependence of the bounds in
17928         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
17929   if (TREE_CODE (type) == ARRAY_TYPE)
17930     {
17931       if (TYPE_DOMAIN (type)
17932           && dependent_type_p (TYPE_DOMAIN (type)))
17933         return true;
17934       return dependent_type_p (TREE_TYPE (type));
17935     }
17936
17937   /* -- a template-id in which either the template name is a template
17938      parameter ...  */
17939   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
17940     return true;
17941   /* ... or any of the template arguments is a dependent type or
17942         an expression that is type-dependent or value-dependent.  */
17943   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
17944            && (any_dependent_template_arguments_p
17945                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
17946     return true;
17947
17948   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
17949      argument of the `typeof' expression is not type-dependent, then
17950      it should already been have resolved.  */
17951   if (TREE_CODE (type) == TYPEOF_TYPE
17952       || TREE_CODE (type) == DECLTYPE_TYPE)
17953     return true;
17954
17955   /* A template argument pack is dependent if any of its packed
17956      arguments are.  */
17957   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
17958     {
17959       tree args = ARGUMENT_PACK_ARGS (type);
17960       int i, len = TREE_VEC_LENGTH (args);
17961       for (i = 0; i < len; ++i)
17962         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
17963           return true;
17964     }
17965
17966   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
17967      be template parameters.  */
17968   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
17969     return true;
17970
17971   /* The standard does not specifically mention types that are local
17972      to template functions or local classes, but they should be
17973      considered dependent too.  For example:
17974
17975        template <int I> void f() {
17976          enum E { a = I };
17977          S<sizeof (E)> s;
17978        }
17979
17980      The size of `E' cannot be known until the value of `I' has been
17981      determined.  Therefore, `E' must be considered dependent.  */
17982   scope = TYPE_CONTEXT (type);
17983   if (scope && TYPE_P (scope))
17984     return dependent_type_p (scope);
17985   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
17986     return type_dependent_expression_p (scope);
17987
17988   /* Other types are non-dependent.  */
17989   return false;
17990 }
17991
17992 /* Returns TRUE if TYPE is dependent, in the sense of
17993    [temp.dep.type].  Note that a NULL type is considered dependent.  */
17994
17995 bool
17996 dependent_type_p (tree type)
17997 {
17998   /* If there are no template parameters in scope, then there can't be
17999      any dependent types.  */
18000   if (!processing_template_decl)
18001     {
18002       /* If we are not processing a template, then nobody should be
18003          providing us with a dependent type.  */
18004       gcc_assert (type);
18005       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
18006       return false;
18007     }
18008
18009   /* If the type is NULL, we have not computed a type for the entity
18010      in question; in that case, the type is dependent.  */
18011   if (!type)
18012     return true;
18013
18014   /* Erroneous types can be considered non-dependent.  */
18015   if (type == error_mark_node)
18016     return false;
18017
18018   /* If we have not already computed the appropriate value for TYPE,
18019      do so now.  */
18020   if (!TYPE_DEPENDENT_P_VALID (type))
18021     {
18022       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
18023       TYPE_DEPENDENT_P_VALID (type) = 1;
18024     }
18025
18026   return TYPE_DEPENDENT_P (type);
18027 }
18028
18029 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
18030    lookup.  In other words, a dependent type that is not the current
18031    instantiation.  */
18032
18033 bool
18034 dependent_scope_p (tree scope)
18035 {
18036   return (scope && TYPE_P (scope) && dependent_type_p (scope)
18037           && !currently_open_class (scope));
18038 }
18039
18040 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
18041    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
18042    expression.  */
18043
18044 /* Note that this predicate is not appropriate for general expressions;
18045    only constant expressions (that satisfy potential_constant_expression)
18046    can be tested for value dependence.
18047
18048    We should really also have a predicate for "instantiation-dependent".
18049
18050    fold_non_dependent_expr: fold if constant and not type-dependent and not value-dependent.
18051      (what about instantiation-dependent constant-expressions?)
18052    is_late_template_attribute: defer if instantiation-dependent.
18053    compute_array_index_type: proceed if constant and not t- or v-dependent
18054      if instantiation-dependent, need to remember full expression
18055    uses_template_parms: FIXME - need to audit callers
18056    tsubst_decl [function_decl]: Why is this using value_dependent_expression_p?
18057    dependent_type_p [array_type]: dependent if index type is dependent
18058      (or non-constant?)
18059    static_assert - instantiation-dependent */
18060
18061 bool
18062 value_dependent_expression_p (tree expression)
18063 {
18064   if (!processing_template_decl)
18065     return false;
18066
18067   /* A name declared with a dependent type.  */
18068   if (DECL_P (expression) && type_dependent_expression_p (expression))
18069     return true;
18070
18071   switch (TREE_CODE (expression))
18072     {
18073     case IDENTIFIER_NODE:
18074       /* A name that has not been looked up -- must be dependent.  */
18075       return true;
18076
18077     case TEMPLATE_PARM_INDEX:
18078       /* A non-type template parm.  */
18079       return true;
18080
18081     case CONST_DECL:
18082       /* A non-type template parm.  */
18083       if (DECL_TEMPLATE_PARM_P (expression))
18084         return true;
18085       return value_dependent_expression_p (DECL_INITIAL (expression));
18086
18087     case VAR_DECL:
18088        /* A constant with literal type and is initialized
18089           with an expression that is value-dependent.  */
18090       if (DECL_INITIAL (expression)
18091           && decl_constant_var_p (expression)
18092           && value_dependent_expression_p (DECL_INITIAL (expression)))
18093         return true;
18094       return false;
18095
18096     case DYNAMIC_CAST_EXPR:
18097     case STATIC_CAST_EXPR:
18098     case CONST_CAST_EXPR:
18099     case REINTERPRET_CAST_EXPR:
18100     case CAST_EXPR:
18101       /* These expressions are value-dependent if the type to which
18102          the cast occurs is dependent or the expression being casted
18103          is value-dependent.  */
18104       {
18105         tree type = TREE_TYPE (expression);
18106
18107         if (dependent_type_p (type))
18108           return true;
18109
18110         /* A functional cast has a list of operands.  */
18111         expression = TREE_OPERAND (expression, 0);
18112         if (!expression)
18113           {
18114             /* If there are no operands, it must be an expression such
18115                as "int()". This should not happen for aggregate types
18116                because it would form non-constant expressions.  */
18117             gcc_assert (cxx_dialect >= cxx0x
18118                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
18119
18120             return false;
18121           }
18122
18123         if (TREE_CODE (expression) == TREE_LIST)
18124           return any_value_dependent_elements_p (expression);
18125
18126         return value_dependent_expression_p (expression);
18127       }
18128
18129     case SIZEOF_EXPR:
18130     case ALIGNOF_EXPR:
18131     case TYPEID_EXPR:
18132       /* A `sizeof' expression is value-dependent if the operand is
18133          type-dependent or is a pack expansion.  */
18134       expression = TREE_OPERAND (expression, 0);
18135       if (PACK_EXPANSION_P (expression))
18136         return true;
18137       else if (TYPE_P (expression))
18138         return dependent_type_p (expression);
18139       return type_dependent_expression_p (expression);
18140
18141     case AT_ENCODE_EXPR:
18142       /* An 'encode' expression is value-dependent if the operand is
18143          type-dependent.  */
18144       expression = TREE_OPERAND (expression, 0);
18145       return dependent_type_p (expression);
18146
18147     case NOEXCEPT_EXPR:
18148       expression = TREE_OPERAND (expression, 0);
18149       return type_dependent_expression_p (expression);
18150
18151     case SCOPE_REF:
18152       {
18153         tree name = TREE_OPERAND (expression, 1);
18154         return value_dependent_expression_p (name);
18155       }
18156
18157     case COMPONENT_REF:
18158       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
18159               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
18160
18161     case NONTYPE_ARGUMENT_PACK:
18162       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
18163          is value-dependent.  */
18164       {
18165         tree values = ARGUMENT_PACK_ARGS (expression);
18166         int i, len = TREE_VEC_LENGTH (values);
18167         
18168         for (i = 0; i < len; ++i)
18169           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
18170             return true;
18171         
18172         return false;
18173       }
18174
18175     case TRAIT_EXPR:
18176       {
18177         tree type2 = TRAIT_EXPR_TYPE2 (expression);
18178         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
18179                 || (type2 ? dependent_type_p (type2) : false));
18180       }
18181
18182     case MODOP_EXPR:
18183       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
18184               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
18185
18186     case ARRAY_REF:
18187       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
18188               || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
18189
18190     case ADDR_EXPR:
18191       {
18192         tree op = TREE_OPERAND (expression, 0);
18193         return (value_dependent_expression_p (op)
18194                 || has_value_dependent_address (op));
18195       }
18196
18197     case CALL_EXPR:
18198       {
18199         tree fn = get_callee_fndecl (expression);
18200         int i, nargs;
18201         if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
18202           return true;
18203         nargs = call_expr_nargs (expression);
18204         for (i = 0; i < nargs; ++i)
18205           {
18206             tree op = CALL_EXPR_ARG (expression, i);
18207             /* In a call to a constexpr member function, look through the
18208                implicit ADDR_EXPR on the object argument so that it doesn't
18209                cause the call to be considered value-dependent.  We also
18210                look through it in potential_constant_expression.  */
18211             if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
18212                 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
18213                 && TREE_CODE (op) == ADDR_EXPR)
18214               op = TREE_OPERAND (op, 0);
18215             if (value_dependent_expression_p (op))
18216               return true;
18217           }
18218         return false;
18219       }
18220
18221     case TEMPLATE_ID_EXPR:
18222       /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
18223          type-dependent.  */
18224       return type_dependent_expression_p (expression);
18225
18226     default:
18227       /* A constant expression is value-dependent if any subexpression is
18228          value-dependent.  */
18229       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
18230         {
18231         case tcc_reference:
18232         case tcc_unary:
18233           return (value_dependent_expression_p
18234                   (TREE_OPERAND (expression, 0)));
18235
18236         case tcc_comparison:
18237         case tcc_binary:
18238           return ((value_dependent_expression_p
18239                    (TREE_OPERAND (expression, 0)))
18240                   || (value_dependent_expression_p
18241                       (TREE_OPERAND (expression, 1))));
18242
18243         case tcc_expression:
18244         case tcc_vl_exp:
18245           {
18246             int i;
18247             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
18248               /* In some cases, some of the operands may be missing.
18249                  (For example, in the case of PREDECREMENT_EXPR, the
18250                  amount to increment by may be missing.)  That doesn't
18251                  make the expression dependent.  */
18252               if (TREE_OPERAND (expression, i)
18253                   && (value_dependent_expression_p
18254                       (TREE_OPERAND (expression, i))))
18255                 return true;
18256             return false;
18257           }
18258
18259         default:
18260           break;
18261         }
18262     }
18263
18264   /* The expression is not value-dependent.  */
18265   return false;
18266 }
18267
18268 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
18269    [temp.dep.expr].  Note that an expression with no type is
18270    considered dependent.  Other parts of the compiler arrange for an
18271    expression with type-dependent subexpressions to have no type, so
18272    this function doesn't have to be fully recursive.  */
18273
18274 bool
18275 type_dependent_expression_p (tree expression)
18276 {
18277   if (!processing_template_decl)
18278     return false;
18279
18280   if (expression == error_mark_node)
18281     return false;
18282
18283   /* An unresolved name is always dependent.  */
18284   if (TREE_CODE (expression) == IDENTIFIER_NODE
18285       || TREE_CODE (expression) == USING_DECL)
18286     return true;
18287
18288   /* Some expression forms are never type-dependent.  */
18289   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
18290       || TREE_CODE (expression) == SIZEOF_EXPR
18291       || TREE_CODE (expression) == ALIGNOF_EXPR
18292       || TREE_CODE (expression) == AT_ENCODE_EXPR
18293       || TREE_CODE (expression) == NOEXCEPT_EXPR
18294       || TREE_CODE (expression) == TRAIT_EXPR
18295       || TREE_CODE (expression) == TYPEID_EXPR
18296       || TREE_CODE (expression) == DELETE_EXPR
18297       || TREE_CODE (expression) == VEC_DELETE_EXPR
18298       || TREE_CODE (expression) == THROW_EXPR)
18299     return false;
18300
18301   /* The types of these expressions depends only on the type to which
18302      the cast occurs.  */
18303   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
18304       || TREE_CODE (expression) == STATIC_CAST_EXPR
18305       || TREE_CODE (expression) == CONST_CAST_EXPR
18306       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
18307       || TREE_CODE (expression) == CAST_EXPR)
18308     return dependent_type_p (TREE_TYPE (expression));
18309
18310   /* The types of these expressions depends only on the type created
18311      by the expression.  */
18312   if (TREE_CODE (expression) == NEW_EXPR
18313       || TREE_CODE (expression) == VEC_NEW_EXPR)
18314     {
18315       /* For NEW_EXPR tree nodes created inside a template, either
18316          the object type itself or a TREE_LIST may appear as the
18317          operand 1.  */
18318       tree type = TREE_OPERAND (expression, 1);
18319       if (TREE_CODE (type) == TREE_LIST)
18320         /* This is an array type.  We need to check array dimensions
18321            as well.  */
18322         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
18323                || value_dependent_expression_p
18324                     (TREE_OPERAND (TREE_VALUE (type), 1));
18325       else
18326         return dependent_type_p (type);
18327     }
18328
18329   if (TREE_CODE (expression) == SCOPE_REF)
18330     {
18331       tree scope = TREE_OPERAND (expression, 0);
18332       tree name = TREE_OPERAND (expression, 1);
18333
18334       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
18335          contains an identifier associated by name lookup with one or more
18336          declarations declared with a dependent type, or...a
18337          nested-name-specifier or qualified-id that names a member of an
18338          unknown specialization.  */
18339       return (type_dependent_expression_p (name)
18340               || dependent_scope_p (scope));
18341     }
18342
18343   if (TREE_CODE (expression) == FUNCTION_DECL
18344       && DECL_LANG_SPECIFIC (expression)
18345       && DECL_TEMPLATE_INFO (expression)
18346       && (any_dependent_template_arguments_p
18347           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
18348     return true;
18349
18350   if (TREE_CODE (expression) == TEMPLATE_DECL
18351       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
18352     return false;
18353
18354   if (TREE_CODE (expression) == STMT_EXPR)
18355     expression = stmt_expr_value_expr (expression);
18356
18357   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
18358     {
18359       tree elt;
18360       unsigned i;
18361
18362       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
18363         {
18364           if (type_dependent_expression_p (elt))
18365             return true;
18366         }
18367       return false;
18368     }
18369
18370   /* A static data member of the current instantiation with incomplete
18371      array type is type-dependent, as the definition and specializations
18372      can have different bounds.  */
18373   if (TREE_CODE (expression) == VAR_DECL
18374       && DECL_CLASS_SCOPE_P (expression)
18375       && dependent_type_p (DECL_CONTEXT (expression))
18376       && VAR_HAD_UNKNOWN_BOUND (expression))
18377     return true;
18378
18379   if (TREE_TYPE (expression) == unknown_type_node)
18380     {
18381       if (TREE_CODE (expression) == ADDR_EXPR)
18382         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
18383       if (TREE_CODE (expression) == COMPONENT_REF
18384           || TREE_CODE (expression) == OFFSET_REF)
18385         {
18386           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
18387             return true;
18388           expression = TREE_OPERAND (expression, 1);
18389           if (TREE_CODE (expression) == IDENTIFIER_NODE)
18390             return false;
18391         }
18392       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
18393       if (TREE_CODE (expression) == SCOPE_REF)
18394         return false;
18395
18396       if (TREE_CODE (expression) == BASELINK)
18397         expression = BASELINK_FUNCTIONS (expression);
18398
18399       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
18400         {
18401           if (any_dependent_template_arguments_p
18402               (TREE_OPERAND (expression, 1)))
18403             return true;
18404           expression = TREE_OPERAND (expression, 0);
18405         }
18406       gcc_assert (TREE_CODE (expression) == OVERLOAD
18407                   || TREE_CODE (expression) == FUNCTION_DECL);
18408
18409       while (expression)
18410         {
18411           if (type_dependent_expression_p (OVL_CURRENT (expression)))
18412             return true;
18413           expression = OVL_NEXT (expression);
18414         }
18415       return false;
18416     }
18417
18418   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
18419
18420   return (dependent_type_p (TREE_TYPE (expression)));
18421 }
18422
18423 /* Like type_dependent_expression_p, but it also works while not processing
18424    a template definition, i.e. during substitution or mangling.  */
18425
18426 bool
18427 type_dependent_expression_p_push (tree expr)
18428 {
18429   bool b;
18430   ++processing_template_decl;
18431   b = type_dependent_expression_p (expr);
18432   --processing_template_decl;
18433   return b;
18434 }
18435
18436 /* Returns TRUE if ARGS contains a type-dependent expression.  */
18437
18438 bool
18439 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
18440 {
18441   unsigned int i;
18442   tree arg;
18443
18444   FOR_EACH_VEC_ELT (tree, args, i, arg)
18445     {
18446       if (type_dependent_expression_p (arg))
18447         return true;
18448     }
18449   return false;
18450 }
18451
18452 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
18453    expressions) contains any value-dependent expressions.  */
18454
18455 bool
18456 any_value_dependent_elements_p (const_tree list)
18457 {
18458   for (; list; list = TREE_CHAIN (list))
18459     if (value_dependent_expression_p (TREE_VALUE (list)))
18460       return true;
18461
18462   return false;
18463 }
18464
18465 /* Returns TRUE if the ARG (a template argument) is dependent.  */
18466
18467 bool
18468 dependent_template_arg_p (tree arg)
18469 {
18470   if (!processing_template_decl)
18471     return false;
18472
18473   /* Assume a template argument that was wrongly written by the user
18474      is dependent. This is consistent with what
18475      any_dependent_template_arguments_p [that calls this function]
18476      does.  */
18477   if (arg == error_mark_node)
18478     return true;
18479
18480   if (TREE_CODE (arg) == TEMPLATE_DECL
18481       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
18482     return dependent_template_p (arg);
18483   else if (ARGUMENT_PACK_P (arg))
18484     {
18485       tree args = ARGUMENT_PACK_ARGS (arg);
18486       int i, len = TREE_VEC_LENGTH (args);
18487       for (i = 0; i < len; ++i)
18488         {
18489           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
18490             return true;
18491         }
18492
18493       return false;
18494     }
18495   else if (TYPE_P (arg))
18496     return dependent_type_p (arg);
18497   else
18498     return (type_dependent_expression_p (arg)
18499             || value_dependent_expression_p (arg));
18500 }
18501
18502 /* Returns true if ARGS (a collection of template arguments) contains
18503    any types that require structural equality testing.  */
18504
18505 bool
18506 any_template_arguments_need_structural_equality_p (tree args)
18507 {
18508   int i;
18509   int j;
18510
18511   if (!args)
18512     return false;
18513   if (args == error_mark_node)
18514     return true;
18515
18516   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
18517     {
18518       tree level = TMPL_ARGS_LEVEL (args, i + 1);
18519       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
18520         {
18521           tree arg = TREE_VEC_ELT (level, j);
18522           tree packed_args = NULL_TREE;
18523           int k, len = 1;
18524
18525           if (ARGUMENT_PACK_P (arg))
18526             {
18527               /* Look inside the argument pack.  */
18528               packed_args = ARGUMENT_PACK_ARGS (arg);
18529               len = TREE_VEC_LENGTH (packed_args);
18530             }
18531
18532           for (k = 0; k < len; ++k)
18533             {
18534               if (packed_args)
18535                 arg = TREE_VEC_ELT (packed_args, k);
18536
18537               if (error_operand_p (arg))
18538                 return true;
18539               else if (TREE_CODE (arg) == TEMPLATE_DECL
18540                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
18541                 continue;
18542               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
18543                 return true;
18544               else if (!TYPE_P (arg) && TREE_TYPE (arg)
18545                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
18546                 return true;
18547             }
18548         }
18549     }
18550
18551   return false;
18552 }
18553
18554 /* Returns true if ARGS (a collection of template arguments) contains
18555    any dependent arguments.  */
18556
18557 bool
18558 any_dependent_template_arguments_p (const_tree args)
18559 {
18560   int i;
18561   int j;
18562
18563   if (!args)
18564     return false;
18565   if (args == error_mark_node)
18566     return true;
18567
18568   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
18569     {
18570       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
18571       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
18572         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
18573           return true;
18574     }
18575
18576   return false;
18577 }
18578
18579 /* Returns TRUE if the template TMPL is dependent.  */
18580
18581 bool
18582 dependent_template_p (tree tmpl)
18583 {
18584   if (TREE_CODE (tmpl) == OVERLOAD)
18585     {
18586       while (tmpl)
18587         {
18588           if (dependent_template_p (OVL_FUNCTION (tmpl)))
18589             return true;
18590           tmpl = OVL_CHAIN (tmpl);
18591         }
18592       return false;
18593     }
18594
18595   /* Template template parameters are dependent.  */
18596   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
18597       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
18598     return true;
18599   /* So are names that have not been looked up.  */
18600   if (TREE_CODE (tmpl) == SCOPE_REF
18601       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
18602     return true;
18603   /* So are member templates of dependent classes.  */
18604   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
18605     return dependent_type_p (DECL_CONTEXT (tmpl));
18606   return false;
18607 }
18608
18609 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
18610
18611 bool
18612 dependent_template_id_p (tree tmpl, tree args)
18613 {
18614   return (dependent_template_p (tmpl)
18615           || any_dependent_template_arguments_p (args));
18616 }
18617
18618 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
18619    is dependent.  */
18620
18621 bool
18622 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
18623 {
18624   int i;
18625
18626   if (!processing_template_decl)
18627     return false;
18628
18629   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
18630     {
18631       tree decl = TREE_VEC_ELT (declv, i);
18632       tree init = TREE_VEC_ELT (initv, i);
18633       tree cond = TREE_VEC_ELT (condv, i);
18634       tree incr = TREE_VEC_ELT (incrv, i);
18635
18636       if (type_dependent_expression_p (decl))
18637         return true;
18638
18639       if (init && type_dependent_expression_p (init))
18640         return true;
18641
18642       if (type_dependent_expression_p (cond))
18643         return true;
18644
18645       if (COMPARISON_CLASS_P (cond)
18646           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
18647               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
18648         return true;
18649
18650       if (TREE_CODE (incr) == MODOP_EXPR)
18651         {
18652           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
18653               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
18654             return true;
18655         }
18656       else if (type_dependent_expression_p (incr))
18657         return true;
18658       else if (TREE_CODE (incr) == MODIFY_EXPR)
18659         {
18660           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
18661             return true;
18662           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
18663             {
18664               tree t = TREE_OPERAND (incr, 1);
18665               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
18666                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
18667                 return true;
18668             }
18669         }
18670     }
18671
18672   return false;
18673 }
18674
18675 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
18676    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
18677    no such TYPE can be found.  Note that this function peers inside
18678    uninstantiated templates and therefore should be used only in
18679    extremely limited situations.  ONLY_CURRENT_P restricts this
18680    peering to the currently open classes hierarchy (which is required
18681    when comparing types).  */
18682
18683 tree
18684 resolve_typename_type (tree type, bool only_current_p)
18685 {
18686   tree scope;
18687   tree name;
18688   tree decl;
18689   int quals;
18690   tree pushed_scope;
18691   tree result;
18692
18693   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
18694
18695   scope = TYPE_CONTEXT (type);
18696   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
18697      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
18698      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
18699      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
18700      identifier  of the TYPENAME_TYPE anymore.
18701      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
18702      TYPENAME_TYPE instead, we avoid messing up with a possible
18703      typedef variant case.  */
18704   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
18705
18706   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
18707      it first before we can figure out what NAME refers to.  */
18708   if (TREE_CODE (scope) == TYPENAME_TYPE)
18709     scope = resolve_typename_type (scope, only_current_p);
18710   /* If we don't know what SCOPE refers to, then we cannot resolve the
18711      TYPENAME_TYPE.  */
18712   if (TREE_CODE (scope) == TYPENAME_TYPE)
18713     return type;
18714   /* If the SCOPE is a template type parameter, we have no way of
18715      resolving the name.  */
18716   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
18717     return type;
18718   /* If the SCOPE is not the current instantiation, there's no reason
18719      to look inside it.  */
18720   if (only_current_p && !currently_open_class (scope))
18721     return type;
18722   /* If this is a typedef, we don't want to look inside (c++/11987).  */
18723   if (typedef_variant_p (type))
18724     return type;
18725   /* If SCOPE isn't the template itself, it will not have a valid
18726      TYPE_FIELDS list.  */
18727   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
18728     /* scope is either the template itself or a compatible instantiation
18729        like X<T>, so look up the name in the original template.  */
18730     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
18731   else
18732     /* scope is a partial instantiation, so we can't do the lookup or we
18733        will lose the template arguments.  */
18734     return type;
18735   /* Enter the SCOPE so that name lookup will be resolved as if we
18736      were in the class definition.  In particular, SCOPE will no
18737      longer be considered a dependent type.  */
18738   pushed_scope = push_scope (scope);
18739   /* Look up the declaration.  */
18740   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
18741
18742   result = NULL_TREE;
18743   
18744   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
18745      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
18746   if (!decl)
18747     /*nop*/;
18748   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
18749            && TREE_CODE (decl) == TYPE_DECL)
18750     {
18751       result = TREE_TYPE (decl);
18752       if (result == error_mark_node)
18753         result = NULL_TREE;
18754     }
18755   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
18756            && DECL_CLASS_TEMPLATE_P (decl))
18757     {
18758       tree tmpl;
18759       tree args;
18760       /* Obtain the template and the arguments.  */
18761       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
18762       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
18763       /* Instantiate the template.  */
18764       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
18765                                       /*entering_scope=*/0,
18766                                       tf_error | tf_user);
18767       if (result == error_mark_node)
18768         result = NULL_TREE;
18769     }
18770   
18771   /* Leave the SCOPE.  */
18772   if (pushed_scope)
18773     pop_scope (pushed_scope);
18774
18775   /* If we failed to resolve it, return the original typename.  */
18776   if (!result)
18777     return type;
18778   
18779   /* If lookup found a typename type, resolve that too.  */
18780   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
18781     {
18782       /* Ill-formed programs can cause infinite recursion here, so we
18783          must catch that.  */
18784       TYPENAME_IS_RESOLVING_P (type) = 1;
18785       result = resolve_typename_type (result, only_current_p);
18786       TYPENAME_IS_RESOLVING_P (type) = 0;
18787     }
18788   
18789   /* Qualify the resulting type.  */
18790   quals = cp_type_quals (type);
18791   if (quals)
18792     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
18793
18794   return result;
18795 }
18796
18797 /* EXPR is an expression which is not type-dependent.  Return a proxy
18798    for EXPR that can be used to compute the types of larger
18799    expressions containing EXPR.  */
18800
18801 tree
18802 build_non_dependent_expr (tree expr)
18803 {
18804   tree inner_expr;
18805
18806   /* Preserve null pointer constants so that the type of things like
18807      "p == 0" where "p" is a pointer can be determined.  */
18808   if (null_ptr_cst_p (expr))
18809     return expr;
18810   /* Preserve OVERLOADs; the functions must be available to resolve
18811      types.  */
18812   inner_expr = expr;
18813   if (TREE_CODE (inner_expr) == STMT_EXPR)
18814     inner_expr = stmt_expr_value_expr (inner_expr);
18815   if (TREE_CODE (inner_expr) == ADDR_EXPR)
18816     inner_expr = TREE_OPERAND (inner_expr, 0);
18817   if (TREE_CODE (inner_expr) == COMPONENT_REF)
18818     inner_expr = TREE_OPERAND (inner_expr, 1);
18819   if (is_overloaded_fn (inner_expr)
18820       || TREE_CODE (inner_expr) == OFFSET_REF)
18821     return expr;
18822   /* There is no need to return a proxy for a variable.  */
18823   if (TREE_CODE (expr) == VAR_DECL)
18824     return expr;
18825   /* Preserve string constants; conversions from string constants to
18826      "char *" are allowed, even though normally a "const char *"
18827      cannot be used to initialize a "char *".  */
18828   if (TREE_CODE (expr) == STRING_CST)
18829     return expr;
18830   /* Preserve arithmetic constants, as an optimization -- there is no
18831      reason to create a new node.  */
18832   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
18833     return expr;
18834   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
18835      There is at least one place where we want to know that a
18836      particular expression is a throw-expression: when checking a ?:
18837      expression, there are special rules if the second or third
18838      argument is a throw-expression.  */
18839   if (TREE_CODE (expr) == THROW_EXPR)
18840     return expr;
18841
18842   if (TREE_CODE (expr) == COND_EXPR)
18843     return build3 (COND_EXPR,
18844                    TREE_TYPE (expr),
18845                    TREE_OPERAND (expr, 0),
18846                    (TREE_OPERAND (expr, 1)
18847                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
18848                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
18849                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
18850   if (TREE_CODE (expr) == COMPOUND_EXPR
18851       && !COMPOUND_EXPR_OVERLOADED (expr))
18852     return build2 (COMPOUND_EXPR,
18853                    TREE_TYPE (expr),
18854                    TREE_OPERAND (expr, 0),
18855                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
18856
18857   /* Keep dereferences outside the NON_DEPENDENT_EXPR so lvalue_kind
18858      doesn't need to look inside.  */
18859   if (TREE_CODE (expr) == INDIRECT_REF && REFERENCE_REF_P (expr))
18860     return convert_from_reference (build_non_dependent_expr
18861                                    (TREE_OPERAND (expr, 0)));
18862
18863   /* If the type is unknown, it can't really be non-dependent */
18864   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
18865
18866   /* Otherwise, build a NON_DEPENDENT_EXPR.  */
18867   return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
18868 }
18869
18870 /* ARGS is a vector of expressions as arguments to a function call.
18871    Replace the arguments with equivalent non-dependent expressions.
18872    This modifies ARGS in place.  */
18873
18874 void
18875 make_args_non_dependent (VEC(tree,gc) *args)
18876 {
18877   unsigned int ix;
18878   tree arg;
18879
18880   FOR_EACH_VEC_ELT (tree, args, ix, arg)
18881     {
18882       tree newarg = build_non_dependent_expr (arg);
18883       if (newarg != arg)
18884         VEC_replace (tree, args, ix, newarg);
18885     }
18886 }
18887
18888 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
18889    with a level one deeper than the actual template parms.  */
18890
18891 tree
18892 make_auto (void)
18893 {
18894   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
18895   TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
18896                                TYPE_DECL, get_identifier ("auto"), au);
18897   TYPE_STUB_DECL (au) = TYPE_NAME (au);
18898   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
18899     (0, processing_template_decl + 1, processing_template_decl + 1,
18900      0, TYPE_NAME (au), NULL_TREE);
18901   TYPE_CANONICAL (au) = canonical_type_parameter (au);
18902   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
18903   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
18904
18905   return au;
18906 }
18907
18908 /* Given type ARG, return std::initializer_list<ARG>.  */
18909
18910 static tree
18911 listify (tree arg)
18912 {
18913   tree std_init_list = namespace_binding
18914     (get_identifier ("initializer_list"), std_node);
18915   tree argvec;
18916   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
18917     {    
18918       error ("deducing from brace-enclosed initializer list requires "
18919              "#include <initializer_list>");
18920       return error_mark_node;
18921     }
18922   argvec = make_tree_vec (1);
18923   TREE_VEC_ELT (argvec, 0) = arg;
18924   return lookup_template_class (std_init_list, argvec, NULL_TREE,
18925                                 NULL_TREE, 0, tf_warning_or_error);
18926 }
18927
18928 /* Replace auto in TYPE with std::initializer_list<auto>.  */
18929
18930 static tree
18931 listify_autos (tree type, tree auto_node)
18932 {
18933   tree init_auto = listify (auto_node);
18934   tree argvec = make_tree_vec (1);
18935   TREE_VEC_ELT (argvec, 0) = init_auto;
18936   if (processing_template_decl)
18937     argvec = add_to_template_args (current_template_args (), argvec);
18938   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
18939 }
18940
18941 /* walk_tree helper for do_auto_deduction.  */
18942
18943 static tree
18944 contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
18945                  void *type)
18946 {
18947   /* Is this a variable with the type we're looking for?  */
18948   if (DECL_P (*tp)
18949       && TREE_TYPE (*tp) == type)
18950     return *tp;
18951   else
18952     return NULL_TREE;
18953 }
18954
18955 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
18956    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
18957
18958 tree
18959 do_auto_deduction (tree type, tree init, tree auto_node)
18960 {
18961   tree parms, tparms, targs;
18962   tree args[1];
18963   tree decl;
18964   int val;
18965
18966   /* The name of the object being declared shall not appear in the
18967      initializer expression.  */
18968   decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
18969   if (decl)
18970     {
18971       error ("variable %q#D with %<auto%> type used in its own "
18972              "initializer", decl);
18973       return error_mark_node;
18974     }
18975
18976   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
18977      with either a new invented type template parameter U or, if the
18978      initializer is a braced-init-list (8.5.4), with
18979      std::initializer_list<U>.  */
18980   if (BRACE_ENCLOSED_INITIALIZER_P (init))
18981     type = listify_autos (type, auto_node);
18982
18983   init = resolve_nondeduced_context (init);
18984
18985   parms = build_tree_list (NULL_TREE, type);
18986   args[0] = init;
18987   tparms = make_tree_vec (1);
18988   targs = make_tree_vec (1);
18989   TREE_VEC_ELT (tparms, 0)
18990     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
18991   val = type_unification_real (tparms, targs, parms, args, 1, 0,
18992                                DEDUCE_CALL, LOOKUP_NORMAL);
18993   if (val > 0)
18994     {
18995       if (type && type != error_mark_node)
18996         /* If type is error_mark_node a diagnostic must have been
18997            emitted by now.  Also, having a mention to '<type error>'
18998            in the diagnostic is not really useful to the user.  */
18999         error ("unable to deduce %qT from %qE", type, init);
19000       return error_mark_node;
19001     }
19002
19003   /* If the list of declarators contains more than one declarator, the type
19004      of each declared variable is determined as described above. If the
19005      type deduced for the template parameter U is not the same in each
19006      deduction, the program is ill-formed.  */
19007   if (TREE_TYPE (auto_node)
19008       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
19009     {
19010       error ("inconsistent deduction for %qT: %qT and then %qT",
19011              auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
19012       return error_mark_node;
19013     }
19014   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
19015
19016   if (processing_template_decl)
19017     targs = add_to_template_args (current_template_args (), targs);
19018   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
19019 }
19020
19021 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
19022    result.  */
19023
19024 tree
19025 splice_late_return_type (tree type, tree late_return_type)
19026 {
19027   tree argvec;
19028
19029   if (late_return_type == NULL_TREE)
19030     return type;
19031   argvec = make_tree_vec (1);
19032   TREE_VEC_ELT (argvec, 0) = late_return_type;
19033   if (processing_template_decl)
19034     argvec = add_to_template_args (current_template_args (), argvec);
19035   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
19036 }
19037
19038 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
19039
19040 bool
19041 is_auto (const_tree type)
19042 {
19043   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
19044       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
19045     return true;
19046   else
19047     return false;
19048 }
19049
19050 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
19051    appear as a type-specifier for the declaration in question, we don't
19052    have to look through the whole type.  */
19053
19054 tree
19055 type_uses_auto (tree type)
19056 {
19057   enum tree_code code;
19058   if (is_auto (type))
19059     return type;
19060
19061   code = TREE_CODE (type);
19062
19063   if (code == POINTER_TYPE || code == REFERENCE_TYPE
19064       || code == OFFSET_TYPE || code == FUNCTION_TYPE
19065       || code == METHOD_TYPE || code == ARRAY_TYPE)
19066     return type_uses_auto (TREE_TYPE (type));
19067
19068   if (TYPE_PTRMEMFUNC_P (type))
19069     return type_uses_auto (TREE_TYPE (TREE_TYPE
19070                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
19071
19072   return NULL_TREE;
19073 }
19074
19075 /* For a given template T, return the vector of typedefs referenced
19076    in T for which access check is needed at T instantiation time.
19077    T is either  a FUNCTION_DECL or a RECORD_TYPE.
19078    Those typedefs were added to T by the function
19079    append_type_to_template_for_access_check.  */
19080
19081 VEC(qualified_typedef_usage_t,gc)*
19082 get_types_needing_access_check (tree t)
19083 {
19084   tree ti;
19085   VEC(qualified_typedef_usage_t,gc) *result = NULL;
19086
19087   if (!t || t == error_mark_node)
19088     return NULL;
19089
19090   if (!(ti = get_template_info (t)))
19091     return NULL;
19092
19093   if (CLASS_TYPE_P (t)
19094       || TREE_CODE (t) == FUNCTION_DECL)
19095     {
19096       if (!TI_TEMPLATE (ti))
19097         return NULL;
19098
19099       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
19100     }
19101
19102   return result;
19103 }
19104
19105 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
19106    tied to T. That list of typedefs will be access checked at
19107    T instantiation time.
19108    T is either a FUNCTION_DECL or a RECORD_TYPE.
19109    TYPE_DECL is a TYPE_DECL node representing a typedef.
19110    SCOPE is the scope through which TYPE_DECL is accessed.
19111    LOCATION is the location of the usage point of TYPE_DECL.
19112
19113    This function is a subroutine of
19114    append_type_to_template_for_access_check.  */
19115
19116 static void
19117 append_type_to_template_for_access_check_1 (tree t,
19118                                             tree type_decl,
19119                                             tree scope,
19120                                             location_t location)
19121 {
19122   qualified_typedef_usage_t typedef_usage;
19123   tree ti;
19124
19125   if (!t || t == error_mark_node)
19126     return;
19127
19128   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
19129                || CLASS_TYPE_P (t))
19130               && type_decl
19131               && TREE_CODE (type_decl) == TYPE_DECL
19132               && scope);
19133
19134   if (!(ti = get_template_info (t)))
19135     return;
19136
19137   gcc_assert (TI_TEMPLATE (ti));
19138
19139   typedef_usage.typedef_decl = type_decl;
19140   typedef_usage.context = scope;
19141   typedef_usage.locus = location;
19142
19143   VEC_safe_push (qualified_typedef_usage_t, gc,
19144                  TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
19145                  &typedef_usage);
19146 }
19147
19148 /* Append TYPE_DECL to the template TEMPL.
19149    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
19150    At TEMPL instanciation time, TYPE_DECL will be checked to see
19151    if it can be accessed through SCOPE.
19152    LOCATION is the location of the usage point of TYPE_DECL.
19153
19154    e.g. consider the following code snippet:
19155
19156      class C
19157      {
19158        typedef int myint;
19159      };
19160
19161      template<class U> struct S
19162      {
19163        C::myint mi; // <-- usage point of the typedef C::myint
19164      };
19165
19166      S<char> s;
19167
19168    At S<char> instantiation time, we need to check the access of C::myint
19169    In other words, we need to check the access of the myint typedef through
19170    the C scope. For that purpose, this function will add the myint typedef
19171    and the scope C through which its being accessed to a list of typedefs
19172    tied to the template S. That list will be walked at template instantiation
19173    time and access check performed on each typedefs it contains.
19174    Note that this particular code snippet should yield an error because
19175    myint is private to C.  */
19176
19177 void
19178 append_type_to_template_for_access_check (tree templ,
19179                                           tree type_decl,
19180                                           tree scope,
19181                                           location_t location)
19182 {
19183   qualified_typedef_usage_t *iter;
19184   int i;
19185
19186   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
19187
19188   /* Make sure we don't append the type to the template twice.  */
19189   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
19190                     get_types_needing_access_check (templ),
19191                     i, iter)
19192     if (iter->typedef_decl == type_decl && scope == iter->context)
19193       return;
19194
19195   append_type_to_template_for_access_check_1 (templ, type_decl,
19196                                               scope, location);
19197 }
19198
19199 /* Set up the hash tables for template instantiations.  */
19200
19201 void
19202 init_template_processing (void)
19203 {
19204   decl_specializations = htab_create_ggc (37,
19205                                           hash_specialization,
19206                                           eq_specializations,
19207                                           ggc_free);
19208   type_specializations = htab_create_ggc (37,
19209                                           hash_specialization,
19210                                           eq_specializations,
19211                                           ggc_free);
19212 }
19213
19214 /* Print stats about the template hash tables for -fstats.  */
19215
19216 void
19217 print_template_statistics (void)
19218 {
19219   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
19220            "%f collisions\n", (long) htab_size (decl_specializations),
19221            (long) htab_elements (decl_specializations),
19222            htab_collisions (decl_specializations));
19223   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
19224            "%f collisions\n", (long) htab_size (type_specializations),
19225            (long) htab_elements (type_specializations),
19226            htab_collisions (type_specializations));
19227 }
19228
19229 #include "gt-cp-pt.h"