OSDN Git Service

PR c++/48535
[pf3gnuchains/gcc-fork.git] / gcc / cp / pt.c
1 /* Handle parameterized types (templates) for GNU C++.
2    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
4    Free Software Foundation, Inc.
5    Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
6    Rewritten by Jason Merrill (jason@cygnus.com).
7
8 This file is part of GCC.
9
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
13 any later version.
14
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3.  If not see
22 <http://www.gnu.org/licenses/>.  */
23
24 /* Known bugs or deficiencies include:
25
26      all methods must be provided in header files; can't use a source
27      file that contains only the method templates and "just win".  */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "tree.h"
34 #include "intl.h"
35 #include "pointer-set.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "c-family/c-common.h"
39 #include "c-family/c-objc.h"
40 #include "cp-objcp-common.h"
41 #include "tree-inline.h"
42 #include "decl.h"
43 #include "output.h"
44 #include "toplev.h"
45 #include "timevar.h"
46 #include "tree-iterator.h"
47 #include "vecprim.h"
48
49 /* The type of functions taking a tree, and some additional data, and
50    returning an int.  */
51 typedef int (*tree_fn_t) (tree, void*);
52
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54    instantiations have been deferred, either because their definitions
55    were not yet available, or because we were putting off doing the work.  */
56 struct GTY ((chain_next ("%h.next"))) pending_template {
57   struct pending_template *next;
58   struct tinst_level *tinst;
59 };
60
61 static GTY(()) struct pending_template *pending_templates;
62 static GTY(()) struct pending_template *last_pending_template;
63
64 int processing_template_parmlist;
65 static int template_header_count;
66
67 static GTY(()) tree saved_trees;
68 static VEC(int,heap) *inline_parm_levels;
69
70 static GTY(()) struct tinst_level *current_tinst_level;
71
72 static GTY(()) tree saved_access_scope;
73
74 /* Live only within one (recursive) call to tsubst_expr.  We use
75    this to pass the statement expression node from the STMT_EXPR
76    to the EXPR_STMT that is its result.  */
77 static tree cur_stmt_expr;
78
79 /* A map from local variable declarations in the body of the template
80    presently being instantiated to the corresponding instantiated
81    local variables.  */
82 static htab_t local_specializations;
83
84 typedef struct GTY(()) spec_entry
85 {
86   tree tmpl;
87   tree args;
88   tree spec;
89 } spec_entry;
90
91 static GTY ((param_is (spec_entry)))
92   htab_t decl_specializations;
93
94 static GTY ((param_is (spec_entry)))
95   htab_t type_specializations;
96
97 /* Contains canonical template parameter types. The vector is indexed by
98    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
99    TREE_LIST, whose TREE_VALUEs contain the canonical template
100    parameters of various types and levels.  */
101 static GTY(()) VEC(tree,gc) *canonical_template_parms;
102
103 #define UNIFY_ALLOW_NONE 0
104 #define UNIFY_ALLOW_MORE_CV_QUAL 1
105 #define UNIFY_ALLOW_LESS_CV_QUAL 2
106 #define UNIFY_ALLOW_DERIVED 4
107 #define UNIFY_ALLOW_INTEGER 8
108 #define UNIFY_ALLOW_OUTER_LEVEL 16
109 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
110 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
111
112 static void push_access_scope (tree);
113 static void pop_access_scope (tree);
114 static bool resolve_overloaded_unification (tree, tree, tree, tree,
115                                             unification_kind_t, int);
116 static int try_one_overload (tree, tree, tree, tree, tree,
117                              unification_kind_t, int, bool);
118 static int unify (tree, tree, tree, tree, int);
119 static void add_pending_template (tree);
120 static tree reopen_tinst_level (struct tinst_level *);
121 static tree tsubst_initializer_list (tree, tree);
122 static tree get_class_bindings (tree, tree, tree);
123 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
124                                    bool, bool);
125 static void tsubst_enum (tree, tree, tree);
126 static tree add_to_template_args (tree, tree);
127 static tree add_outermost_template_args (tree, tree);
128 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
129 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
130                                              tree);
131 static int type_unification_real (tree, tree, tree, const tree *,
132                                   unsigned int, int, unification_kind_t, int);
133 static void note_template_header (int);
134 static tree convert_nontype_argument_function (tree, tree);
135 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
136 static tree convert_template_argument (tree, tree, tree,
137                                        tsubst_flags_t, int, tree);
138 static int for_each_template_parm (tree, tree_fn_t, void*,
139                                    struct pointer_set_t*, bool);
140 static tree expand_template_argument_pack (tree);
141 static tree build_template_parm_index (int, int, int, int, tree, tree);
142 static bool inline_needs_template_parms (tree);
143 static void push_inline_template_parms_recursive (tree, int);
144 static tree retrieve_local_specialization (tree);
145 static void register_local_specialization (tree, tree);
146 static hashval_t hash_specialization (const void *p);
147 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
148 static int mark_template_parm (tree, void *);
149 static int template_parm_this_level_p (tree, void *);
150 static tree tsubst_friend_function (tree, tree);
151 static tree tsubst_friend_class (tree, tree);
152 static int can_complete_type_without_circularity (tree);
153 static tree get_bindings (tree, tree, tree, bool);
154 static int template_decl_level (tree);
155 static int check_cv_quals_for_unify (int, tree, tree);
156 static void template_parm_level_and_index (tree, int*, int*);
157 static int unify_pack_expansion (tree, tree, tree, tree, int, bool, bool);
158 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
159 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
160 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
161 static void regenerate_decl_from_template (tree, tree);
162 static tree most_specialized_class (tree, tree, tsubst_flags_t);
163 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
164 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
165 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
166 static bool check_specialization_scope (void);
167 static tree process_partial_specialization (tree);
168 static void set_current_access_from_decl (tree);
169 static tree get_template_base (tree, tree, tree, tree);
170 static tree try_class_unification (tree, tree, tree, tree);
171 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
172                                            tree, tree);
173 static bool template_template_parm_bindings_ok_p (tree, tree);
174 static int template_args_equal (tree, tree);
175 static void tsubst_default_arguments (tree);
176 static tree for_each_template_parm_r (tree *, int *, void *);
177 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
178 static void copy_default_args_to_explicit_spec (tree);
179 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
180 static int eq_local_specializations (const void *, const void *);
181 static bool dependent_template_arg_p (tree);
182 static bool any_template_arguments_need_structural_equality_p (tree);
183 static bool dependent_type_p_r (tree);
184 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
185 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
186 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
187 static tree tsubst_decl (tree, tree, tsubst_flags_t);
188 static void perform_typedefs_access_check (tree tmpl, tree targs);
189 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
190                                                         location_t);
191 static tree listify (tree);
192 static tree listify_autos (tree, tree);
193 static tree template_parm_to_arg (tree t);
194 static tree current_template_args (void);
195 static tree fixup_template_type_parm_type (tree, int);
196 static tree fixup_template_parm_index (tree, tree, int);
197 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
198
199 /* Make the current scope suitable for access checking when we are
200    processing T.  T can be FUNCTION_DECL for instantiated function
201    template, or VAR_DECL for static member variable (need by
202    instantiate_decl).  */
203
204 static void
205 push_access_scope (tree t)
206 {
207   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
208               || TREE_CODE (t) == VAR_DECL);
209
210   if (DECL_FRIEND_CONTEXT (t))
211     push_nested_class (DECL_FRIEND_CONTEXT (t));
212   else if (DECL_CLASS_SCOPE_P (t))
213     push_nested_class (DECL_CONTEXT (t));
214   else
215     push_to_top_level ();
216
217   if (TREE_CODE (t) == FUNCTION_DECL)
218     {
219       saved_access_scope = tree_cons
220         (NULL_TREE, current_function_decl, saved_access_scope);
221       current_function_decl = t;
222     }
223 }
224
225 /* Restore the scope set up by push_access_scope.  T is the node we
226    are processing.  */
227
228 static void
229 pop_access_scope (tree t)
230 {
231   if (TREE_CODE (t) == FUNCTION_DECL)
232     {
233       current_function_decl = TREE_VALUE (saved_access_scope);
234       saved_access_scope = TREE_CHAIN (saved_access_scope);
235     }
236
237   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
238     pop_nested_class ();
239   else
240     pop_from_top_level ();
241 }
242
243 /* Do any processing required when DECL (a member template
244    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
245    to DECL, unless it is a specialization, in which case the DECL
246    itself is returned.  */
247
248 tree
249 finish_member_template_decl (tree decl)
250 {
251   if (decl == error_mark_node)
252     return error_mark_node;
253
254   gcc_assert (DECL_P (decl));
255
256   if (TREE_CODE (decl) == TYPE_DECL)
257     {
258       tree type;
259
260       type = TREE_TYPE (decl);
261       if (type == error_mark_node)
262         return error_mark_node;
263       if (MAYBE_CLASS_TYPE_P (type)
264           && CLASSTYPE_TEMPLATE_INFO (type)
265           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
266         {
267           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
268           check_member_template (tmpl);
269           return tmpl;
270         }
271       return NULL_TREE;
272     }
273   else if (TREE_CODE (decl) == FIELD_DECL)
274     error ("data member %qD cannot be a member template", decl);
275   else if (DECL_TEMPLATE_INFO (decl))
276     {
277       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
278         {
279           check_member_template (DECL_TI_TEMPLATE (decl));
280           return DECL_TI_TEMPLATE (decl);
281         }
282       else
283         return decl;
284     }
285   else
286     error ("invalid member template declaration %qD", decl);
287
288   return error_mark_node;
289 }
290
291 /* Create a template info node.  */
292
293 tree
294 build_template_info (tree template_decl, tree template_args)
295 {
296   tree result = make_node (TEMPLATE_INFO);
297   TI_TEMPLATE (result) = template_decl;
298   TI_ARGS (result) = template_args;
299   return result;
300 }
301
302 /* Return the template info node corresponding to T, whatever T is.  */
303
304 tree
305 get_template_info (const_tree t)
306 {
307   tree tinfo = NULL_TREE;
308
309   if (!t || t == error_mark_node)
310     return NULL;
311
312   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
313     tinfo = DECL_TEMPLATE_INFO (t);
314
315   if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
316     t = TREE_TYPE (t);
317
318   if (TAGGED_TYPE_P (t))
319     tinfo = TYPE_TEMPLATE_INFO (t);
320   else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
321     tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
322
323   return tinfo;
324 }
325
326 /* Returns the template nesting level of the indicated class TYPE.
327
328    For example, in:
329      template <class T>
330      struct A
331      {
332        template <class U>
333        struct B {};
334      };
335
336    A<T>::B<U> has depth two, while A<T> has depth one.
337    Both A<T>::B<int> and A<int>::B<U> have depth one, if
338    they are instantiations, not specializations.
339
340    This function is guaranteed to return 0 if passed NULL_TREE so
341    that, for example, `template_class_depth (current_class_type)' is
342    always safe.  */
343
344 int
345 template_class_depth (tree type)
346 {
347   int depth;
348
349   for (depth = 0;
350        type && TREE_CODE (type) != NAMESPACE_DECL;
351        type = (TREE_CODE (type) == FUNCTION_DECL)
352          ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
353     {
354       tree tinfo = get_template_info (type);
355
356       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
357           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
358         ++depth;
359     }
360
361   return depth;
362 }
363
364 /* Subroutine of maybe_begin_member_template_processing.
365    Returns true if processing DECL needs us to push template parms.  */
366
367 static bool
368 inline_needs_template_parms (tree decl)
369 {
370   if (! DECL_TEMPLATE_INFO (decl))
371     return false;
372
373   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
374           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
375 }
376
377 /* Subroutine of maybe_begin_member_template_processing.
378    Push the template parms in PARMS, starting from LEVELS steps into the
379    chain, and ending at the beginning, since template parms are listed
380    innermost first.  */
381
382 static void
383 push_inline_template_parms_recursive (tree parmlist, int levels)
384 {
385   tree parms = TREE_VALUE (parmlist);
386   int i;
387
388   if (levels > 1)
389     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
390
391   ++processing_template_decl;
392   current_template_parms
393     = tree_cons (size_int (processing_template_decl),
394                  parms, current_template_parms);
395   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
396
397   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
398                NULL);
399   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
400     {
401       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
402
403       if (parm == error_mark_node)
404         continue;
405
406       gcc_assert (DECL_P (parm));
407
408       switch (TREE_CODE (parm))
409         {
410         case TYPE_DECL:
411         case TEMPLATE_DECL:
412           pushdecl (parm);
413           break;
414
415         case PARM_DECL:
416           {
417             /* Make a CONST_DECL as is done in process_template_parm.
418                It is ugly that we recreate this here; the original
419                version built in process_template_parm is no longer
420                available.  */
421             tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
422                                     CONST_DECL, DECL_NAME (parm),
423                                     TREE_TYPE (parm));
424             DECL_ARTIFICIAL (decl) = 1;
425             TREE_CONSTANT (decl) = 1;
426             TREE_READONLY (decl) = 1;
427             DECL_INITIAL (decl) = DECL_INITIAL (parm);
428             SET_DECL_TEMPLATE_PARM_P (decl);
429             pushdecl (decl);
430           }
431           break;
432
433         default:
434           gcc_unreachable ();
435         }
436     }
437 }
438
439 /* Restore the template parameter context for a member template or
440    a friend template defined in a class definition.  */
441
442 void
443 maybe_begin_member_template_processing (tree decl)
444 {
445   tree parms;
446   int levels = 0;
447
448   if (inline_needs_template_parms (decl))
449     {
450       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
451       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
452
453       if (DECL_TEMPLATE_SPECIALIZATION (decl))
454         {
455           --levels;
456           parms = TREE_CHAIN (parms);
457         }
458
459       push_inline_template_parms_recursive (parms, levels);
460     }
461
462   /* Remember how many levels of template parameters we pushed so that
463      we can pop them later.  */
464   VEC_safe_push (int, heap, inline_parm_levels, levels);
465 }
466
467 /* Undo the effects of maybe_begin_member_template_processing.  */
468
469 void
470 maybe_end_member_template_processing (void)
471 {
472   int i;
473   int last;
474
475   if (VEC_length (int, inline_parm_levels) == 0)
476     return;
477
478   last = VEC_pop (int, inline_parm_levels);
479   for (i = 0; i < last; ++i)
480     {
481       --processing_template_decl;
482       current_template_parms = TREE_CHAIN (current_template_parms);
483       poplevel (0, 0, 0);
484     }
485 }
486
487 /* Return a new template argument vector which contains all of ARGS,
488    but has as its innermost set of arguments the EXTRA_ARGS.  */
489
490 static tree
491 add_to_template_args (tree args, tree extra_args)
492 {
493   tree new_args;
494   int extra_depth;
495   int i;
496   int j;
497
498   if (args == NULL_TREE || extra_args == error_mark_node)
499     return extra_args;
500
501   extra_depth = TMPL_ARGS_DEPTH (extra_args);
502   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
503
504   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
505     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
506
507   for (j = 1; j <= extra_depth; ++j, ++i)
508     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
509
510   return new_args;
511 }
512
513 /* Like add_to_template_args, but only the outermost ARGS are added to
514    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
515    (EXTRA_ARGS) levels are added.  This function is used to combine
516    the template arguments from a partial instantiation with the
517    template arguments used to attain the full instantiation from the
518    partial instantiation.  */
519
520 static tree
521 add_outermost_template_args (tree args, tree extra_args)
522 {
523   tree new_args;
524
525   /* If there are more levels of EXTRA_ARGS than there are ARGS,
526      something very fishy is going on.  */
527   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
528
529   /* If *all* the new arguments will be the EXTRA_ARGS, just return
530      them.  */
531   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
532     return extra_args;
533
534   /* For the moment, we make ARGS look like it contains fewer levels.  */
535   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
536
537   new_args = add_to_template_args (args, extra_args);
538
539   /* Now, we restore ARGS to its full dimensions.  */
540   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
541
542   return new_args;
543 }
544
545 /* Return the N levels of innermost template arguments from the ARGS.  */
546
547 tree
548 get_innermost_template_args (tree args, int n)
549 {
550   tree new_args;
551   int extra_levels;
552   int i;
553
554   gcc_assert (n >= 0);
555
556   /* If N is 1, just return the innermost set of template arguments.  */
557   if (n == 1)
558     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
559
560   /* If we're not removing anything, just return the arguments we were
561      given.  */
562   extra_levels = TMPL_ARGS_DEPTH (args) - n;
563   gcc_assert (extra_levels >= 0);
564   if (extra_levels == 0)
565     return args;
566
567   /* Make a new set of arguments, not containing the outer arguments.  */
568   new_args = make_tree_vec (n);
569   for (i = 1; i <= n; ++i)
570     SET_TMPL_ARGS_LEVEL (new_args, i,
571                          TMPL_ARGS_LEVEL (args, i + extra_levels));
572
573   return new_args;
574 }
575
576 /* The inverse of get_innermost_template_args: Return all but the innermost
577    EXTRA_LEVELS levels of template arguments from the ARGS.  */
578
579 static tree
580 strip_innermost_template_args (tree args, int extra_levels)
581 {
582   tree new_args;
583   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
584   int i;
585
586   gcc_assert (n >= 0);
587
588   /* If N is 1, just return the outermost set of template arguments.  */
589   if (n == 1)
590     return TMPL_ARGS_LEVEL (args, 1);
591
592   /* If we're not removing anything, just return the arguments we were
593      given.  */
594   gcc_assert (extra_levels >= 0);
595   if (extra_levels == 0)
596     return args;
597
598   /* Make a new set of arguments, not containing the inner arguments.  */
599   new_args = make_tree_vec (n);
600   for (i = 1; i <= n; ++i)
601     SET_TMPL_ARGS_LEVEL (new_args, i,
602                          TMPL_ARGS_LEVEL (args, i));
603
604   return new_args;
605 }
606
607 /* We've got a template header coming up; push to a new level for storing
608    the parms.  */
609
610 void
611 begin_template_parm_list (void)
612 {
613   /* We use a non-tag-transparent scope here, which causes pushtag to
614      put tags in this scope, rather than in the enclosing class or
615      namespace scope.  This is the right thing, since we want
616      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
617      global template class, push_template_decl handles putting the
618      TEMPLATE_DECL into top-level scope.  For a nested template class,
619      e.g.:
620
621        template <class T> struct S1 {
622          template <class T> struct S2 {};
623        };
624
625      pushtag contains special code to call pushdecl_with_scope on the
626      TEMPLATE_DECL for S2.  */
627   begin_scope (sk_template_parms, NULL);
628   ++processing_template_decl;
629   ++processing_template_parmlist;
630   note_template_header (0);
631 }
632
633 /* This routine is called when a specialization is declared.  If it is
634    invalid to declare a specialization here, an error is reported and
635    false is returned, otherwise this routine will return true.  */
636
637 static bool
638 check_specialization_scope (void)
639 {
640   tree scope = current_scope ();
641
642   /* [temp.expl.spec]
643
644      An explicit specialization shall be declared in the namespace of
645      which the template is a member, or, for member templates, in the
646      namespace of which the enclosing class or enclosing class
647      template is a member.  An explicit specialization of a member
648      function, member class or static data member of a class template
649      shall be declared in the namespace of which the class template
650      is a member.  */
651   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
652     {
653       error ("explicit specialization in non-namespace scope %qD", scope);
654       return false;
655     }
656
657   /* [temp.expl.spec]
658
659      In an explicit specialization declaration for a member of a class
660      template or a member template that appears in namespace scope,
661      the member template and some of its enclosing class templates may
662      remain unspecialized, except that the declaration shall not
663      explicitly specialize a class member template if its enclosing
664      class templates are not explicitly specialized as well.  */
665   if (current_template_parms)
666     {
667       error ("enclosing class templates are not explicitly specialized");
668       return false;
669     }
670
671   return true;
672 }
673
674 /* We've just seen template <>.  */
675
676 bool
677 begin_specialization (void)
678 {
679   begin_scope (sk_template_spec, NULL);
680   note_template_header (1);
681   return check_specialization_scope ();
682 }
683
684 /* Called at then end of processing a declaration preceded by
685    template<>.  */
686
687 void
688 end_specialization (void)
689 {
690   finish_scope ();
691   reset_specialization ();
692 }
693
694 /* Any template <>'s that we have seen thus far are not referring to a
695    function specialization.  */
696
697 void
698 reset_specialization (void)
699 {
700   processing_specialization = 0;
701   template_header_count = 0;
702 }
703
704 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
705    it was of the form template <>.  */
706
707 static void
708 note_template_header (int specialization)
709 {
710   processing_specialization = specialization;
711   template_header_count++;
712 }
713
714 /* We're beginning an explicit instantiation.  */
715
716 void
717 begin_explicit_instantiation (void)
718 {
719   gcc_assert (!processing_explicit_instantiation);
720   processing_explicit_instantiation = true;
721 }
722
723
724 void
725 end_explicit_instantiation (void)
726 {
727   gcc_assert (processing_explicit_instantiation);
728   processing_explicit_instantiation = false;
729 }
730
731 /* An explicit specialization or partial specialization TMPL is being
732    declared.  Check that the namespace in which the specialization is
733    occurring is permissible.  Returns false iff it is invalid to
734    specialize TMPL in the current namespace.  */
735
736 static bool
737 check_specialization_namespace (tree tmpl)
738 {
739   tree tpl_ns = decl_namespace_context (tmpl);
740
741   /* [tmpl.expl.spec]
742
743      An explicit specialization shall be declared in the namespace of
744      which the template is a member, or, for member templates, in the
745      namespace of which the enclosing class or enclosing class
746      template is a member.  An explicit specialization of a member
747      function, member class or static data member of a class template
748      shall be declared in the namespace of which the class template is
749      a member.  */
750   if (current_scope() != DECL_CONTEXT (tmpl)
751       && !at_namespace_scope_p ())
752     {
753       error ("specialization of %qD must appear at namespace scope", tmpl);
754       return false;
755     }
756   if (is_associated_namespace (current_namespace, tpl_ns))
757     /* Same or super-using namespace.  */
758     return true;
759   else
760     {
761       permerror (input_location, "specialization of %qD in different namespace", tmpl);
762       permerror (input_location, "  from definition of %q+#D", tmpl);
763       return false;
764     }
765 }
766
767 /* SPEC is an explicit instantiation.  Check that it is valid to
768    perform this explicit instantiation in the current namespace.  */
769
770 static void
771 check_explicit_instantiation_namespace (tree spec)
772 {
773   tree ns;
774
775   /* DR 275: An explicit instantiation shall appear in an enclosing
776      namespace of its template.  */
777   ns = decl_namespace_context (spec);
778   if (!is_ancestor (current_namespace, ns))
779     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
780                "(which does not enclose namespace %qD)",
781                spec, current_namespace, ns);
782 }
783
784 /* The TYPE is being declared.  If it is a template type, that means it
785    is a partial specialization.  Do appropriate error-checking.  */
786
787 tree
788 maybe_process_partial_specialization (tree type)
789 {
790   tree context;
791
792   if (type == error_mark_node)
793     return error_mark_node;
794
795   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
796     {
797       error ("name of class shadows template template parameter %qD",
798              TYPE_NAME (type));
799       return error_mark_node;
800     }
801
802   context = TYPE_CONTEXT (type);
803
804   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
805     {
806       /* This is for ordinary explicit specialization and partial
807          specialization of a template class such as:
808
809            template <> class C<int>;
810
811          or:
812
813            template <class T> class C<T*>;
814
815          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
816
817       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
818           && !COMPLETE_TYPE_P (type))
819         {
820           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
821           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
822           if (processing_template_decl)
823             {
824               if (push_template_decl (TYPE_MAIN_DECL (type))
825                   == error_mark_node)
826                 return error_mark_node;
827             }
828         }
829       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
830         error ("specialization of %qT after instantiation", type);
831     }
832   else if (CLASS_TYPE_P (type)
833            && !CLASSTYPE_USE_TEMPLATE (type)
834            && CLASSTYPE_TEMPLATE_INFO (type)
835            && context && CLASS_TYPE_P (context)
836            && CLASSTYPE_TEMPLATE_INFO (context))
837     {
838       /* This is for an explicit specialization of member class
839          template according to [temp.expl.spec/18]:
840
841            template <> template <class U> class C<int>::D;
842
843          The context `C<int>' must be an implicit instantiation.
844          Otherwise this is just a member class template declared
845          earlier like:
846
847            template <> class C<int> { template <class U> class D; };
848            template <> template <class U> class C<int>::D;
849
850          In the first case, `C<int>::D' is a specialization of `C<T>::D'
851          while in the second case, `C<int>::D' is a primary template
852          and `C<T>::D' may not exist.  */
853
854       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
855           && !COMPLETE_TYPE_P (type))
856         {
857           tree t;
858           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
859
860           if (current_namespace
861               != decl_namespace_context (tmpl))
862             {
863               permerror (input_location, "specializing %q#T in different namespace", type);
864               permerror (input_location, "  from definition of %q+#D", tmpl);
865             }
866
867           /* Check for invalid specialization after instantiation:
868
869                template <> template <> class C<int>::D<int>;
870                template <> template <class U> class C<int>::D;  */
871
872           for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
873                t; t = TREE_CHAIN (t))
874             {
875               tree inst = TREE_VALUE (t);
876               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst))
877                 {
878                   /* We already have a full specialization of this partial
879                      instantiation.  Reassign it to the new member
880                      specialization template.  */
881                   spec_entry elt;
882                   spec_entry **slot;
883
884                   elt.tmpl = most_general_template (tmpl);
885                   elt.args = CLASSTYPE_TI_ARGS (inst);
886                   elt.spec = inst;
887
888                   htab_remove_elt (type_specializations, &elt);
889
890                   elt.tmpl = tmpl;
891                   elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
892
893                   slot = (spec_entry **)
894                     htab_find_slot (type_specializations, &elt, INSERT);
895                   *slot = ggc_alloc_spec_entry ();
896                   **slot = elt;
897                 }
898               else if (COMPLETE_OR_OPEN_TYPE_P (inst))
899                 /* But if we've had an implicit instantiation, that's a
900                    problem ([temp.expl.spec]/6).  */
901                 error ("specialization %qT after instantiation %qT",
902                        type, inst);
903             }
904
905           /* Mark TYPE as a specialization.  And as a result, we only
906              have one level of template argument for the innermost
907              class template.  */
908           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
909           CLASSTYPE_TI_ARGS (type)
910             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
911         }
912     }
913   else if (processing_specialization)
914     {
915        /* Someday C++0x may allow for enum template specialization.  */
916       if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
917           && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
918         pedwarn (input_location, OPT_pedantic, "template specialization "
919                  "of %qD not allowed by ISO C++", type);
920       else
921         {
922           error ("explicit specialization of non-template %qT", type);
923           return error_mark_node;
924         }
925     }
926
927   return type;
928 }
929
930 /* Returns nonzero if we can optimize the retrieval of specializations
931    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
932    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
933
934 static inline bool
935 optimize_specialization_lookup_p (tree tmpl)
936 {
937   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
938           && DECL_CLASS_SCOPE_P (tmpl)
939           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
940              parameter.  */
941           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
942           /* The optimized lookup depends on the fact that the
943              template arguments for the member function template apply
944              purely to the containing class, which is not true if the
945              containing class is an explicit or partial
946              specialization.  */
947           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
948           && !DECL_MEMBER_TEMPLATE_P (tmpl)
949           && !DECL_CONV_FN_P (tmpl)
950           /* It is possible to have a template that is not a member
951              template and is not a member of a template class:
952
953              template <typename T>
954              struct S { friend A::f(); };
955
956              Here, the friend function is a template, but the context does
957              not have template information.  The optimized lookup relies
958              on having ARGS be the template arguments for both the class
959              and the function template.  */
960           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
961 }
962
963 /* Retrieve the specialization (in the sense of [temp.spec] - a
964    specialization is either an instantiation or an explicit
965    specialization) of TMPL for the given template ARGS.  If there is
966    no such specialization, return NULL_TREE.  The ARGS are a vector of
967    arguments, or a vector of vectors of arguments, in the case of
968    templates with more than one level of parameters.
969
970    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
971    then we search for a partial specialization matching ARGS.  This
972    parameter is ignored if TMPL is not a class template.  */
973
974 static tree
975 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
976 {
977   if (args == error_mark_node)
978     return NULL_TREE;
979
980   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
981
982   /* There should be as many levels of arguments as there are
983      levels of parameters.  */
984   gcc_assert (TMPL_ARGS_DEPTH (args)
985               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
986
987   if (optimize_specialization_lookup_p (tmpl))
988     {
989       tree class_template;
990       tree class_specialization;
991       VEC(tree,gc) *methods;
992       tree fns;
993       int idx;
994
995       /* The template arguments actually apply to the containing
996          class.  Find the class specialization with those
997          arguments.  */
998       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
999       class_specialization
1000         = retrieve_specialization (class_template, args, 0);
1001       if (!class_specialization)
1002         return NULL_TREE;
1003       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1004          for the specialization.  */
1005       idx = class_method_index_for_fn (class_specialization, tmpl);
1006       if (idx == -1)
1007         return NULL_TREE;
1008       /* Iterate through the methods with the indicated name, looking
1009          for the one that has an instance of TMPL.  */
1010       methods = CLASSTYPE_METHOD_VEC (class_specialization);
1011       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
1012         {
1013           tree fn = OVL_CURRENT (fns);
1014           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1015               /* using-declarations can add base methods to the method vec,
1016                  and we don't want those here.  */
1017               && DECL_CONTEXT (fn) == class_specialization)
1018             return fn;
1019         }
1020       return NULL_TREE;
1021     }
1022   else
1023     {
1024       spec_entry *found;
1025       spec_entry elt;
1026       htab_t specializations;
1027
1028       elt.tmpl = tmpl;
1029       elt.args = args;
1030       elt.spec = NULL_TREE;
1031
1032       if (DECL_CLASS_TEMPLATE_P (tmpl))
1033         specializations = type_specializations;
1034       else
1035         specializations = decl_specializations;
1036
1037       if (hash == 0)
1038         hash = hash_specialization (&elt);
1039       found = (spec_entry *) htab_find_with_hash (specializations, &elt, hash);
1040       if (found)
1041         return found->spec;
1042     }
1043
1044   return NULL_TREE;
1045 }
1046
1047 /* Like retrieve_specialization, but for local declarations.  */
1048
1049 static tree
1050 retrieve_local_specialization (tree tmpl)
1051 {
1052   tree spec;
1053
1054   if (local_specializations == NULL)
1055     return NULL_TREE;
1056
1057   spec = (tree) htab_find_with_hash (local_specializations, tmpl,
1058                                      htab_hash_pointer (tmpl));
1059   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
1060 }
1061
1062 /* Returns nonzero iff DECL is a specialization of TMPL.  */
1063
1064 int
1065 is_specialization_of (tree decl, tree tmpl)
1066 {
1067   tree t;
1068
1069   if (TREE_CODE (decl) == FUNCTION_DECL)
1070     {
1071       for (t = decl;
1072            t != NULL_TREE;
1073            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1074         if (t == tmpl)
1075           return 1;
1076     }
1077   else
1078     {
1079       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1080
1081       for (t = TREE_TYPE (decl);
1082            t != NULL_TREE;
1083            t = CLASSTYPE_USE_TEMPLATE (t)
1084              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1085         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1086           return 1;
1087     }
1088
1089   return 0;
1090 }
1091
1092 /* Returns nonzero iff DECL is a specialization of friend declaration
1093    FRIEND_DECL according to [temp.friend].  */
1094
1095 bool
1096 is_specialization_of_friend (tree decl, tree friend_decl)
1097 {
1098   bool need_template = true;
1099   int template_depth;
1100
1101   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1102               || TREE_CODE (decl) == TYPE_DECL);
1103
1104   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1105      of a template class, we want to check if DECL is a specialization
1106      if this.  */
1107   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1108       && DECL_TEMPLATE_INFO (friend_decl)
1109       && !DECL_USE_TEMPLATE (friend_decl))
1110     {
1111       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1112       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1113       need_template = false;
1114     }
1115   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1116            && !PRIMARY_TEMPLATE_P (friend_decl))
1117     need_template = false;
1118
1119   /* There is nothing to do if this is not a template friend.  */
1120   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1121     return false;
1122
1123   if (is_specialization_of (decl, friend_decl))
1124     return true;
1125
1126   /* [temp.friend/6]
1127      A member of a class template may be declared to be a friend of a
1128      non-template class.  In this case, the corresponding member of
1129      every specialization of the class template is a friend of the
1130      class granting friendship.
1131
1132      For example, given a template friend declaration
1133
1134        template <class T> friend void A<T>::f();
1135
1136      the member function below is considered a friend
1137
1138        template <> struct A<int> {
1139          void f();
1140        };
1141
1142      For this type of template friend, TEMPLATE_DEPTH below will be
1143      nonzero.  To determine if DECL is a friend of FRIEND, we first
1144      check if the enclosing class is a specialization of another.  */
1145
1146   template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1147   if (template_depth
1148       && DECL_CLASS_SCOPE_P (decl)
1149       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1150                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1151     {
1152       /* Next, we check the members themselves.  In order to handle
1153          a few tricky cases, such as when FRIEND_DECL's are
1154
1155            template <class T> friend void A<T>::g(T t);
1156            template <class T> template <T t> friend void A<T>::h();
1157
1158          and DECL's are
1159
1160            void A<int>::g(int);
1161            template <int> void A<int>::h();
1162
1163          we need to figure out ARGS, the template arguments from
1164          the context of DECL.  This is required for template substitution
1165          of `T' in the function parameter of `g' and template parameter
1166          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1167
1168       tree context = DECL_CONTEXT (decl);
1169       tree args = NULL_TREE;
1170       int current_depth = 0;
1171
1172       while (current_depth < template_depth)
1173         {
1174           if (CLASSTYPE_TEMPLATE_INFO (context))
1175             {
1176               if (current_depth == 0)
1177                 args = TYPE_TI_ARGS (context);
1178               else
1179                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1180               current_depth++;
1181             }
1182           context = TYPE_CONTEXT (context);
1183         }
1184
1185       if (TREE_CODE (decl) == FUNCTION_DECL)
1186         {
1187           bool is_template;
1188           tree friend_type;
1189           tree decl_type;
1190           tree friend_args_type;
1191           tree decl_args_type;
1192
1193           /* Make sure that both DECL and FRIEND_DECL are templates or
1194              non-templates.  */
1195           is_template = DECL_TEMPLATE_INFO (decl)
1196                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1197           if (need_template ^ is_template)
1198             return false;
1199           else if (is_template)
1200             {
1201               /* If both are templates, check template parameter list.  */
1202               tree friend_parms
1203                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1204                                          args, tf_none);
1205               if (!comp_template_parms
1206                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1207                       friend_parms))
1208                 return false;
1209
1210               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1211             }
1212           else
1213             decl_type = TREE_TYPE (decl);
1214
1215           friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1216                                               tf_none, NULL_TREE);
1217           if (friend_type == error_mark_node)
1218             return false;
1219
1220           /* Check if return types match.  */
1221           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1222             return false;
1223
1224           /* Check if function parameter types match, ignoring the
1225              `this' parameter.  */
1226           friend_args_type = TYPE_ARG_TYPES (friend_type);
1227           decl_args_type = TYPE_ARG_TYPES (decl_type);
1228           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1229             friend_args_type = TREE_CHAIN (friend_args_type);
1230           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1231             decl_args_type = TREE_CHAIN (decl_args_type);
1232
1233           return compparms (decl_args_type, friend_args_type);
1234         }
1235       else
1236         {
1237           /* DECL is a TYPE_DECL */
1238           bool is_template;
1239           tree decl_type = TREE_TYPE (decl);
1240
1241           /* Make sure that both DECL and FRIEND_DECL are templates or
1242              non-templates.  */
1243           is_template
1244             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1245               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1246
1247           if (need_template ^ is_template)
1248             return false;
1249           else if (is_template)
1250             {
1251               tree friend_parms;
1252               /* If both are templates, check the name of the two
1253                  TEMPLATE_DECL's first because is_friend didn't.  */
1254               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1255                   != DECL_NAME (friend_decl))
1256                 return false;
1257
1258               /* Now check template parameter list.  */
1259               friend_parms
1260                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1261                                          args, tf_none);
1262               return comp_template_parms
1263                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1264                  friend_parms);
1265             }
1266           else
1267             return (DECL_NAME (decl)
1268                     == DECL_NAME (friend_decl));
1269         }
1270     }
1271   return false;
1272 }
1273
1274 /* Register the specialization SPEC as a specialization of TMPL with
1275    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1276    is actually just a friend declaration.  Returns SPEC, or an
1277    equivalent prior declaration, if available.  */
1278
1279 static tree
1280 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1281                          hashval_t hash)
1282 {
1283   tree fn;
1284   spec_entry **slot = NULL;
1285   spec_entry elt;
1286
1287   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec));
1288
1289   if (TREE_CODE (spec) == FUNCTION_DECL
1290       && uses_template_parms (DECL_TI_ARGS (spec)))
1291     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1292        register it; we want the corresponding TEMPLATE_DECL instead.
1293        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1294        the more obvious `uses_template_parms (spec)' to avoid problems
1295        with default function arguments.  In particular, given
1296        something like this:
1297
1298           template <class T> void f(T t1, T t = T())
1299
1300        the default argument expression is not substituted for in an
1301        instantiation unless and until it is actually needed.  */
1302     return spec;
1303
1304   if (optimize_specialization_lookup_p (tmpl))
1305     /* We don't put these specializations in the hash table, but we might
1306        want to give an error about a mismatch.  */
1307     fn = retrieve_specialization (tmpl, args, 0);
1308   else
1309     {
1310       elt.tmpl = tmpl;
1311       elt.args = args;
1312       elt.spec = spec;
1313
1314       if (hash == 0)
1315         hash = hash_specialization (&elt);
1316
1317       slot = (spec_entry **)
1318         htab_find_slot_with_hash (decl_specializations, &elt, hash, INSERT);
1319       if (*slot)
1320         fn = (*slot)->spec;
1321       else
1322         fn = NULL_TREE;
1323     }
1324
1325   /* We can sometimes try to re-register a specialization that we've
1326      already got.  In particular, regenerate_decl_from_template calls
1327      duplicate_decls which will update the specialization list.  But,
1328      we'll still get called again here anyhow.  It's more convenient
1329      to simply allow this than to try to prevent it.  */
1330   if (fn == spec)
1331     return spec;
1332   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1333     {
1334       if (DECL_TEMPLATE_INSTANTIATION (fn))
1335         {
1336           if (DECL_ODR_USED (fn)
1337               || DECL_EXPLICIT_INSTANTIATION (fn))
1338             {
1339               error ("specialization of %qD after instantiation",
1340                      fn);
1341               return error_mark_node;
1342             }
1343           else
1344             {
1345               tree clone;
1346               /* This situation should occur only if the first
1347                  specialization is an implicit instantiation, the
1348                  second is an explicit specialization, and the
1349                  implicit instantiation has not yet been used.  That
1350                  situation can occur if we have implicitly
1351                  instantiated a member function and then specialized
1352                  it later.
1353
1354                  We can also wind up here if a friend declaration that
1355                  looked like an instantiation turns out to be a
1356                  specialization:
1357
1358                    template <class T> void foo(T);
1359                    class S { friend void foo<>(int) };
1360                    template <> void foo(int);
1361
1362                  We transform the existing DECL in place so that any
1363                  pointers to it become pointers to the updated
1364                  declaration.
1365
1366                  If there was a definition for the template, but not
1367                  for the specialization, we want this to look as if
1368                  there were no definition, and vice versa.  */
1369               DECL_INITIAL (fn) = NULL_TREE;
1370               duplicate_decls (spec, fn, is_friend);
1371               /* The call to duplicate_decls will have applied
1372                  [temp.expl.spec]:
1373
1374                    An explicit specialization of a function template
1375                    is inline only if it is explicitly declared to be,
1376                    and independently of whether its function template
1377                    is.
1378
1379                 to the primary function; now copy the inline bits to
1380                 the various clones.  */
1381               FOR_EACH_CLONE (clone, fn)
1382                 {
1383                   DECL_DECLARED_INLINE_P (clone)
1384                     = DECL_DECLARED_INLINE_P (fn);
1385                   DECL_SOURCE_LOCATION (clone)
1386                     = DECL_SOURCE_LOCATION (fn);
1387                 }
1388               check_specialization_namespace (fn);
1389
1390               return fn;
1391             }
1392         }
1393       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1394         {
1395           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1396             /* Dup decl failed, but this is a new definition. Set the
1397                line number so any errors match this new
1398                definition.  */
1399             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1400
1401           return fn;
1402         }
1403     }
1404   else if (fn)
1405     return duplicate_decls (spec, fn, is_friend);
1406
1407   /* A specialization must be declared in the same namespace as the
1408      template it is specializing.  */
1409   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1410       && !check_specialization_namespace (tmpl))
1411     DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1412
1413   if (!optimize_specialization_lookup_p (tmpl))
1414     {
1415       gcc_assert (tmpl && args && spec);
1416       *slot = ggc_alloc_spec_entry ();
1417       **slot = elt;
1418       if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1419           && PRIMARY_TEMPLATE_P (tmpl)
1420           && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1421         /* TMPL is a forward declaration of a template function; keep a list
1422            of all specializations in case we need to reassign them to a friend
1423            template later in tsubst_friend_function.  */
1424         DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1425           = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1426     }
1427
1428   return spec;
1429 }
1430
1431 /* Returns true iff two spec_entry nodes are equivalent.  Only compares the
1432    TMPL and ARGS members, ignores SPEC.  */
1433
1434 static int
1435 eq_specializations (const void *p1, const void *p2)
1436 {
1437   const spec_entry *e1 = (const spec_entry *)p1;
1438   const spec_entry *e2 = (const spec_entry *)p2;
1439
1440   return (e1->tmpl == e2->tmpl
1441           && comp_template_args (e1->args, e2->args));
1442 }
1443
1444 /* Returns a hash for a template TMPL and template arguments ARGS.  */
1445
1446 static hashval_t
1447 hash_tmpl_and_args (tree tmpl, tree args)
1448 {
1449   hashval_t val = DECL_UID (tmpl);
1450   return iterative_hash_template_arg (args, val);
1451 }
1452
1453 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1454    ignoring SPEC.  */
1455
1456 static hashval_t
1457 hash_specialization (const void *p)
1458 {
1459   const spec_entry *e = (const spec_entry *)p;
1460   return hash_tmpl_and_args (e->tmpl, e->args);
1461 }
1462
1463 /* Recursively calculate a hash value for a template argument ARG, for use
1464    in the hash tables of template specializations.  */
1465
1466 hashval_t
1467 iterative_hash_template_arg (tree arg, hashval_t val)
1468 {
1469   unsigned HOST_WIDE_INT i;
1470   enum tree_code code;
1471   char tclass;
1472
1473   if (arg == NULL_TREE)
1474     return iterative_hash_object (arg, val);
1475
1476   if (!TYPE_P (arg))
1477     STRIP_NOPS (arg);
1478
1479   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1480     /* We can get one of these when re-hashing a previous entry in the middle
1481        of substituting into a pack expansion.  Just look through it.  */
1482     arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1483
1484   code = TREE_CODE (arg);
1485   tclass = TREE_CODE_CLASS (code);
1486
1487   val = iterative_hash_object (code, val);
1488
1489   switch (code)
1490     {
1491     case ERROR_MARK:
1492       return val;
1493
1494     case IDENTIFIER_NODE:
1495       return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1496
1497     case TREE_VEC:
1498       {
1499         int i, len = TREE_VEC_LENGTH (arg);
1500         for (i = 0; i < len; ++i)
1501           val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1502         return val;
1503       }
1504
1505     case TYPE_PACK_EXPANSION:
1506     case EXPR_PACK_EXPANSION:
1507       return iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1508
1509     case TYPE_ARGUMENT_PACK:
1510     case NONTYPE_ARGUMENT_PACK:
1511       return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1512
1513     case TREE_LIST:
1514       for (; arg; arg = TREE_CHAIN (arg))
1515         val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1516       return val;
1517
1518     case OVERLOAD:
1519       for (; arg; arg = OVL_NEXT (arg))
1520         val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
1521       return val;
1522
1523     case CONSTRUCTOR:
1524       {
1525         tree field, value;
1526         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1527           {
1528             val = iterative_hash_template_arg (field, val);
1529             val = iterative_hash_template_arg (value, val);
1530           }
1531         return val;
1532       }
1533
1534     case PARM_DECL:
1535       if (!DECL_ARTIFICIAL (arg))
1536         {
1537           val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1538           val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1539         }
1540       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1541
1542     case TARGET_EXPR:
1543       return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1544
1545     case PTRMEM_CST:
1546       val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1547       return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1548
1549     case TEMPLATE_PARM_INDEX:
1550       val = iterative_hash_template_arg
1551         (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1552       val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1553       return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1554
1555     case TRAIT_EXPR:
1556       val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1557       val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1558       return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1559
1560     case BASELINK:
1561       val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1562                                          val);
1563       return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1564                                           val);
1565
1566     case MODOP_EXPR:
1567       val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1568       code = TREE_CODE (TREE_OPERAND (arg, 1));
1569       val = iterative_hash_object (code, val);
1570       return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1571
1572     case LAMBDA_EXPR:
1573       /* A lambda can't appear in a template arg, but don't crash on
1574          erroneous input.  */
1575       gcc_assert (seen_error ());
1576       return val;
1577
1578     case CAST_EXPR:
1579     case STATIC_CAST_EXPR:
1580     case REINTERPRET_CAST_EXPR:
1581     case CONST_CAST_EXPR:
1582     case DYNAMIC_CAST_EXPR:
1583     case NEW_EXPR:
1584       val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1585       /* Now hash operands as usual.  */
1586       break;
1587
1588     default:
1589       break;
1590     }
1591
1592   switch (tclass)
1593     {
1594     case tcc_type:
1595       if (TYPE_CANONICAL (arg))
1596         return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1597                                       val);
1598       else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1599         return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1600       /* Otherwise just compare the types during lookup.  */
1601       return val;
1602
1603     case tcc_declaration:
1604     case tcc_constant:
1605       return iterative_hash_expr (arg, val);
1606
1607     default:
1608       gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1609       {
1610         unsigned n = TREE_OPERAND_LENGTH (arg);
1611         for (i = 0; i < n; ++i)
1612           val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1613         return val;
1614       }
1615     }
1616   gcc_unreachable ();
1617   return 0;
1618 }
1619
1620 /* Unregister the specialization SPEC as a specialization of TMPL.
1621    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1622    if the SPEC was listed as a specialization of TMPL.
1623
1624    Note that SPEC has been ggc_freed, so we can't look inside it.  */
1625
1626 bool
1627 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1628 {
1629   spec_entry **slot;
1630   spec_entry elt;
1631
1632   elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1633   elt.args = TI_ARGS (tinfo);
1634   elt.spec = NULL_TREE;
1635
1636   slot = (spec_entry **) htab_find_slot (decl_specializations, &elt, INSERT);
1637   if (*slot)
1638     {
1639       gcc_assert ((*slot)->spec == spec || (*slot)->spec == new_spec);
1640       gcc_assert (new_spec != NULL_TREE);
1641       (*slot)->spec = new_spec;
1642       return 1;
1643     }
1644
1645   return 0;
1646 }
1647
1648 /* Compare an entry in the local specializations hash table P1 (which
1649    is really a pointer to a TREE_LIST) with P2 (which is really a
1650    DECL).  */
1651
1652 static int
1653 eq_local_specializations (const void *p1, const void *p2)
1654 {
1655   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1656 }
1657
1658 /* Hash P1, an entry in the local specializations table.  */
1659
1660 static hashval_t
1661 hash_local_specialization (const void* p1)
1662 {
1663   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1664 }
1665
1666 /* Like register_specialization, but for local declarations.  We are
1667    registering SPEC, an instantiation of TMPL.  */
1668
1669 static void
1670 register_local_specialization (tree spec, tree tmpl)
1671 {
1672   void **slot;
1673
1674   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1675                                    htab_hash_pointer (tmpl), INSERT);
1676   *slot = build_tree_list (spec, tmpl);
1677 }
1678
1679 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1680    specialized class.  */
1681
1682 bool
1683 explicit_class_specialization_p (tree type)
1684 {
1685   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1686     return false;
1687   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1688 }
1689
1690 /* Print the list of functions at FNS, going through all the overloads
1691    for each element of the list.  Alternatively, FNS can not be a
1692    TREE_LIST, in which case it will be printed together with all the
1693    overloads.
1694
1695    MORE and *STR should respectively be FALSE and NULL when the function
1696    is called from the outside.  They are used internally on recursive
1697    calls.  print_candidates manages the two parameters and leaves NULL
1698    in *STR when it ends.  */
1699
1700 static void
1701 print_candidates_1 (tree fns, bool more, const char **str)
1702 {
1703   tree fn, fn2;
1704   char *spaces = NULL;
1705
1706   for (fn = fns; fn; fn = OVL_NEXT (fn))
1707     if (TREE_CODE (fn) == TREE_LIST)
1708       {
1709         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, complain);
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                  We remove this mark in type_unification_real.  */
13724               targ = TMPL_ARG (converted_args, level, idx);
13725               if (targ)
13726                 {
13727                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
13728                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
13729                     = ARGUMENT_PACK_ARGS (targ);
13730                 }
13731
13732               /* We have some incomplete argument packs.  */
13733               incomplete_argument_packs_p = true;
13734             }
13735         }
13736
13737       if (incomplete_argument_packs_p)
13738         /* Any substitution is guaranteed to be incomplete if there
13739            are incomplete argument packs, because we can still deduce
13740            more arguments.  */
13741         incomplete = 1;
13742       else
13743         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
13744
13745       processing_template_decl += incomplete;
13746       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
13747       processing_template_decl -= incomplete;
13748
13749       if (fntype == error_mark_node)
13750         return 1;
13751
13752       /* Place the explicitly specified arguments in TARGS.  */
13753       for (i = NUM_TMPL_ARGS (converted_args); i--;)
13754         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
13755     }
13756
13757   /* Never do unification on the 'this' parameter.  */
13758   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
13759
13760   if (return_type)
13761     {
13762       tree *new_args;
13763
13764       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
13765       new_args = XALLOCAVEC (tree, nargs + 1);
13766       new_args[0] = return_type;
13767       memcpy (new_args + 1, args, nargs * sizeof (tree));
13768       args = new_args;
13769       ++nargs;
13770     }
13771
13772   /* We allow incomplete unification without an error message here
13773      because the standard doesn't seem to explicitly prohibit it.  Our
13774      callers must be ready to deal with unification failures in any
13775      event.  */
13776   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
13777                                   targs, parms, args, nargs, /*subr=*/0,
13778                                   strict, flags);
13779
13780   /* Now that we have bindings for all of the template arguments,
13781      ensure that the arguments deduced for the template template
13782      parameters have compatible template parameter lists.  We cannot
13783      check this property before we have deduced all template
13784      arguments, because the template parameter types of a template
13785      template parameter might depend on prior template parameters
13786      deduced after the template template parameter.  The following
13787      ill-formed example illustrates this issue:
13788
13789        template<typename T, template<T> class C> void f(C<5>, T);
13790
13791        template<int N> struct X {};
13792
13793        void g() {
13794          f(X<5>(), 5l); // error: template argument deduction fails
13795        }
13796
13797      The template parameter list of 'C' depends on the template type
13798      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
13799      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
13800      time that we deduce 'C'.  */
13801   if (result == 0
13802       && !template_template_parm_bindings_ok_p 
13803            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
13804     return 1;
13805
13806   if (result == 0)
13807     /* All is well so far.  Now, check:
13808
13809        [temp.deduct]
13810
13811        When all template arguments have been deduced, all uses of
13812        template parameters in nondeduced contexts are replaced with
13813        the corresponding deduced argument values.  If the
13814        substitution results in an invalid type, as described above,
13815        type deduction fails.  */
13816     {
13817       tree substed = tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE);
13818       if (substed == error_mark_node)
13819         return 1;
13820
13821       /* If we're looking for an exact match, check that what we got
13822          is indeed an exact match.  It might not be if some template
13823          parameters are used in non-deduced contexts.  */
13824       if (strict == DEDUCE_EXACT)
13825         {
13826           unsigned int i;
13827
13828           tree sarg
13829             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
13830           if (return_type)
13831             sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
13832           for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
13833             if (!same_type_p (args[i], TREE_VALUE (sarg)))
13834               return 1;
13835         }
13836     }
13837
13838   return result;
13839 }
13840
13841 /* Adjust types before performing type deduction, as described in
13842    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
13843    sections are symmetric.  PARM is the type of a function parameter
13844    or the return type of the conversion function.  ARG is the type of
13845    the argument passed to the call, or the type of the value
13846    initialized with the result of the conversion function.
13847    ARG_EXPR is the original argument expression, which may be null.  */
13848
13849 static int
13850 maybe_adjust_types_for_deduction (unification_kind_t strict,
13851                                   tree* parm,
13852                                   tree* arg,
13853                                   tree arg_expr)
13854 {
13855   int result = 0;
13856
13857   switch (strict)
13858     {
13859     case DEDUCE_CALL:
13860       break;
13861
13862     case DEDUCE_CONV:
13863       {
13864         /* Swap PARM and ARG throughout the remainder of this
13865            function; the handling is precisely symmetric since PARM
13866            will initialize ARG rather than vice versa.  */
13867         tree* temp = parm;
13868         parm = arg;
13869         arg = temp;
13870         break;
13871       }
13872
13873     case DEDUCE_EXACT:
13874       /* Core issue #873: Do the DR606 thing (see below) for these cases,
13875          too, but here handle it by stripping the reference from PARM
13876          rather than by adding it to ARG.  */
13877       if (TREE_CODE (*parm) == REFERENCE_TYPE
13878           && TYPE_REF_IS_RVALUE (*parm)
13879           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
13880           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
13881           && TREE_CODE (*arg) == REFERENCE_TYPE
13882           && !TYPE_REF_IS_RVALUE (*arg))
13883         *parm = TREE_TYPE (*parm);
13884       /* Nothing else to do in this case.  */
13885       return 0;
13886
13887     default:
13888       gcc_unreachable ();
13889     }
13890
13891   if (TREE_CODE (*parm) != REFERENCE_TYPE)
13892     {
13893       /* [temp.deduct.call]
13894
13895          If P is not a reference type:
13896
13897          --If A is an array type, the pointer type produced by the
13898          array-to-pointer standard conversion (_conv.array_) is
13899          used in place of A for type deduction; otherwise,
13900
13901          --If A is a function type, the pointer type produced by
13902          the function-to-pointer standard conversion
13903          (_conv.func_) is used in place of A for type deduction;
13904          otherwise,
13905
13906          --If A is a cv-qualified type, the top level
13907          cv-qualifiers of A's type are ignored for type
13908          deduction.  */
13909       if (TREE_CODE (*arg) == ARRAY_TYPE)
13910         *arg = build_pointer_type (TREE_TYPE (*arg));
13911       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
13912         *arg = build_pointer_type (*arg);
13913       else
13914         *arg = TYPE_MAIN_VARIANT (*arg);
13915     }
13916
13917   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
13918      of the form T&&, where T is a template parameter, and the argument
13919      is an lvalue, T is deduced as A& */
13920   if (TREE_CODE (*parm) == REFERENCE_TYPE
13921       && TYPE_REF_IS_RVALUE (*parm)
13922       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
13923       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
13924       && (arg_expr ? real_lvalue_p (arg_expr)
13925           /* try_one_overload doesn't provide an arg_expr, but
13926              functions are always lvalues.  */
13927           : TREE_CODE (*arg) == FUNCTION_TYPE))
13928     *arg = build_reference_type (*arg);
13929
13930   /* [temp.deduct.call]
13931
13932      If P is a cv-qualified type, the top level cv-qualifiers
13933      of P's type are ignored for type deduction.  If P is a
13934      reference type, the type referred to by P is used for
13935      type deduction.  */
13936   *parm = TYPE_MAIN_VARIANT (*parm);
13937   if (TREE_CODE (*parm) == REFERENCE_TYPE)
13938     {
13939       *parm = TREE_TYPE (*parm);
13940       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
13941     }
13942
13943   /* DR 322. For conversion deduction, remove a reference type on parm
13944      too (which has been swapped into ARG).  */
13945   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
13946     *arg = TREE_TYPE (*arg);
13947
13948   return result;
13949 }
13950
13951 /* Most parms like fn_type_unification.
13952
13953    If SUBR is 1, we're being called recursively (to unify the
13954    arguments of a function or method parameter of a function
13955    template). */
13956
13957 static int
13958 type_unification_real (tree tparms,
13959                        tree targs,
13960                        tree xparms,
13961                        const tree *xargs,
13962                        unsigned int xnargs,
13963                        int subr,
13964                        unification_kind_t strict,
13965                        int flags)
13966 {
13967   tree parm, arg, arg_expr;
13968   int i;
13969   int ntparms = TREE_VEC_LENGTH (tparms);
13970   int sub_strict;
13971   int saw_undeduced = 0;
13972   tree parms;
13973   const tree *args;
13974   unsigned int nargs;
13975   unsigned int ia;
13976
13977   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
13978   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
13979   gcc_assert (ntparms > 0);
13980
13981   /* Reset the number of non-defaulted template arguments contained
13982      in in TARGS.  */
13983   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
13984
13985   switch (strict)
13986     {
13987     case DEDUCE_CALL:
13988       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
13989                     | UNIFY_ALLOW_DERIVED);
13990       break;
13991
13992     case DEDUCE_CONV:
13993       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
13994       break;
13995
13996     case DEDUCE_EXACT:
13997       sub_strict = UNIFY_ALLOW_NONE;
13998       break;
13999
14000     default:
14001       gcc_unreachable ();
14002     }
14003
14004  again:
14005   parms = xparms;
14006   args = xargs;
14007   nargs = xnargs;
14008
14009   ia = 0;
14010   while (parms && parms != void_list_node
14011          && ia < nargs)
14012     {
14013       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
14014         break;
14015
14016       parm = TREE_VALUE (parms);
14017       parms = TREE_CHAIN (parms);
14018       arg = args[ia];
14019       ++ia;
14020       arg_expr = NULL;
14021
14022       if (arg == error_mark_node)
14023         return 1;
14024       if (arg == unknown_type_node)
14025         /* We can't deduce anything from this, but we might get all the
14026            template args from other function args.  */
14027         continue;
14028
14029       /* Conversions will be performed on a function argument that
14030          corresponds with a function parameter that contains only
14031          non-deducible template parameters and explicitly specified
14032          template parameters.  */
14033       if (!uses_template_parms (parm))
14034         {
14035           tree type;
14036
14037           if (!TYPE_P (arg))
14038             type = TREE_TYPE (arg);
14039           else
14040             type = arg;
14041
14042           if (same_type_p (parm, type))
14043             continue;
14044           if (strict != DEDUCE_EXACT
14045               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
14046                                   flags))
14047             continue;
14048
14049           return 1;
14050         }
14051
14052       if (!TYPE_P (arg))
14053         {
14054           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
14055           if (type_unknown_p (arg))
14056             {
14057               /* [temp.deduct.type] 
14058
14059                  A template-argument can be deduced from a pointer to
14060                  function or pointer to member function argument if
14061                  the set of overloaded functions does not contain
14062                  function templates and at most one of a set of
14063                  overloaded functions provides a unique match.  */
14064               if (resolve_overloaded_unification
14065                   (tparms, targs, parm, arg, strict, sub_strict))
14066                 continue;
14067
14068               return 1;
14069             }
14070           arg_expr = arg;
14071           arg = unlowered_expr_type (arg);
14072           if (arg == error_mark_node)
14073             return 1;
14074         }
14075
14076       {
14077         int arg_strict = sub_strict;
14078
14079         if (!subr)
14080           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
14081                                                           arg_expr);
14082
14083         if (arg == init_list_type_node && arg_expr)
14084           arg = arg_expr;
14085         if (unify (tparms, targs, parm, arg, arg_strict))
14086           return 1;
14087       }
14088     }
14089
14090
14091   if (parms 
14092       && parms != void_list_node
14093       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
14094     {
14095       /* Unify the remaining arguments with the pack expansion type.  */
14096       tree argvec;
14097       tree parmvec = make_tree_vec (1);
14098
14099       /* Allocate a TREE_VEC and copy in all of the arguments */ 
14100       argvec = make_tree_vec (nargs - ia);
14101       for (i = 0; ia < nargs; ++ia, ++i)
14102         TREE_VEC_ELT (argvec, i) = args[ia];
14103
14104       /* Copy the parameter into parmvec.  */
14105       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
14106       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
14107                                 /*call_args_p=*/true, /*subr=*/subr))
14108         return 1;
14109
14110       /* Advance to the end of the list of parameters.  */
14111       parms = TREE_CHAIN (parms);
14112     }
14113
14114   /* Fail if we've reached the end of the parm list, and more args
14115      are present, and the parm list isn't variadic.  */
14116   if (ia < nargs && parms == void_list_node)
14117     return 1;
14118   /* Fail if parms are left and they don't have default values.  */
14119   if (parms && parms != void_list_node
14120       && TREE_PURPOSE (parms) == NULL_TREE)
14121     return 1;
14122
14123   if (!subr)
14124     {
14125       /* Check to see if we need another pass before we start clearing
14126          ARGUMENT_PACK_INCOMPLETE_P.  */
14127       for (i = 0; i < ntparms; i++)
14128         {
14129           tree targ = TREE_VEC_ELT (targs, i);
14130           tree tparm = TREE_VEC_ELT (tparms, i);
14131
14132           if (targ || tparm == error_mark_node)
14133             continue;
14134           tparm = TREE_VALUE (tparm);
14135
14136           /* If this is an undeduced nontype parameter that depends on
14137              a type parameter, try another pass; its type may have been
14138              deduced from a later argument than the one from which
14139              this parameter can be deduced.  */
14140           if (TREE_CODE (tparm) == PARM_DECL
14141               && uses_template_parms (TREE_TYPE (tparm))
14142               && !saw_undeduced++)
14143             goto again;
14144         }
14145
14146       for (i = 0; i < ntparms; i++)
14147         {
14148           tree targ = TREE_VEC_ELT (targs, i);
14149           tree tparm = TREE_VEC_ELT (tparms, i);
14150
14151           /* Clear the "incomplete" flags on all argument packs now so that
14152              substituting them into later default arguments works.  */
14153           if (targ && ARGUMENT_PACK_P (targ))
14154             {
14155               ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
14156               ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
14157             }
14158
14159           if (targ || tparm == error_mark_node)
14160             continue;
14161           tparm = TREE_VALUE (tparm);
14162
14163           /* Core issue #226 (C++0x) [temp.deduct]:
14164
14165              If a template argument has not been deduced, its
14166              default template argument, if any, is used. 
14167
14168              When we are in C++98 mode, TREE_PURPOSE will either
14169              be NULL_TREE or ERROR_MARK_NODE, so we do not need
14170              to explicitly check cxx_dialect here.  */
14171           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
14172             {
14173               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14174               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
14175               arg = tsubst_template_arg (arg, targs, tf_none, NULL_TREE);
14176               arg = convert_template_argument (parm, arg, targs, tf_none,
14177                                                i, NULL_TREE);
14178               if (arg == error_mark_node)
14179                 return 1;
14180               else
14181                 {
14182                   TREE_VEC_ELT (targs, i) = arg;
14183                   /* The position of the first default template argument,
14184                      is also the number of non-defaulted arguments in TARGS.
14185                      Record that.  */
14186                   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
14187                     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
14188                   continue;
14189                 }
14190             }
14191
14192           /* If the type parameter is a parameter pack, then it will
14193              be deduced to an empty parameter pack.  */
14194           if (template_parameter_pack_p (tparm))
14195             {
14196               tree arg;
14197
14198               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
14199                 {
14200                   arg = make_node (NONTYPE_ARGUMENT_PACK);
14201                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
14202                   TREE_CONSTANT (arg) = 1;
14203                 }
14204               else
14205                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
14206
14207               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
14208
14209               TREE_VEC_ELT (targs, i) = arg;
14210               continue;
14211             }
14212
14213           return 2;
14214         }
14215     }
14216 #ifdef ENABLE_CHECKING
14217   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
14218     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
14219 #endif
14220
14221   return 0;
14222 }
14223
14224 /* Subroutine of type_unification_real.  Args are like the variables
14225    at the call site.  ARG is an overloaded function (or template-id);
14226    we try deducing template args from each of the overloads, and if
14227    only one succeeds, we go with that.  Modifies TARGS and returns
14228    true on success.  */
14229
14230 static bool
14231 resolve_overloaded_unification (tree tparms,
14232                                 tree targs,
14233                                 tree parm,
14234                                 tree arg,
14235                                 unification_kind_t strict,
14236                                 int sub_strict)
14237 {
14238   tree tempargs = copy_node (targs);
14239   int good = 0;
14240   tree goodfn = NULL_TREE;
14241   bool addr_p;
14242
14243   if (TREE_CODE (arg) == ADDR_EXPR)
14244     {
14245       arg = TREE_OPERAND (arg, 0);
14246       addr_p = true;
14247     }
14248   else
14249     addr_p = false;
14250
14251   if (TREE_CODE (arg) == COMPONENT_REF)
14252     /* Handle `&x' where `x' is some static or non-static member
14253        function name.  */
14254     arg = TREE_OPERAND (arg, 1);
14255
14256   if (TREE_CODE (arg) == OFFSET_REF)
14257     arg = TREE_OPERAND (arg, 1);
14258
14259   /* Strip baselink information.  */
14260   if (BASELINK_P (arg))
14261     arg = BASELINK_FUNCTIONS (arg);
14262
14263   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
14264     {
14265       /* If we got some explicit template args, we need to plug them into
14266          the affected templates before we try to unify, in case the
14267          explicit args will completely resolve the templates in question.  */
14268
14269       tree expl_subargs = TREE_OPERAND (arg, 1);
14270       arg = TREE_OPERAND (arg, 0);
14271
14272       for (; arg; arg = OVL_NEXT (arg))
14273         {
14274           tree fn = OVL_CURRENT (arg);
14275           tree subargs, elem;
14276
14277           if (TREE_CODE (fn) != TEMPLATE_DECL)
14278             continue;
14279
14280           ++processing_template_decl;
14281           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
14282                                   expl_subargs, /*check_ret=*/false);
14283           if (subargs)
14284             {
14285               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
14286               if (try_one_overload (tparms, targs, tempargs, parm,
14287                                     elem, strict, sub_strict, addr_p)
14288                   && (!goodfn || !decls_match (goodfn, elem)))
14289                 {
14290                   goodfn = elem;
14291                   ++good;
14292                 }
14293             }
14294           --processing_template_decl;
14295         }
14296     }
14297   else if (TREE_CODE (arg) != OVERLOAD
14298            && TREE_CODE (arg) != FUNCTION_DECL)
14299     /* If ARG is, for example, "(0, &f)" then its type will be unknown
14300        -- but the deduction does not succeed because the expression is
14301        not just the function on its own.  */
14302     return false;
14303   else
14304     for (; arg; arg = OVL_NEXT (arg))
14305       if (try_one_overload (tparms, targs, tempargs, parm,
14306                             TREE_TYPE (OVL_CURRENT (arg)),
14307                             strict, sub_strict, addr_p)
14308           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
14309         {
14310           goodfn = OVL_CURRENT (arg);
14311           ++good;
14312         }
14313
14314   /* [temp.deduct.type] A template-argument can be deduced from a pointer
14315      to function or pointer to member function argument if the set of
14316      overloaded functions does not contain function templates and at most
14317      one of a set of overloaded functions provides a unique match.
14318
14319      So if we found multiple possibilities, we return success but don't
14320      deduce anything.  */
14321
14322   if (good == 1)
14323     {
14324       int i = TREE_VEC_LENGTH (targs);
14325       for (; i--; )
14326         if (TREE_VEC_ELT (tempargs, i))
14327           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
14328     }
14329   if (good)
14330     return true;
14331
14332   return false;
14333 }
14334
14335 /* Core DR 115: In contexts where deduction is done and fails, or in
14336    contexts where deduction is not done, if a template argument list is
14337    specified and it, along with any default template arguments, identifies
14338    a single function template specialization, then the template-id is an
14339    lvalue for the function template specialization.  */
14340
14341 tree
14342 resolve_nondeduced_context (tree orig_expr)
14343 {
14344   tree expr, offset, baselink;
14345   bool addr;
14346
14347   if (!type_unknown_p (orig_expr))
14348     return orig_expr;
14349
14350   expr = orig_expr;
14351   addr = false;
14352   offset = NULL_TREE;
14353   baselink = NULL_TREE;
14354
14355   if (TREE_CODE (expr) == ADDR_EXPR)
14356     {
14357       expr = TREE_OPERAND (expr, 0);
14358       addr = true;
14359     }
14360   if (TREE_CODE (expr) == OFFSET_REF)
14361     {
14362       offset = expr;
14363       expr = TREE_OPERAND (expr, 1);
14364     }
14365   if (TREE_CODE (expr) == BASELINK)
14366     {
14367       baselink = expr;
14368       expr = BASELINK_FUNCTIONS (expr);
14369     }
14370
14371   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
14372     {
14373       int good = 0;
14374       tree goodfn = NULL_TREE;
14375
14376       /* If we got some explicit template args, we need to plug them into
14377          the affected templates before we try to unify, in case the
14378          explicit args will completely resolve the templates in question.  */
14379
14380       tree expl_subargs = TREE_OPERAND (expr, 1);
14381       tree arg = TREE_OPERAND (expr, 0);
14382       tree badfn = NULL_TREE;
14383       tree badargs = NULL_TREE;
14384
14385       for (; arg; arg = OVL_NEXT (arg))
14386         {
14387           tree fn = OVL_CURRENT (arg);
14388           tree subargs, elem;
14389
14390           if (TREE_CODE (fn) != TEMPLATE_DECL)
14391             continue;
14392
14393           ++processing_template_decl;
14394           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
14395                                   expl_subargs, /*check_ret=*/false);
14396           if (subargs && !any_dependent_template_arguments_p (subargs))
14397             {
14398               elem = instantiate_template (fn, subargs, tf_none);
14399               if (elem == error_mark_node)
14400                 {
14401                   badfn = fn;
14402                   badargs = subargs;
14403                 }
14404               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
14405                 {
14406                   goodfn = elem;
14407                   ++good;
14408                 }
14409             }
14410           --processing_template_decl;
14411         }
14412       if (good == 1)
14413         {
14414           expr = goodfn;
14415           if (baselink)
14416             expr = build_baselink (BASELINK_BINFO (baselink),
14417                                    BASELINK_ACCESS_BINFO (baselink),
14418                                    expr, BASELINK_OPTYPE (baselink));
14419           if (offset)
14420             {
14421               tree base
14422                 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
14423               expr = build_offset_ref (base, expr, addr);
14424             }
14425           if (addr)
14426             expr = cp_build_addr_expr (expr, tf_warning_or_error);
14427           return expr;
14428         }
14429       else if (good == 0 && badargs)
14430         /* There were no good options and at least one bad one, so let the
14431            user know what the problem is.  */
14432         instantiate_template (badfn, badargs, tf_warning_or_error);
14433     }
14434   return orig_expr;
14435 }
14436
14437 /* Subroutine of resolve_overloaded_unification; does deduction for a single
14438    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
14439    different overloads deduce different arguments for a given parm.
14440    ADDR_P is true if the expression for which deduction is being
14441    performed was of the form "& fn" rather than simply "fn".
14442
14443    Returns 1 on success.  */
14444
14445 static int
14446 try_one_overload (tree tparms,
14447                   tree orig_targs,
14448                   tree targs,
14449                   tree parm,
14450                   tree arg,
14451                   unification_kind_t strict,
14452                   int sub_strict,
14453                   bool addr_p)
14454 {
14455   int nargs;
14456   tree tempargs;
14457   int i;
14458
14459   /* [temp.deduct.type] A template-argument can be deduced from a pointer
14460      to function or pointer to member function argument if the set of
14461      overloaded functions does not contain function templates and at most
14462      one of a set of overloaded functions provides a unique match.
14463
14464      So if this is a template, just return success.  */
14465
14466   if (uses_template_parms (arg))
14467     return 1;
14468
14469   if (TREE_CODE (arg) == METHOD_TYPE)
14470     arg = build_ptrmemfunc_type (build_pointer_type (arg));
14471   else if (addr_p)
14472     arg = build_pointer_type (arg);
14473
14474   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
14475
14476   /* We don't copy orig_targs for this because if we have already deduced
14477      some template args from previous args, unify would complain when we
14478      try to deduce a template parameter for the same argument, even though
14479      there isn't really a conflict.  */
14480   nargs = TREE_VEC_LENGTH (targs);
14481   tempargs = make_tree_vec (nargs);
14482
14483   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
14484     return 0;
14485
14486   /* First make sure we didn't deduce anything that conflicts with
14487      explicitly specified args.  */
14488   for (i = nargs; i--; )
14489     {
14490       tree elt = TREE_VEC_ELT (tempargs, i);
14491       tree oldelt = TREE_VEC_ELT (orig_targs, i);
14492
14493       if (!elt)
14494         /*NOP*/;
14495       else if (uses_template_parms (elt))
14496         /* Since we're unifying against ourselves, we will fill in
14497            template args used in the function parm list with our own
14498            template parms.  Discard them.  */
14499         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
14500       else if (oldelt && !template_args_equal (oldelt, elt))
14501         return 0;
14502     }
14503
14504   for (i = nargs; i--; )
14505     {
14506       tree elt = TREE_VEC_ELT (tempargs, i);
14507
14508       if (elt)
14509         TREE_VEC_ELT (targs, i) = elt;
14510     }
14511
14512   return 1;
14513 }
14514
14515 /* PARM is a template class (perhaps with unbound template
14516    parameters).  ARG is a fully instantiated type.  If ARG can be
14517    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
14518    TARGS are as for unify.  */
14519
14520 static tree
14521 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
14522 {
14523   tree copy_of_targs;
14524
14525   if (!CLASSTYPE_TEMPLATE_INFO (arg)
14526       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
14527           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
14528     return NULL_TREE;
14529
14530   /* We need to make a new template argument vector for the call to
14531      unify.  If we used TARGS, we'd clutter it up with the result of
14532      the attempted unification, even if this class didn't work out.
14533      We also don't want to commit ourselves to all the unifications
14534      we've already done, since unification is supposed to be done on
14535      an argument-by-argument basis.  In other words, consider the
14536      following pathological case:
14537
14538        template <int I, int J, int K>
14539        struct S {};
14540
14541        template <int I, int J>
14542        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
14543
14544        template <int I, int J, int K>
14545        void f(S<I, J, K>, S<I, I, I>);
14546
14547        void g() {
14548          S<0, 0, 0> s0;
14549          S<0, 1, 2> s2;
14550
14551          f(s0, s2);
14552        }
14553
14554      Now, by the time we consider the unification involving `s2', we
14555      already know that we must have `f<0, 0, 0>'.  But, even though
14556      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
14557      because there are two ways to unify base classes of S<0, 1, 2>
14558      with S<I, I, I>.  If we kept the already deduced knowledge, we
14559      would reject the possibility I=1.  */
14560   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
14561
14562   /* If unification failed, we're done.  */
14563   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
14564              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
14565     return NULL_TREE;
14566
14567   return arg;
14568 }
14569
14570 /* Given a template type PARM and a class type ARG, find the unique
14571    base type in ARG that is an instance of PARM.  We do not examine
14572    ARG itself; only its base-classes.  If there is not exactly one
14573    appropriate base class, return NULL_TREE.  PARM may be the type of
14574    a partial specialization, as well as a plain template type.  Used
14575    by unify.  */
14576
14577 static tree
14578 get_template_base (tree tparms, tree targs, tree parm, tree arg)
14579 {
14580   tree rval = NULL_TREE;
14581   tree binfo;
14582
14583   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
14584
14585   binfo = TYPE_BINFO (complete_type (arg));
14586   if (!binfo)
14587     /* The type could not be completed.  */
14588     return NULL_TREE;
14589
14590   /* Walk in inheritance graph order.  The search order is not
14591      important, and this avoids multiple walks of virtual bases.  */
14592   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
14593     {
14594       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
14595
14596       if (r)
14597         {
14598           /* If there is more than one satisfactory baseclass, then:
14599
14600                [temp.deduct.call]
14601
14602               If they yield more than one possible deduced A, the type
14603               deduction fails.
14604
14605              applies.  */
14606           if (rval && !same_type_p (r, rval))
14607             return NULL_TREE;
14608
14609           rval = r;
14610         }
14611     }
14612
14613   return rval;
14614 }
14615
14616 /* Returns the level of DECL, which declares a template parameter.  */
14617
14618 static int
14619 template_decl_level (tree decl)
14620 {
14621   switch (TREE_CODE (decl))
14622     {
14623     case TYPE_DECL:
14624     case TEMPLATE_DECL:
14625       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
14626
14627     case PARM_DECL:
14628       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
14629
14630     default:
14631       gcc_unreachable ();
14632     }
14633   return 0;
14634 }
14635
14636 /* Decide whether ARG can be unified with PARM, considering only the
14637    cv-qualifiers of each type, given STRICT as documented for unify.
14638    Returns nonzero iff the unification is OK on that basis.  */
14639
14640 static int
14641 check_cv_quals_for_unify (int strict, tree arg, tree parm)
14642 {
14643   int arg_quals = cp_type_quals (arg);
14644   int parm_quals = cp_type_quals (parm);
14645
14646   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14647       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
14648     {
14649       /*  Although a CVR qualifier is ignored when being applied to a
14650           substituted template parameter ([8.3.2]/1 for example), that
14651           does not allow us to unify "const T" with "int&" because both
14652           types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
14653           It is ok when we're allowing additional CV qualifiers
14654           at the outer level [14.8.2.1]/3,1st bullet.  */
14655       if ((TREE_CODE (arg) == REFERENCE_TYPE
14656            || TREE_CODE (arg) == FUNCTION_TYPE
14657            || TREE_CODE (arg) == METHOD_TYPE)
14658           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
14659         return 0;
14660
14661       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
14662           && (parm_quals & TYPE_QUAL_RESTRICT))
14663         return 0;
14664     }
14665
14666   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
14667       && (arg_quals & parm_quals) != parm_quals)
14668     return 0;
14669
14670   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
14671       && (parm_quals & arg_quals) != arg_quals)
14672     return 0;
14673
14674   return 1;
14675 }
14676
14677 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
14678 void 
14679 template_parm_level_and_index (tree parm, int* level, int* index)
14680 {
14681   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14682       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
14683       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
14684     {
14685       *index = TEMPLATE_TYPE_IDX (parm);
14686       *level = TEMPLATE_TYPE_LEVEL (parm);
14687     }
14688   else
14689     {
14690       *index = TEMPLATE_PARM_IDX (parm);
14691       *level = TEMPLATE_PARM_LEVEL (parm);
14692     }
14693 }
14694
14695 /* Unifies the remaining arguments in PACKED_ARGS with the pack
14696    expansion at the end of PACKED_PARMS. Returns 0 if the type
14697    deduction succeeds, 1 otherwise. STRICT is the same as in
14698    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
14699    call argument list. We'll need to adjust the arguments to make them
14700    types. SUBR tells us if this is from a recursive call to
14701    type_unification_real.  */
14702 int
14703 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
14704                       tree packed_args, int strict, bool call_args_p,
14705                       bool subr)
14706 {
14707   tree parm 
14708     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
14709   tree pattern = PACK_EXPANSION_PATTERN (parm);
14710   tree pack, packs = NULL_TREE;
14711   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
14712   int len = TREE_VEC_LENGTH (packed_args);
14713
14714   /* Determine the parameter packs we will be deducing from the
14715      pattern, and record their current deductions.  */
14716   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
14717        pack; pack = TREE_CHAIN (pack))
14718     {
14719       tree parm_pack = TREE_VALUE (pack);
14720       int idx, level;
14721
14722       /* Determine the index and level of this parameter pack.  */
14723       template_parm_level_and_index (parm_pack, &level, &idx);
14724
14725       /* Keep track of the parameter packs and their corresponding
14726          argument packs.  */
14727       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
14728       TREE_TYPE (packs) = make_tree_vec (len - start);
14729     }
14730   
14731   /* Loop through all of the arguments that have not yet been
14732      unified and unify each with the pattern.  */
14733   for (i = start; i < len; i++)
14734     {
14735       tree parm = pattern;
14736
14737       /* For each parameter pack, clear out the deduced value so that
14738          we can deduce it again.  */
14739       for (pack = packs; pack; pack = TREE_CHAIN (pack))
14740         {
14741           int idx, level;
14742           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14743
14744           TMPL_ARG (targs, level, idx) = NULL_TREE;
14745         }
14746
14747       /* Unify the pattern with the current argument.  */
14748       {
14749         tree arg = TREE_VEC_ELT (packed_args, i);
14750         tree arg_expr = NULL_TREE;
14751         int arg_strict = strict;
14752         bool skip_arg_p = false;
14753
14754         if (call_args_p)
14755           {
14756             int sub_strict;
14757
14758             /* This mirrors what we do in type_unification_real.  */
14759             switch (strict)
14760               {
14761               case DEDUCE_CALL:
14762                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
14763                               | UNIFY_ALLOW_MORE_CV_QUAL
14764                               | UNIFY_ALLOW_DERIVED);
14765                 break;
14766                 
14767               case DEDUCE_CONV:
14768                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
14769                 break;
14770                 
14771               case DEDUCE_EXACT:
14772                 sub_strict = UNIFY_ALLOW_NONE;
14773                 break;
14774                 
14775               default:
14776                 gcc_unreachable ();
14777               }
14778
14779             if (!TYPE_P (arg))
14780               {
14781                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
14782                 if (type_unknown_p (arg))
14783                   {
14784                     /* [temp.deduct.type] A template-argument can be
14785                        deduced from a pointer to function or pointer
14786                        to member function argument if the set of
14787                        overloaded functions does not contain function
14788                        templates and at most one of a set of
14789                        overloaded functions provides a unique
14790                        match.  */
14791
14792                     if (resolve_overloaded_unification
14793                         (tparms, targs, parm, arg,
14794                          (unification_kind_t) strict,
14795                          sub_strict)
14796                         != 0)
14797                       return 1;
14798                     skip_arg_p = true;
14799                   }
14800
14801                 if (!skip_arg_p)
14802                   {
14803                     arg_expr = arg;
14804                     arg = unlowered_expr_type (arg);
14805                     if (arg == error_mark_node)
14806                       return 1;
14807                   }
14808               }
14809       
14810             arg_strict = sub_strict;
14811
14812             if (!subr)
14813               arg_strict |= 
14814                 maybe_adjust_types_for_deduction ((unification_kind_t) strict,
14815                                                   &parm, &arg, arg_expr);
14816           }
14817
14818         if (!skip_arg_p)
14819           {
14820             /* For deduction from an init-list we need the actual list.  */
14821             if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
14822               arg = arg_expr;
14823             if (unify (tparms, targs, parm, arg, arg_strict))
14824               return 1;
14825           }
14826       }
14827
14828       /* For each parameter pack, collect the deduced value.  */
14829       for (pack = packs; pack; pack = TREE_CHAIN (pack))
14830         {
14831           int idx, level;
14832           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14833
14834           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
14835             TMPL_ARG (targs, level, idx);
14836         }
14837     }
14838
14839   /* Verify that the results of unification with the parameter packs
14840      produce results consistent with what we've seen before, and make
14841      the deduced argument packs available.  */
14842   for (pack = packs; pack; pack = TREE_CHAIN (pack))
14843     {
14844       tree old_pack = TREE_VALUE (pack);
14845       tree new_args = TREE_TYPE (pack);
14846       int i, len = TREE_VEC_LENGTH (new_args);
14847       int idx, level;
14848       bool nondeduced_p = false;
14849
14850       /* By default keep the original deduced argument pack.
14851          If necessary, more specific code is going to update the
14852          resulting deduced argument later down in this function.  */
14853       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14854       TMPL_ARG (targs, level, idx) = old_pack;
14855
14856       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
14857          actually deduce anything.  */
14858       for (i = 0; i < len && !nondeduced_p; ++i)
14859         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
14860           nondeduced_p = true;
14861       if (nondeduced_p)
14862         continue;
14863
14864       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
14865         {
14866           /* Prepend the explicit arguments onto NEW_ARGS.  */
14867           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
14868           tree old_args = new_args;
14869           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
14870           int len = explicit_len + TREE_VEC_LENGTH (old_args);
14871
14872           /* Copy the explicit arguments.  */
14873           new_args = make_tree_vec (len);
14874           for (i = 0; i < explicit_len; i++)
14875             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
14876
14877           /* Copy the deduced arguments.  */
14878           for (; i < len; i++)
14879             TREE_VEC_ELT (new_args, i) =
14880               TREE_VEC_ELT (old_args, i - explicit_len);
14881         }
14882
14883       if (!old_pack)
14884         {
14885           tree result;
14886           /* Build the deduced *_ARGUMENT_PACK.  */
14887           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
14888             {
14889               result = make_node (NONTYPE_ARGUMENT_PACK);
14890               TREE_TYPE (result) = 
14891                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
14892               TREE_CONSTANT (result) = 1;
14893             }
14894           else
14895             result = cxx_make_type (TYPE_ARGUMENT_PACK);
14896
14897           SET_ARGUMENT_PACK_ARGS (result, new_args);
14898
14899           /* Note the deduced argument packs for this parameter
14900              pack.  */
14901           TMPL_ARG (targs, level, idx) = result;
14902         }
14903       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
14904                && (ARGUMENT_PACK_ARGS (old_pack) 
14905                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
14906         {
14907           /* We only had the explicitly-provided arguments before, but
14908              now we have a complete set of arguments.  */
14909           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
14910
14911           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
14912           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
14913           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
14914         }
14915       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
14916                                     new_args))
14917         /* Inconsistent unification of this parameter pack.  */
14918         return 1;
14919     }
14920
14921   return 0;
14922 }
14923
14924 /* Deduce the value of template parameters.  TPARMS is the (innermost)
14925    set of template parameters to a template.  TARGS is the bindings
14926    for those template parameters, as determined thus far; TARGS may
14927    include template arguments for outer levels of template parameters
14928    as well.  PARM is a parameter to a template function, or a
14929    subcomponent of that parameter; ARG is the corresponding argument.
14930    This function attempts to match PARM with ARG in a manner
14931    consistent with the existing assignments in TARGS.  If more values
14932    are deduced, then TARGS is updated.
14933
14934    Returns 0 if the type deduction succeeds, 1 otherwise.  The
14935    parameter STRICT is a bitwise or of the following flags:
14936
14937      UNIFY_ALLOW_NONE:
14938        Require an exact match between PARM and ARG.
14939      UNIFY_ALLOW_MORE_CV_QUAL:
14940        Allow the deduced ARG to be more cv-qualified (by qualification
14941        conversion) than ARG.
14942      UNIFY_ALLOW_LESS_CV_QUAL:
14943        Allow the deduced ARG to be less cv-qualified than ARG.
14944      UNIFY_ALLOW_DERIVED:
14945        Allow the deduced ARG to be a template base class of ARG,
14946        or a pointer to a template base class of the type pointed to by
14947        ARG.
14948      UNIFY_ALLOW_INTEGER:
14949        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
14950        case for more information.
14951      UNIFY_ALLOW_OUTER_LEVEL:
14952        This is the outermost level of a deduction. Used to determine validity
14953        of qualification conversions. A valid qualification conversion must
14954        have const qualified pointers leading up to the inner type which
14955        requires additional CV quals, except at the outer level, where const
14956        is not required [conv.qual]. It would be normal to set this flag in
14957        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
14958      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
14959        This is the outermost level of a deduction, and PARM can be more CV
14960        qualified at this point.
14961      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
14962        This is the outermost level of a deduction, and PARM can be less CV
14963        qualified at this point.  */
14964
14965 static int
14966 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
14967 {
14968   int idx;
14969   tree targ;
14970   tree tparm;
14971   int strict_in = strict;
14972
14973   /* I don't think this will do the right thing with respect to types.
14974      But the only case I've seen it in so far has been array bounds, where
14975      signedness is the only information lost, and I think that will be
14976      okay.  */
14977   while (TREE_CODE (parm) == NOP_EXPR)
14978     parm = TREE_OPERAND (parm, 0);
14979
14980   if (arg == error_mark_node)
14981     return 1;
14982   if (arg == unknown_type_node
14983       || arg == init_list_type_node)
14984     /* We can't deduce anything from this, but we might get all the
14985        template args from other function args.  */
14986     return 0;
14987
14988   /* If PARM uses template parameters, then we can't bail out here,
14989      even if ARG == PARM, since we won't record unifications for the
14990      template parameters.  We might need them if we're trying to
14991      figure out which of two things is more specialized.  */
14992   if (arg == parm && !uses_template_parms (parm))
14993     return 0;
14994
14995   /* Handle init lists early, so the rest of the function can assume
14996      we're dealing with a type. */
14997   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
14998     {
14999       tree elt, elttype;
15000       unsigned i;
15001       tree orig_parm = parm;
15002
15003       /* Replace T with std::initializer_list<T> for deduction.  */
15004       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15005           && flag_deduce_init_list)
15006         parm = listify (parm);
15007
15008       if (!is_std_init_list (parm))
15009         /* We can only deduce from an initializer list argument if the
15010            parameter is std::initializer_list; otherwise this is a
15011            non-deduced context. */
15012         return 0;
15013
15014       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
15015
15016       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
15017         {
15018           int elt_strict = strict;
15019
15020           if (elt == error_mark_node)
15021             return 1;
15022
15023           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
15024             {
15025               tree type = TREE_TYPE (elt);
15026               /* It should only be possible to get here for a call.  */
15027               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
15028               elt_strict |= maybe_adjust_types_for_deduction
15029                 (DEDUCE_CALL, &elttype, &type, elt);
15030               elt = type;
15031             }
15032
15033           if (unify (tparms, targs, elttype, elt, elt_strict))
15034             return 1;
15035         }
15036
15037       /* If the std::initializer_list<T> deduction worked, replace the
15038          deduced A with std::initializer_list<A>.  */
15039       if (orig_parm != parm)
15040         {
15041           idx = TEMPLATE_TYPE_IDX (orig_parm);
15042           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15043           targ = listify (targ);
15044           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
15045         }
15046       return 0;
15047     }
15048
15049   /* Immediately reject some pairs that won't unify because of
15050      cv-qualification mismatches.  */
15051   if (TREE_CODE (arg) == TREE_CODE (parm)
15052       && TYPE_P (arg)
15053       /* It is the elements of the array which hold the cv quals of an array
15054          type, and the elements might be template type parms. We'll check
15055          when we recurse.  */
15056       && TREE_CODE (arg) != ARRAY_TYPE
15057       /* We check the cv-qualifiers when unifying with template type
15058          parameters below.  We want to allow ARG `const T' to unify with
15059          PARM `T' for example, when computing which of two templates
15060          is more specialized, for example.  */
15061       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
15062       && !check_cv_quals_for_unify (strict_in, arg, parm))
15063     return 1;
15064
15065   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
15066       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
15067     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
15068   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
15069   strict &= ~UNIFY_ALLOW_DERIVED;
15070   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
15071   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
15072
15073   switch (TREE_CODE (parm))
15074     {
15075     case TYPENAME_TYPE:
15076     case SCOPE_REF:
15077     case UNBOUND_CLASS_TEMPLATE:
15078       /* In a type which contains a nested-name-specifier, template
15079          argument values cannot be deduced for template parameters used
15080          within the nested-name-specifier.  */
15081       return 0;
15082
15083     case TEMPLATE_TYPE_PARM:
15084     case TEMPLATE_TEMPLATE_PARM:
15085     case BOUND_TEMPLATE_TEMPLATE_PARM:
15086       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
15087       if (tparm == error_mark_node)
15088         return 1;
15089
15090       if (TEMPLATE_TYPE_LEVEL (parm)
15091           != template_decl_level (tparm))
15092         /* The PARM is not one we're trying to unify.  Just check
15093            to see if it matches ARG.  */
15094         return (TREE_CODE (arg) == TREE_CODE (parm)
15095                 && same_type_p (parm, arg)) ? 0 : 1;
15096       idx = TEMPLATE_TYPE_IDX (parm);
15097       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15098       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
15099
15100       /* Check for mixed types and values.  */
15101       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15102            && TREE_CODE (tparm) != TYPE_DECL)
15103           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15104               && TREE_CODE (tparm) != TEMPLATE_DECL))
15105         return 1;
15106
15107       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15108         {
15109           /* ARG must be constructed from a template class or a template
15110              template parameter.  */
15111           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
15112               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
15113             return 1;
15114
15115           {
15116             tree parmvec = TYPE_TI_ARGS (parm);
15117             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
15118             tree full_argvec = add_to_template_args (targs, argvec);
15119             tree parm_parms 
15120               = DECL_INNERMOST_TEMPLATE_PARMS
15121                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
15122             int i, len;
15123             int parm_variadic_p = 0;
15124
15125             /* The resolution to DR150 makes clear that default
15126                arguments for an N-argument may not be used to bind T
15127                to a template template parameter with fewer than N
15128                parameters.  It is not safe to permit the binding of
15129                default arguments as an extension, as that may change
15130                the meaning of a conforming program.  Consider:
15131
15132                   struct Dense { static const unsigned int dim = 1; };
15133
15134                   template <template <typename> class View,
15135                             typename Block>
15136                   void operator+(float, View<Block> const&);
15137
15138                   template <typename Block,
15139                             unsigned int Dim = Block::dim>
15140                   struct Lvalue_proxy { operator float() const; };
15141
15142                   void
15143                   test_1d (void) {
15144                     Lvalue_proxy<Dense> p;
15145                     float b;
15146                     b + p;
15147                   }
15148
15149               Here, if Lvalue_proxy is permitted to bind to View, then
15150               the global operator+ will be used; if they are not, the
15151               Lvalue_proxy will be converted to float.  */
15152             if (coerce_template_parms (parm_parms,
15153                                        full_argvec,
15154                                        TYPE_TI_TEMPLATE (parm),
15155                                        tf_none,
15156                                        /*require_all_args=*/true,
15157                                        /*use_default_args=*/false)
15158                 == error_mark_node)
15159               return 1;
15160
15161             /* Deduce arguments T, i from TT<T> or TT<i>.
15162                We check each element of PARMVEC and ARGVEC individually
15163                rather than the whole TREE_VEC since they can have
15164                different number of elements.  */
15165
15166             parmvec = expand_template_argument_pack (parmvec);
15167             argvec = expand_template_argument_pack (argvec);
15168
15169             len = TREE_VEC_LENGTH (parmvec);
15170
15171             /* Check if the parameters end in a pack, making them
15172                variadic.  */
15173             if (len > 0
15174                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
15175               parm_variadic_p = 1;
15176             
15177             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
15178               return 1;
15179
15180              for (i = 0; i < len - parm_variadic_p; ++i)
15181               {
15182                 if (unify (tparms, targs,
15183                            TREE_VEC_ELT (parmvec, i),
15184                            TREE_VEC_ELT (argvec, i),
15185                            UNIFY_ALLOW_NONE))
15186                   return 1;
15187               }
15188
15189             if (parm_variadic_p
15190                 && unify_pack_expansion (tparms, targs,
15191                                          parmvec, argvec,
15192                                          UNIFY_ALLOW_NONE,
15193                                          /*call_args_p=*/false,
15194                                          /*subr=*/false))
15195               return 1;
15196           }
15197           arg = TYPE_TI_TEMPLATE (arg);
15198
15199           /* Fall through to deduce template name.  */
15200         }
15201
15202       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15203           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15204         {
15205           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
15206
15207           /* Simple cases: Value already set, does match or doesn't.  */
15208           if (targ != NULL_TREE && template_args_equal (targ, arg))
15209             return 0;
15210           else if (targ)
15211             return 1;
15212         }
15213       else
15214         {
15215           /* If PARM is `const T' and ARG is only `int', we don't have
15216              a match unless we are allowing additional qualification.
15217              If ARG is `const int' and PARM is just `T' that's OK;
15218              that binds `const int' to `T'.  */
15219           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
15220                                          arg, parm))
15221             return 1;
15222
15223           /* Consider the case where ARG is `const volatile int' and
15224              PARM is `const T'.  Then, T should be `volatile int'.  */
15225           arg = cp_build_qualified_type_real
15226             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
15227           if (arg == error_mark_node)
15228             return 1;
15229
15230           /* Simple cases: Value already set, does match or doesn't.  */
15231           if (targ != NULL_TREE && same_type_p (targ, arg))
15232             return 0;
15233           else if (targ)
15234             return 1;
15235
15236           /* Make sure that ARG is not a variable-sized array.  (Note
15237              that were talking about variable-sized arrays (like
15238              `int[n]'), rather than arrays of unknown size (like
15239              `int[]').)  We'll get very confused by such a type since
15240              the bound of the array will not be computable in an
15241              instantiation.  Besides, such types are not allowed in
15242              ISO C++, so we can do as we please here.  */
15243           if (variably_modified_type_p (arg, NULL_TREE))
15244             return 1;
15245
15246           /* Strip typedefs as in convert_template_argument.  */
15247           arg = strip_typedefs (arg);
15248         }
15249
15250       /* If ARG is a parameter pack or an expansion, we cannot unify
15251          against it unless PARM is also a parameter pack.  */
15252       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
15253           && !template_parameter_pack_p (parm))
15254         return 1;
15255
15256       /* If the argument deduction results is a METHOD_TYPE,
15257          then there is a problem.
15258          METHOD_TYPE doesn't map to any real C++ type the result of
15259          the deduction can not be of that type.  */
15260       if (TREE_CODE (arg) == METHOD_TYPE)
15261         return 1;
15262
15263       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
15264       return 0;
15265
15266     case TEMPLATE_PARM_INDEX:
15267       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
15268       if (tparm == error_mark_node)
15269         return 1;
15270
15271       if (TEMPLATE_PARM_LEVEL (parm)
15272           != template_decl_level (tparm))
15273         /* The PARM is not one we're trying to unify.  Just check
15274            to see if it matches ARG.  */
15275         return !(TREE_CODE (arg) == TREE_CODE (parm)
15276                  && cp_tree_equal (parm, arg));
15277
15278       idx = TEMPLATE_PARM_IDX (parm);
15279       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15280
15281       if (targ)
15282         return !cp_tree_equal (targ, arg);
15283
15284       /* [temp.deduct.type] If, in the declaration of a function template
15285          with a non-type template-parameter, the non-type
15286          template-parameter is used in an expression in the function
15287          parameter-list and, if the corresponding template-argument is
15288          deduced, the template-argument type shall match the type of the
15289          template-parameter exactly, except that a template-argument
15290          deduced from an array bound may be of any integral type.
15291          The non-type parameter might use already deduced type parameters.  */
15292       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
15293       if (!TREE_TYPE (arg))
15294         /* Template-parameter dependent expression.  Just accept it for now.
15295            It will later be processed in convert_template_argument.  */
15296         ;
15297       else if (same_type_p (TREE_TYPE (arg), tparm))
15298         /* OK */;
15299       else if ((strict & UNIFY_ALLOW_INTEGER)
15300                && (TREE_CODE (tparm) == INTEGER_TYPE
15301                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
15302         /* Convert the ARG to the type of PARM; the deduced non-type
15303            template argument must exactly match the types of the
15304            corresponding parameter.  */
15305         arg = fold (build_nop (tparm, arg));
15306       else if (uses_template_parms (tparm))
15307         /* We haven't deduced the type of this parameter yet.  Try again
15308            later.  */
15309         return 0;
15310       else
15311         return 1;
15312
15313       /* If ARG is a parameter pack or an expansion, we cannot unify
15314          against it unless PARM is also a parameter pack.  */
15315       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
15316           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
15317         return 1;
15318
15319       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
15320       return 0;
15321
15322     case PTRMEM_CST:
15323      {
15324         /* A pointer-to-member constant can be unified only with
15325          another constant.  */
15326       if (TREE_CODE (arg) != PTRMEM_CST)
15327         return 1;
15328
15329       /* Just unify the class member. It would be useless (and possibly
15330          wrong, depending on the strict flags) to unify also
15331          PTRMEM_CST_CLASS, because we want to be sure that both parm and
15332          arg refer to the same variable, even if through different
15333          classes. For instance:
15334
15335          struct A { int x; };
15336          struct B : A { };
15337
15338          Unification of &A::x and &B::x must succeed.  */
15339       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
15340                     PTRMEM_CST_MEMBER (arg), strict);
15341      }
15342
15343     case POINTER_TYPE:
15344       {
15345         if (TREE_CODE (arg) != POINTER_TYPE)
15346           return 1;
15347
15348         /* [temp.deduct.call]
15349
15350            A can be another pointer or pointer to member type that can
15351            be converted to the deduced A via a qualification
15352            conversion (_conv.qual_).
15353
15354            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
15355            This will allow for additional cv-qualification of the
15356            pointed-to types if appropriate.  */
15357
15358         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
15359           /* The derived-to-base conversion only persists through one
15360              level of pointers.  */
15361           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
15362
15363         return unify (tparms, targs, TREE_TYPE (parm),
15364                       TREE_TYPE (arg), strict);
15365       }
15366
15367     case REFERENCE_TYPE:
15368       if (TREE_CODE (arg) != REFERENCE_TYPE)
15369         return 1;
15370       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15371                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
15372
15373     case ARRAY_TYPE:
15374       if (TREE_CODE (arg) != ARRAY_TYPE)
15375         return 1;
15376       if ((TYPE_DOMAIN (parm) == NULL_TREE)
15377           != (TYPE_DOMAIN (arg) == NULL_TREE))
15378         return 1;
15379       if (TYPE_DOMAIN (parm) != NULL_TREE)
15380         {
15381           tree parm_max;
15382           tree arg_max;
15383           bool parm_cst;
15384           bool arg_cst;
15385
15386           /* Our representation of array types uses "N - 1" as the
15387              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
15388              not an integer constant.  We cannot unify arbitrarily
15389              complex expressions, so we eliminate the MINUS_EXPRs
15390              here.  */
15391           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
15392           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
15393           if (!parm_cst)
15394             {
15395               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
15396               parm_max = TREE_OPERAND (parm_max, 0);
15397             }
15398           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
15399           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
15400           if (!arg_cst)
15401             {
15402               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
15403                  trying to unify the type of a variable with the type
15404                  of a template parameter.  For example:
15405
15406                    template <unsigned int N>
15407                    void f (char (&) [N]);
15408                    int g(); 
15409                    void h(int i) {
15410                      char a[g(i)];
15411                      f(a); 
15412                    }
15413
15414                 Here, the type of the ARG will be "int [g(i)]", and
15415                 may be a SAVE_EXPR, etc.  */
15416               if (TREE_CODE (arg_max) != MINUS_EXPR)
15417                 return 1;
15418               arg_max = TREE_OPERAND (arg_max, 0);
15419             }
15420
15421           /* If only one of the bounds used a MINUS_EXPR, compensate
15422              by adding one to the other bound.  */
15423           if (parm_cst && !arg_cst)
15424             parm_max = fold_build2_loc (input_location, PLUS_EXPR,
15425                                     integer_type_node,
15426                                     parm_max,
15427                                     integer_one_node);
15428           else if (arg_cst && !parm_cst)
15429             arg_max = fold_build2_loc (input_location, PLUS_EXPR,
15430                                    integer_type_node,
15431                                    arg_max,
15432                                    integer_one_node);
15433
15434           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
15435             return 1;
15436         }
15437       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15438                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
15439
15440     case REAL_TYPE:
15441     case COMPLEX_TYPE:
15442     case VECTOR_TYPE:
15443     case INTEGER_TYPE:
15444     case BOOLEAN_TYPE:
15445     case ENUMERAL_TYPE:
15446     case VOID_TYPE:
15447       if (TREE_CODE (arg) != TREE_CODE (parm))
15448         return 1;
15449
15450       /* We have already checked cv-qualification at the top of the
15451          function.  */
15452       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
15453         return 1;
15454
15455       /* As far as unification is concerned, this wins.  Later checks
15456          will invalidate it if necessary.  */
15457       return 0;
15458
15459       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
15460       /* Type INTEGER_CST can come from ordinary constant template args.  */
15461     case INTEGER_CST:
15462       while (TREE_CODE (arg) == NOP_EXPR)
15463         arg = TREE_OPERAND (arg, 0);
15464
15465       if (TREE_CODE (arg) != INTEGER_CST)
15466         return 1;
15467       return !tree_int_cst_equal (parm, arg);
15468
15469     case TREE_VEC:
15470       {
15471         int i;
15472         if (TREE_CODE (arg) != TREE_VEC)
15473           return 1;
15474         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
15475           return 1;
15476         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
15477           if (unify (tparms, targs,
15478                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
15479                      UNIFY_ALLOW_NONE))
15480             return 1;
15481         return 0;
15482       }
15483
15484     case RECORD_TYPE:
15485     case UNION_TYPE:
15486       if (TREE_CODE (arg) != TREE_CODE (parm))
15487         return 1;
15488
15489       if (TYPE_PTRMEMFUNC_P (parm))
15490         {
15491           if (!TYPE_PTRMEMFUNC_P (arg))
15492             return 1;
15493
15494           return unify (tparms, targs,
15495                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
15496                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
15497                         strict);
15498         }
15499
15500       if (CLASSTYPE_TEMPLATE_INFO (parm))
15501         {
15502           tree t = NULL_TREE;
15503
15504           if (strict_in & UNIFY_ALLOW_DERIVED)
15505             {
15506               /* First, we try to unify the PARM and ARG directly.  */
15507               t = try_class_unification (tparms, targs,
15508                                          parm, arg);
15509
15510               if (!t)
15511                 {
15512                   /* Fallback to the special case allowed in
15513                      [temp.deduct.call]:
15514
15515                        If P is a class, and P has the form
15516                        template-id, then A can be a derived class of
15517                        the deduced A.  Likewise, if P is a pointer to
15518                        a class of the form template-id, A can be a
15519                        pointer to a derived class pointed to by the
15520                        deduced A.  */
15521                   t = get_template_base (tparms, targs, parm, arg);
15522
15523                   if (!t)
15524                     return 1;
15525                 }
15526             }
15527           else if (CLASSTYPE_TEMPLATE_INFO (arg)
15528                    && (CLASSTYPE_TI_TEMPLATE (parm)
15529                        == CLASSTYPE_TI_TEMPLATE (arg)))
15530             /* Perhaps PARM is something like S<U> and ARG is S<int>.
15531                Then, we should unify `int' and `U'.  */
15532             t = arg;
15533           else
15534             /* There's no chance of unification succeeding.  */
15535             return 1;
15536
15537           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
15538                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
15539         }
15540       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
15541         return 1;
15542       return 0;
15543
15544     case METHOD_TYPE:
15545     case FUNCTION_TYPE:
15546       {
15547         unsigned int nargs;
15548         tree *args;
15549         tree a;
15550         unsigned int i;
15551
15552         if (TREE_CODE (arg) != TREE_CODE (parm))
15553           return 1;
15554
15555         /* CV qualifications for methods can never be deduced, they must
15556            match exactly.  We need to check them explicitly here,
15557            because type_unification_real treats them as any other
15558            cv-qualified parameter.  */
15559         if (TREE_CODE (parm) == METHOD_TYPE
15560             && (!check_cv_quals_for_unify
15561                 (UNIFY_ALLOW_NONE,
15562                  TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
15563                  TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
15564           return 1;
15565
15566         if (unify (tparms, targs, TREE_TYPE (parm),
15567                    TREE_TYPE (arg), UNIFY_ALLOW_NONE))
15568           return 1;
15569
15570         nargs = list_length (TYPE_ARG_TYPES (arg));
15571         args = XALLOCAVEC (tree, nargs);
15572         for (a = TYPE_ARG_TYPES (arg), i = 0;
15573              a != NULL_TREE && a != void_list_node;
15574              a = TREE_CHAIN (a), ++i)
15575           args[i] = TREE_VALUE (a);
15576         nargs = i;
15577
15578         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
15579                                       args, nargs, 1, DEDUCE_EXACT,
15580                                       LOOKUP_NORMAL);
15581       }
15582
15583     case OFFSET_TYPE:
15584       /* Unify a pointer to member with a pointer to member function, which
15585          deduces the type of the member as a function type. */
15586       if (TYPE_PTRMEMFUNC_P (arg))
15587         {
15588           tree method_type;
15589           tree fntype;
15590
15591           /* Check top-level cv qualifiers */
15592           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
15593             return 1;
15594
15595           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
15596                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
15597             return 1;
15598
15599           /* Determine the type of the function we are unifying against. */
15600           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
15601           fntype =
15602             build_function_type (TREE_TYPE (method_type),
15603                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
15604
15605           /* Extract the cv-qualifiers of the member function from the
15606              implicit object parameter and place them on the function
15607              type to be restored later. */
15608           fntype = apply_memfn_quals (fntype, type_memfn_quals (method_type));
15609           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
15610         }
15611
15612       if (TREE_CODE (arg) != OFFSET_TYPE)
15613         return 1;
15614       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
15615                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
15616         return 1;
15617       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15618                     strict);
15619
15620     case CONST_DECL:
15621       if (DECL_TEMPLATE_PARM_P (parm))
15622         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
15623       if (arg != integral_constant_value (parm))
15624         return 1;
15625       return 0;
15626
15627     case FIELD_DECL:
15628     case TEMPLATE_DECL:
15629       /* Matched cases are handled by the ARG == PARM test above.  */
15630       return 1;
15631
15632     case VAR_DECL:
15633       /* A non-type template parameter that is a variable should be a
15634          an integral constant, in which case, it whould have been
15635          folded into its (constant) value. So we should not be getting
15636          a variable here.  */
15637       gcc_unreachable ();
15638
15639     case TYPE_ARGUMENT_PACK:
15640     case NONTYPE_ARGUMENT_PACK:
15641       {
15642         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
15643         tree packed_args = ARGUMENT_PACK_ARGS (arg);
15644         int i, len = TREE_VEC_LENGTH (packed_parms);
15645         int argslen = TREE_VEC_LENGTH (packed_args);
15646         int parm_variadic_p = 0;
15647
15648         for (i = 0; i < len; ++i)
15649           {
15650             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
15651               {
15652                 if (i == len - 1)
15653                   /* We can unify against something with a trailing
15654                      parameter pack.  */
15655                   parm_variadic_p = 1;
15656                 else
15657                   /* Since there is something following the pack
15658                      expansion, we cannot unify this template argument
15659                      list.  */
15660                   return 0;
15661               }
15662           }
15663           
15664
15665         /* If we don't have enough arguments to satisfy the parameters
15666            (not counting the pack expression at the end), or we have
15667            too many arguments for a parameter list that doesn't end in
15668            a pack expression, we can't unify.  */
15669         if (argslen < (len - parm_variadic_p)
15670             || (argslen > len && !parm_variadic_p))
15671           return 1;
15672
15673         /* Unify all of the parameters that precede the (optional)
15674            pack expression.  */
15675         for (i = 0; i < len - parm_variadic_p; ++i)
15676           {
15677             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
15678                        TREE_VEC_ELT (packed_args, i), strict))
15679               return 1;
15680           }
15681
15682         if (parm_variadic_p)
15683           return unify_pack_expansion (tparms, targs, 
15684                                        packed_parms, packed_args,
15685                                        strict, /*call_args_p=*/false,
15686                                        /*subr=*/false);
15687         return 0;
15688       }
15689
15690       break;
15691
15692     case TYPEOF_TYPE:
15693     case DECLTYPE_TYPE:
15694       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
15695          nodes.  */
15696       return 0;
15697
15698     case ERROR_MARK:
15699       /* Unification fails if we hit an error node.  */
15700       return 1;
15701
15702     default:
15703       /* An unresolved overload is a nondeduced context.  */
15704       if (type_unknown_p (parm))
15705         return 0;
15706       gcc_assert (EXPR_P (parm));
15707
15708       /* We must be looking at an expression.  This can happen with
15709          something like:
15710
15711            template <int I>
15712            void foo(S<I>, S<I + 2>);
15713
15714          This is a "nondeduced context":
15715
15716            [deduct.type]
15717
15718            The nondeduced contexts are:
15719
15720            --A type that is a template-id in which one or more of
15721              the template-arguments is an expression that references
15722              a template-parameter.
15723
15724          In these cases, we assume deduction succeeded, but don't
15725          actually infer any unifications.  */
15726
15727       if (!uses_template_parms (parm)
15728           && !template_args_equal (parm, arg))
15729         return 1;
15730       else
15731         return 0;
15732     }
15733 }
15734 \f
15735 /* Note that DECL can be defined in this translation unit, if
15736    required.  */
15737
15738 static void
15739 mark_definable (tree decl)
15740 {
15741   tree clone;
15742   DECL_NOT_REALLY_EXTERN (decl) = 1;
15743   FOR_EACH_CLONE (clone, decl)
15744     DECL_NOT_REALLY_EXTERN (clone) = 1;
15745 }
15746
15747 /* Called if RESULT is explicitly instantiated, or is a member of an
15748    explicitly instantiated class.  */
15749
15750 void
15751 mark_decl_instantiated (tree result, int extern_p)
15752 {
15753   SET_DECL_EXPLICIT_INSTANTIATION (result);
15754
15755   /* If this entity has already been written out, it's too late to
15756      make any modifications.  */
15757   if (TREE_ASM_WRITTEN (result))
15758     return;
15759
15760   if (TREE_CODE (result) != FUNCTION_DECL)
15761     /* The TREE_PUBLIC flag for function declarations will have been
15762        set correctly by tsubst.  */
15763     TREE_PUBLIC (result) = 1;
15764
15765   /* This might have been set by an earlier implicit instantiation.  */
15766   DECL_COMDAT (result) = 0;
15767
15768   if (extern_p)
15769     DECL_NOT_REALLY_EXTERN (result) = 0;
15770   else
15771     {
15772       mark_definable (result);
15773       /* Always make artificials weak.  */
15774       if (DECL_ARTIFICIAL (result) && flag_weak)
15775         comdat_linkage (result);
15776       /* For WIN32 we also want to put explicit instantiations in
15777          linkonce sections.  */
15778       else if (TREE_PUBLIC (result))
15779         maybe_make_one_only (result);
15780     }
15781
15782   /* If EXTERN_P, then this function will not be emitted -- unless
15783      followed by an explicit instantiation, at which point its linkage
15784      will be adjusted.  If !EXTERN_P, then this function will be
15785      emitted here.  In neither circumstance do we want
15786      import_export_decl to adjust the linkage.  */
15787   DECL_INTERFACE_KNOWN (result) = 1;
15788 }
15789
15790 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
15791    important template arguments.  If any are missing, we check whether
15792    they're important by using error_mark_node for substituting into any
15793    args that were used for partial ordering (the ones between ARGS and END)
15794    and seeing if it bubbles up.  */
15795
15796 static bool
15797 check_undeduced_parms (tree targs, tree args, tree end)
15798 {
15799   bool found = false;
15800   int i;
15801   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
15802     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
15803       {
15804         found = true;
15805         TREE_VEC_ELT (targs, i) = error_mark_node;
15806       }
15807   if (found)
15808     {
15809       for (; args != end; args = TREE_CHAIN (args))
15810         {
15811           tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
15812           if (substed == error_mark_node)
15813             return true;
15814         }
15815     }
15816   return false;
15817 }
15818
15819 /* Given two function templates PAT1 and PAT2, return:
15820
15821    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
15822    -1 if PAT2 is more specialized than PAT1.
15823    0 if neither is more specialized.
15824
15825    LEN indicates the number of parameters we should consider
15826    (defaulted parameters should not be considered).
15827
15828    The 1998 std underspecified function template partial ordering, and
15829    DR214 addresses the issue.  We take pairs of arguments, one from
15830    each of the templates, and deduce them against each other.  One of
15831    the templates will be more specialized if all the *other*
15832    template's arguments deduce against its arguments and at least one
15833    of its arguments *does* *not* deduce against the other template's
15834    corresponding argument.  Deduction is done as for class templates.
15835    The arguments used in deduction have reference and top level cv
15836    qualifiers removed.  Iff both arguments were originally reference
15837    types *and* deduction succeeds in both directions, the template
15838    with the more cv-qualified argument wins for that pairing (if
15839    neither is more cv-qualified, they both are equal).  Unlike regular
15840    deduction, after all the arguments have been deduced in this way,
15841    we do *not* verify the deduced template argument values can be
15842    substituted into non-deduced contexts.
15843
15844    The logic can be a bit confusing here, because we look at deduce1 and
15845    targs1 to see if pat2 is at least as specialized, and vice versa; if we
15846    can find template arguments for pat1 to make arg1 look like arg2, that
15847    means that arg2 is at least as specialized as arg1.  */
15848
15849 int
15850 more_specialized_fn (tree pat1, tree pat2, int len)
15851 {
15852   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
15853   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
15854   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
15855   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
15856   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
15857   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
15858   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
15859   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
15860   tree origs1, origs2;
15861   bool lose1 = false;
15862   bool lose2 = false;
15863
15864   /* Remove the this parameter from non-static member functions.  If
15865      one is a non-static member function and the other is not a static
15866      member function, remove the first parameter from that function
15867      also.  This situation occurs for operator functions where we
15868      locate both a member function (with this pointer) and non-member
15869      operator (with explicit first operand).  */
15870   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
15871     {
15872       len--; /* LEN is the number of significant arguments for DECL1 */
15873       args1 = TREE_CHAIN (args1);
15874       if (!DECL_STATIC_FUNCTION_P (decl2))
15875         args2 = TREE_CHAIN (args2);
15876     }
15877   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
15878     {
15879       args2 = TREE_CHAIN (args2);
15880       if (!DECL_STATIC_FUNCTION_P (decl1))
15881         {
15882           len--;
15883           args1 = TREE_CHAIN (args1);
15884         }
15885     }
15886
15887   /* If only one is a conversion operator, they are unordered.  */
15888   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
15889     return 0;
15890
15891   /* Consider the return type for a conversion function */
15892   if (DECL_CONV_FN_P (decl1))
15893     {
15894       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
15895       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
15896       len++;
15897     }
15898
15899   processing_template_decl++;
15900
15901   origs1 = args1;
15902   origs2 = args2;
15903
15904   while (len--
15905          /* Stop when an ellipsis is seen.  */
15906          && args1 != NULL_TREE && args2 != NULL_TREE)
15907     {
15908       tree arg1 = TREE_VALUE (args1);
15909       tree arg2 = TREE_VALUE (args2);
15910       int deduce1, deduce2;
15911       int quals1 = -1;
15912       int quals2 = -1;
15913
15914       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
15915           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15916         {
15917           /* When both arguments are pack expansions, we need only
15918              unify the patterns themselves.  */
15919           arg1 = PACK_EXPANSION_PATTERN (arg1);
15920           arg2 = PACK_EXPANSION_PATTERN (arg2);
15921
15922           /* This is the last comparison we need to do.  */
15923           len = 0;
15924         }
15925
15926       if (TREE_CODE (arg1) == REFERENCE_TYPE)
15927         {
15928           arg1 = TREE_TYPE (arg1);
15929           quals1 = cp_type_quals (arg1);
15930         }
15931
15932       if (TREE_CODE (arg2) == REFERENCE_TYPE)
15933         {
15934           arg2 = TREE_TYPE (arg2);
15935           quals2 = cp_type_quals (arg2);
15936         }
15937
15938       if ((quals1 < 0) != (quals2 < 0))
15939         {
15940           /* Only of the args is a reference, see if we should apply
15941              array/function pointer decay to it.  This is not part of
15942              DR214, but is, IMHO, consistent with the deduction rules
15943              for the function call itself, and with our earlier
15944              implementation of the underspecified partial ordering
15945              rules.  (nathan).  */
15946           if (quals1 >= 0)
15947             {
15948               switch (TREE_CODE (arg1))
15949                 {
15950                 case ARRAY_TYPE:
15951                   arg1 = TREE_TYPE (arg1);
15952                   /* FALLTHROUGH. */
15953                 case FUNCTION_TYPE:
15954                   arg1 = build_pointer_type (arg1);
15955                   break;
15956
15957                 default:
15958                   break;
15959                 }
15960             }
15961           else
15962             {
15963               switch (TREE_CODE (arg2))
15964                 {
15965                 case ARRAY_TYPE:
15966                   arg2 = TREE_TYPE (arg2);
15967                   /* FALLTHROUGH. */
15968                 case FUNCTION_TYPE:
15969                   arg2 = build_pointer_type (arg2);
15970                   break;
15971
15972                 default:
15973                   break;
15974                 }
15975             }
15976         }
15977
15978       arg1 = TYPE_MAIN_VARIANT (arg1);
15979       arg2 = TYPE_MAIN_VARIANT (arg2);
15980
15981       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
15982         {
15983           int i, len2 = list_length (args2);
15984           tree parmvec = make_tree_vec (1);
15985           tree argvec = make_tree_vec (len2);
15986           tree ta = args2;
15987
15988           /* Setup the parameter vector, which contains only ARG1.  */
15989           TREE_VEC_ELT (parmvec, 0) = arg1;
15990
15991           /* Setup the argument vector, which contains the remaining
15992              arguments.  */
15993           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
15994             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
15995
15996           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
15997                                            argvec, UNIFY_ALLOW_NONE, 
15998                                            /*call_args_p=*/false, 
15999                                            /*subr=*/0);
16000
16001           /* We cannot deduce in the other direction, because ARG1 is
16002              a pack expansion but ARG2 is not.  */
16003           deduce2 = 0;
16004         }
16005       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
16006         {
16007           int i, len1 = list_length (args1);
16008           tree parmvec = make_tree_vec (1);
16009           tree argvec = make_tree_vec (len1);
16010           tree ta = args1;
16011
16012           /* Setup the parameter vector, which contains only ARG1.  */
16013           TREE_VEC_ELT (parmvec, 0) = arg2;
16014
16015           /* Setup the argument vector, which contains the remaining
16016              arguments.  */
16017           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
16018             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
16019
16020           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
16021                                            argvec, UNIFY_ALLOW_NONE, 
16022                                            /*call_args_p=*/false, 
16023                                            /*subr=*/0);
16024
16025           /* We cannot deduce in the other direction, because ARG2 is
16026              a pack expansion but ARG1 is not.*/
16027           deduce1 = 0;
16028         }
16029
16030       else
16031         {
16032           /* The normal case, where neither argument is a pack
16033              expansion.  */
16034           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
16035           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
16036         }
16037
16038       /* If we couldn't deduce arguments for tparms1 to make arg1 match
16039          arg2, then arg2 is not as specialized as arg1.  */
16040       if (!deduce1)
16041         lose2 = true;
16042       if (!deduce2)
16043         lose1 = true;
16044
16045       /* "If, for a given type, deduction succeeds in both directions
16046          (i.e., the types are identical after the transformations above)
16047          and if the type from the argument template is more cv-qualified
16048          than the type from the parameter template (as described above)
16049          that type is considered to be more specialized than the other. If
16050          neither type is more cv-qualified than the other then neither type
16051          is more specialized than the other."  */
16052
16053       if (deduce1 && deduce2
16054           && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
16055         {
16056           if ((quals1 & quals2) == quals2)
16057             lose2 = true;
16058           if ((quals1 & quals2) == quals1)
16059             lose1 = true;
16060         }
16061
16062       if (lose1 && lose2)
16063         /* We've failed to deduce something in either direction.
16064            These must be unordered.  */
16065         break;
16066
16067       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
16068           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
16069         /* We have already processed all of the arguments in our
16070            handing of the pack expansion type.  */
16071         len = 0;
16072
16073       args1 = TREE_CHAIN (args1);
16074       args2 = TREE_CHAIN (args2);
16075     }
16076
16077   /* "In most cases, all template parameters must have values in order for
16078      deduction to succeed, but for partial ordering purposes a template
16079      parameter may remain without a value provided it is not used in the
16080      types being used for partial ordering."
16081
16082      Thus, if we are missing any of the targs1 we need to substitute into
16083      origs1, then pat2 is not as specialized as pat1.  This can happen when
16084      there is a nondeduced context.  */
16085   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
16086     lose2 = true;
16087   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
16088     lose1 = true;
16089
16090   processing_template_decl--;
16091
16092   /* All things being equal, if the next argument is a pack expansion
16093      for one function but not for the other, prefer the
16094      non-variadic function.  FIXME this is bogus; see c++/41958.  */
16095   if (lose1 == lose2
16096       && args1 && TREE_VALUE (args1)
16097       && args2 && TREE_VALUE (args2))
16098     {
16099       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
16100       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
16101     }
16102
16103   if (lose1 == lose2)
16104     return 0;
16105   else if (!lose1)
16106     return 1;
16107   else
16108     return -1;
16109 }
16110
16111 /* Determine which of two partial specializations is more specialized.
16112
16113    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
16114    to the first partial specialization.  The TREE_VALUE is the
16115    innermost set of template parameters for the partial
16116    specialization.  PAT2 is similar, but for the second template.
16117
16118    Return 1 if the first partial specialization is more specialized;
16119    -1 if the second is more specialized; 0 if neither is more
16120    specialized.
16121
16122    See [temp.class.order] for information about determining which of
16123    two templates is more specialized.  */
16124
16125 static int
16126 more_specialized_class (tree pat1, tree pat2)
16127 {
16128   tree targs;
16129   tree tmpl1, tmpl2;
16130   int winner = 0;
16131   bool any_deductions = false;
16132
16133   tmpl1 = TREE_TYPE (pat1);
16134   tmpl2 = TREE_TYPE (pat2);
16135
16136   /* Just like what happens for functions, if we are ordering between
16137      different class template specializations, we may encounter dependent
16138      types in the arguments, and we need our dependency check functions
16139      to behave correctly.  */
16140   ++processing_template_decl;
16141   targs = get_class_bindings (TREE_VALUE (pat1),
16142                               CLASSTYPE_TI_ARGS (tmpl1),
16143                               CLASSTYPE_TI_ARGS (tmpl2));
16144   if (targs)
16145     {
16146       --winner;
16147       any_deductions = true;
16148     }
16149
16150   targs = get_class_bindings (TREE_VALUE (pat2),
16151                               CLASSTYPE_TI_ARGS (tmpl2),
16152                               CLASSTYPE_TI_ARGS (tmpl1));
16153   if (targs)
16154     {
16155       ++winner;
16156       any_deductions = true;
16157     }
16158   --processing_template_decl;
16159
16160   /* In the case of a tie where at least one of the class templates
16161      has a parameter pack at the end, the template with the most
16162      non-packed parameters wins.  */
16163   if (winner == 0
16164       && any_deductions
16165       && (template_args_variadic_p (TREE_PURPOSE (pat1))
16166           || template_args_variadic_p (TREE_PURPOSE (pat2))))
16167     {
16168       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
16169       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
16170       int len1 = TREE_VEC_LENGTH (args1);
16171       int len2 = TREE_VEC_LENGTH (args2);
16172
16173       /* We don't count the pack expansion at the end.  */
16174       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
16175         --len1;
16176       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
16177         --len2;
16178
16179       if (len1 > len2)
16180         return 1;
16181       else if (len1 < len2)
16182         return -1;
16183     }
16184
16185   return winner;
16186 }
16187
16188 /* Return the template arguments that will produce the function signature
16189    DECL from the function template FN, with the explicit template
16190    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
16191    also match.  Return NULL_TREE if no satisfactory arguments could be
16192    found.  */
16193
16194 static tree
16195 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
16196 {
16197   int ntparms = DECL_NTPARMS (fn);
16198   tree targs = make_tree_vec (ntparms);
16199   tree decl_type;
16200   tree decl_arg_types;
16201   tree *args;
16202   unsigned int nargs, ix;
16203   tree arg;
16204
16205   /* Substitute the explicit template arguments into the type of DECL.
16206      The call to fn_type_unification will handle substitution into the
16207      FN.  */
16208   decl_type = TREE_TYPE (decl);
16209   if (explicit_args && uses_template_parms (decl_type))
16210     {
16211       tree tmpl;
16212       tree converted_args;
16213
16214       if (DECL_TEMPLATE_INFO (decl))
16215         tmpl = DECL_TI_TEMPLATE (decl);
16216       else
16217         /* We can get here for some invalid specializations.  */
16218         return NULL_TREE;
16219
16220       converted_args
16221         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
16222                                  explicit_args, NULL_TREE,
16223                                  tf_none,
16224                                  /*require_all_args=*/false,
16225                                  /*use_default_args=*/false);
16226       if (converted_args == error_mark_node)
16227         return NULL_TREE;
16228
16229       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
16230       if (decl_type == error_mark_node)
16231         return NULL_TREE;
16232     }
16233
16234   /* Never do unification on the 'this' parameter.  */
16235   decl_arg_types = skip_artificial_parms_for (decl, 
16236                                               TYPE_ARG_TYPES (decl_type));
16237
16238   nargs = list_length (decl_arg_types);
16239   args = XALLOCAVEC (tree, nargs);
16240   for (arg = decl_arg_types, ix = 0;
16241        arg != NULL_TREE && arg != void_list_node;
16242        arg = TREE_CHAIN (arg), ++ix)
16243     args[ix] = TREE_VALUE (arg);
16244
16245   if (fn_type_unification (fn, explicit_args, targs,
16246                            args, ix,
16247                            (check_rettype || DECL_CONV_FN_P (fn)
16248                             ? TREE_TYPE (decl_type) : NULL_TREE),
16249                            DEDUCE_EXACT, LOOKUP_NORMAL))
16250     return NULL_TREE;
16251
16252   return targs;
16253 }
16254
16255 /* Return the innermost template arguments that, when applied to a
16256    template specialization whose innermost template parameters are
16257    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
16258    ARGS.
16259
16260    For example, suppose we have:
16261
16262      template <class T, class U> struct S {};
16263      template <class T> struct S<T*, int> {};
16264
16265    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
16266    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
16267    int}.  The resulting vector will be {double}, indicating that `T'
16268    is bound to `double'.  */
16269
16270 static tree
16271 get_class_bindings (tree tparms, tree spec_args, tree args)
16272 {
16273   int i, ntparms = TREE_VEC_LENGTH (tparms);
16274   tree deduced_args;
16275   tree innermost_deduced_args;
16276
16277   innermost_deduced_args = make_tree_vec (ntparms);
16278   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
16279     {
16280       deduced_args = copy_node (args);
16281       SET_TMPL_ARGS_LEVEL (deduced_args,
16282                            TMPL_ARGS_DEPTH (deduced_args),
16283                            innermost_deduced_args);
16284     }
16285   else
16286     deduced_args = innermost_deduced_args;
16287
16288   if (unify (tparms, deduced_args,
16289              INNERMOST_TEMPLATE_ARGS (spec_args),
16290              INNERMOST_TEMPLATE_ARGS (args),
16291              UNIFY_ALLOW_NONE))
16292     return NULL_TREE;
16293
16294   for (i =  0; i < ntparms; ++i)
16295     if (! TREE_VEC_ELT (innermost_deduced_args, i))
16296       return NULL_TREE;
16297
16298   /* Verify that nondeduced template arguments agree with the type
16299      obtained from argument deduction.
16300
16301      For example:
16302
16303        struct A { typedef int X; };
16304        template <class T, class U> struct C {};
16305        template <class T> struct C<T, typename T::X> {};
16306
16307      Then with the instantiation `C<A, int>', we can deduce that
16308      `T' is `A' but unify () does not check whether `typename T::X'
16309      is `int'.  */
16310   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
16311   if (spec_args == error_mark_node
16312       /* We only need to check the innermost arguments; the other
16313          arguments will always agree.  */
16314       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
16315                               INNERMOST_TEMPLATE_ARGS (args)))
16316     return NULL_TREE;
16317
16318   /* Now that we have bindings for all of the template arguments,
16319      ensure that the arguments deduced for the template template
16320      parameters have compatible template parameter lists.  See the use
16321      of template_template_parm_bindings_ok_p in fn_type_unification
16322      for more information.  */
16323   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
16324     return NULL_TREE;
16325
16326   return deduced_args;
16327 }
16328
16329 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
16330    Return the TREE_LIST node with the most specialized template, if
16331    any.  If there is no most specialized template, the error_mark_node
16332    is returned.
16333
16334    Note that this function does not look at, or modify, the
16335    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
16336    returned is one of the elements of INSTANTIATIONS, callers may
16337    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
16338    and retrieve it from the value returned.  */
16339
16340 tree
16341 most_specialized_instantiation (tree templates)
16342 {
16343   tree fn, champ;
16344
16345   ++processing_template_decl;
16346
16347   champ = templates;
16348   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
16349     {
16350       int fate = 0;
16351
16352       if (get_bindings (TREE_VALUE (champ),
16353                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
16354                         NULL_TREE, /*check_ret=*/false))
16355         fate--;
16356
16357       if (get_bindings (TREE_VALUE (fn),
16358                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
16359                         NULL_TREE, /*check_ret=*/false))
16360         fate++;
16361
16362       if (fate == -1)
16363         champ = fn;
16364       else if (!fate)
16365         {
16366           /* Equally specialized, move to next function.  If there
16367              is no next function, nothing's most specialized.  */
16368           fn = TREE_CHAIN (fn);
16369           champ = fn;
16370           if (!fn)
16371             break;
16372         }
16373     }
16374
16375   if (champ)
16376     /* Now verify that champ is better than everything earlier in the
16377        instantiation list.  */
16378     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
16379       if (get_bindings (TREE_VALUE (champ),
16380                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
16381                         NULL_TREE, /*check_ret=*/false)
16382           || !get_bindings (TREE_VALUE (fn),
16383                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
16384                             NULL_TREE, /*check_ret=*/false))
16385         {
16386           champ = NULL_TREE;
16387           break;
16388         }
16389
16390   processing_template_decl--;
16391
16392   if (!champ)
16393     return error_mark_node;
16394
16395   return champ;
16396 }
16397
16398 /* If DECL is a specialization of some template, return the most
16399    general such template.  Otherwise, returns NULL_TREE.
16400
16401    For example, given:
16402
16403      template <class T> struct S { template <class U> void f(U); };
16404
16405    if TMPL is `template <class U> void S<int>::f(U)' this will return
16406    the full template.  This function will not trace past partial
16407    specializations, however.  For example, given in addition:
16408
16409      template <class T> struct S<T*> { template <class U> void f(U); };
16410
16411    if TMPL is `template <class U> void S<int*>::f(U)' this will return
16412    `template <class T> template <class U> S<T*>::f(U)'.  */
16413
16414 tree
16415 most_general_template (tree decl)
16416 {
16417   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
16418      an immediate specialization.  */
16419   if (TREE_CODE (decl) == FUNCTION_DECL)
16420     {
16421       if (DECL_TEMPLATE_INFO (decl)) {
16422         decl = DECL_TI_TEMPLATE (decl);
16423
16424         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
16425            template friend.  */
16426         if (TREE_CODE (decl) != TEMPLATE_DECL)
16427           return NULL_TREE;
16428       } else
16429         return NULL_TREE;
16430     }
16431
16432   /* Look for more and more general templates.  */
16433   while (DECL_TEMPLATE_INFO (decl))
16434     {
16435       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
16436          (See cp-tree.h for details.)  */
16437       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
16438         break;
16439
16440       if (CLASS_TYPE_P (TREE_TYPE (decl))
16441           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
16442         break;
16443
16444       /* Stop if we run into an explicitly specialized class template.  */
16445       if (!DECL_NAMESPACE_SCOPE_P (decl)
16446           && DECL_CONTEXT (decl)
16447           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
16448         break;
16449
16450       decl = DECL_TI_TEMPLATE (decl);
16451     }
16452
16453   return decl;
16454 }
16455
16456 /* Return the most specialized of the class template partial
16457    specializations of TMPL which can produce TYPE, a specialization of
16458    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
16459    a _TYPE node corresponding to the partial specialization, while the
16460    TREE_PURPOSE is the set of template arguments that must be
16461    substituted into the TREE_TYPE in order to generate TYPE.
16462
16463    If the choice of partial specialization is ambiguous, a diagnostic
16464    is issued, and the error_mark_node is returned.  If there are no
16465    partial specializations of TMPL matching TYPE, then NULL_TREE is
16466    returned.  */
16467
16468 static tree
16469 most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
16470 {
16471   tree list = NULL_TREE;
16472   tree t;
16473   tree champ;
16474   int fate;
16475   bool ambiguous_p;
16476   tree args;
16477   tree outer_args = NULL_TREE;
16478
16479   tmpl = most_general_template (tmpl);
16480   args = CLASSTYPE_TI_ARGS (type);
16481
16482   /* For determining which partial specialization to use, only the
16483      innermost args are interesting.  */
16484   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
16485     {
16486       outer_args = strip_innermost_template_args (args, 1);
16487       args = INNERMOST_TEMPLATE_ARGS (args);
16488     }
16489
16490   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
16491     {
16492       tree partial_spec_args;
16493       tree spec_args;
16494       tree parms = TREE_VALUE (t);
16495
16496       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
16497
16498       ++processing_template_decl;
16499
16500       if (outer_args)
16501         {
16502           int i;
16503
16504           /* Discard the outer levels of args, and then substitute in the
16505              template args from the enclosing class.  */
16506           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
16507           partial_spec_args = tsubst_template_args
16508             (partial_spec_args, outer_args, tf_none, NULL_TREE);
16509
16510           /* PARMS already refers to just the innermost parms, but the
16511              template parms in partial_spec_args had their levels lowered
16512              by tsubst, so we need to do the same for the parm list.  We
16513              can't just tsubst the TREE_VEC itself, as tsubst wants to
16514              treat a TREE_VEC as an argument vector.  */
16515           parms = copy_node (parms);
16516           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
16517             TREE_VEC_ELT (parms, i) =
16518               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
16519
16520         }
16521
16522       partial_spec_args =
16523           coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
16524                                  add_to_template_args (outer_args,
16525                                                        partial_spec_args),
16526                                  tmpl, tf_none,
16527                                  /*require_all_args=*/true,
16528                                  /*use_default_args=*/true);
16529
16530       --processing_template_decl;
16531
16532       if (partial_spec_args == error_mark_node)
16533         return error_mark_node;
16534
16535       spec_args = get_class_bindings (parms,
16536                                       partial_spec_args,
16537                                       args);
16538       if (spec_args)
16539         {
16540           if (outer_args)
16541             spec_args = add_to_template_args (outer_args, spec_args);
16542           list = tree_cons (spec_args, TREE_VALUE (t), list);
16543           TREE_TYPE (list) = TREE_TYPE (t);
16544         }
16545     }
16546
16547   if (! list)
16548     return NULL_TREE;
16549
16550   ambiguous_p = false;
16551   t = list;
16552   champ = t;
16553   t = TREE_CHAIN (t);
16554   for (; t; t = TREE_CHAIN (t))
16555     {
16556       fate = more_specialized_class (champ, t);
16557       if (fate == 1)
16558         ;
16559       else
16560         {
16561           if (fate == 0)
16562             {
16563               t = TREE_CHAIN (t);
16564               if (! t)
16565                 {
16566                   ambiguous_p = true;
16567                   break;
16568                 }
16569             }
16570           champ = t;
16571         }
16572     }
16573
16574   if (!ambiguous_p)
16575     for (t = list; t && t != champ; t = TREE_CHAIN (t))
16576       {
16577         fate = more_specialized_class (champ, t);
16578         if (fate != 1)
16579           {
16580             ambiguous_p = true;
16581             break;
16582           }
16583       }
16584
16585   if (ambiguous_p)
16586     {
16587       const char *str;
16588       char *spaces = NULL;
16589       if (!(complain & tf_error))
16590         return error_mark_node;
16591       error ("ambiguous class template instantiation for %q#T", type);
16592       str = ngettext ("candidate is:", "candidates are:", list_length (list));
16593       for (t = list; t; t = TREE_CHAIN (t))
16594         {
16595           error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
16596           spaces = spaces ? spaces : get_spaces (str);
16597         }
16598       free (spaces);
16599       return error_mark_node;
16600     }
16601
16602   return champ;
16603 }
16604
16605 /* Explicitly instantiate DECL.  */
16606
16607 void
16608 do_decl_instantiation (tree decl, tree storage)
16609 {
16610   tree result = NULL_TREE;
16611   int extern_p = 0;
16612
16613   if (!decl || decl == error_mark_node)
16614     /* An error occurred, for which grokdeclarator has already issued
16615        an appropriate message.  */
16616     return;
16617   else if (! DECL_LANG_SPECIFIC (decl))
16618     {
16619       error ("explicit instantiation of non-template %q#D", decl);
16620       return;
16621     }
16622   else if (TREE_CODE (decl) == VAR_DECL)
16623     {
16624       /* There is an asymmetry here in the way VAR_DECLs and
16625          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
16626          the latter, the DECL we get back will be marked as a
16627          template instantiation, and the appropriate
16628          DECL_TEMPLATE_INFO will be set up.  This does not happen for
16629          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
16630          should handle VAR_DECLs as it currently handles
16631          FUNCTION_DECLs.  */
16632       if (!DECL_CLASS_SCOPE_P (decl))
16633         {
16634           error ("%qD is not a static data member of a class template", decl);
16635           return;
16636         }
16637       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
16638       if (!result || TREE_CODE (result) != VAR_DECL)
16639         {
16640           error ("no matching template for %qD found", decl);
16641           return;
16642         }
16643       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
16644         {
16645           error ("type %qT for explicit instantiation %qD does not match "
16646                  "declared type %qT", TREE_TYPE (result), decl,
16647                  TREE_TYPE (decl));
16648           return;
16649         }
16650     }
16651   else if (TREE_CODE (decl) != FUNCTION_DECL)
16652     {
16653       error ("explicit instantiation of %q#D", decl);
16654       return;
16655     }
16656   else
16657     result = decl;
16658
16659   /* Check for various error cases.  Note that if the explicit
16660      instantiation is valid the RESULT will currently be marked as an
16661      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
16662      until we get here.  */
16663
16664   if (DECL_TEMPLATE_SPECIALIZATION (result))
16665     {
16666       /* DR 259 [temp.spec].
16667
16668          Both an explicit instantiation and a declaration of an explicit
16669          specialization shall not appear in a program unless the explicit
16670          instantiation follows a declaration of the explicit specialization.
16671
16672          For a given set of template parameters, if an explicit
16673          instantiation of a template appears after a declaration of an
16674          explicit specialization for that template, the explicit
16675          instantiation has no effect.  */
16676       return;
16677     }
16678   else if (DECL_EXPLICIT_INSTANTIATION (result))
16679     {
16680       /* [temp.spec]
16681
16682          No program shall explicitly instantiate any template more
16683          than once.
16684
16685          We check DECL_NOT_REALLY_EXTERN so as not to complain when
16686          the first instantiation was `extern' and the second is not,
16687          and EXTERN_P for the opposite case.  */
16688       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
16689         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
16690       /* If an "extern" explicit instantiation follows an ordinary
16691          explicit instantiation, the template is instantiated.  */
16692       if (extern_p)
16693         return;
16694     }
16695   else if (!DECL_IMPLICIT_INSTANTIATION (result))
16696     {
16697       error ("no matching template for %qD found", result);
16698       return;
16699     }
16700   else if (!DECL_TEMPLATE_INFO (result))
16701     {
16702       permerror (input_location, "explicit instantiation of non-template %q#D", result);
16703       return;
16704     }
16705
16706   if (storage == NULL_TREE)
16707     ;
16708   else if (storage == ridpointers[(int) RID_EXTERN])
16709     {
16710       if (!in_system_header && (cxx_dialect == cxx98))
16711         pedwarn (input_location, OPT_pedantic, 
16712                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
16713                  "instantiations");
16714       extern_p = 1;
16715     }
16716   else
16717     error ("storage class %qD applied to template instantiation", storage);
16718
16719   check_explicit_instantiation_namespace (result);
16720   mark_decl_instantiated (result, extern_p);
16721   if (! extern_p)
16722     instantiate_decl (result, /*defer_ok=*/1,
16723                       /*expl_inst_class_mem_p=*/false);
16724 }
16725
16726 static void
16727 mark_class_instantiated (tree t, int extern_p)
16728 {
16729   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
16730   SET_CLASSTYPE_INTERFACE_KNOWN (t);
16731   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
16732   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
16733   if (! extern_p)
16734     {
16735       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
16736       rest_of_type_compilation (t, 1);
16737     }
16738 }
16739
16740 /* Called from do_type_instantiation through binding_table_foreach to
16741    do recursive instantiation for the type bound in ENTRY.  */
16742 static void
16743 bt_instantiate_type_proc (binding_entry entry, void *data)
16744 {
16745   tree storage = *(tree *) data;
16746
16747   if (MAYBE_CLASS_TYPE_P (entry->type)
16748       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
16749     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
16750 }
16751
16752 /* Called from do_type_instantiation to instantiate a member
16753    (a member function or a static member variable) of an
16754    explicitly instantiated class template.  */
16755 static void
16756 instantiate_class_member (tree decl, int extern_p)
16757 {
16758   mark_decl_instantiated (decl, extern_p);
16759   if (! extern_p)
16760     instantiate_decl (decl, /*defer_ok=*/1,
16761                       /*expl_inst_class_mem_p=*/true);
16762 }
16763
16764 /* Perform an explicit instantiation of template class T.  STORAGE, if
16765    non-null, is the RID for extern, inline or static.  COMPLAIN is
16766    nonzero if this is called from the parser, zero if called recursively,
16767    since the standard is unclear (as detailed below).  */
16768
16769 void
16770 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
16771 {
16772   int extern_p = 0;
16773   int nomem_p = 0;
16774   int static_p = 0;
16775   int previous_instantiation_extern_p = 0;
16776
16777   if (TREE_CODE (t) == TYPE_DECL)
16778     t = TREE_TYPE (t);
16779
16780   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
16781     {
16782       error ("explicit instantiation of non-template type %qT", t);
16783       return;
16784     }
16785
16786   complete_type (t);
16787
16788   if (!COMPLETE_TYPE_P (t))
16789     {
16790       if (complain & tf_error)
16791         error ("explicit instantiation of %q#T before definition of template",
16792                t);
16793       return;
16794     }
16795
16796   if (storage != NULL_TREE)
16797     {
16798       if (!in_system_header)
16799         {
16800           if (storage == ridpointers[(int) RID_EXTERN])
16801             {
16802               if (cxx_dialect == cxx98)
16803                 pedwarn (input_location, OPT_pedantic, 
16804                          "ISO C++ 1998 forbids the use of %<extern%> on "
16805                          "explicit instantiations");
16806             }
16807           else
16808             pedwarn (input_location, OPT_pedantic, 
16809                      "ISO C++ forbids the use of %qE"
16810                      " on explicit instantiations", storage);
16811         }
16812
16813       if (storage == ridpointers[(int) RID_INLINE])
16814         nomem_p = 1;
16815       else if (storage == ridpointers[(int) RID_EXTERN])
16816         extern_p = 1;
16817       else if (storage == ridpointers[(int) RID_STATIC])
16818         static_p = 1;
16819       else
16820         {
16821           error ("storage class %qD applied to template instantiation",
16822                  storage);
16823           extern_p = 0;
16824         }
16825     }
16826
16827   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
16828     {
16829       /* DR 259 [temp.spec].
16830
16831          Both an explicit instantiation and a declaration of an explicit
16832          specialization shall not appear in a program unless the explicit
16833          instantiation follows a declaration of the explicit specialization.
16834
16835          For a given set of template parameters, if an explicit
16836          instantiation of a template appears after a declaration of an
16837          explicit specialization for that template, the explicit
16838          instantiation has no effect.  */
16839       return;
16840     }
16841   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
16842     {
16843       /* [temp.spec]
16844
16845          No program shall explicitly instantiate any template more
16846          than once.
16847
16848          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
16849          instantiation was `extern'.  If EXTERN_P then the second is.
16850          These cases are OK.  */
16851       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
16852
16853       if (!previous_instantiation_extern_p && !extern_p
16854           && (complain & tf_error))
16855         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
16856
16857       /* If we've already instantiated the template, just return now.  */
16858       if (!CLASSTYPE_INTERFACE_ONLY (t))
16859         return;
16860     }
16861
16862   check_explicit_instantiation_namespace (TYPE_NAME (t));
16863   mark_class_instantiated (t, extern_p);
16864
16865   if (nomem_p)
16866     return;
16867
16868   {
16869     tree tmp;
16870
16871     /* In contrast to implicit instantiation, where only the
16872        declarations, and not the definitions, of members are
16873        instantiated, we have here:
16874
16875          [temp.explicit]
16876
16877          The explicit instantiation of a class template specialization
16878          implies the instantiation of all of its members not
16879          previously explicitly specialized in the translation unit
16880          containing the explicit instantiation.
16881
16882        Of course, we can't instantiate member template classes, since
16883        we don't have any arguments for them.  Note that the standard
16884        is unclear on whether the instantiation of the members are
16885        *explicit* instantiations or not.  However, the most natural
16886        interpretation is that it should be an explicit instantiation.  */
16887
16888     if (! static_p)
16889       for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
16890         if (TREE_CODE (tmp) == FUNCTION_DECL
16891             && DECL_TEMPLATE_INSTANTIATION (tmp))
16892           instantiate_class_member (tmp, extern_p);
16893
16894     for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
16895       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
16896         instantiate_class_member (tmp, extern_p);
16897
16898     if (CLASSTYPE_NESTED_UTDS (t))
16899       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
16900                              bt_instantiate_type_proc, &storage);
16901   }
16902 }
16903
16904 /* Given a function DECL, which is a specialization of TMPL, modify
16905    DECL to be a re-instantiation of TMPL with the same template
16906    arguments.  TMPL should be the template into which tsubst'ing
16907    should occur for DECL, not the most general template.
16908
16909    One reason for doing this is a scenario like this:
16910
16911      template <class T>
16912      void f(const T&, int i);
16913
16914      void g() { f(3, 7); }
16915
16916      template <class T>
16917      void f(const T& t, const int i) { }
16918
16919    Note that when the template is first instantiated, with
16920    instantiate_template, the resulting DECL will have no name for the
16921    first parameter, and the wrong type for the second.  So, when we go
16922    to instantiate the DECL, we regenerate it.  */
16923
16924 static void
16925 regenerate_decl_from_template (tree decl, tree tmpl)
16926 {
16927   /* The arguments used to instantiate DECL, from the most general
16928      template.  */
16929   tree args;
16930   tree code_pattern;
16931
16932   args = DECL_TI_ARGS (decl);
16933   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
16934
16935   /* Make sure that we can see identifiers, and compute access
16936      correctly.  */
16937   push_access_scope (decl);
16938
16939   if (TREE_CODE (decl) == FUNCTION_DECL)
16940     {
16941       tree decl_parm;
16942       tree pattern_parm;
16943       tree specs;
16944       int args_depth;
16945       int parms_depth;
16946
16947       args_depth = TMPL_ARGS_DEPTH (args);
16948       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
16949       if (args_depth > parms_depth)
16950         args = get_innermost_template_args (args, parms_depth);
16951
16952       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
16953                                               args, tf_error, NULL_TREE);
16954       if (specs)
16955         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
16956                                                     specs);
16957
16958       /* Merge parameter declarations.  */
16959       decl_parm = skip_artificial_parms_for (decl,
16960                                              DECL_ARGUMENTS (decl));
16961       pattern_parm
16962         = skip_artificial_parms_for (code_pattern,
16963                                      DECL_ARGUMENTS (code_pattern));
16964       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
16965         {
16966           tree parm_type;
16967           tree attributes;
16968           
16969           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
16970             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
16971           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
16972                               NULL_TREE);
16973           parm_type = type_decays_to (parm_type);
16974           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
16975             TREE_TYPE (decl_parm) = parm_type;
16976           attributes = DECL_ATTRIBUTES (pattern_parm);
16977           if (DECL_ATTRIBUTES (decl_parm) != attributes)
16978             {
16979               DECL_ATTRIBUTES (decl_parm) = attributes;
16980               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
16981             }
16982           decl_parm = DECL_CHAIN (decl_parm);
16983           pattern_parm = DECL_CHAIN (pattern_parm);
16984         }
16985       /* Merge any parameters that match with the function parameter
16986          pack.  */
16987       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
16988         {
16989           int i, len;
16990           tree expanded_types;
16991           /* Expand the TYPE_PACK_EXPANSION that provides the types for
16992              the parameters in this function parameter pack.  */
16993           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
16994                                                  args, tf_error, NULL_TREE);
16995           len = TREE_VEC_LENGTH (expanded_types);
16996           for (i = 0; i < len; i++)
16997             {
16998               tree parm_type;
16999               tree attributes;
17000           
17001               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
17002                 /* Rename the parameter to include the index.  */
17003                 DECL_NAME (decl_parm) = 
17004                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
17005               parm_type = TREE_VEC_ELT (expanded_types, i);
17006               parm_type = type_decays_to (parm_type);
17007               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
17008                 TREE_TYPE (decl_parm) = parm_type;
17009               attributes = DECL_ATTRIBUTES (pattern_parm);
17010               if (DECL_ATTRIBUTES (decl_parm) != attributes)
17011                 {
17012                   DECL_ATTRIBUTES (decl_parm) = attributes;
17013                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
17014                 }
17015               decl_parm = DECL_CHAIN (decl_parm);
17016             }
17017         }
17018       /* Merge additional specifiers from the CODE_PATTERN.  */
17019       if (DECL_DECLARED_INLINE_P (code_pattern)
17020           && !DECL_DECLARED_INLINE_P (decl))
17021         DECL_DECLARED_INLINE_P (decl) = 1;
17022     }
17023   else if (TREE_CODE (decl) == VAR_DECL)
17024     {
17025       DECL_INITIAL (decl) =
17026         tsubst_expr (DECL_INITIAL (code_pattern), args,
17027                      tf_error, DECL_TI_TEMPLATE (decl),
17028                      /*integral_constant_expression_p=*/false);
17029       if (VAR_HAD_UNKNOWN_BOUND (decl))
17030         TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
17031                                    tf_error, DECL_TI_TEMPLATE (decl));
17032     }
17033   else
17034     gcc_unreachable ();
17035
17036   pop_access_scope (decl);
17037 }
17038
17039 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
17040    substituted to get DECL.  */
17041
17042 tree
17043 template_for_substitution (tree decl)
17044 {
17045   tree tmpl = DECL_TI_TEMPLATE (decl);
17046
17047   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
17048      for the instantiation.  This is not always the most general
17049      template.  Consider, for example:
17050
17051         template <class T>
17052         struct S { template <class U> void f();
17053                    template <> void f<int>(); };
17054
17055      and an instantiation of S<double>::f<int>.  We want TD to be the
17056      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
17057   while (/* An instantiation cannot have a definition, so we need a
17058             more general template.  */
17059          DECL_TEMPLATE_INSTANTIATION (tmpl)
17060            /* We must also deal with friend templates.  Given:
17061
17062                 template <class T> struct S {
17063                   template <class U> friend void f() {};
17064                 };
17065
17066               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
17067               so far as the language is concerned, but that's still
17068               where we get the pattern for the instantiation from.  On
17069               other hand, if the definition comes outside the class, say:
17070
17071                 template <class T> struct S {
17072                   template <class U> friend void f();
17073                 };
17074                 template <class U> friend void f() {}
17075
17076               we don't need to look any further.  That's what the check for
17077               DECL_INITIAL is for.  */
17078           || (TREE_CODE (decl) == FUNCTION_DECL
17079               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
17080               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
17081     {
17082       /* The present template, TD, should not be a definition.  If it
17083          were a definition, we should be using it!  Note that we
17084          cannot restructure the loop to just keep going until we find
17085          a template with a definition, since that might go too far if
17086          a specialization was declared, but not defined.  */
17087       gcc_assert (TREE_CODE (decl) != VAR_DECL
17088                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
17089
17090       /* Fetch the more general template.  */
17091       tmpl = DECL_TI_TEMPLATE (tmpl);
17092     }
17093
17094   return tmpl;
17095 }
17096
17097 /* Returns true if we need to instantiate this template instance even if we
17098    know we aren't going to emit it..  */
17099
17100 bool
17101 always_instantiate_p (tree decl)
17102 {
17103   /* We always instantiate inline functions so that we can inline them.  An
17104      explicit instantiation declaration prohibits implicit instantiation of
17105      non-inline functions.  With high levels of optimization, we would
17106      normally inline non-inline functions -- but we're not allowed to do
17107      that for "extern template" functions.  Therefore, we check
17108      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
17109   return ((TREE_CODE (decl) == FUNCTION_DECL
17110            && DECL_DECLARED_INLINE_P (decl))
17111           /* And we need to instantiate static data members so that
17112              their initializers are available in integral constant
17113              expressions.  */
17114           || (TREE_CODE (decl) == VAR_DECL
17115               && decl_maybe_constant_var_p (decl)));
17116 }
17117
17118 /* Produce the definition of D, a _DECL generated from a template.  If
17119    DEFER_OK is nonzero, then we don't have to actually do the
17120    instantiation now; we just have to do it sometime.  Normally it is
17121    an error if this is an explicit instantiation but D is undefined.
17122    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
17123    explicitly instantiated class template.  */
17124
17125 tree
17126 instantiate_decl (tree d, int defer_ok,
17127                   bool expl_inst_class_mem_p)
17128 {
17129   tree tmpl = DECL_TI_TEMPLATE (d);
17130   tree gen_args;
17131   tree args;
17132   tree td;
17133   tree code_pattern;
17134   tree spec;
17135   tree gen_tmpl;
17136   bool pattern_defined;
17137   int need_push;
17138   location_t saved_loc = input_location;
17139   bool external_p;
17140
17141   /* This function should only be used to instantiate templates for
17142      functions and static member variables.  */
17143   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
17144               || TREE_CODE (d) == VAR_DECL);
17145
17146   /* Variables are never deferred; if instantiation is required, they
17147      are instantiated right away.  That allows for better code in the
17148      case that an expression refers to the value of the variable --
17149      if the variable has a constant value the referring expression can
17150      take advantage of that fact.  */
17151   if (TREE_CODE (d) == VAR_DECL
17152       || DECL_DECLARED_CONSTEXPR_P (d))
17153     defer_ok = 0;
17154
17155   /* Don't instantiate cloned functions.  Instead, instantiate the
17156      functions they cloned.  */
17157   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
17158     d = DECL_CLONED_FUNCTION (d);
17159
17160   if (DECL_TEMPLATE_INSTANTIATED (d)
17161       || DECL_TEMPLATE_SPECIALIZATION (d))
17162     /* D has already been instantiated or explicitly specialized, so
17163        there's nothing for us to do here.
17164
17165        It might seem reasonable to check whether or not D is an explicit
17166        instantiation, and, if so, stop here.  But when an explicit
17167        instantiation is deferred until the end of the compilation,
17168        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
17169        the instantiation.  */
17170     return d;
17171
17172   /* Check to see whether we know that this template will be
17173      instantiated in some other file, as with "extern template"
17174      extension.  */
17175   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
17176
17177   /* In general, we do not instantiate such templates.  */
17178   if (external_p && !always_instantiate_p (d))
17179     return d;
17180
17181   gen_tmpl = most_general_template (tmpl);
17182   gen_args = DECL_TI_ARGS (d);
17183
17184   if (tmpl != gen_tmpl)
17185     /* We should already have the extra args.  */
17186     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
17187                 == TMPL_ARGS_DEPTH (gen_args));
17188   /* And what's in the hash table should match D.  */
17189   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
17190               || spec == NULL_TREE);
17191
17192   /* This needs to happen before any tsubsting.  */
17193   if (! push_tinst_level (d))
17194     return d;
17195
17196   timevar_push (TV_PARSE);
17197
17198   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
17199      for the instantiation.  */
17200   td = template_for_substitution (d);
17201   code_pattern = DECL_TEMPLATE_RESULT (td);
17202
17203   /* We should never be trying to instantiate a member of a class
17204      template or partial specialization.  */
17205   gcc_assert (d != code_pattern);
17206
17207   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
17208       || DECL_TEMPLATE_SPECIALIZATION (td))
17209     /* In the case of a friend template whose definition is provided
17210        outside the class, we may have too many arguments.  Drop the
17211        ones we don't need.  The same is true for specializations.  */
17212     args = get_innermost_template_args
17213       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
17214   else
17215     args = gen_args;
17216
17217   if (TREE_CODE (d) == FUNCTION_DECL)
17218     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
17219   else
17220     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
17221
17222   /* We may be in the middle of deferred access check.  Disable it now.  */
17223   push_deferring_access_checks (dk_no_deferred);
17224
17225   /* Unless an explicit instantiation directive has already determined
17226      the linkage of D, remember that a definition is available for
17227      this entity.  */
17228   if (pattern_defined
17229       && !DECL_INTERFACE_KNOWN (d)
17230       && !DECL_NOT_REALLY_EXTERN (d))
17231     mark_definable (d);
17232
17233   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
17234   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
17235   input_location = DECL_SOURCE_LOCATION (d);
17236
17237   /* If D is a member of an explicitly instantiated class template,
17238      and no definition is available, treat it like an implicit
17239      instantiation.  */
17240   if (!pattern_defined && expl_inst_class_mem_p
17241       && DECL_EXPLICIT_INSTANTIATION (d))
17242     {
17243       /* Leave linkage flags alone on instantiations with anonymous
17244          visibility.  */
17245       if (TREE_PUBLIC (d))
17246         {
17247           DECL_NOT_REALLY_EXTERN (d) = 0;
17248           DECL_INTERFACE_KNOWN (d) = 0;
17249         }
17250       SET_DECL_IMPLICIT_INSTANTIATION (d);
17251     }
17252
17253   /* Recheck the substitutions to obtain any warning messages
17254      about ignoring cv qualifiers.  Don't do this for artificial decls,
17255      as it breaks the context-sensitive substitution for lambda op(). */
17256   if (!defer_ok && !DECL_ARTIFICIAL (d))
17257     {
17258       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
17259       tree type = TREE_TYPE (gen);
17260
17261       /* Make sure that we can see identifiers, and compute access
17262          correctly.  D is already the target FUNCTION_DECL with the
17263          right context.  */
17264       push_access_scope (d);
17265
17266       if (TREE_CODE (gen) == FUNCTION_DECL)
17267         {
17268           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
17269           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
17270                                           d);
17271           /* Don't simply tsubst the function type, as that will give
17272              duplicate warnings about poor parameter qualifications.
17273              The function arguments are the same as the decl_arguments
17274              without the top level cv qualifiers.  */
17275           type = TREE_TYPE (type);
17276         }
17277       tsubst (type, gen_args, tf_warning_or_error, d);
17278
17279       pop_access_scope (d);
17280     }
17281
17282   /* Defer all other templates, unless we have been explicitly
17283      forbidden from doing so.  */
17284   if (/* If there is no definition, we cannot instantiate the
17285          template.  */
17286       ! pattern_defined
17287       /* If it's OK to postpone instantiation, do so.  */
17288       || defer_ok
17289       /* If this is a static data member that will be defined
17290          elsewhere, we don't want to instantiate the entire data
17291          member, but we do want to instantiate the initializer so that
17292          we can substitute that elsewhere.  */
17293       || (external_p && TREE_CODE (d) == VAR_DECL))
17294     {
17295       /* The definition of the static data member is now required so
17296          we must substitute the initializer.  */
17297       if (TREE_CODE (d) == VAR_DECL
17298           && !DECL_INITIAL (d)
17299           && DECL_INITIAL (code_pattern))
17300         {
17301           tree ns;
17302           tree init;
17303           bool const_init = false;
17304
17305           ns = decl_namespace_context (d);
17306           push_nested_namespace (ns);
17307           push_nested_class (DECL_CONTEXT (d));
17308           init = tsubst_expr (DECL_INITIAL (code_pattern),
17309                               args,
17310                               tf_warning_or_error, NULL_TREE,
17311                               /*integral_constant_expression_p=*/false);
17312           /* Make sure the initializer is still constant, in case of
17313              circular dependency (template/instantiate6.C). */
17314           const_init
17315             = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
17316           cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
17317                           /*asmspec_tree=*/NULL_TREE,
17318                           LOOKUP_ONLYCONVERTING);
17319           pop_nested_class ();
17320           pop_nested_namespace (ns);
17321         }
17322
17323       /* We restore the source position here because it's used by
17324          add_pending_template.  */
17325       input_location = saved_loc;
17326
17327       if (at_eof && !pattern_defined
17328           && DECL_EXPLICIT_INSTANTIATION (d)
17329           && DECL_NOT_REALLY_EXTERN (d))
17330         /* [temp.explicit]
17331
17332            The definition of a non-exported function template, a
17333            non-exported member function template, or a non-exported
17334            member function or static data member of a class template
17335            shall be present in every translation unit in which it is
17336            explicitly instantiated.  */
17337         permerror (input_location,  "explicit instantiation of %qD "
17338                    "but no definition available", d);
17339
17340       /* If we're in unevaluated context, we just wanted to get the
17341          constant value; this isn't an odr use, so don't queue
17342          a full instantiation.  */
17343       if (cp_unevaluated_operand != 0)
17344         goto out;
17345       /* ??? Historically, we have instantiated inline functions, even
17346          when marked as "extern template".  */
17347       if (!(external_p && TREE_CODE (d) == VAR_DECL))
17348         add_pending_template (d);
17349       goto out;
17350     }
17351   /* Tell the repository that D is available in this translation unit
17352      -- and see if it is supposed to be instantiated here.  */
17353   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
17354     {
17355       /* In a PCH file, despite the fact that the repository hasn't
17356          requested instantiation in the PCH it is still possible that
17357          an instantiation will be required in a file that includes the
17358          PCH.  */
17359       if (pch_file)
17360         add_pending_template (d);
17361       /* Instantiate inline functions so that the inliner can do its
17362          job, even though we'll not be emitting a copy of this
17363          function.  */
17364       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
17365         goto out;
17366     }
17367
17368   need_push = !cfun || !global_bindings_p ();
17369   if (need_push)
17370     push_to_top_level ();
17371
17372   /* Mark D as instantiated so that recursive calls to
17373      instantiate_decl do not try to instantiate it again.  */
17374   DECL_TEMPLATE_INSTANTIATED (d) = 1;
17375
17376   /* Regenerate the declaration in case the template has been modified
17377      by a subsequent redeclaration.  */
17378   regenerate_decl_from_template (d, td);
17379
17380   /* We already set the file and line above.  Reset them now in case
17381      they changed as a result of calling regenerate_decl_from_template.  */
17382   input_location = DECL_SOURCE_LOCATION (d);
17383
17384   if (TREE_CODE (d) == VAR_DECL)
17385     {
17386       tree init;
17387       bool const_init = false;
17388
17389       /* Clear out DECL_RTL; whatever was there before may not be right
17390          since we've reset the type of the declaration.  */
17391       SET_DECL_RTL (d, NULL);
17392       DECL_IN_AGGR_P (d) = 0;
17393
17394       /* The initializer is placed in DECL_INITIAL by
17395          regenerate_decl_from_template so we don't need to
17396          push/pop_access_scope again here.  Pull it out so that
17397          cp_finish_decl can process it.  */
17398       init = DECL_INITIAL (d);
17399       DECL_INITIAL (d) = NULL_TREE;
17400       DECL_INITIALIZED_P (d) = 0;
17401
17402       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
17403          initializer.  That function will defer actual emission until
17404          we have a chance to determine linkage.  */
17405       DECL_EXTERNAL (d) = 0;
17406
17407       /* Enter the scope of D so that access-checking works correctly.  */
17408       push_nested_class (DECL_CONTEXT (d));
17409       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
17410       cp_finish_decl (d, init, const_init, NULL_TREE, 0);
17411       pop_nested_class ();
17412     }
17413   else if (TREE_CODE (d) == FUNCTION_DECL)
17414     {
17415       htab_t saved_local_specializations;
17416       tree subst_decl;
17417       tree tmpl_parm;
17418       tree spec_parm;
17419
17420       /* Save away the current list, in case we are instantiating one
17421          template from within the body of another.  */
17422       saved_local_specializations = local_specializations;
17423
17424       /* Set up the list of local specializations.  */
17425       local_specializations = htab_create (37,
17426                                            hash_local_specialization,
17427                                            eq_local_specializations,
17428                                            NULL);
17429
17430       /* Set up context.  */
17431       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
17432
17433       /* Create substitution entries for the parameters.  */
17434       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
17435       tmpl_parm = DECL_ARGUMENTS (subst_decl);
17436       spec_parm = DECL_ARGUMENTS (d);
17437       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
17438         {
17439           register_local_specialization (spec_parm, tmpl_parm);
17440           spec_parm = skip_artificial_parms_for (d, spec_parm);
17441           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
17442         }
17443       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
17444         {
17445           register_local_specialization (spec_parm, tmpl_parm);
17446           tmpl_parm = DECL_CHAIN (tmpl_parm);
17447           spec_parm = DECL_CHAIN (spec_parm);
17448         }
17449       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
17450         {
17451           /* Register the (value) argument pack as a specialization of
17452              TMPL_PARM, then move on.  */
17453           tree argpack = make_fnparm_pack (spec_parm);
17454           register_local_specialization (argpack, tmpl_parm);
17455           tmpl_parm = DECL_CHAIN (tmpl_parm);
17456           spec_parm = NULL_TREE;
17457         }
17458       gcc_assert (!spec_parm);
17459
17460       /* Substitute into the body of the function.  */
17461       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
17462                    tf_warning_or_error, tmpl,
17463                    /*integral_constant_expression_p=*/false);
17464
17465       /* Set the current input_location to the end of the function
17466          so that finish_function knows where we are.  */
17467       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
17468
17469       /* We don't need the local specializations any more.  */
17470       htab_delete (local_specializations);
17471       local_specializations = saved_local_specializations;
17472
17473       /* Finish the function.  */
17474       d = finish_function (0);
17475       expand_or_defer_fn (d);
17476     }
17477
17478   /* We're not deferring instantiation any more.  */
17479   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
17480
17481   if (need_push)
17482     pop_from_top_level ();
17483
17484 out:
17485   input_location = saved_loc;
17486   pop_deferring_access_checks ();
17487   pop_tinst_level ();
17488
17489   timevar_pop (TV_PARSE);
17490
17491   return d;
17492 }
17493
17494 /* Run through the list of templates that we wish we could
17495    instantiate, and instantiate any we can.  RETRIES is the
17496    number of times we retry pending template instantiation.  */
17497
17498 void
17499 instantiate_pending_templates (int retries)
17500 {
17501   int reconsider;
17502   location_t saved_loc = input_location;
17503
17504   /* Instantiating templates may trigger vtable generation.  This in turn
17505      may require further template instantiations.  We place a limit here
17506      to avoid infinite loop.  */
17507   if (pending_templates && retries >= max_tinst_depth)
17508     {
17509       tree decl = pending_templates->tinst->decl;
17510
17511       error ("template instantiation depth exceeds maximum of %d"
17512              " instantiating %q+D, possibly from virtual table generation"
17513              " (use -ftemplate-depth= to increase the maximum)",
17514              max_tinst_depth, decl);
17515       if (TREE_CODE (decl) == FUNCTION_DECL)
17516         /* Pretend that we defined it.  */
17517         DECL_INITIAL (decl) = error_mark_node;
17518       return;
17519     }
17520
17521   do
17522     {
17523       struct pending_template **t = &pending_templates;
17524       struct pending_template *last = NULL;
17525       reconsider = 0;
17526       while (*t)
17527         {
17528           tree instantiation = reopen_tinst_level ((*t)->tinst);
17529           bool complete = false;
17530
17531           if (TYPE_P (instantiation))
17532             {
17533               tree fn;
17534
17535               if (!COMPLETE_TYPE_P (instantiation))
17536                 {
17537                   instantiate_class_template (instantiation);
17538                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
17539                     for (fn = TYPE_METHODS (instantiation);
17540                          fn;
17541                          fn = TREE_CHAIN (fn))
17542                       if (! DECL_ARTIFICIAL (fn))
17543                         instantiate_decl (fn,
17544                                           /*defer_ok=*/0,
17545                                           /*expl_inst_class_mem_p=*/false);
17546                   if (COMPLETE_TYPE_P (instantiation))
17547                     reconsider = 1;
17548                 }
17549
17550               complete = COMPLETE_TYPE_P (instantiation);
17551             }
17552           else
17553             {
17554               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
17555                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
17556                 {
17557                   instantiation
17558                     = instantiate_decl (instantiation,
17559                                         /*defer_ok=*/0,
17560                                         /*expl_inst_class_mem_p=*/false);
17561                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
17562                     reconsider = 1;
17563                 }
17564
17565               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
17566                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
17567             }
17568
17569           if (complete)
17570             /* If INSTANTIATION has been instantiated, then we don't
17571                need to consider it again in the future.  */
17572             *t = (*t)->next;
17573           else
17574             {
17575               last = *t;
17576               t = &(*t)->next;
17577             }
17578           tinst_depth = 0;
17579           current_tinst_level = NULL;
17580         }
17581       last_pending_template = last;
17582     }
17583   while (reconsider);
17584
17585   input_location = saved_loc;
17586 }
17587
17588 /* Substitute ARGVEC into T, which is a list of initializers for
17589    either base class or a non-static data member.  The TREE_PURPOSEs
17590    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
17591    instantiate_decl.  */
17592
17593 static tree
17594 tsubst_initializer_list (tree t, tree argvec)
17595 {
17596   tree inits = NULL_TREE;
17597
17598   for (; t; t = TREE_CHAIN (t))
17599     {
17600       tree decl;
17601       tree init;
17602       tree expanded_bases = NULL_TREE;
17603       tree expanded_arguments = NULL_TREE;
17604       int i, len = 1;
17605
17606       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
17607         {
17608           tree expr;
17609           tree arg;
17610
17611           /* Expand the base class expansion type into separate base
17612              classes.  */
17613           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
17614                                                  tf_warning_or_error,
17615                                                  NULL_TREE);
17616           if (expanded_bases == error_mark_node)
17617             continue;
17618           
17619           /* We'll be building separate TREE_LISTs of arguments for
17620              each base.  */
17621           len = TREE_VEC_LENGTH (expanded_bases);
17622           expanded_arguments = make_tree_vec (len);
17623           for (i = 0; i < len; i++)
17624             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
17625
17626           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
17627              expand each argument in the TREE_VALUE of t.  */
17628           expr = make_node (EXPR_PACK_EXPANSION);
17629           PACK_EXPANSION_PARAMETER_PACKS (expr) =
17630             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
17631
17632           if (TREE_VALUE (t) == void_type_node)
17633             /* VOID_TYPE_NODE is used to indicate
17634                value-initialization.  */
17635             {
17636               for (i = 0; i < len; i++)
17637                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
17638             }
17639           else
17640             {
17641               /* Substitute parameter packs into each argument in the
17642                  TREE_LIST.  */
17643               in_base_initializer = 1;
17644               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
17645                 {
17646                   tree expanded_exprs;
17647
17648                   /* Expand the argument.  */
17649                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
17650                   expanded_exprs 
17651                     = tsubst_pack_expansion (expr, argvec,
17652                                              tf_warning_or_error,
17653                                              NULL_TREE);
17654                   if (expanded_exprs == error_mark_node)
17655                     continue;
17656
17657                   /* Prepend each of the expanded expressions to the
17658                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
17659                   for (i = 0; i < len; i++)
17660                     {
17661                       TREE_VEC_ELT (expanded_arguments, i) = 
17662                         tree_cons (NULL_TREE, 
17663                                    TREE_VEC_ELT (expanded_exprs, i),
17664                                    TREE_VEC_ELT (expanded_arguments, i));
17665                     }
17666                 }
17667               in_base_initializer = 0;
17668
17669               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
17670                  since we built them backwards.  */
17671               for (i = 0; i < len; i++)
17672                 {
17673                   TREE_VEC_ELT (expanded_arguments, i) = 
17674                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
17675                 }
17676             }
17677         }
17678
17679       for (i = 0; i < len; ++i)
17680         {
17681           if (expanded_bases)
17682             {
17683               decl = TREE_VEC_ELT (expanded_bases, i);
17684               decl = expand_member_init (decl);
17685               init = TREE_VEC_ELT (expanded_arguments, i);
17686             }
17687           else
17688             {
17689               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
17690                                   tf_warning_or_error, NULL_TREE);
17691
17692               decl = expand_member_init (decl);
17693               if (decl && !DECL_P (decl))
17694                 in_base_initializer = 1;
17695
17696               init = TREE_VALUE (t);
17697               if (init != void_type_node)
17698                 init = tsubst_expr (init, argvec,
17699                                     tf_warning_or_error, NULL_TREE,
17700                                     /*integral_constant_expression_p=*/false);
17701               in_base_initializer = 0;
17702             }
17703
17704           if (decl)
17705             {
17706               init = build_tree_list (decl, init);
17707               TREE_CHAIN (init) = inits;
17708               inits = init;
17709             }
17710         }
17711     }
17712   return inits;
17713 }
17714
17715 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
17716
17717 static void
17718 set_current_access_from_decl (tree decl)
17719 {
17720   if (TREE_PRIVATE (decl))
17721     current_access_specifier = access_private_node;
17722   else if (TREE_PROTECTED (decl))
17723     current_access_specifier = access_protected_node;
17724   else
17725     current_access_specifier = access_public_node;
17726 }
17727
17728 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
17729    is the instantiation (which should have been created with
17730    start_enum) and ARGS are the template arguments to use.  */
17731
17732 static void
17733 tsubst_enum (tree tag, tree newtag, tree args)
17734 {
17735   tree e;
17736
17737   if (SCOPED_ENUM_P (newtag))
17738     begin_scope (sk_scoped_enum, newtag);
17739
17740   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
17741     {
17742       tree value;
17743       tree decl;
17744
17745       decl = TREE_VALUE (e);
17746       /* Note that in a template enum, the TREE_VALUE is the
17747          CONST_DECL, not the corresponding INTEGER_CST.  */
17748       value = tsubst_expr (DECL_INITIAL (decl),
17749                            args, tf_warning_or_error, NULL_TREE,
17750                            /*integral_constant_expression_p=*/true);
17751
17752       /* Give this enumeration constant the correct access.  */
17753       set_current_access_from_decl (decl);
17754
17755       /* Actually build the enumerator itself.  */
17756       build_enumerator
17757         (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
17758     }
17759
17760   if (SCOPED_ENUM_P (newtag))
17761     finish_scope ();
17762
17763   finish_enum_value_list (newtag);
17764   finish_enum (newtag);
17765
17766   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
17767     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
17768 }
17769
17770 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
17771    its type -- but without substituting the innermost set of template
17772    arguments.  So, innermost set of template parameters will appear in
17773    the type.  */
17774
17775 tree
17776 get_mostly_instantiated_function_type (tree decl)
17777 {
17778   tree fn_type;
17779   tree tmpl;
17780   tree targs;
17781   tree tparms;
17782   int parm_depth;
17783
17784   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
17785   targs = DECL_TI_ARGS (decl);
17786   tparms = DECL_TEMPLATE_PARMS (tmpl);
17787   parm_depth = TMPL_PARMS_DEPTH (tparms);
17788
17789   /* There should be as many levels of arguments as there are levels
17790      of parameters.  */
17791   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
17792
17793   fn_type = TREE_TYPE (tmpl);
17794
17795   if (parm_depth == 1)
17796     /* No substitution is necessary.  */
17797     ;
17798   else
17799     {
17800       int i, save_access_control;
17801       tree partial_args;
17802
17803       /* Replace the innermost level of the TARGS with NULL_TREEs to
17804          let tsubst know not to substitute for those parameters.  */
17805       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
17806       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
17807         SET_TMPL_ARGS_LEVEL (partial_args, i,
17808                              TMPL_ARGS_LEVEL (targs, i));
17809       SET_TMPL_ARGS_LEVEL (partial_args,
17810                            TMPL_ARGS_DEPTH (targs),
17811                            make_tree_vec (DECL_NTPARMS (tmpl)));
17812
17813       /* Disable access control as this function is used only during
17814          name-mangling.  */
17815       save_access_control = flag_access_control;
17816       flag_access_control = 0;
17817
17818       ++processing_template_decl;
17819       /* Now, do the (partial) substitution to figure out the
17820          appropriate function type.  */
17821       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
17822       --processing_template_decl;
17823
17824       /* Substitute into the template parameters to obtain the real
17825          innermost set of parameters.  This step is important if the
17826          innermost set of template parameters contains value
17827          parameters whose types depend on outer template parameters.  */
17828       TREE_VEC_LENGTH (partial_args)--;
17829       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
17830
17831       flag_access_control = save_access_control;
17832     }
17833
17834   return fn_type;
17835 }
17836
17837 /* Return truthvalue if we're processing a template different from
17838    the last one involved in diagnostics.  */
17839 int
17840 problematic_instantiation_changed (void)
17841 {
17842   return last_template_error_tick != tinst_level_tick;
17843 }
17844
17845 /* Remember current template involved in diagnostics.  */
17846 void
17847 record_last_problematic_instantiation (void)
17848 {
17849   last_template_error_tick = tinst_level_tick;
17850 }
17851
17852 struct tinst_level *
17853 current_instantiation (void)
17854 {
17855   return current_tinst_level;
17856 }
17857
17858 /* [temp.param] Check that template non-type parm TYPE is of an allowable
17859    type. Return zero for ok, nonzero for disallowed. Issue error and
17860    warning messages under control of COMPLAIN.  */
17861
17862 static int
17863 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
17864 {
17865   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
17866     return 0;
17867   else if (POINTER_TYPE_P (type))
17868     return 0;
17869   else if (TYPE_PTR_TO_MEMBER_P (type))
17870     return 0;
17871   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
17872     return 0;
17873   else if (TREE_CODE (type) == TYPENAME_TYPE)
17874     return 0;
17875
17876   if (complain & tf_error)
17877     error ("%q#T is not a valid type for a template constant parameter", type);
17878   return 1;
17879 }
17880
17881 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
17882    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
17883
17884 static bool
17885 dependent_type_p_r (tree type)
17886 {
17887   tree scope;
17888
17889   /* [temp.dep.type]
17890
17891      A type is dependent if it is:
17892
17893      -- a template parameter. Template template parameters are types
17894         for us (since TYPE_P holds true for them) so we handle
17895         them here.  */
17896   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
17897       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
17898     return true;
17899   /* -- a qualified-id with a nested-name-specifier which contains a
17900         class-name that names a dependent type or whose unqualified-id
17901         names a dependent type.  */
17902   if (TREE_CODE (type) == TYPENAME_TYPE)
17903     return true;
17904   /* -- a cv-qualified type where the cv-unqualified type is
17905         dependent.  */
17906   type = TYPE_MAIN_VARIANT (type);
17907   /* -- a compound type constructed from any dependent type.  */
17908   if (TYPE_PTR_TO_MEMBER_P (type))
17909     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
17910             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
17911                                            (type)));
17912   else if (TREE_CODE (type) == POINTER_TYPE
17913            || TREE_CODE (type) == REFERENCE_TYPE)
17914     return dependent_type_p (TREE_TYPE (type));
17915   else if (TREE_CODE (type) == FUNCTION_TYPE
17916            || TREE_CODE (type) == METHOD_TYPE)
17917     {
17918       tree arg_type;
17919
17920       if (dependent_type_p (TREE_TYPE (type)))
17921         return true;
17922       for (arg_type = TYPE_ARG_TYPES (type);
17923            arg_type;
17924            arg_type = TREE_CHAIN (arg_type))
17925         if (dependent_type_p (TREE_VALUE (arg_type)))
17926           return true;
17927       return false;
17928     }
17929   /* -- an array type constructed from any dependent type or whose
17930         size is specified by a constant expression that is
17931         value-dependent.
17932
17933         We checked for type- and value-dependence of the bounds in
17934         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
17935   if (TREE_CODE (type) == ARRAY_TYPE)
17936     {
17937       if (TYPE_DOMAIN (type)
17938           && dependent_type_p (TYPE_DOMAIN (type)))
17939         return true;
17940       return dependent_type_p (TREE_TYPE (type));
17941     }
17942
17943   /* -- a template-id in which either the template name is a template
17944      parameter ...  */
17945   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
17946     return true;
17947   /* ... or any of the template arguments is a dependent type or
17948         an expression that is type-dependent or value-dependent.  */
17949   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
17950            && (any_dependent_template_arguments_p
17951                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
17952     return true;
17953
17954   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
17955      argument of the `typeof' expression is not type-dependent, then
17956      it should already been have resolved.  */
17957   if (TREE_CODE (type) == TYPEOF_TYPE
17958       || TREE_CODE (type) == DECLTYPE_TYPE)
17959     return true;
17960
17961   /* A template argument pack is dependent if any of its packed
17962      arguments are.  */
17963   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
17964     {
17965       tree args = ARGUMENT_PACK_ARGS (type);
17966       int i, len = TREE_VEC_LENGTH (args);
17967       for (i = 0; i < len; ++i)
17968         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
17969           return true;
17970     }
17971
17972   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
17973      be template parameters.  */
17974   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
17975     return true;
17976
17977   /* The standard does not specifically mention types that are local
17978      to template functions or local classes, but they should be
17979      considered dependent too.  For example:
17980
17981        template <int I> void f() {
17982          enum E { a = I };
17983          S<sizeof (E)> s;
17984        }
17985
17986      The size of `E' cannot be known until the value of `I' has been
17987      determined.  Therefore, `E' must be considered dependent.  */
17988   scope = TYPE_CONTEXT (type);
17989   if (scope && TYPE_P (scope))
17990     return dependent_type_p (scope);
17991   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
17992     return type_dependent_expression_p (scope);
17993
17994   /* Other types are non-dependent.  */
17995   return false;
17996 }
17997
17998 /* Returns TRUE if TYPE is dependent, in the sense of
17999    [temp.dep.type].  Note that a NULL type is considered dependent.  */
18000
18001 bool
18002 dependent_type_p (tree type)
18003 {
18004   /* If there are no template parameters in scope, then there can't be
18005      any dependent types.  */
18006   if (!processing_template_decl)
18007     {
18008       /* If we are not processing a template, then nobody should be
18009          providing us with a dependent type.  */
18010       gcc_assert (type);
18011       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
18012       return false;
18013     }
18014
18015   /* If the type is NULL, we have not computed a type for the entity
18016      in question; in that case, the type is dependent.  */
18017   if (!type)
18018     return true;
18019
18020   /* Erroneous types can be considered non-dependent.  */
18021   if (type == error_mark_node)
18022     return false;
18023
18024   /* If we have not already computed the appropriate value for TYPE,
18025      do so now.  */
18026   if (!TYPE_DEPENDENT_P_VALID (type))
18027     {
18028       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
18029       TYPE_DEPENDENT_P_VALID (type) = 1;
18030     }
18031
18032   return TYPE_DEPENDENT_P (type);
18033 }
18034
18035 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
18036    lookup.  In other words, a dependent type that is not the current
18037    instantiation.  */
18038
18039 bool
18040 dependent_scope_p (tree scope)
18041 {
18042   return (scope && TYPE_P (scope) && dependent_type_p (scope)
18043           && !currently_open_class (scope));
18044 }
18045
18046 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
18047    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
18048    expression.  */
18049
18050 /* Note that this predicate is not appropriate for general expressions;
18051    only constant expressions (that satisfy potential_constant_expression)
18052    can be tested for value dependence.
18053
18054    We should really also have a predicate for "instantiation-dependent".
18055
18056    fold_non_dependent_expr: fold if constant and not type-dependent and not value-dependent.
18057      (what about instantiation-dependent constant-expressions?)
18058    is_late_template_attribute: defer if instantiation-dependent.
18059    compute_array_index_type: proceed if constant and not t- or v-dependent
18060      if instantiation-dependent, need to remember full expression
18061    uses_template_parms: FIXME - need to audit callers
18062    tsubst_decl [function_decl]: Why is this using value_dependent_expression_p?
18063    dependent_type_p [array_type]: dependent if index type is dependent
18064      (or non-constant?)
18065    static_assert - instantiation-dependent */
18066
18067 bool
18068 value_dependent_expression_p (tree expression)
18069 {
18070   if (!processing_template_decl)
18071     return false;
18072
18073   /* A name declared with a dependent type.  */
18074   if (DECL_P (expression) && type_dependent_expression_p (expression))
18075     return true;
18076
18077   switch (TREE_CODE (expression))
18078     {
18079     case IDENTIFIER_NODE:
18080       /* A name that has not been looked up -- must be dependent.  */
18081       return true;
18082
18083     case TEMPLATE_PARM_INDEX:
18084       /* A non-type template parm.  */
18085       return true;
18086
18087     case CONST_DECL:
18088       /* A non-type template parm.  */
18089       if (DECL_TEMPLATE_PARM_P (expression))
18090         return true;
18091       return value_dependent_expression_p (DECL_INITIAL (expression));
18092
18093     case VAR_DECL:
18094        /* A constant with literal type and is initialized
18095           with an expression that is value-dependent.  */
18096       if (DECL_INITIAL (expression)
18097           && decl_constant_var_p (expression)
18098           && value_dependent_expression_p (DECL_INITIAL (expression)))
18099         return true;
18100       return false;
18101
18102     case DYNAMIC_CAST_EXPR:
18103     case STATIC_CAST_EXPR:
18104     case CONST_CAST_EXPR:
18105     case REINTERPRET_CAST_EXPR:
18106     case CAST_EXPR:
18107       /* These expressions are value-dependent if the type to which
18108          the cast occurs is dependent or the expression being casted
18109          is value-dependent.  */
18110       {
18111         tree type = TREE_TYPE (expression);
18112
18113         if (dependent_type_p (type))
18114           return true;
18115
18116         /* A functional cast has a list of operands.  */
18117         expression = TREE_OPERAND (expression, 0);
18118         if (!expression)
18119           {
18120             /* If there are no operands, it must be an expression such
18121                as "int()". This should not happen for aggregate types
18122                because it would form non-constant expressions.  */
18123             gcc_assert (cxx_dialect >= cxx0x
18124                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
18125
18126             return false;
18127           }
18128
18129         if (TREE_CODE (expression) == TREE_LIST)
18130           return any_value_dependent_elements_p (expression);
18131
18132         return value_dependent_expression_p (expression);
18133       }
18134
18135     case SIZEOF_EXPR:
18136     case ALIGNOF_EXPR:
18137     case TYPEID_EXPR:
18138       /* A `sizeof' expression is value-dependent if the operand is
18139          type-dependent or is a pack expansion.  */
18140       expression = TREE_OPERAND (expression, 0);
18141       if (PACK_EXPANSION_P (expression))
18142         return true;
18143       else if (TYPE_P (expression))
18144         return dependent_type_p (expression);
18145       return type_dependent_expression_p (expression);
18146
18147     case AT_ENCODE_EXPR:
18148       /* An 'encode' expression is value-dependent if the operand is
18149          type-dependent.  */
18150       expression = TREE_OPERAND (expression, 0);
18151       return dependent_type_p (expression);
18152
18153     case NOEXCEPT_EXPR:
18154       expression = TREE_OPERAND (expression, 0);
18155       return type_dependent_expression_p (expression);
18156
18157     case SCOPE_REF:
18158       {
18159         tree name = TREE_OPERAND (expression, 1);
18160         return value_dependent_expression_p (name);
18161       }
18162
18163     case COMPONENT_REF:
18164       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
18165               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
18166
18167     case NONTYPE_ARGUMENT_PACK:
18168       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
18169          is value-dependent.  */
18170       {
18171         tree values = ARGUMENT_PACK_ARGS (expression);
18172         int i, len = TREE_VEC_LENGTH (values);
18173         
18174         for (i = 0; i < len; ++i)
18175           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
18176             return true;
18177         
18178         return false;
18179       }
18180
18181     case TRAIT_EXPR:
18182       {
18183         tree type2 = TRAIT_EXPR_TYPE2 (expression);
18184         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
18185                 || (type2 ? dependent_type_p (type2) : false));
18186       }
18187
18188     case MODOP_EXPR:
18189       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
18190               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
18191
18192     case ARRAY_REF:
18193       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
18194               || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
18195
18196     case ADDR_EXPR:
18197       {
18198         tree op = TREE_OPERAND (expression, 0);
18199         return (value_dependent_expression_p (op)
18200                 || has_value_dependent_address (op));
18201       }
18202
18203     case CALL_EXPR:
18204       {
18205         tree fn = get_callee_fndecl (expression);
18206         int i, nargs;
18207         if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
18208           return true;
18209         nargs = call_expr_nargs (expression);
18210         for (i = 0; i < nargs; ++i)
18211           {
18212             tree op = CALL_EXPR_ARG (expression, i);
18213             /* In a call to a constexpr member function, look through the
18214                implicit ADDR_EXPR on the object argument so that it doesn't
18215                cause the call to be considered value-dependent.  We also
18216                look through it in potential_constant_expression.  */
18217             if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
18218                 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
18219                 && TREE_CODE (op) == ADDR_EXPR)
18220               op = TREE_OPERAND (op, 0);
18221             if (value_dependent_expression_p (op))
18222               return true;
18223           }
18224         return false;
18225       }
18226
18227     case TEMPLATE_ID_EXPR:
18228       /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
18229          type-dependent.  */
18230       return type_dependent_expression_p (expression);
18231
18232     default:
18233       /* A constant expression is value-dependent if any subexpression is
18234          value-dependent.  */
18235       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
18236         {
18237         case tcc_reference:
18238         case tcc_unary:
18239           return (value_dependent_expression_p
18240                   (TREE_OPERAND (expression, 0)));
18241
18242         case tcc_comparison:
18243         case tcc_binary:
18244           return ((value_dependent_expression_p
18245                    (TREE_OPERAND (expression, 0)))
18246                   || (value_dependent_expression_p
18247                       (TREE_OPERAND (expression, 1))));
18248
18249         case tcc_expression:
18250         case tcc_vl_exp:
18251           {
18252             int i;
18253             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
18254               /* In some cases, some of the operands may be missing.
18255                  (For example, in the case of PREDECREMENT_EXPR, the
18256                  amount to increment by may be missing.)  That doesn't
18257                  make the expression dependent.  */
18258               if (TREE_OPERAND (expression, i)
18259                   && (value_dependent_expression_p
18260                       (TREE_OPERAND (expression, i))))
18261                 return true;
18262             return false;
18263           }
18264
18265         default:
18266           break;
18267         }
18268     }
18269
18270   /* The expression is not value-dependent.  */
18271   return false;
18272 }
18273
18274 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
18275    [temp.dep.expr].  Note that an expression with no type is
18276    considered dependent.  Other parts of the compiler arrange for an
18277    expression with type-dependent subexpressions to have no type, so
18278    this function doesn't have to be fully recursive.  */
18279
18280 bool
18281 type_dependent_expression_p (tree expression)
18282 {
18283   if (!processing_template_decl)
18284     return false;
18285
18286   if (expression == error_mark_node)
18287     return false;
18288
18289   /* An unresolved name is always dependent.  */
18290   if (TREE_CODE (expression) == IDENTIFIER_NODE
18291       || TREE_CODE (expression) == USING_DECL)
18292     return true;
18293
18294   /* Some expression forms are never type-dependent.  */
18295   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
18296       || TREE_CODE (expression) == SIZEOF_EXPR
18297       || TREE_CODE (expression) == ALIGNOF_EXPR
18298       || TREE_CODE (expression) == AT_ENCODE_EXPR
18299       || TREE_CODE (expression) == NOEXCEPT_EXPR
18300       || TREE_CODE (expression) == TRAIT_EXPR
18301       || TREE_CODE (expression) == TYPEID_EXPR
18302       || TREE_CODE (expression) == DELETE_EXPR
18303       || TREE_CODE (expression) == VEC_DELETE_EXPR
18304       || TREE_CODE (expression) == THROW_EXPR)
18305     return false;
18306
18307   /* The types of these expressions depends only on the type to which
18308      the cast occurs.  */
18309   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
18310       || TREE_CODE (expression) == STATIC_CAST_EXPR
18311       || TREE_CODE (expression) == CONST_CAST_EXPR
18312       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
18313       || TREE_CODE (expression) == CAST_EXPR)
18314     return dependent_type_p (TREE_TYPE (expression));
18315
18316   /* The types of these expressions depends only on the type created
18317      by the expression.  */
18318   if (TREE_CODE (expression) == NEW_EXPR
18319       || TREE_CODE (expression) == VEC_NEW_EXPR)
18320     {
18321       /* For NEW_EXPR tree nodes created inside a template, either
18322          the object type itself or a TREE_LIST may appear as the
18323          operand 1.  */
18324       tree type = TREE_OPERAND (expression, 1);
18325       if (TREE_CODE (type) == TREE_LIST)
18326         /* This is an array type.  We need to check array dimensions
18327            as well.  */
18328         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
18329                || value_dependent_expression_p
18330                     (TREE_OPERAND (TREE_VALUE (type), 1));
18331       else
18332         return dependent_type_p (type);
18333     }
18334
18335   if (TREE_CODE (expression) == SCOPE_REF)
18336     {
18337       tree scope = TREE_OPERAND (expression, 0);
18338       tree name = TREE_OPERAND (expression, 1);
18339
18340       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
18341          contains an identifier associated by name lookup with one or more
18342          declarations declared with a dependent type, or...a
18343          nested-name-specifier or qualified-id that names a member of an
18344          unknown specialization.  */
18345       return (type_dependent_expression_p (name)
18346               || dependent_scope_p (scope));
18347     }
18348
18349   if (TREE_CODE (expression) == FUNCTION_DECL
18350       && DECL_LANG_SPECIFIC (expression)
18351       && DECL_TEMPLATE_INFO (expression)
18352       && (any_dependent_template_arguments_p
18353           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
18354     return true;
18355
18356   if (TREE_CODE (expression) == TEMPLATE_DECL
18357       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
18358     return false;
18359
18360   if (TREE_CODE (expression) == STMT_EXPR)
18361     expression = stmt_expr_value_expr (expression);
18362
18363   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
18364     {
18365       tree elt;
18366       unsigned i;
18367
18368       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
18369         {
18370           if (type_dependent_expression_p (elt))
18371             return true;
18372         }
18373       return false;
18374     }
18375
18376   /* A static data member of the current instantiation with incomplete
18377      array type is type-dependent, as the definition and specializations
18378      can have different bounds.  */
18379   if (TREE_CODE (expression) == VAR_DECL
18380       && DECL_CLASS_SCOPE_P (expression)
18381       && dependent_type_p (DECL_CONTEXT (expression))
18382       && VAR_HAD_UNKNOWN_BOUND (expression))
18383     return true;
18384
18385   if (TREE_TYPE (expression) == unknown_type_node)
18386     {
18387       if (TREE_CODE (expression) == ADDR_EXPR)
18388         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
18389       if (TREE_CODE (expression) == COMPONENT_REF
18390           || TREE_CODE (expression) == OFFSET_REF)
18391         {
18392           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
18393             return true;
18394           expression = TREE_OPERAND (expression, 1);
18395           if (TREE_CODE (expression) == IDENTIFIER_NODE)
18396             return false;
18397         }
18398       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
18399       if (TREE_CODE (expression) == SCOPE_REF)
18400         return false;
18401
18402       if (TREE_CODE (expression) == BASELINK)
18403         expression = BASELINK_FUNCTIONS (expression);
18404
18405       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
18406         {
18407           if (any_dependent_template_arguments_p
18408               (TREE_OPERAND (expression, 1)))
18409             return true;
18410           expression = TREE_OPERAND (expression, 0);
18411         }
18412       gcc_assert (TREE_CODE (expression) == OVERLOAD
18413                   || TREE_CODE (expression) == FUNCTION_DECL);
18414
18415       while (expression)
18416         {
18417           if (type_dependent_expression_p (OVL_CURRENT (expression)))
18418             return true;
18419           expression = OVL_NEXT (expression);
18420         }
18421       return false;
18422     }
18423
18424   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
18425
18426   return (dependent_type_p (TREE_TYPE (expression)));
18427 }
18428
18429 /* Like type_dependent_expression_p, but it also works while not processing
18430    a template definition, i.e. during substitution or mangling.  */
18431
18432 bool
18433 type_dependent_expression_p_push (tree expr)
18434 {
18435   bool b;
18436   ++processing_template_decl;
18437   b = type_dependent_expression_p (expr);
18438   --processing_template_decl;
18439   return b;
18440 }
18441
18442 /* Returns TRUE if ARGS contains a type-dependent expression.  */
18443
18444 bool
18445 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
18446 {
18447   unsigned int i;
18448   tree arg;
18449
18450   FOR_EACH_VEC_ELT (tree, args, i, arg)
18451     {
18452       if (type_dependent_expression_p (arg))
18453         return true;
18454     }
18455   return false;
18456 }
18457
18458 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
18459    expressions) contains any value-dependent expressions.  */
18460
18461 bool
18462 any_value_dependent_elements_p (const_tree list)
18463 {
18464   for (; list; list = TREE_CHAIN (list))
18465     if (value_dependent_expression_p (TREE_VALUE (list)))
18466       return true;
18467
18468   return false;
18469 }
18470
18471 /* Returns TRUE if the ARG (a template argument) is dependent.  */
18472
18473 bool
18474 dependent_template_arg_p (tree arg)
18475 {
18476   if (!processing_template_decl)
18477     return false;
18478
18479   /* Assume a template argument that was wrongly written by the user
18480      is dependent. This is consistent with what
18481      any_dependent_template_arguments_p [that calls this function]
18482      does.  */
18483   if (arg == error_mark_node)
18484     return true;
18485
18486   if (TREE_CODE (arg) == TEMPLATE_DECL
18487       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
18488     return dependent_template_p (arg);
18489   else if (ARGUMENT_PACK_P (arg))
18490     {
18491       tree args = ARGUMENT_PACK_ARGS (arg);
18492       int i, len = TREE_VEC_LENGTH (args);
18493       for (i = 0; i < len; ++i)
18494         {
18495           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
18496             return true;
18497         }
18498
18499       return false;
18500     }
18501   else if (TYPE_P (arg))
18502     return dependent_type_p (arg);
18503   else
18504     return (type_dependent_expression_p (arg)
18505             || value_dependent_expression_p (arg));
18506 }
18507
18508 /* Returns true if ARGS (a collection of template arguments) contains
18509    any types that require structural equality testing.  */
18510
18511 bool
18512 any_template_arguments_need_structural_equality_p (tree args)
18513 {
18514   int i;
18515   int j;
18516
18517   if (!args)
18518     return false;
18519   if (args == error_mark_node)
18520     return true;
18521
18522   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
18523     {
18524       tree level = TMPL_ARGS_LEVEL (args, i + 1);
18525       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
18526         {
18527           tree arg = TREE_VEC_ELT (level, j);
18528           tree packed_args = NULL_TREE;
18529           int k, len = 1;
18530
18531           if (ARGUMENT_PACK_P (arg))
18532             {
18533               /* Look inside the argument pack.  */
18534               packed_args = ARGUMENT_PACK_ARGS (arg);
18535               len = TREE_VEC_LENGTH (packed_args);
18536             }
18537
18538           for (k = 0; k < len; ++k)
18539             {
18540               if (packed_args)
18541                 arg = TREE_VEC_ELT (packed_args, k);
18542
18543               if (error_operand_p (arg))
18544                 return true;
18545               else if (TREE_CODE (arg) == TEMPLATE_DECL
18546                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
18547                 continue;
18548               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
18549                 return true;
18550               else if (!TYPE_P (arg) && TREE_TYPE (arg)
18551                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
18552                 return true;
18553             }
18554         }
18555     }
18556
18557   return false;
18558 }
18559
18560 /* Returns true if ARGS (a collection of template arguments) contains
18561    any dependent arguments.  */
18562
18563 bool
18564 any_dependent_template_arguments_p (const_tree args)
18565 {
18566   int i;
18567   int j;
18568
18569   if (!args)
18570     return false;
18571   if (args == error_mark_node)
18572     return true;
18573
18574   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
18575     {
18576       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
18577       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
18578         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
18579           return true;
18580     }
18581
18582   return false;
18583 }
18584
18585 /* Returns TRUE if the template TMPL is dependent.  */
18586
18587 bool
18588 dependent_template_p (tree tmpl)
18589 {
18590   if (TREE_CODE (tmpl) == OVERLOAD)
18591     {
18592       while (tmpl)
18593         {
18594           if (dependent_template_p (OVL_CURRENT (tmpl)))
18595             return true;
18596           tmpl = OVL_NEXT (tmpl);
18597         }
18598       return false;
18599     }
18600
18601   /* Template template parameters are dependent.  */
18602   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
18603       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
18604     return true;
18605   /* So are names that have not been looked up.  */
18606   if (TREE_CODE (tmpl) == SCOPE_REF
18607       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
18608     return true;
18609   /* So are member templates of dependent classes.  */
18610   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
18611     return dependent_type_p (DECL_CONTEXT (tmpl));
18612   return false;
18613 }
18614
18615 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
18616
18617 bool
18618 dependent_template_id_p (tree tmpl, tree args)
18619 {
18620   return (dependent_template_p (tmpl)
18621           || any_dependent_template_arguments_p (args));
18622 }
18623
18624 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
18625    is dependent.  */
18626
18627 bool
18628 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
18629 {
18630   int i;
18631
18632   if (!processing_template_decl)
18633     return false;
18634
18635   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
18636     {
18637       tree decl = TREE_VEC_ELT (declv, i);
18638       tree init = TREE_VEC_ELT (initv, i);
18639       tree cond = TREE_VEC_ELT (condv, i);
18640       tree incr = TREE_VEC_ELT (incrv, i);
18641
18642       if (type_dependent_expression_p (decl))
18643         return true;
18644
18645       if (init && type_dependent_expression_p (init))
18646         return true;
18647
18648       if (type_dependent_expression_p (cond))
18649         return true;
18650
18651       if (COMPARISON_CLASS_P (cond)
18652           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
18653               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
18654         return true;
18655
18656       if (TREE_CODE (incr) == MODOP_EXPR)
18657         {
18658           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
18659               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
18660             return true;
18661         }
18662       else if (type_dependent_expression_p (incr))
18663         return true;
18664       else if (TREE_CODE (incr) == MODIFY_EXPR)
18665         {
18666           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
18667             return true;
18668           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
18669             {
18670               tree t = TREE_OPERAND (incr, 1);
18671               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
18672                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
18673                 return true;
18674             }
18675         }
18676     }
18677
18678   return false;
18679 }
18680
18681 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
18682    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
18683    no such TYPE can be found.  Note that this function peers inside
18684    uninstantiated templates and therefore should be used only in
18685    extremely limited situations.  ONLY_CURRENT_P restricts this
18686    peering to the currently open classes hierarchy (which is required
18687    when comparing types).  */
18688
18689 tree
18690 resolve_typename_type (tree type, bool only_current_p)
18691 {
18692   tree scope;
18693   tree name;
18694   tree decl;
18695   int quals;
18696   tree pushed_scope;
18697   tree result;
18698
18699   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
18700
18701   scope = TYPE_CONTEXT (type);
18702   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
18703      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
18704      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
18705      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
18706      identifier  of the TYPENAME_TYPE anymore.
18707      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
18708      TYPENAME_TYPE instead, we avoid messing up with a possible
18709      typedef variant case.  */
18710   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
18711
18712   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
18713      it first before we can figure out what NAME refers to.  */
18714   if (TREE_CODE (scope) == TYPENAME_TYPE)
18715     scope = resolve_typename_type (scope, only_current_p);
18716   /* If we don't know what SCOPE refers to, then we cannot resolve the
18717      TYPENAME_TYPE.  */
18718   if (TREE_CODE (scope) == TYPENAME_TYPE)
18719     return type;
18720   /* If the SCOPE is a template type parameter, we have no way of
18721      resolving the name.  */
18722   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
18723     return type;
18724   /* If the SCOPE is not the current instantiation, there's no reason
18725      to look inside it.  */
18726   if (only_current_p && !currently_open_class (scope))
18727     return type;
18728   /* If this is a typedef, we don't want to look inside (c++/11987).  */
18729   if (typedef_variant_p (type))
18730     return type;
18731   /* If SCOPE isn't the template itself, it will not have a valid
18732      TYPE_FIELDS list.  */
18733   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
18734     /* scope is either the template itself or a compatible instantiation
18735        like X<T>, so look up the name in the original template.  */
18736     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
18737   else
18738     /* scope is a partial instantiation, so we can't do the lookup or we
18739        will lose the template arguments.  */
18740     return type;
18741   /* Enter the SCOPE so that name lookup will be resolved as if we
18742      were in the class definition.  In particular, SCOPE will no
18743      longer be considered a dependent type.  */
18744   pushed_scope = push_scope (scope);
18745   /* Look up the declaration.  */
18746   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
18747
18748   result = NULL_TREE;
18749   
18750   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
18751      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
18752   if (!decl)
18753     /*nop*/;
18754   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
18755            && TREE_CODE (decl) == TYPE_DECL)
18756     {
18757       result = TREE_TYPE (decl);
18758       if (result == error_mark_node)
18759         result = NULL_TREE;
18760     }
18761   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
18762            && DECL_CLASS_TEMPLATE_P (decl))
18763     {
18764       tree tmpl;
18765       tree args;
18766       /* Obtain the template and the arguments.  */
18767       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
18768       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
18769       /* Instantiate the template.  */
18770       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
18771                                       /*entering_scope=*/0,
18772                                       tf_error | tf_user);
18773       if (result == error_mark_node)
18774         result = NULL_TREE;
18775     }
18776   
18777   /* Leave the SCOPE.  */
18778   if (pushed_scope)
18779     pop_scope (pushed_scope);
18780
18781   /* If we failed to resolve it, return the original typename.  */
18782   if (!result)
18783     return type;
18784   
18785   /* If lookup found a typename type, resolve that too.  */
18786   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
18787     {
18788       /* Ill-formed programs can cause infinite recursion here, so we
18789          must catch that.  */
18790       TYPENAME_IS_RESOLVING_P (type) = 1;
18791       result = resolve_typename_type (result, only_current_p);
18792       TYPENAME_IS_RESOLVING_P (type) = 0;
18793     }
18794   
18795   /* Qualify the resulting type.  */
18796   quals = cp_type_quals (type);
18797   if (quals)
18798     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
18799
18800   return result;
18801 }
18802
18803 /* EXPR is an expression which is not type-dependent.  Return a proxy
18804    for EXPR that can be used to compute the types of larger
18805    expressions containing EXPR.  */
18806
18807 tree
18808 build_non_dependent_expr (tree expr)
18809 {
18810   tree inner_expr;
18811
18812   /* Preserve null pointer constants so that the type of things like
18813      "p == 0" where "p" is a pointer can be determined.  */
18814   if (null_ptr_cst_p (expr))
18815     return expr;
18816   /* Preserve OVERLOADs; the functions must be available to resolve
18817      types.  */
18818   inner_expr = expr;
18819   if (TREE_CODE (inner_expr) == STMT_EXPR)
18820     inner_expr = stmt_expr_value_expr (inner_expr);
18821   if (TREE_CODE (inner_expr) == ADDR_EXPR)
18822     inner_expr = TREE_OPERAND (inner_expr, 0);
18823   if (TREE_CODE (inner_expr) == COMPONENT_REF)
18824     inner_expr = TREE_OPERAND (inner_expr, 1);
18825   if (is_overloaded_fn (inner_expr)
18826       || TREE_CODE (inner_expr) == OFFSET_REF)
18827     return expr;
18828   /* There is no need to return a proxy for a variable.  */
18829   if (TREE_CODE (expr) == VAR_DECL)
18830     return expr;
18831   /* Preserve string constants; conversions from string constants to
18832      "char *" are allowed, even though normally a "const char *"
18833      cannot be used to initialize a "char *".  */
18834   if (TREE_CODE (expr) == STRING_CST)
18835     return expr;
18836   /* Preserve arithmetic constants, as an optimization -- there is no
18837      reason to create a new node.  */
18838   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
18839     return expr;
18840   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
18841      There is at least one place where we want to know that a
18842      particular expression is a throw-expression: when checking a ?:
18843      expression, there are special rules if the second or third
18844      argument is a throw-expression.  */
18845   if (TREE_CODE (expr) == THROW_EXPR)
18846     return expr;
18847
18848   if (TREE_CODE (expr) == COND_EXPR)
18849     return build3 (COND_EXPR,
18850                    TREE_TYPE (expr),
18851                    TREE_OPERAND (expr, 0),
18852                    (TREE_OPERAND (expr, 1)
18853                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
18854                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
18855                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
18856   if (TREE_CODE (expr) == COMPOUND_EXPR
18857       && !COMPOUND_EXPR_OVERLOADED (expr))
18858     return build2 (COMPOUND_EXPR,
18859                    TREE_TYPE (expr),
18860                    TREE_OPERAND (expr, 0),
18861                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
18862
18863   /* Keep dereferences outside the NON_DEPENDENT_EXPR so lvalue_kind
18864      doesn't need to look inside.  */
18865   if (TREE_CODE (expr) == INDIRECT_REF && REFERENCE_REF_P (expr))
18866     return convert_from_reference (build_non_dependent_expr
18867                                    (TREE_OPERAND (expr, 0)));
18868
18869   /* If the type is unknown, it can't really be non-dependent */
18870   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
18871
18872   /* Otherwise, build a NON_DEPENDENT_EXPR.  */
18873   return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
18874 }
18875
18876 /* ARGS is a vector of expressions as arguments to a function call.
18877    Replace the arguments with equivalent non-dependent expressions.
18878    This modifies ARGS in place.  */
18879
18880 void
18881 make_args_non_dependent (VEC(tree,gc) *args)
18882 {
18883   unsigned int ix;
18884   tree arg;
18885
18886   FOR_EACH_VEC_ELT (tree, args, ix, arg)
18887     {
18888       tree newarg = build_non_dependent_expr (arg);
18889       if (newarg != arg)
18890         VEC_replace (tree, args, ix, newarg);
18891     }
18892 }
18893
18894 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
18895    with a level one deeper than the actual template parms.  */
18896
18897 tree
18898 make_auto (void)
18899 {
18900   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
18901   TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
18902                                TYPE_DECL, get_identifier ("auto"), au);
18903   TYPE_STUB_DECL (au) = TYPE_NAME (au);
18904   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
18905     (0, processing_template_decl + 1, processing_template_decl + 1,
18906      0, TYPE_NAME (au), NULL_TREE);
18907   TYPE_CANONICAL (au) = canonical_type_parameter (au);
18908   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
18909   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
18910
18911   return au;
18912 }
18913
18914 /* Given type ARG, return std::initializer_list<ARG>.  */
18915
18916 static tree
18917 listify (tree arg)
18918 {
18919   tree std_init_list = namespace_binding
18920     (get_identifier ("initializer_list"), std_node);
18921   tree argvec;
18922   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
18923     {    
18924       error ("deducing from brace-enclosed initializer list requires "
18925              "#include <initializer_list>");
18926       return error_mark_node;
18927     }
18928   argvec = make_tree_vec (1);
18929   TREE_VEC_ELT (argvec, 0) = arg;
18930   return lookup_template_class (std_init_list, argvec, NULL_TREE,
18931                                 NULL_TREE, 0, tf_warning_or_error);
18932 }
18933
18934 /* Replace auto in TYPE with std::initializer_list<auto>.  */
18935
18936 static tree
18937 listify_autos (tree type, tree auto_node)
18938 {
18939   tree init_auto = listify (auto_node);
18940   tree argvec = make_tree_vec (1);
18941   TREE_VEC_ELT (argvec, 0) = init_auto;
18942   if (processing_template_decl)
18943     argvec = add_to_template_args (current_template_args (), argvec);
18944   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
18945 }
18946
18947 /* walk_tree helper for do_auto_deduction.  */
18948
18949 static tree
18950 contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
18951                  void *type)
18952 {
18953   /* Is this a variable with the type we're looking for?  */
18954   if (DECL_P (*tp)
18955       && TREE_TYPE (*tp) == type)
18956     return *tp;
18957   else
18958     return NULL_TREE;
18959 }
18960
18961 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
18962    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
18963
18964 tree
18965 do_auto_deduction (tree type, tree init, tree auto_node)
18966 {
18967   tree parms, tparms, targs;
18968   tree args[1];
18969   tree decl;
18970   int val;
18971
18972   /* The name of the object being declared shall not appear in the
18973      initializer expression.  */
18974   decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
18975   if (decl)
18976     {
18977       error ("variable %q#D with %<auto%> type used in its own "
18978              "initializer", decl);
18979       return error_mark_node;
18980     }
18981
18982   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
18983      with either a new invented type template parameter U or, if the
18984      initializer is a braced-init-list (8.5.4), with
18985      std::initializer_list<U>.  */
18986   if (BRACE_ENCLOSED_INITIALIZER_P (init))
18987     type = listify_autos (type, auto_node);
18988
18989   init = resolve_nondeduced_context (init);
18990
18991   parms = build_tree_list (NULL_TREE, type);
18992   args[0] = init;
18993   tparms = make_tree_vec (1);
18994   targs = make_tree_vec (1);
18995   TREE_VEC_ELT (tparms, 0)
18996     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
18997   val = type_unification_real (tparms, targs, parms, args, 1, 0,
18998                                DEDUCE_CALL, LOOKUP_NORMAL);
18999   if (val > 0)
19000     {
19001       if (type && type != error_mark_node)
19002         /* If type is error_mark_node a diagnostic must have been
19003            emitted by now.  Also, having a mention to '<type error>'
19004            in the diagnostic is not really useful to the user.  */
19005         error ("unable to deduce %qT from %qE", type, init);
19006       return error_mark_node;
19007     }
19008
19009   /* If the list of declarators contains more than one declarator, the type
19010      of each declared variable is determined as described above. If the
19011      type deduced for the template parameter U is not the same in each
19012      deduction, the program is ill-formed.  */
19013   if (TREE_TYPE (auto_node)
19014       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
19015     {
19016       error ("inconsistent deduction for %qT: %qT and then %qT",
19017              auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
19018       return error_mark_node;
19019     }
19020   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
19021
19022   if (processing_template_decl)
19023     targs = add_to_template_args (current_template_args (), targs);
19024   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
19025 }
19026
19027 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
19028    result.  */
19029
19030 tree
19031 splice_late_return_type (tree type, tree late_return_type)
19032 {
19033   tree argvec;
19034
19035   if (late_return_type == NULL_TREE)
19036     return type;
19037   argvec = make_tree_vec (1);
19038   TREE_VEC_ELT (argvec, 0) = late_return_type;
19039   if (processing_template_decl)
19040     argvec = add_to_template_args (current_template_args (), argvec);
19041   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
19042 }
19043
19044 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
19045
19046 bool
19047 is_auto (const_tree type)
19048 {
19049   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
19050       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
19051     return true;
19052   else
19053     return false;
19054 }
19055
19056 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
19057    appear as a type-specifier for the declaration in question, we don't
19058    have to look through the whole type.  */
19059
19060 tree
19061 type_uses_auto (tree type)
19062 {
19063   enum tree_code code;
19064   if (is_auto (type))
19065     return type;
19066
19067   code = TREE_CODE (type);
19068
19069   if (code == POINTER_TYPE || code == REFERENCE_TYPE
19070       || code == OFFSET_TYPE || code == FUNCTION_TYPE
19071       || code == METHOD_TYPE || code == ARRAY_TYPE)
19072     return type_uses_auto (TREE_TYPE (type));
19073
19074   if (TYPE_PTRMEMFUNC_P (type))
19075     return type_uses_auto (TREE_TYPE (TREE_TYPE
19076                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
19077
19078   return NULL_TREE;
19079 }
19080
19081 /* For a given template T, return the vector of typedefs referenced
19082    in T for which access check is needed at T instantiation time.
19083    T is either  a FUNCTION_DECL or a RECORD_TYPE.
19084    Those typedefs were added to T by the function
19085    append_type_to_template_for_access_check.  */
19086
19087 VEC(qualified_typedef_usage_t,gc)*
19088 get_types_needing_access_check (tree t)
19089 {
19090   tree ti;
19091   VEC(qualified_typedef_usage_t,gc) *result = NULL;
19092
19093   if (!t || t == error_mark_node)
19094     return NULL;
19095
19096   if (!(ti = get_template_info (t)))
19097     return NULL;
19098
19099   if (CLASS_TYPE_P (t)
19100       || TREE_CODE (t) == FUNCTION_DECL)
19101     {
19102       if (!TI_TEMPLATE (ti))
19103         return NULL;
19104
19105       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
19106     }
19107
19108   return result;
19109 }
19110
19111 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
19112    tied to T. That list of typedefs will be access checked at
19113    T instantiation time.
19114    T is either a FUNCTION_DECL or a RECORD_TYPE.
19115    TYPE_DECL is a TYPE_DECL node representing a typedef.
19116    SCOPE is the scope through which TYPE_DECL is accessed.
19117    LOCATION is the location of the usage point of TYPE_DECL.
19118
19119    This function is a subroutine of
19120    append_type_to_template_for_access_check.  */
19121
19122 static void
19123 append_type_to_template_for_access_check_1 (tree t,
19124                                             tree type_decl,
19125                                             tree scope,
19126                                             location_t location)
19127 {
19128   qualified_typedef_usage_t typedef_usage;
19129   tree ti;
19130
19131   if (!t || t == error_mark_node)
19132     return;
19133
19134   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
19135                || CLASS_TYPE_P (t))
19136               && type_decl
19137               && TREE_CODE (type_decl) == TYPE_DECL
19138               && scope);
19139
19140   if (!(ti = get_template_info (t)))
19141     return;
19142
19143   gcc_assert (TI_TEMPLATE (ti));
19144
19145   typedef_usage.typedef_decl = type_decl;
19146   typedef_usage.context = scope;
19147   typedef_usage.locus = location;
19148
19149   VEC_safe_push (qualified_typedef_usage_t, gc,
19150                  TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
19151                  &typedef_usage);
19152 }
19153
19154 /* Append TYPE_DECL to the template TEMPL.
19155    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
19156    At TEMPL instanciation time, TYPE_DECL will be checked to see
19157    if it can be accessed through SCOPE.
19158    LOCATION is the location of the usage point of TYPE_DECL.
19159
19160    e.g. consider the following code snippet:
19161
19162      class C
19163      {
19164        typedef int myint;
19165      };
19166
19167      template<class U> struct S
19168      {
19169        C::myint mi; // <-- usage point of the typedef C::myint
19170      };
19171
19172      S<char> s;
19173
19174    At S<char> instantiation time, we need to check the access of C::myint
19175    In other words, we need to check the access of the myint typedef through
19176    the C scope. For that purpose, this function will add the myint typedef
19177    and the scope C through which its being accessed to a list of typedefs
19178    tied to the template S. That list will be walked at template instantiation
19179    time and access check performed on each typedefs it contains.
19180    Note that this particular code snippet should yield an error because
19181    myint is private to C.  */
19182
19183 void
19184 append_type_to_template_for_access_check (tree templ,
19185                                           tree type_decl,
19186                                           tree scope,
19187                                           location_t location)
19188 {
19189   qualified_typedef_usage_t *iter;
19190   int i;
19191
19192   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
19193
19194   /* Make sure we don't append the type to the template twice.  */
19195   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
19196                     get_types_needing_access_check (templ),
19197                     i, iter)
19198     if (iter->typedef_decl == type_decl && scope == iter->context)
19199       return;
19200
19201   append_type_to_template_for_access_check_1 (templ, type_decl,
19202                                               scope, location);
19203 }
19204
19205 /* Set up the hash tables for template instantiations.  */
19206
19207 void
19208 init_template_processing (void)
19209 {
19210   decl_specializations = htab_create_ggc (37,
19211                                           hash_specialization,
19212                                           eq_specializations,
19213                                           ggc_free);
19214   type_specializations = htab_create_ggc (37,
19215                                           hash_specialization,
19216                                           eq_specializations,
19217                                           ggc_free);
19218 }
19219
19220 /* Print stats about the template hash tables for -fstats.  */
19221
19222 void
19223 print_template_statistics (void)
19224 {
19225   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
19226            "%f collisions\n", (long) htab_size (decl_specializations),
19227            (long) htab_elements (decl_specializations),
19228            htab_collisions (decl_specializations));
19229   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
19230            "%f collisions\n", (long) htab_size (type_specializations),
19231            (long) htab_elements (type_specializations),
19232            htab_collisions (type_specializations));
19233 }
19234
19235 #include "gt-cp-pt.h"