OSDN Git Service

Fix PR c++/47311
[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 (()) pending_template {
57   struct pending_template *next;
58   struct tinst_level *tinst;
59 };
60
61 static GTY(()) struct pending_template *pending_templates;
62 static GTY(()) struct pending_template *last_pending_template;
63
64 int processing_template_parmlist;
65 static int template_header_count;
66
67 static GTY(()) tree saved_trees;
68 static VEC(int,heap) *inline_parm_levels;
69
70 static GTY(()) struct tinst_level *current_tinst_level;
71
72 static GTY(()) tree saved_access_scope;
73
74 /* Live only within one (recursive) call to tsubst_expr.  We use
75    this to pass the statement expression node from the STMT_EXPR
76    to the EXPR_STMT that is its result.  */
77 static tree cur_stmt_expr;
78
79 /* A map from local variable declarations in the body of the template
80    presently being instantiated to the corresponding instantiated
81    local variables.  */
82 static htab_t local_specializations;
83
84 typedef struct GTY(()) spec_entry
85 {
86   tree tmpl;
87   tree args;
88   tree spec;
89 } spec_entry;
90
91 static GTY ((param_is (spec_entry)))
92   htab_t decl_specializations;
93
94 static GTY ((param_is (spec_entry)))
95   htab_t type_specializations;
96
97 /* Contains canonical template parameter types. The vector is indexed by
98    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
99    TREE_LIST, whose TREE_VALUEs contain the canonical template
100    parameters of various types and levels.  */
101 static GTY(()) VEC(tree,gc) *canonical_template_parms;
102
103 #define UNIFY_ALLOW_NONE 0
104 #define UNIFY_ALLOW_MORE_CV_QUAL 1
105 #define UNIFY_ALLOW_LESS_CV_QUAL 2
106 #define UNIFY_ALLOW_DERIVED 4
107 #define UNIFY_ALLOW_INTEGER 8
108 #define UNIFY_ALLOW_OUTER_LEVEL 16
109 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
110 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
111
112 static void push_access_scope (tree);
113 static void pop_access_scope (tree);
114 static bool resolve_overloaded_unification (tree, tree, tree, tree,
115                                             unification_kind_t, int);
116 static int try_one_overload (tree, tree, tree, tree, tree,
117                              unification_kind_t, int, bool);
118 static int unify (tree, tree, tree, tree, int);
119 static void add_pending_template (tree);
120 static tree reopen_tinst_level (struct tinst_level *);
121 static tree tsubst_initializer_list (tree, tree);
122 static tree get_class_bindings (tree, tree, tree);
123 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
124                                    bool, bool);
125 static void tsubst_enum (tree, tree, tree);
126 static tree add_to_template_args (tree, tree);
127 static tree add_outermost_template_args (tree, tree);
128 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
129 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
130                                              tree);
131 static int type_unification_real (tree, tree, tree, const tree *,
132                                   unsigned int, int, unification_kind_t, int);
133 static void note_template_header (int);
134 static tree convert_nontype_argument_function (tree, tree);
135 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
136 static tree convert_template_argument (tree, tree, tree,
137                                        tsubst_flags_t, int, tree);
138 static int for_each_template_parm (tree, tree_fn_t, void*,
139                                    struct pointer_set_t*, bool);
140 static tree expand_template_argument_pack (tree);
141 static tree build_template_parm_index (int, int, int, int, tree, tree);
142 static bool inline_needs_template_parms (tree);
143 static void push_inline_template_parms_recursive (tree, int);
144 static tree retrieve_local_specialization (tree);
145 static void register_local_specialization (tree, tree);
146 static hashval_t hash_specialization (const void *p);
147 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
148 static int mark_template_parm (tree, void *);
149 static int template_parm_this_level_p (tree, void *);
150 static tree tsubst_friend_function (tree, tree);
151 static tree tsubst_friend_class (tree, tree);
152 static int can_complete_type_without_circularity (tree);
153 static tree get_bindings (tree, tree, tree, bool);
154 static int template_decl_level (tree);
155 static int check_cv_quals_for_unify (int, tree, tree);
156 static void template_parm_level_and_index (tree, int*, int*);
157 static int unify_pack_expansion (tree, tree, tree, tree, int, bool, bool);
158 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
159 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
160 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
161 static void regenerate_decl_from_template (tree, tree);
162 static tree most_specialized_class (tree, tree, tsubst_flags_t);
163 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
164 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
165 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
166 static bool check_specialization_scope (void);
167 static tree process_partial_specialization (tree);
168 static void set_current_access_from_decl (tree);
169 static tree get_template_base (tree, tree, tree, tree);
170 static tree try_class_unification (tree, tree, tree, tree);
171 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
172                                            tree, tree);
173 static bool template_template_parm_bindings_ok_p (tree, tree);
174 static int template_args_equal (tree, tree);
175 static void tsubst_default_arguments (tree);
176 static tree for_each_template_parm_r (tree *, int *, void *);
177 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
178 static void copy_default_args_to_explicit_spec (tree);
179 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
180 static int eq_local_specializations (const void *, const void *);
181 static bool dependent_template_arg_p (tree);
182 static bool any_template_arguments_need_structural_equality_p (tree);
183 static bool dependent_type_p_r (tree);
184 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
185 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
186 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
187 static tree tsubst_decl (tree, tree, tsubst_flags_t);
188 static void perform_typedefs_access_check (tree tmpl, tree targs);
189 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
190                                                         location_t);
191 static tree listify (tree);
192 static tree listify_autos (tree, tree);
193 static tree template_parm_to_arg (tree t);
194 static tree current_template_args (void);
195 static tree fixup_template_type_parm_type (tree, int);
196 static tree fixup_template_parm_index (tree, tree, int);
197 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
198
199 /* Make the current scope suitable for access checking when we are
200    processing T.  T can be FUNCTION_DECL for instantiated function
201    template, or VAR_DECL for static member variable (need by
202    instantiate_decl).  */
203
204 static void
205 push_access_scope (tree t)
206 {
207   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
208               || TREE_CODE (t) == VAR_DECL);
209
210   if (DECL_FRIEND_CONTEXT (t))
211     push_nested_class (DECL_FRIEND_CONTEXT (t));
212   else if (DECL_CLASS_SCOPE_P (t))
213     push_nested_class (DECL_CONTEXT (t));
214   else
215     push_to_top_level ();
216
217   if (TREE_CODE (t) == FUNCTION_DECL)
218     {
219       saved_access_scope = tree_cons
220         (NULL_TREE, current_function_decl, saved_access_scope);
221       current_function_decl = t;
222     }
223 }
224
225 /* Restore the scope set up by push_access_scope.  T is the node we
226    are processing.  */
227
228 static void
229 pop_access_scope (tree t)
230 {
231   if (TREE_CODE (t) == FUNCTION_DECL)
232     {
233       current_function_decl = TREE_VALUE (saved_access_scope);
234       saved_access_scope = TREE_CHAIN (saved_access_scope);
235     }
236
237   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
238     pop_nested_class ();
239   else
240     pop_from_top_level ();
241 }
242
243 /* Do any processing required when DECL (a member template
244    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
245    to DECL, unless it is a specialization, in which case the DECL
246    itself is returned.  */
247
248 tree
249 finish_member_template_decl (tree decl)
250 {
251   if (decl == error_mark_node)
252     return error_mark_node;
253
254   gcc_assert (DECL_P (decl));
255
256   if (TREE_CODE (decl) == TYPE_DECL)
257     {
258       tree type;
259
260       type = TREE_TYPE (decl);
261       if (type == error_mark_node)
262         return error_mark_node;
263       if (MAYBE_CLASS_TYPE_P (type)
264           && CLASSTYPE_TEMPLATE_INFO (type)
265           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
266         {
267           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
268           check_member_template (tmpl);
269           return tmpl;
270         }
271       return NULL_TREE;
272     }
273   else if (TREE_CODE (decl) == FIELD_DECL)
274     error ("data member %qD cannot be a member template", decl);
275   else if (DECL_TEMPLATE_INFO (decl))
276     {
277       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
278         {
279           check_member_template (DECL_TI_TEMPLATE (decl));
280           return DECL_TI_TEMPLATE (decl);
281         }
282       else
283         return decl;
284     }
285   else
286     error ("invalid member template declaration %qD", decl);
287
288   return error_mark_node;
289 }
290
291 /* Create a template info node.  */
292
293 tree
294 build_template_info (tree template_decl, tree template_args)
295 {
296   tree result = make_node (TEMPLATE_INFO);
297   TI_TEMPLATE (result) = template_decl;
298   TI_ARGS (result) = template_args;
299   return result;
300 }
301
302 /* Return the template info node corresponding to T, whatever T is.  */
303
304 tree
305 get_template_info (const_tree t)
306 {
307   tree tinfo = NULL_TREE;
308
309   if (!t || t == error_mark_node)
310     return NULL;
311
312   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
313     tinfo = DECL_TEMPLATE_INFO (t);
314
315   if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
316     t = TREE_TYPE (t);
317
318   if (TAGGED_TYPE_P (t))
319     tinfo = TYPE_TEMPLATE_INFO (t);
320   else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
321     tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
322
323   return tinfo;
324 }
325
326 /* Returns the template nesting level of the indicated class TYPE.
327
328    For example, in:
329      template <class T>
330      struct A
331      {
332        template <class U>
333        struct B {};
334      };
335
336    A<T>::B<U> has depth two, while A<T> has depth one.
337    Both A<T>::B<int> and A<int>::B<U> have depth one, if
338    they are instantiations, not specializations.
339
340    This function is guaranteed to return 0 if passed NULL_TREE so
341    that, for example, `template_class_depth (current_class_type)' is
342    always safe.  */
343
344 int
345 template_class_depth (tree type)
346 {
347   int depth;
348
349   for (depth = 0;
350        type && TREE_CODE (type) != NAMESPACE_DECL;
351        type = (TREE_CODE (type) == FUNCTION_DECL)
352          ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
353     {
354       tree tinfo = get_template_info (type);
355
356       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
357           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
358         ++depth;
359     }
360
361   return depth;
362 }
363
364 /* Subroutine of maybe_begin_member_template_processing.
365    Returns true if processing DECL needs us to push template parms.  */
366
367 static bool
368 inline_needs_template_parms (tree decl)
369 {
370   if (! DECL_TEMPLATE_INFO (decl))
371     return false;
372
373   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
374           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
375 }
376
377 /* Subroutine of maybe_begin_member_template_processing.
378    Push the template parms in PARMS, starting from LEVELS steps into the
379    chain, and ending at the beginning, since template parms are listed
380    innermost first.  */
381
382 static void
383 push_inline_template_parms_recursive (tree parmlist, int levels)
384 {
385   tree parms = TREE_VALUE (parmlist);
386   int i;
387
388   if (levels > 1)
389     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
390
391   ++processing_template_decl;
392   current_template_parms
393     = tree_cons (size_int (processing_template_decl),
394                  parms, current_template_parms);
395   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
396
397   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
398                NULL);
399   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
400     {
401       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
402
403       if (parm == error_mark_node)
404         continue;
405
406       gcc_assert (DECL_P (parm));
407
408       switch (TREE_CODE (parm))
409         {
410         case TYPE_DECL:
411         case TEMPLATE_DECL:
412           pushdecl (parm);
413           break;
414
415         case PARM_DECL:
416           {
417             /* Make a CONST_DECL as is done in process_template_parm.
418                It is ugly that we recreate this here; the original
419                version built in process_template_parm is no longer
420                available.  */
421             tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
422                                     CONST_DECL, DECL_NAME (parm),
423                                     TREE_TYPE (parm));
424             DECL_ARTIFICIAL (decl) = 1;
425             TREE_CONSTANT (decl) = 1;
426             TREE_READONLY (decl) = 1;
427             DECL_INITIAL (decl) = DECL_INITIAL (parm);
428             SET_DECL_TEMPLATE_PARM_P (decl);
429             pushdecl (decl);
430           }
431           break;
432
433         default:
434           gcc_unreachable ();
435         }
436     }
437 }
438
439 /* Restore the template parameter context for a member template or
440    a friend template defined in a class definition.  */
441
442 void
443 maybe_begin_member_template_processing (tree decl)
444 {
445   tree parms;
446   int levels = 0;
447
448   if (inline_needs_template_parms (decl))
449     {
450       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
451       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
452
453       if (DECL_TEMPLATE_SPECIALIZATION (decl))
454         {
455           --levels;
456           parms = TREE_CHAIN (parms);
457         }
458
459       push_inline_template_parms_recursive (parms, levels);
460     }
461
462   /* Remember how many levels of template parameters we pushed so that
463      we can pop them later.  */
464   VEC_safe_push (int, heap, inline_parm_levels, levels);
465 }
466
467 /* Undo the effects of maybe_begin_member_template_processing.  */
468
469 void
470 maybe_end_member_template_processing (void)
471 {
472   int i;
473   int last;
474
475   if (VEC_length (int, inline_parm_levels) == 0)
476     return;
477
478   last = VEC_pop (int, inline_parm_levels);
479   for (i = 0; i < last; ++i)
480     {
481       --processing_template_decl;
482       current_template_parms = TREE_CHAIN (current_template_parms);
483       poplevel (0, 0, 0);
484     }
485 }
486
487 /* Return a new template argument vector which contains all of ARGS,
488    but has as its innermost set of arguments the EXTRA_ARGS.  */
489
490 static tree
491 add_to_template_args (tree args, tree extra_args)
492 {
493   tree new_args;
494   int extra_depth;
495   int i;
496   int j;
497
498   if (args == NULL_TREE || extra_args == error_mark_node)
499     return extra_args;
500
501   extra_depth = TMPL_ARGS_DEPTH (extra_args);
502   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
503
504   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
505     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
506
507   for (j = 1; j <= extra_depth; ++j, ++i)
508     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
509
510   return new_args;
511 }
512
513 /* Like add_to_template_args, but only the outermost ARGS are added to
514    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
515    (EXTRA_ARGS) levels are added.  This function is used to combine
516    the template arguments from a partial instantiation with the
517    template arguments used to attain the full instantiation from the
518    partial instantiation.  */
519
520 static tree
521 add_outermost_template_args (tree args, tree extra_args)
522 {
523   tree new_args;
524
525   /* If there are more levels of EXTRA_ARGS than there are ARGS,
526      something very fishy is going on.  */
527   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
528
529   /* If *all* the new arguments will be the EXTRA_ARGS, just return
530      them.  */
531   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
532     return extra_args;
533
534   /* For the moment, we make ARGS look like it contains fewer levels.  */
535   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
536
537   new_args = add_to_template_args (args, extra_args);
538
539   /* Now, we restore ARGS to its full dimensions.  */
540   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
541
542   return new_args;
543 }
544
545 /* Return the N levels of innermost template arguments from the ARGS.  */
546
547 tree
548 get_innermost_template_args (tree args, int n)
549 {
550   tree new_args;
551   int extra_levels;
552   int i;
553
554   gcc_assert (n >= 0);
555
556   /* If N is 1, just return the innermost set of template arguments.  */
557   if (n == 1)
558     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
559
560   /* If we're not removing anything, just return the arguments we were
561      given.  */
562   extra_levels = TMPL_ARGS_DEPTH (args) - n;
563   gcc_assert (extra_levels >= 0);
564   if (extra_levels == 0)
565     return args;
566
567   /* Make a new set of arguments, not containing the outer arguments.  */
568   new_args = make_tree_vec (n);
569   for (i = 1; i <= n; ++i)
570     SET_TMPL_ARGS_LEVEL (new_args, i,
571                          TMPL_ARGS_LEVEL (args, i + extra_levels));
572
573   return new_args;
574 }
575
576 /* The inverse of get_innermost_template_args: Return all but the innermost
577    EXTRA_LEVELS levels of template arguments from the ARGS.  */
578
579 static tree
580 strip_innermost_template_args (tree args, int extra_levels)
581 {
582   tree new_args;
583   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
584   int i;
585
586   gcc_assert (n >= 0);
587
588   /* If N is 1, just return the outermost set of template arguments.  */
589   if (n == 1)
590     return TMPL_ARGS_LEVEL (args, 1);
591
592   /* If we're not removing anything, just return the arguments we were
593      given.  */
594   gcc_assert (extra_levels >= 0);
595   if (extra_levels == 0)
596     return args;
597
598   /* Make a new set of arguments, not containing the inner arguments.  */
599   new_args = make_tree_vec (n);
600   for (i = 1; i <= n; ++i)
601     SET_TMPL_ARGS_LEVEL (new_args, i,
602                          TMPL_ARGS_LEVEL (args, i));
603
604   return new_args;
605 }
606
607 /* We've got a template header coming up; push to a new level for storing
608    the parms.  */
609
610 void
611 begin_template_parm_list (void)
612 {
613   /* We use a non-tag-transparent scope here, which causes pushtag to
614      put tags in this scope, rather than in the enclosing class or
615      namespace scope.  This is the right thing, since we want
616      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
617      global template class, push_template_decl handles putting the
618      TEMPLATE_DECL into top-level scope.  For a nested template class,
619      e.g.:
620
621        template <class T> struct S1 {
622          template <class T> struct S2 {};
623        };
624
625      pushtag contains special code to call pushdecl_with_scope on the
626      TEMPLATE_DECL for S2.  */
627   begin_scope (sk_template_parms, NULL);
628   ++processing_template_decl;
629   ++processing_template_parmlist;
630   note_template_header (0);
631 }
632
633 /* This routine is called when a specialization is declared.  If it is
634    invalid to declare a specialization here, an error is reported and
635    false is returned, otherwise this routine will return true.  */
636
637 static bool
638 check_specialization_scope (void)
639 {
640   tree scope = current_scope ();
641
642   /* [temp.expl.spec]
643
644      An explicit specialization shall be declared in the namespace of
645      which the template is a member, or, for member templates, in the
646      namespace of which the enclosing class or enclosing class
647      template is a member.  An explicit specialization of a member
648      function, member class or static data member of a class template
649      shall be declared in the namespace of which the class template
650      is a member.  */
651   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
652     {
653       error ("explicit specialization in non-namespace scope %qD", scope);
654       return false;
655     }
656
657   /* [temp.expl.spec]
658
659      In an explicit specialization declaration for a member of a class
660      template or a member template that appears in namespace scope,
661      the member template and some of its enclosing class templates may
662      remain unspecialized, except that the declaration shall not
663      explicitly specialize a class member template if its enclosing
664      class templates are not explicitly specialized as well.  */
665   if (current_template_parms)
666     {
667       error ("enclosing class templates are not explicitly specialized");
668       return false;
669     }
670
671   return true;
672 }
673
674 /* We've just seen template <>.  */
675
676 bool
677 begin_specialization (void)
678 {
679   begin_scope (sk_template_spec, NULL);
680   note_template_header (1);
681   return check_specialization_scope ();
682 }
683
684 /* Called at then end of processing a declaration preceded by
685    template<>.  */
686
687 void
688 end_specialization (void)
689 {
690   finish_scope ();
691   reset_specialization ();
692 }
693
694 /* Any template <>'s that we have seen thus far are not referring to a
695    function specialization.  */
696
697 void
698 reset_specialization (void)
699 {
700   processing_specialization = 0;
701   template_header_count = 0;
702 }
703
704 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
705    it was of the form template <>.  */
706
707 static void
708 note_template_header (int specialization)
709 {
710   processing_specialization = specialization;
711   template_header_count++;
712 }
713
714 /* We're beginning an explicit instantiation.  */
715
716 void
717 begin_explicit_instantiation (void)
718 {
719   gcc_assert (!processing_explicit_instantiation);
720   processing_explicit_instantiation = true;
721 }
722
723
724 void
725 end_explicit_instantiation (void)
726 {
727   gcc_assert (processing_explicit_instantiation);
728   processing_explicit_instantiation = false;
729 }
730
731 /* An explicit specialization or partial specialization TMPL is being
732    declared.  Check that the namespace in which the specialization is
733    occurring is permissible.  Returns false iff it is invalid to
734    specialize TMPL in the current namespace.  */
735
736 static bool
737 check_specialization_namespace (tree tmpl)
738 {
739   tree tpl_ns = decl_namespace_context (tmpl);
740
741   /* [tmpl.expl.spec]
742
743      An explicit specialization shall be declared in the namespace of
744      which the template is a member, or, for member templates, in the
745      namespace of which the enclosing class or enclosing class
746      template is a member.  An explicit specialization of a member
747      function, member class or static data member of a class template
748      shall be declared in the namespace of which the class template is
749      a member.  */
750   if (current_scope() != DECL_CONTEXT (tmpl)
751       && !at_namespace_scope_p ())
752     {
753       error ("specialization of %qD must appear at namespace scope", tmpl);
754       return false;
755     }
756   if (is_associated_namespace (current_namespace, tpl_ns))
757     /* Same or super-using namespace.  */
758     return true;
759   else
760     {
761       permerror (input_location, "specialization of %qD in different namespace", tmpl);
762       permerror (input_location, "  from definition of %q+#D", tmpl);
763       return false;
764     }
765 }
766
767 /* SPEC is an explicit instantiation.  Check that it is valid to
768    perform this explicit instantiation in the current namespace.  */
769
770 static void
771 check_explicit_instantiation_namespace (tree spec)
772 {
773   tree ns;
774
775   /* DR 275: An explicit instantiation shall appear in an enclosing
776      namespace of its template.  */
777   ns = decl_namespace_context (spec);
778   if (!is_ancestor (current_namespace, ns))
779     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
780                "(which does not enclose namespace %qD)",
781                spec, current_namespace, ns);
782 }
783
784 /* The TYPE is being declared.  If it is a template type, that means it
785    is a partial specialization.  Do appropriate error-checking.  */
786
787 tree
788 maybe_process_partial_specialization (tree type)
789 {
790   tree context;
791
792   if (type == error_mark_node)
793     return error_mark_node;
794
795   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
796     {
797       error ("name of class shadows template template parameter %qD",
798              TYPE_NAME (type));
799       return error_mark_node;
800     }
801
802   context = TYPE_CONTEXT (type);
803
804   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
805     {
806       /* This is for ordinary explicit specialization and partial
807          specialization of a template class such as:
808
809            template <> class C<int>;
810
811          or:
812
813            template <class T> class C<T*>;
814
815          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
816
817       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
818           && !COMPLETE_TYPE_P (type))
819         {
820           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
821           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
822           if (processing_template_decl)
823             {
824               if (push_template_decl (TYPE_MAIN_DECL (type))
825                   == error_mark_node)
826                 return error_mark_node;
827             }
828         }
829       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
830         error ("specialization of %qT after instantiation", type);
831     }
832   else if (CLASS_TYPE_P (type)
833            && !CLASSTYPE_USE_TEMPLATE (type)
834            && CLASSTYPE_TEMPLATE_INFO (type)
835            && context && CLASS_TYPE_P (context)
836            && CLASSTYPE_TEMPLATE_INFO (context))
837     {
838       /* This is for an explicit specialization of member class
839          template according to [temp.expl.spec/18]:
840
841            template <> template <class U> class C<int>::D;
842
843          The context `C<int>' must be an implicit instantiation.
844          Otherwise this is just a member class template declared
845          earlier like:
846
847            template <> class C<int> { template <class U> class D; };
848            template <> template <class U> class C<int>::D;
849
850          In the first case, `C<int>::D' is a specialization of `C<T>::D'
851          while in the second case, `C<int>::D' is a primary template
852          and `C<T>::D' may not exist.  */
853
854       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
855           && !COMPLETE_TYPE_P (type))
856         {
857           tree t;
858           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
859
860           if (current_namespace
861               != decl_namespace_context (tmpl))
862             {
863               permerror (input_location, "specializing %q#T in different namespace", type);
864               permerror (input_location, "  from definition of %q+#D", tmpl);
865             }
866
867           /* Check for invalid specialization after instantiation:
868
869                template <> template <> class C<int>::D<int>;
870                template <> template <class U> class C<int>::D;  */
871
872           for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
873                t; t = TREE_CHAIN (t))
874             {
875               tree inst = TREE_VALUE (t);
876               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst))
877                 {
878                   /* We already have a full specialization of this partial
879                      instantiation.  Reassign it to the new member
880                      specialization template.  */
881                   spec_entry elt;
882                   spec_entry **slot;
883
884                   elt.tmpl = most_general_template (tmpl);
885                   elt.args = CLASSTYPE_TI_ARGS (inst);
886                   elt.spec = inst;
887
888                   htab_remove_elt (type_specializations, &elt);
889
890                   elt.tmpl = tmpl;
891                   elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
892
893                   slot = (spec_entry **)
894                     htab_find_slot (type_specializations, &elt, INSERT);
895                   *slot = ggc_alloc_spec_entry ();
896                   **slot = elt;
897                 }
898               else if (COMPLETE_OR_OPEN_TYPE_P (inst))
899                 /* But if we've had an implicit instantiation, that's a
900                    problem ([temp.expl.spec]/6).  */
901                 error ("specialization %qT after instantiation %qT",
902                        type, inst);
903             }
904
905           /* Mark TYPE as a specialization.  And as a result, we only
906              have one level of template argument for the innermost
907              class template.  */
908           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
909           CLASSTYPE_TI_ARGS (type)
910             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
911         }
912     }
913   else if (processing_specialization)
914     {
915        /* Someday C++0x may allow for enum template specialization.  */
916       if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
917           && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
918         pedwarn (input_location, OPT_pedantic, "template specialization "
919                  "of %qD not allowed by ISO C++", type);
920       else
921         {
922           error ("explicit specialization of non-template %qT", type);
923           return error_mark_node;
924         }
925     }
926
927   return type;
928 }
929
930 /* Returns nonzero if we can optimize the retrieval of specializations
931    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
932    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
933
934 static inline bool
935 optimize_specialization_lookup_p (tree tmpl)
936 {
937   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
938           && DECL_CLASS_SCOPE_P (tmpl)
939           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
940              parameter.  */
941           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
942           /* The optimized lookup depends on the fact that the
943              template arguments for the member function template apply
944              purely to the containing class, which is not true if the
945              containing class is an explicit or partial
946              specialization.  */
947           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
948           && !DECL_MEMBER_TEMPLATE_P (tmpl)
949           && !DECL_CONV_FN_P (tmpl)
950           /* It is possible to have a template that is not a member
951              template and is not a member of a template class:
952
953              template <typename T>
954              struct S { friend A::f(); };
955
956              Here, the friend function is a template, but the context does
957              not have template information.  The optimized lookup relies
958              on having ARGS be the template arguments for both the class
959              and the function template.  */
960           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
961 }
962
963 /* Retrieve the specialization (in the sense of [temp.spec] - a
964    specialization is either an instantiation or an explicit
965    specialization) of TMPL for the given template ARGS.  If there is
966    no such specialization, return NULL_TREE.  The ARGS are a vector of
967    arguments, or a vector of vectors of arguments, in the case of
968    templates with more than one level of parameters.
969
970    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
971    then we search for a partial specialization matching ARGS.  This
972    parameter is ignored if TMPL is not a class template.  */
973
974 static tree
975 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
976 {
977   if (args == error_mark_node)
978     return NULL_TREE;
979
980   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
981
982   /* There should be as many levels of arguments as there are
983      levels of parameters.  */
984   gcc_assert (TMPL_ARGS_DEPTH (args)
985               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
986
987   if (optimize_specialization_lookup_p (tmpl))
988     {
989       tree class_template;
990       tree class_specialization;
991       VEC(tree,gc) *methods;
992       tree fns;
993       int idx;
994
995       /* The template arguments actually apply to the containing
996          class.  Find the class specialization with those
997          arguments.  */
998       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
999       class_specialization
1000         = retrieve_specialization (class_template, args, 0);
1001       if (!class_specialization)
1002         return NULL_TREE;
1003       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1004          for the specialization.  */
1005       idx = class_method_index_for_fn (class_specialization, tmpl);
1006       if (idx == -1)
1007         return NULL_TREE;
1008       /* Iterate through the methods with the indicated name, looking
1009          for the one that has an instance of TMPL.  */
1010       methods = CLASSTYPE_METHOD_VEC (class_specialization);
1011       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
1012         {
1013           tree fn = OVL_CURRENT (fns);
1014           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1015               /* using-declarations can add base methods to the method vec,
1016                  and we don't want those here.  */
1017               && DECL_CONTEXT (fn) == class_specialization)
1018             return fn;
1019         }
1020       return NULL_TREE;
1021     }
1022   else
1023     {
1024       spec_entry *found;
1025       spec_entry elt;
1026       htab_t specializations;
1027
1028       elt.tmpl = tmpl;
1029       elt.args = args;
1030       elt.spec = NULL_TREE;
1031
1032       if (DECL_CLASS_TEMPLATE_P (tmpl))
1033         specializations = type_specializations;
1034       else
1035         specializations = decl_specializations;
1036
1037       if (hash == 0)
1038         hash = hash_specialization (&elt);
1039       found = (spec_entry *) htab_find_with_hash (specializations, &elt, hash);
1040       if (found)
1041         return found->spec;
1042     }
1043
1044   return NULL_TREE;
1045 }
1046
1047 /* Like retrieve_specialization, but for local declarations.  */
1048
1049 static tree
1050 retrieve_local_specialization (tree tmpl)
1051 {
1052   tree spec;
1053
1054   if (local_specializations == NULL)
1055     return NULL_TREE;
1056
1057   spec = (tree) htab_find_with_hash (local_specializations, tmpl,
1058                                      htab_hash_pointer (tmpl));
1059   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
1060 }
1061
1062 /* Returns nonzero iff DECL is a specialization of TMPL.  */
1063
1064 int
1065 is_specialization_of (tree decl, tree tmpl)
1066 {
1067   tree t;
1068
1069   if (TREE_CODE (decl) == FUNCTION_DECL)
1070     {
1071       for (t = decl;
1072            t != NULL_TREE;
1073            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1074         if (t == tmpl)
1075           return 1;
1076     }
1077   else
1078     {
1079       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1080
1081       for (t = TREE_TYPE (decl);
1082            t != NULL_TREE;
1083            t = CLASSTYPE_USE_TEMPLATE (t)
1084              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1085         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1086           return 1;
1087     }
1088
1089   return 0;
1090 }
1091
1092 /* Returns nonzero iff DECL is a specialization of friend declaration
1093    FRIEND_DECL according to [temp.friend].  */
1094
1095 bool
1096 is_specialization_of_friend (tree decl, tree friend_decl)
1097 {
1098   bool need_template = true;
1099   int template_depth;
1100
1101   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1102               || TREE_CODE (decl) == TYPE_DECL);
1103
1104   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1105      of a template class, we want to check if DECL is a specialization
1106      if this.  */
1107   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1108       && DECL_TEMPLATE_INFO (friend_decl)
1109       && !DECL_USE_TEMPLATE (friend_decl))
1110     {
1111       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1112       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1113       need_template = false;
1114     }
1115   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1116            && !PRIMARY_TEMPLATE_P (friend_decl))
1117     need_template = false;
1118
1119   /* There is nothing to do if this is not a template friend.  */
1120   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1121     return false;
1122
1123   if (is_specialization_of (decl, friend_decl))
1124     return true;
1125
1126   /* [temp.friend/6]
1127      A member of a class template may be declared to be a friend of a
1128      non-template class.  In this case, the corresponding member of
1129      every specialization of the class template is a friend of the
1130      class granting friendship.
1131
1132      For example, given a template friend declaration
1133
1134        template <class T> friend void A<T>::f();
1135
1136      the member function below is considered a friend
1137
1138        template <> struct A<int> {
1139          void f();
1140        };
1141
1142      For this type of template friend, TEMPLATE_DEPTH below will be
1143      nonzero.  To determine if DECL is a friend of FRIEND, we first
1144      check if the enclosing class is a specialization of another.  */
1145
1146   template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1147   if (template_depth
1148       && DECL_CLASS_SCOPE_P (decl)
1149       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1150                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1151     {
1152       /* Next, we check the members themselves.  In order to handle
1153          a few tricky cases, such as when FRIEND_DECL's are
1154
1155            template <class T> friend void A<T>::g(T t);
1156            template <class T> template <T t> friend void A<T>::h();
1157
1158          and DECL's are
1159
1160            void A<int>::g(int);
1161            template <int> void A<int>::h();
1162
1163          we need to figure out ARGS, the template arguments from
1164          the context of DECL.  This is required for template substitution
1165          of `T' in the function parameter of `g' and template parameter
1166          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1167
1168       tree context = DECL_CONTEXT (decl);
1169       tree args = NULL_TREE;
1170       int current_depth = 0;
1171
1172       while (current_depth < template_depth)
1173         {
1174           if (CLASSTYPE_TEMPLATE_INFO (context))
1175             {
1176               if (current_depth == 0)
1177                 args = TYPE_TI_ARGS (context);
1178               else
1179                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1180               current_depth++;
1181             }
1182           context = TYPE_CONTEXT (context);
1183         }
1184
1185       if (TREE_CODE (decl) == FUNCTION_DECL)
1186         {
1187           bool is_template;
1188           tree friend_type;
1189           tree decl_type;
1190           tree friend_args_type;
1191           tree decl_args_type;
1192
1193           /* Make sure that both DECL and FRIEND_DECL are templates or
1194              non-templates.  */
1195           is_template = DECL_TEMPLATE_INFO (decl)
1196                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1197           if (need_template ^ is_template)
1198             return false;
1199           else if (is_template)
1200             {
1201               /* If both are templates, check template parameter list.  */
1202               tree friend_parms
1203                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1204                                          args, tf_none);
1205               if (!comp_template_parms
1206                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1207                       friend_parms))
1208                 return false;
1209
1210               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1211             }
1212           else
1213             decl_type = TREE_TYPE (decl);
1214
1215           friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1216                                               tf_none, NULL_TREE);
1217           if (friend_type == error_mark_node)
1218             return false;
1219
1220           /* Check if return types match.  */
1221           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1222             return false;
1223
1224           /* Check if function parameter types match, ignoring the
1225              `this' parameter.  */
1226           friend_args_type = TYPE_ARG_TYPES (friend_type);
1227           decl_args_type = TYPE_ARG_TYPES (decl_type);
1228           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1229             friend_args_type = TREE_CHAIN (friend_args_type);
1230           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1231             decl_args_type = TREE_CHAIN (decl_args_type);
1232
1233           return compparms (decl_args_type, friend_args_type);
1234         }
1235       else
1236         {
1237           /* DECL is a TYPE_DECL */
1238           bool is_template;
1239           tree decl_type = TREE_TYPE (decl);
1240
1241           /* Make sure that both DECL and FRIEND_DECL are templates or
1242              non-templates.  */
1243           is_template
1244             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1245               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1246
1247           if (need_template ^ is_template)
1248             return false;
1249           else if (is_template)
1250             {
1251               tree friend_parms;
1252               /* If both are templates, check the name of the two
1253                  TEMPLATE_DECL's first because is_friend didn't.  */
1254               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1255                   != DECL_NAME (friend_decl))
1256                 return false;
1257
1258               /* Now check template parameter list.  */
1259               friend_parms
1260                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1261                                          args, tf_none);
1262               return comp_template_parms
1263                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1264                  friend_parms);
1265             }
1266           else
1267             return (DECL_NAME (decl)
1268                     == DECL_NAME (friend_decl));
1269         }
1270     }
1271   return false;
1272 }
1273
1274 /* Register the specialization SPEC as a specialization of TMPL with
1275    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1276    is actually just a friend declaration.  Returns SPEC, or an
1277    equivalent prior declaration, if available.  */
1278
1279 static tree
1280 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1281                          hashval_t hash)
1282 {
1283   tree fn;
1284   spec_entry **slot = NULL;
1285   spec_entry elt;
1286
1287   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec));
1288
1289   if (TREE_CODE (spec) == FUNCTION_DECL
1290       && uses_template_parms (DECL_TI_ARGS (spec)))
1291     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1292        register it; we want the corresponding TEMPLATE_DECL instead.
1293        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1294        the more obvious `uses_template_parms (spec)' to avoid problems
1295        with default function arguments.  In particular, given
1296        something like this:
1297
1298           template <class T> void f(T t1, T t = T())
1299
1300        the default argument expression is not substituted for in an
1301        instantiation unless and until it is actually needed.  */
1302     return spec;
1303
1304   if (optimize_specialization_lookup_p (tmpl))
1305     /* We don't put these specializations in the hash table, but we might
1306        want to give an error about a mismatch.  */
1307     fn = retrieve_specialization (tmpl, args, 0);
1308   else
1309     {
1310       elt.tmpl = tmpl;
1311       elt.args = args;
1312       elt.spec = spec;
1313
1314       if (hash == 0)
1315         hash = hash_specialization (&elt);
1316
1317       slot = (spec_entry **)
1318         htab_find_slot_with_hash (decl_specializations, &elt, hash, INSERT);
1319       if (*slot)
1320         fn = (*slot)->spec;
1321       else
1322         fn = NULL_TREE;
1323     }
1324
1325   /* We can sometimes try to re-register a specialization that we've
1326      already got.  In particular, regenerate_decl_from_template calls
1327      duplicate_decls which will update the specialization list.  But,
1328      we'll still get called again here anyhow.  It's more convenient
1329      to simply allow this than to try to prevent it.  */
1330   if (fn == spec)
1331     return spec;
1332   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1333     {
1334       if (DECL_TEMPLATE_INSTANTIATION (fn))
1335         {
1336           if (DECL_ODR_USED (fn)
1337               || DECL_EXPLICIT_INSTANTIATION (fn))
1338             {
1339               error ("specialization of %qD after instantiation",
1340                      fn);
1341               return error_mark_node;
1342             }
1343           else
1344             {
1345               tree clone;
1346               /* This situation should occur only if the first
1347                  specialization is an implicit instantiation, the
1348                  second is an explicit specialization, and the
1349                  implicit instantiation has not yet been used.  That
1350                  situation can occur if we have implicitly
1351                  instantiated a member function and then specialized
1352                  it later.
1353
1354                  We can also wind up here if a friend declaration that
1355                  looked like an instantiation turns out to be a
1356                  specialization:
1357
1358                    template <class T> void foo(T);
1359                    class S { friend void foo<>(int) };
1360                    template <> void foo(int);
1361
1362                  We transform the existing DECL in place so that any
1363                  pointers to it become pointers to the updated
1364                  declaration.
1365
1366                  If there was a definition for the template, but not
1367                  for the specialization, we want this to look as if
1368                  there were no definition, and vice versa.  */
1369               DECL_INITIAL (fn) = NULL_TREE;
1370               duplicate_decls (spec, fn, is_friend);
1371               /* The call to duplicate_decls will have applied
1372                  [temp.expl.spec]:
1373
1374                    An explicit specialization of a function template
1375                    is inline only if it is explicitly declared to be,
1376                    and independently of whether its function template
1377                    is.
1378
1379                 to the primary function; now copy the inline bits to
1380                 the various clones.  */
1381               FOR_EACH_CLONE (clone, fn)
1382                 {
1383                   DECL_DECLARED_INLINE_P (clone)
1384                     = DECL_DECLARED_INLINE_P (fn);
1385                   DECL_SOURCE_LOCATION (clone)
1386                     = DECL_SOURCE_LOCATION (fn);
1387                 }
1388               check_specialization_namespace (fn);
1389
1390               return fn;
1391             }
1392         }
1393       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1394         {
1395           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1396             /* Dup decl failed, but this is a new definition. Set the
1397                line number so any errors match this new
1398                definition.  */
1399             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1400
1401           return fn;
1402         }
1403     }
1404   else if (fn)
1405     return duplicate_decls (spec, fn, is_friend);
1406
1407   /* A specialization must be declared in the same namespace as the
1408      template it is specializing.  */
1409   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1410       && !check_specialization_namespace (tmpl))
1411     DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1412
1413   if (!optimize_specialization_lookup_p (tmpl))
1414     {
1415       gcc_assert (tmpl && args && spec);
1416       *slot = ggc_alloc_spec_entry ();
1417       **slot = elt;
1418       if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1419           && PRIMARY_TEMPLATE_P (tmpl)
1420           && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1421         /* TMPL is a forward declaration of a template function; keep a list
1422            of all specializations in case we need to reassign them to a friend
1423            template later in tsubst_friend_function.  */
1424         DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1425           = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1426     }
1427
1428   return spec;
1429 }
1430
1431 /* Returns true iff two spec_entry nodes are equivalent.  Only compares the
1432    TMPL and ARGS members, ignores SPEC.  */
1433
1434 static int
1435 eq_specializations (const void *p1, const void *p2)
1436 {
1437   const spec_entry *e1 = (const spec_entry *)p1;
1438   const spec_entry *e2 = (const spec_entry *)p2;
1439
1440   return (e1->tmpl == e2->tmpl
1441           && comp_template_args (e1->args, e2->args));
1442 }
1443
1444 /* Returns a hash for a template TMPL and template arguments ARGS.  */
1445
1446 static hashval_t
1447 hash_tmpl_and_args (tree tmpl, tree args)
1448 {
1449   hashval_t val = DECL_UID (tmpl);
1450   return iterative_hash_template_arg (args, val);
1451 }
1452
1453 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1454    ignoring SPEC.  */
1455
1456 static hashval_t
1457 hash_specialization (const void *p)
1458 {
1459   const spec_entry *e = (const spec_entry *)p;
1460   return hash_tmpl_and_args (e->tmpl, e->args);
1461 }
1462
1463 /* Recursively calculate a hash value for a template argument ARG, for use
1464    in the hash tables of template specializations.  */
1465
1466 hashval_t
1467 iterative_hash_template_arg (tree arg, hashval_t val)
1468 {
1469   unsigned HOST_WIDE_INT i;
1470   enum tree_code code;
1471   char tclass;
1472
1473   if (arg == NULL_TREE)
1474     return iterative_hash_object (arg, val);
1475
1476   if (!TYPE_P (arg))
1477     STRIP_NOPS (arg);
1478
1479   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1480     /* We can get one of these when re-hashing a previous entry in the middle
1481        of substituting into a pack expansion.  Just look through it.  */
1482     arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1483
1484   code = TREE_CODE (arg);
1485   tclass = TREE_CODE_CLASS (code);
1486
1487   val = iterative_hash_object (code, val);
1488
1489   switch (code)
1490     {
1491     case ERROR_MARK:
1492       return val;
1493
1494     case IDENTIFIER_NODE:
1495       return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1496
1497     case TREE_VEC:
1498       {
1499         int i, len = TREE_VEC_LENGTH (arg);
1500         for (i = 0; i < len; ++i)
1501           val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1502         return val;
1503       }
1504
1505     case TYPE_PACK_EXPANSION:
1506     case EXPR_PACK_EXPANSION:
1507       return iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1508
1509     case TYPE_ARGUMENT_PACK:
1510     case NONTYPE_ARGUMENT_PACK:
1511       return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1512
1513     case TREE_LIST:
1514       for (; arg; arg = TREE_CHAIN (arg))
1515         val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1516       return val;
1517
1518     case OVERLOAD:
1519       for (; arg; arg = OVL_CHAIN (arg))
1520         val = iterative_hash_template_arg (OVL_FUNCTION (arg), val);
1521       return val;
1522
1523     case CONSTRUCTOR:
1524       {
1525         tree field, value;
1526         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1527           {
1528             val = iterative_hash_template_arg (field, val);
1529             val = iterative_hash_template_arg (value, val);
1530           }
1531         return val;
1532       }
1533
1534     case PARM_DECL:
1535       if (!DECL_ARTIFICIAL (arg))
1536         val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1537       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1538
1539     case TARGET_EXPR:
1540       return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1541
1542     case PTRMEM_CST:
1543       val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1544       return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1545
1546     case TEMPLATE_PARM_INDEX:
1547       val = iterative_hash_template_arg
1548         (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1549       val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1550       return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1551
1552     case TRAIT_EXPR:
1553       val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1554       val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1555       return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1556
1557     case BASELINK:
1558       val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1559                                          val);
1560       return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1561                                           val);
1562
1563     case MODOP_EXPR:
1564       val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1565       code = TREE_CODE (TREE_OPERAND (arg, 1));
1566       val = iterative_hash_object (code, val);
1567       return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1568
1569     case ARRAY_TYPE:
1570       /* layout_type sets structural equality for arrays of
1571          incomplete type, so we can't rely on the canonical type
1572          for hashing.  */
1573       val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1574       return iterative_hash_template_arg (TYPE_DOMAIN (arg), val);
1575
1576     case LAMBDA_EXPR:
1577       /* A lambda can't appear in a template arg, but don't crash on
1578          erroneous input.  */
1579       gcc_assert (seen_error ());
1580       return val;
1581
1582     case CAST_EXPR:
1583     case STATIC_CAST_EXPR:
1584     case REINTERPRET_CAST_EXPR:
1585     case CONST_CAST_EXPR:
1586     case DYNAMIC_CAST_EXPR:
1587     case NEW_EXPR:
1588       val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1589       /* Now hash operands as usual.  */
1590       break;
1591
1592     default:
1593       break;
1594     }
1595
1596   switch (tclass)
1597     {
1598     case tcc_type:
1599       if (TYPE_CANONICAL (arg))
1600         return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1601                                       val);
1602       else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1603         return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1604       /* Otherwise just compare the types during lookup.  */
1605       return val;
1606
1607     case tcc_declaration:
1608     case tcc_constant:
1609       return iterative_hash_expr (arg, val);
1610
1611     default:
1612       gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1613       {
1614         unsigned n = TREE_OPERAND_LENGTH (arg);
1615         for (i = 0; i < n; ++i)
1616           val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1617         return val;
1618       }
1619     }
1620   gcc_unreachable ();
1621   return 0;
1622 }
1623
1624 /* Unregister the specialization SPEC as a specialization of TMPL.
1625    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1626    if the SPEC was listed as a specialization of TMPL.
1627
1628    Note that SPEC has been ggc_freed, so we can't look inside it.  */
1629
1630 bool
1631 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1632 {
1633   spec_entry **slot;
1634   spec_entry elt;
1635
1636   elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1637   elt.args = TI_ARGS (tinfo);
1638   elt.spec = NULL_TREE;
1639
1640   slot = (spec_entry **) htab_find_slot (decl_specializations, &elt, INSERT);
1641   if (*slot)
1642     {
1643       gcc_assert ((*slot)->spec == spec || (*slot)->spec == new_spec);
1644       gcc_assert (new_spec != NULL_TREE);
1645       (*slot)->spec = new_spec;
1646       return 1;
1647     }
1648
1649   return 0;
1650 }
1651
1652 /* Compare an entry in the local specializations hash table P1 (which
1653    is really a pointer to a TREE_LIST) with P2 (which is really a
1654    DECL).  */
1655
1656 static int
1657 eq_local_specializations (const void *p1, const void *p2)
1658 {
1659   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1660 }
1661
1662 /* Hash P1, an entry in the local specializations table.  */
1663
1664 static hashval_t
1665 hash_local_specialization (const void* p1)
1666 {
1667   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1668 }
1669
1670 /* Like register_specialization, but for local declarations.  We are
1671    registering SPEC, an instantiation of TMPL.  */
1672
1673 static void
1674 register_local_specialization (tree spec, tree tmpl)
1675 {
1676   void **slot;
1677
1678   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1679                                    htab_hash_pointer (tmpl), INSERT);
1680   *slot = build_tree_list (spec, tmpl);
1681 }
1682
1683 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1684    specialized class.  */
1685
1686 bool
1687 explicit_class_specialization_p (tree type)
1688 {
1689   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1690     return false;
1691   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1692 }
1693
1694 /* Print the list of functions at FNS, going through all the overloads
1695    for each element of the list.  Alternatively, FNS can not be a
1696    TREE_LIST, in which case it will be printed together with all the
1697    overloads.
1698
1699    MORE and *STR should respectively be FALSE and NULL when the function
1700    is called from the outside.  They are used internally on recursive
1701    calls.  print_candidates manages the two parameters and leaves NULL
1702    in *STR when it ends.  */
1703
1704 static void
1705 print_candidates_1 (tree fns, bool more, const char **str)
1706 {
1707   tree fn, fn2;
1708   char *spaces = NULL;
1709
1710   for (fn = fns; fn; fn = OVL_NEXT (fn))
1711     if (TREE_CODE (fn) == TREE_LIST)
1712       {
1713         gcc_assert (!OVL_NEXT (fn) && !is_overloaded_fn (fn));
1714         for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1715           print_candidates_1 (TREE_VALUE (fn2),
1716                               TREE_CHAIN (fn2) || more, str);
1717       }
1718     else
1719       {
1720         if (!*str)
1721           {
1722             /* Pick the prefix string.  */
1723             if (!more && !OVL_NEXT (fns))
1724               {
1725                 error ("candidate is: %+#D", OVL_CURRENT (fn));
1726                 continue;
1727               }
1728
1729             *str = _("candidates are:");
1730             spaces = get_spaces (*str);
1731           }
1732         error ("%s %+#D", *str, OVL_CURRENT (fn));
1733         *str = spaces ? spaces : *str;
1734       }
1735
1736   if (!more)
1737     {
1738       free (spaces);
1739       *str = NULL;
1740     }
1741 }
1742
1743 /* Print the list of candidate FNS in an error message.  */
1744
1745 void
1746 print_candidates (tree fns)
1747 {
1748   const char *str = NULL;
1749   print_candidates_1 (fns, false, &str);
1750   gcc_assert (str == NULL);
1751 }
1752
1753 /* Returns the template (one of the functions given by TEMPLATE_ID)
1754    which can be specialized to match the indicated DECL with the
1755    explicit template args given in TEMPLATE_ID.  The DECL may be
1756    NULL_TREE if none is available.  In that case, the functions in
1757    TEMPLATE_ID are non-members.
1758
1759    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1760    specialization of a member template.
1761
1762    The TEMPLATE_COUNT is the number of references to qualifying
1763    template classes that appeared in the name of the function. See
1764    check_explicit_specialization for a more accurate description.
1765
1766    TSK indicates what kind of template declaration (if any) is being
1767    declared.  TSK_TEMPLATE indicates that the declaration given by
1768    DECL, though a FUNCTION_DECL, has template parameters, and is
1769    therefore a template function.
1770
1771    The template args (those explicitly specified and those deduced)
1772    are output in a newly created vector *TARGS_OUT.
1773
1774    If it is impossible to determine the result, an error message is
1775    issued.  The error_mark_node is returned to indicate failure.  */
1776
1777 static tree
1778 determine_specialization (tree template_id,
1779                           tree decl,
1780                           tree* targs_out,
1781                           int need_member_template,
1782                           int template_count,
1783                           tmpl_spec_kind tsk)
1784 {
1785   tree fns;
1786   tree targs;
1787   tree explicit_targs;
1788   tree candidates = NULL_TREE;
1789   /* A TREE_LIST of templates of which DECL may be a specialization.
1790      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1791      corresponding TREE_PURPOSE is the set of template arguments that,
1792      when used to instantiate the template, would produce a function
1793      with the signature of DECL.  */
1794   tree templates = NULL_TREE;
1795   int header_count;
1796   struct cp_binding_level *b;
1797
1798   *targs_out = NULL_TREE;
1799
1800   if (template_id == error_mark_node || decl == error_mark_node)
1801     return error_mark_node;
1802
1803   fns = TREE_OPERAND (template_id, 0);
1804   explicit_targs = TREE_OPERAND (template_id, 1);
1805
1806   if (fns == error_mark_node)
1807     return error_mark_node;
1808
1809   /* Check for baselinks.  */
1810   if (BASELINK_P (fns))
1811     fns = BASELINK_FUNCTIONS (fns);
1812
1813   if (!is_overloaded_fn (fns))
1814     {
1815       error ("%qD is not a function template", fns);
1816       return error_mark_node;
1817     }
1818
1819   /* Count the number of template headers specified for this
1820      specialization.  */
1821   header_count = 0;
1822   for (b = current_binding_level;
1823        b->kind == sk_template_parms;
1824        b = b->level_chain)
1825     ++header_count;
1826
1827   for (; fns; fns = OVL_NEXT (fns))
1828     {
1829       tree fn = OVL_CURRENT (fns);
1830
1831       if (TREE_CODE (fn) == TEMPLATE_DECL)
1832         {
1833           tree decl_arg_types;
1834           tree fn_arg_types;
1835
1836           /* In case of explicit specialization, we need to check if
1837              the number of template headers appearing in the specialization
1838              is correct. This is usually done in check_explicit_specialization,
1839              but the check done there cannot be exhaustive when specializing
1840              member functions. Consider the following code:
1841
1842              template <> void A<int>::f(int);
1843              template <> template <> void A<int>::f(int);
1844
1845              Assuming that A<int> is not itself an explicit specialization
1846              already, the first line specializes "f" which is a non-template
1847              member function, whilst the second line specializes "f" which
1848              is a template member function. So both lines are syntactically
1849              correct, and check_explicit_specialization does not reject
1850              them.
1851
1852              Here, we can do better, as we are matching the specialization
1853              against the declarations. We count the number of template
1854              headers, and we check if they match TEMPLATE_COUNT + 1
1855              (TEMPLATE_COUNT is the number of qualifying template classes,
1856              plus there must be another header for the member template
1857              itself).
1858
1859              Notice that if header_count is zero, this is not a
1860              specialization but rather a template instantiation, so there
1861              is no check we can perform here.  */
1862           if (header_count && header_count != template_count + 1)
1863             continue;
1864
1865           /* Check that the number of template arguments at the
1866              innermost level for DECL is the same as for FN.  */
1867           if (current_binding_level->kind == sk_template_parms
1868               && !current_binding_level->explicit_spec_p
1869               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1870                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1871                                       (current_template_parms))))
1872             continue;
1873
1874           /* DECL might be a specialization of FN.  */
1875           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1876           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1877
1878           /* For a non-static member function, we need to make sure
1879              that the const qualification is the same.  Since
1880              get_bindings does not try to merge the "this" parameter,
1881              we must do the comparison explicitly.  */
1882           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1883               && !same_type_p (TREE_VALUE (fn_arg_types),
1884                                TREE_VALUE (decl_arg_types)))
1885             continue;
1886
1887           /* Skip the "this" parameter and, for constructors of
1888              classes with virtual bases, the VTT parameter.  A
1889              full specialization of a constructor will have a VTT
1890              parameter, but a template never will.  */ 
1891           decl_arg_types 
1892             = skip_artificial_parms_for (decl, decl_arg_types);
1893           fn_arg_types 
1894             = skip_artificial_parms_for (fn, fn_arg_types);
1895
1896           /* Check that the number of function parameters matches.
1897              For example,
1898                template <class T> void f(int i = 0);
1899                template <> void f<int>();
1900              The specialization f<int> is invalid but is not caught
1901              by get_bindings below.  */
1902           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1903             continue;
1904
1905           /* Function templates cannot be specializations; there are
1906              no partial specializations of functions.  Therefore, if
1907              the type of DECL does not match FN, there is no
1908              match.  */
1909           if (tsk == tsk_template)
1910             {
1911               if (compparms (fn_arg_types, decl_arg_types))
1912                 candidates = tree_cons (NULL_TREE, fn, candidates);
1913               continue;
1914             }
1915
1916           /* See whether this function might be a specialization of this
1917              template.  */
1918           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1919
1920           if (!targs)
1921             /* We cannot deduce template arguments that when used to
1922                specialize TMPL will produce DECL.  */
1923             continue;
1924
1925           /* Save this template, and the arguments deduced.  */
1926           templates = tree_cons (targs, fn, templates);
1927         }
1928       else if (need_member_template)
1929         /* FN is an ordinary member function, and we need a
1930            specialization of a member template.  */
1931         ;
1932       else if (TREE_CODE (fn) != FUNCTION_DECL)
1933         /* We can get IDENTIFIER_NODEs here in certain erroneous
1934            cases.  */
1935         ;
1936       else if (!DECL_FUNCTION_MEMBER_P (fn))
1937         /* This is just an ordinary non-member function.  Nothing can
1938            be a specialization of that.  */
1939         ;
1940       else if (DECL_ARTIFICIAL (fn))
1941         /* Cannot specialize functions that are created implicitly.  */
1942         ;
1943       else
1944         {
1945           tree decl_arg_types;
1946
1947           /* This is an ordinary member function.  However, since
1948              we're here, we can assume it's enclosing class is a
1949              template class.  For example,
1950
1951                template <typename T> struct S { void f(); };
1952                template <> void S<int>::f() {}
1953
1954              Here, S<int>::f is a non-template, but S<int> is a
1955              template class.  If FN has the same type as DECL, we
1956              might be in business.  */
1957
1958           if (!DECL_TEMPLATE_INFO (fn))
1959             /* Its enclosing class is an explicit specialization
1960                of a template class.  This is not a candidate.  */
1961             continue;
1962
1963           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1964                             TREE_TYPE (TREE_TYPE (fn))))
1965             /* The return types differ.  */
1966             continue;
1967
1968           /* Adjust the type of DECL in case FN is a static member.  */
1969           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1970           if (DECL_STATIC_FUNCTION_P (fn)
1971               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1972             decl_arg_types = TREE_CHAIN (decl_arg_types);
1973
1974           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1975                          decl_arg_types))
1976             /* They match!  */
1977             candidates = tree_cons (NULL_TREE, fn, candidates);
1978         }
1979     }
1980
1981   if (templates && TREE_CHAIN (templates))
1982     {
1983       /* We have:
1984
1985            [temp.expl.spec]
1986
1987            It is possible for a specialization with a given function
1988            signature to be instantiated from more than one function
1989            template.  In such cases, explicit specification of the
1990            template arguments must be used to uniquely identify the
1991            function template specialization being specialized.
1992
1993          Note that here, there's no suggestion that we're supposed to
1994          determine which of the candidate templates is most
1995          specialized.  However, we, also have:
1996
1997            [temp.func.order]
1998
1999            Partial ordering of overloaded function template
2000            declarations is used in the following contexts to select
2001            the function template to which a function template
2002            specialization refers:
2003
2004            -- when an explicit specialization refers to a function
2005               template.
2006
2007          So, we do use the partial ordering rules, at least for now.
2008          This extension can only serve to make invalid programs valid,
2009          so it's safe.  And, there is strong anecdotal evidence that
2010          the committee intended the partial ordering rules to apply;
2011          the EDG front end has that behavior, and John Spicer claims
2012          that the committee simply forgot to delete the wording in
2013          [temp.expl.spec].  */
2014       tree tmpl = most_specialized_instantiation (templates);
2015       if (tmpl != error_mark_node)
2016         {
2017           templates = tmpl;
2018           TREE_CHAIN (templates) = NULL_TREE;
2019         }
2020     }
2021
2022   if (templates == NULL_TREE && candidates == NULL_TREE)
2023     {
2024       error ("template-id %qD for %q+D does not match any template "
2025              "declaration", template_id, decl);
2026       if (header_count && header_count != template_count + 1)
2027         inform (input_location, "saw %d %<template<>%>, need %d for "
2028                 "specializing a member function template",
2029                 header_count, template_count + 1);
2030       return error_mark_node;
2031     }
2032   else if ((templates && TREE_CHAIN (templates))
2033            || (candidates && TREE_CHAIN (candidates))
2034            || (templates && candidates))
2035     {
2036       error ("ambiguous template specialization %qD for %q+D",
2037              template_id, decl);
2038       candidates = chainon (candidates, templates);
2039       print_candidates (candidates);
2040       return error_mark_node;
2041     }
2042
2043   /* We have one, and exactly one, match.  */
2044   if (candidates)
2045     {
2046       tree fn = TREE_VALUE (candidates);
2047       *targs_out = copy_node (DECL_TI_ARGS (fn));
2048       /* DECL is a re-declaration or partial instantiation of a template
2049          function.  */
2050       if (TREE_CODE (fn) == TEMPLATE_DECL)
2051         return fn;
2052       /* It was a specialization of an ordinary member function in a
2053          template class.  */
2054       return DECL_TI_TEMPLATE (fn);
2055     }
2056
2057   /* It was a specialization of a template.  */
2058   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2059   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2060     {
2061       *targs_out = copy_node (targs);
2062       SET_TMPL_ARGS_LEVEL (*targs_out,
2063                            TMPL_ARGS_DEPTH (*targs_out),
2064                            TREE_PURPOSE (templates));
2065     }
2066   else
2067     *targs_out = TREE_PURPOSE (templates);
2068   return TREE_VALUE (templates);
2069 }
2070
2071 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2072    but with the default argument values filled in from those in the
2073    TMPL_TYPES.  */
2074
2075 static tree
2076 copy_default_args_to_explicit_spec_1 (tree spec_types,
2077                                       tree tmpl_types)
2078 {
2079   tree new_spec_types;
2080
2081   if (!spec_types)
2082     return NULL_TREE;
2083
2084   if (spec_types == void_list_node)
2085     return void_list_node;
2086
2087   /* Substitute into the rest of the list.  */
2088   new_spec_types =
2089     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2090                                           TREE_CHAIN (tmpl_types));
2091
2092   /* Add the default argument for this parameter.  */
2093   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2094                          TREE_VALUE (spec_types),
2095                          new_spec_types);
2096 }
2097
2098 /* DECL is an explicit specialization.  Replicate default arguments
2099    from the template it specializes.  (That way, code like:
2100
2101      template <class T> void f(T = 3);
2102      template <> void f(double);
2103      void g () { f (); }
2104
2105    works, as required.)  An alternative approach would be to look up
2106    the correct default arguments at the call-site, but this approach
2107    is consistent with how implicit instantiations are handled.  */
2108
2109 static void
2110 copy_default_args_to_explicit_spec (tree decl)
2111 {
2112   tree tmpl;
2113   tree spec_types;
2114   tree tmpl_types;
2115   tree new_spec_types;
2116   tree old_type;
2117   tree new_type;
2118   tree t;
2119   tree object_type = NULL_TREE;
2120   tree in_charge = NULL_TREE;
2121   tree vtt = NULL_TREE;
2122
2123   /* See if there's anything we need to do.  */
2124   tmpl = DECL_TI_TEMPLATE (decl);
2125   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2126   for (t = tmpl_types; t; t = TREE_CHAIN (t))
2127     if (TREE_PURPOSE (t))
2128       break;
2129   if (!t)
2130     return;
2131
2132   old_type = TREE_TYPE (decl);
2133   spec_types = TYPE_ARG_TYPES (old_type);
2134
2135   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2136     {
2137       /* Remove the this pointer, but remember the object's type for
2138          CV quals.  */
2139       object_type = TREE_TYPE (TREE_VALUE (spec_types));
2140       spec_types = TREE_CHAIN (spec_types);
2141       tmpl_types = TREE_CHAIN (tmpl_types);
2142
2143       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2144         {
2145           /* DECL may contain more parameters than TMPL due to the extra
2146              in-charge parameter in constructors and destructors.  */
2147           in_charge = spec_types;
2148           spec_types = TREE_CHAIN (spec_types);
2149         }
2150       if (DECL_HAS_VTT_PARM_P (decl))
2151         {
2152           vtt = spec_types;
2153           spec_types = TREE_CHAIN (spec_types);
2154         }
2155     }
2156
2157   /* Compute the merged default arguments.  */
2158   new_spec_types =
2159     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2160
2161   /* Compute the new FUNCTION_TYPE.  */
2162   if (object_type)
2163     {
2164       if (vtt)
2165         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2166                                          TREE_VALUE (vtt),
2167                                          new_spec_types);
2168
2169       if (in_charge)
2170         /* Put the in-charge parameter back.  */
2171         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2172                                          TREE_VALUE (in_charge),
2173                                          new_spec_types);
2174
2175       new_type = build_method_type_directly (object_type,
2176                                              TREE_TYPE (old_type),
2177                                              new_spec_types);
2178     }
2179   else
2180     new_type = build_function_type (TREE_TYPE (old_type),
2181                                     new_spec_types);
2182   new_type = cp_build_type_attribute_variant (new_type,
2183                                               TYPE_ATTRIBUTES (old_type));
2184   new_type = build_exception_variant (new_type,
2185                                       TYPE_RAISES_EXCEPTIONS (old_type));
2186   TREE_TYPE (decl) = new_type;
2187 }
2188
2189 /* Check to see if the function just declared, as indicated in
2190    DECLARATOR, and in DECL, is a specialization of a function
2191    template.  We may also discover that the declaration is an explicit
2192    instantiation at this point.
2193
2194    Returns DECL, or an equivalent declaration that should be used
2195    instead if all goes well.  Issues an error message if something is
2196    amiss.  Returns error_mark_node if the error is not easily
2197    recoverable.
2198
2199    FLAGS is a bitmask consisting of the following flags:
2200
2201    2: The function has a definition.
2202    4: The function is a friend.
2203
2204    The TEMPLATE_COUNT is the number of references to qualifying
2205    template classes that appeared in the name of the function.  For
2206    example, in
2207
2208      template <class T> struct S { void f(); };
2209      void S<int>::f();
2210
2211    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
2212    classes are not counted in the TEMPLATE_COUNT, so that in
2213
2214      template <class T> struct S {};
2215      template <> struct S<int> { void f(); }
2216      template <> void S<int>::f();
2217
2218    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
2219    invalid; there should be no template <>.)
2220
2221    If the function is a specialization, it is marked as such via
2222    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
2223    is set up correctly, and it is added to the list of specializations
2224    for that template.  */
2225
2226 tree
2227 check_explicit_specialization (tree declarator,
2228                                tree decl,
2229                                int template_count,
2230                                int flags)
2231 {
2232   int have_def = flags & 2;
2233   int is_friend = flags & 4;
2234   int specialization = 0;
2235   int explicit_instantiation = 0;
2236   int member_specialization = 0;
2237   tree ctype = DECL_CLASS_CONTEXT (decl);
2238   tree dname = DECL_NAME (decl);
2239   tmpl_spec_kind tsk;
2240
2241   if (is_friend)
2242     {
2243       if (!processing_specialization)
2244         tsk = tsk_none;
2245       else
2246         tsk = tsk_excessive_parms;
2247     }
2248   else
2249     tsk = current_tmpl_spec_kind (template_count);
2250
2251   switch (tsk)
2252     {
2253     case tsk_none:
2254       if (processing_specialization)
2255         {
2256           specialization = 1;
2257           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2258         }
2259       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2260         {
2261           if (is_friend)
2262             /* This could be something like:
2263
2264                template <class T> void f(T);
2265                class S { friend void f<>(int); }  */
2266             specialization = 1;
2267           else
2268             {
2269               /* This case handles bogus declarations like template <>
2270                  template <class T> void f<int>(); */
2271
2272               error ("template-id %qD in declaration of primary template",
2273                      declarator);
2274               return decl;
2275             }
2276         }
2277       break;
2278
2279     case tsk_invalid_member_spec:
2280       /* The error has already been reported in
2281          check_specialization_scope.  */
2282       return error_mark_node;
2283
2284     case tsk_invalid_expl_inst:
2285       error ("template parameter list used in explicit instantiation");
2286
2287       /* Fall through.  */
2288
2289     case tsk_expl_inst:
2290       if (have_def)
2291         error ("definition provided for explicit instantiation");
2292
2293       explicit_instantiation = 1;
2294       break;
2295
2296     case tsk_excessive_parms:
2297     case tsk_insufficient_parms:
2298       if (tsk == tsk_excessive_parms)
2299         error ("too many template parameter lists in declaration of %qD",
2300                decl);
2301       else if (template_header_count)
2302         error("too few template parameter lists in declaration of %qD", decl);
2303       else
2304         error("explicit specialization of %qD must be introduced by "
2305               "%<template <>%>", decl);
2306
2307       /* Fall through.  */
2308     case tsk_expl_spec:
2309       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2310       if (ctype)
2311         member_specialization = 1;
2312       else
2313         specialization = 1;
2314       break;
2315
2316     case tsk_template:
2317       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2318         {
2319           /* This case handles bogus declarations like template <>
2320              template <class T> void f<int>(); */
2321
2322           if (uses_template_parms (declarator))
2323             error ("function template partial specialization %qD "
2324                    "is not allowed", declarator);
2325           else
2326             error ("template-id %qD in declaration of primary template",
2327                    declarator);
2328           return decl;
2329         }
2330
2331       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2332         /* This is a specialization of a member template, without
2333            specialization the containing class.  Something like:
2334
2335              template <class T> struct S {
2336                template <class U> void f (U);
2337              };
2338              template <> template <class U> void S<int>::f(U) {}
2339
2340            That's a specialization -- but of the entire template.  */
2341         specialization = 1;
2342       break;
2343
2344     default:
2345       gcc_unreachable ();
2346     }
2347
2348   if (specialization || member_specialization)
2349     {
2350       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2351       for (; t; t = TREE_CHAIN (t))
2352         if (TREE_PURPOSE (t))
2353           {
2354             permerror (input_location, 
2355                        "default argument specified in explicit specialization");
2356             break;
2357           }
2358     }
2359
2360   if (specialization || member_specialization || explicit_instantiation)
2361     {
2362       tree tmpl = NULL_TREE;
2363       tree targs = NULL_TREE;
2364
2365       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2366       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2367         {
2368           tree fns;
2369
2370           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2371           if (ctype)
2372             fns = dname;
2373           else
2374             {
2375               /* If there is no class context, the explicit instantiation
2376                  must be at namespace scope.  */
2377               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2378
2379               /* Find the namespace binding, using the declaration
2380                  context.  */
2381               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2382                                            false, true);
2383               if (fns == error_mark_node || !is_overloaded_fn (fns))
2384                 {
2385                   error ("%qD is not a template function", dname);
2386                   fns = error_mark_node;
2387                 }
2388               else
2389                 {
2390                   tree fn = OVL_CURRENT (fns);
2391                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2392                                                 CP_DECL_CONTEXT (fn)))
2393                     error ("%qD is not declared in %qD",
2394                            decl, current_namespace);
2395                 }
2396             }
2397
2398           declarator = lookup_template_function (fns, NULL_TREE);
2399         }
2400
2401       if (declarator == error_mark_node)
2402         return error_mark_node;
2403
2404       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2405         {
2406           if (!explicit_instantiation)
2407             /* A specialization in class scope.  This is invalid,
2408                but the error will already have been flagged by
2409                check_specialization_scope.  */
2410             return error_mark_node;
2411           else
2412             {
2413               /* It's not valid to write an explicit instantiation in
2414                  class scope, e.g.:
2415
2416                    class C { template void f(); }
2417
2418                    This case is caught by the parser.  However, on
2419                    something like:
2420
2421                    template class C { void f(); };
2422
2423                    (which is invalid) we can get here.  The error will be
2424                    issued later.  */
2425               ;
2426             }
2427
2428           return decl;
2429         }
2430       else if (ctype != NULL_TREE
2431                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2432                    IDENTIFIER_NODE))
2433         {
2434           /* Find the list of functions in ctype that have the same
2435              name as the declared function.  */
2436           tree name = TREE_OPERAND (declarator, 0);
2437           tree fns = NULL_TREE;
2438           int idx;
2439
2440           if (constructor_name_p (name, ctype))
2441             {
2442               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2443
2444               if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2445                   : !CLASSTYPE_DESTRUCTORS (ctype))
2446                 {
2447                   /* From [temp.expl.spec]:
2448
2449                      If such an explicit specialization for the member
2450                      of a class template names an implicitly-declared
2451                      special member function (clause _special_), the
2452                      program is ill-formed.
2453
2454                      Similar language is found in [temp.explicit].  */
2455                   error ("specialization of implicitly-declared special member function");
2456                   return error_mark_node;
2457                 }
2458
2459               name = is_constructor ? ctor_identifier : dtor_identifier;
2460             }
2461
2462           if (!DECL_CONV_FN_P (decl))
2463             {
2464               idx = lookup_fnfields_1 (ctype, name);
2465               if (idx >= 0)
2466                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2467             }
2468           else
2469             {
2470               VEC(tree,gc) *methods;
2471               tree ovl;
2472
2473               /* For a type-conversion operator, we cannot do a
2474                  name-based lookup.  We might be looking for `operator
2475                  int' which will be a specialization of `operator T'.
2476                  So, we find *all* the conversion operators, and then
2477                  select from them.  */
2478               fns = NULL_TREE;
2479
2480               methods = CLASSTYPE_METHOD_VEC (ctype);
2481               if (methods)
2482                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2483                      VEC_iterate (tree, methods, idx, ovl);
2484                      ++idx)
2485                   {
2486                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2487                       /* There are no more conversion functions.  */
2488                       break;
2489
2490                     /* Glue all these conversion functions together
2491                        with those we already have.  */
2492                     for (; ovl; ovl = OVL_NEXT (ovl))
2493                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2494                   }
2495             }
2496
2497           if (fns == NULL_TREE)
2498             {
2499               error ("no member function %qD declared in %qT", name, ctype);
2500               return error_mark_node;
2501             }
2502           else
2503             TREE_OPERAND (declarator, 0) = fns;
2504         }
2505
2506       /* Figure out what exactly is being specialized at this point.
2507          Note that for an explicit instantiation, even one for a
2508          member function, we cannot tell apriori whether the
2509          instantiation is for a member template, or just a member
2510          function of a template class.  Even if a member template is
2511          being instantiated, the member template arguments may be
2512          elided if they can be deduced from the rest of the
2513          declaration.  */
2514       tmpl = determine_specialization (declarator, decl,
2515                                        &targs,
2516                                        member_specialization,
2517                                        template_count,
2518                                        tsk);
2519
2520       if (!tmpl || tmpl == error_mark_node)
2521         /* We couldn't figure out what this declaration was
2522            specializing.  */
2523         return error_mark_node;
2524       else
2525         {
2526           tree gen_tmpl = most_general_template (tmpl);
2527
2528           if (explicit_instantiation)
2529             {
2530               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2531                  is done by do_decl_instantiation later.  */
2532
2533               int arg_depth = TMPL_ARGS_DEPTH (targs);
2534               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2535
2536               if (arg_depth > parm_depth)
2537                 {
2538                   /* If TMPL is not the most general template (for
2539                      example, if TMPL is a friend template that is
2540                      injected into namespace scope), then there will
2541                      be too many levels of TARGS.  Remove some of them
2542                      here.  */
2543                   int i;
2544                   tree new_targs;
2545
2546                   new_targs = make_tree_vec (parm_depth);
2547                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2548                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2549                       = TREE_VEC_ELT (targs, i);
2550                   targs = new_targs;
2551                 }
2552
2553               return instantiate_template (tmpl, targs, tf_error);
2554             }
2555
2556           /* If we thought that the DECL was a member function, but it
2557              turns out to be specializing a static member function,
2558              make DECL a static member function as well.  */
2559           if (DECL_STATIC_FUNCTION_P (tmpl)
2560               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2561             revert_static_member_fn (decl);
2562
2563           /* If this is a specialization of a member template of a
2564              template class, we want to return the TEMPLATE_DECL, not
2565              the specialization of it.  */
2566           if (tsk == tsk_template)
2567             {
2568               tree result = DECL_TEMPLATE_RESULT (tmpl);
2569               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2570               DECL_INITIAL (result) = NULL_TREE;
2571               if (have_def)
2572                 {
2573                   tree parm;
2574                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2575                   DECL_SOURCE_LOCATION (result)
2576                     = DECL_SOURCE_LOCATION (decl);
2577                   /* We want to use the argument list specified in the
2578                      definition, not in the original declaration.  */
2579                   DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2580                   for (parm = DECL_ARGUMENTS (result); parm;
2581                        parm = DECL_CHAIN (parm))
2582                     DECL_CONTEXT (parm) = result;
2583                 }
2584               return register_specialization (tmpl, gen_tmpl, targs,
2585                                               is_friend, 0);
2586             }
2587
2588           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2589           DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2590
2591           /* Inherit default function arguments from the template
2592              DECL is specializing.  */
2593           copy_default_args_to_explicit_spec (decl);
2594
2595           /* This specialization has the same protection as the
2596              template it specializes.  */
2597           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2598           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2599
2600           /* 7.1.1-1 [dcl.stc]
2601
2602              A storage-class-specifier shall not be specified in an
2603              explicit specialization...
2604
2605              The parser rejects these, so unless action is taken here,
2606              explicit function specializations will always appear with
2607              global linkage.
2608
2609              The action recommended by the C++ CWG in response to C++
2610              defect report 605 is to make the storage class and linkage
2611              of the explicit specialization match the templated function:
2612
2613              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2614            */
2615           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2616             {
2617               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2618               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2619
2620               /* This specialization has the same linkage and visibility as
2621                  the function template it specializes.  */
2622               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2623               if (! TREE_PUBLIC (decl))
2624                 {
2625                   DECL_INTERFACE_KNOWN (decl) = 1;
2626                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2627                 }
2628               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2629               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2630                 {
2631                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2632                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2633                 }
2634             }
2635
2636           /* If DECL is a friend declaration, declared using an
2637              unqualified name, the namespace associated with DECL may
2638              have been set incorrectly.  For example, in:
2639
2640                template <typename T> void f(T);
2641                namespace N {
2642                  struct S { friend void f<int>(int); }
2643                }
2644
2645              we will have set the DECL_CONTEXT for the friend
2646              declaration to N, rather than to the global namespace.  */
2647           if (DECL_NAMESPACE_SCOPE_P (decl))
2648             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2649
2650           if (is_friend && !have_def)
2651             /* This is not really a declaration of a specialization.
2652                It's just the name of an instantiation.  But, it's not
2653                a request for an instantiation, either.  */
2654             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2655           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2656             /* This is indeed a specialization.  In case of constructors
2657                and destructors, we need in-charge and not-in-charge
2658                versions in V3 ABI.  */
2659             clone_function_decl (decl, /*update_method_vec_p=*/0);
2660
2661           /* Register this specialization so that we can find it
2662              again.  */
2663           decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2664         }
2665     }
2666
2667   return decl;
2668 }
2669
2670 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2671    parameters.  These are represented in the same format used for
2672    DECL_TEMPLATE_PARMS.  */
2673
2674 int
2675 comp_template_parms (const_tree parms1, const_tree parms2)
2676 {
2677   const_tree p1;
2678   const_tree p2;
2679
2680   if (parms1 == parms2)
2681     return 1;
2682
2683   for (p1 = parms1, p2 = parms2;
2684        p1 != NULL_TREE && p2 != NULL_TREE;
2685        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2686     {
2687       tree t1 = TREE_VALUE (p1);
2688       tree t2 = TREE_VALUE (p2);
2689       int i;
2690
2691       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2692       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2693
2694       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2695         return 0;
2696
2697       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2698         {
2699           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2700           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2701
2702           /* If either of the template parameters are invalid, assume
2703              they match for the sake of error recovery. */
2704           if (parm1 == error_mark_node || parm2 == error_mark_node)
2705             return 1;
2706
2707           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2708             return 0;
2709
2710           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2711               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2712                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2713             continue;
2714           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2715             return 0;
2716         }
2717     }
2718
2719   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2720     /* One set of parameters has more parameters lists than the
2721        other.  */
2722     return 0;
2723
2724   return 1;
2725 }
2726
2727 /* Determine whether PARM is a parameter pack.  */
2728
2729 bool 
2730 template_parameter_pack_p (const_tree parm)
2731 {
2732   /* Determine if we have a non-type template parameter pack.  */
2733   if (TREE_CODE (parm) == PARM_DECL)
2734     return (DECL_TEMPLATE_PARM_P (parm) 
2735             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2736
2737   /* If this is a list of template parameters, we could get a
2738      TYPE_DECL or a TEMPLATE_DECL.  */ 
2739   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2740     parm = TREE_TYPE (parm);
2741
2742   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2743            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2744           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2745 }
2746
2747 /* Determine if T is a function parameter pack.  */
2748
2749 bool
2750 function_parameter_pack_p (const_tree t)
2751 {
2752   if (t && TREE_CODE (t) == PARM_DECL)
2753     return FUNCTION_PARAMETER_PACK_P (t);
2754   return false;
2755 }
2756
2757 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2758    PRIMARY_FUNC_TMPL_INST is a primary function template instantiation.  */
2759
2760 tree
2761 get_function_template_decl (const_tree primary_func_tmpl_inst)
2762 {
2763   if (! primary_func_tmpl_inst
2764       || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2765       || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2766     return NULL;
2767
2768   return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2769 }
2770
2771 /* Return true iff the function parameter PARAM_DECL was expanded
2772    from the function parameter pack PACK.  */
2773
2774 bool
2775 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2776 {
2777   if (DECL_ARTIFICIAL (param_decl)
2778       || !function_parameter_pack_p (pack))
2779     return false;
2780
2781   /* The parameter pack and its pack arguments have the same
2782      DECL_PARM_INDEX.  */
2783   return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2784 }
2785
2786 /* Determine whether ARGS describes a variadic template args list,
2787    i.e., one that is terminated by a template argument pack.  */
2788
2789 static bool 
2790 template_args_variadic_p (tree args)
2791 {
2792   int nargs;
2793   tree last_parm;
2794
2795   if (args == NULL_TREE)
2796     return false;
2797
2798   args = INNERMOST_TEMPLATE_ARGS (args);
2799   nargs = TREE_VEC_LENGTH (args);
2800
2801   if (nargs == 0)
2802     return false;
2803
2804   last_parm = TREE_VEC_ELT (args, nargs - 1);
2805
2806   return ARGUMENT_PACK_P (last_parm);
2807 }
2808
2809 /* Generate a new name for the parameter pack name NAME (an
2810    IDENTIFIER_NODE) that incorporates its */
2811
2812 static tree
2813 make_ith_pack_parameter_name (tree name, int i)
2814 {
2815   /* Munge the name to include the parameter index.  */
2816 #define NUMBUF_LEN 128
2817   char numbuf[NUMBUF_LEN];
2818   char* newname;
2819   int newname_len;
2820
2821   snprintf (numbuf, NUMBUF_LEN, "%i", i);
2822   newname_len = IDENTIFIER_LENGTH (name)
2823                 + strlen (numbuf) + 2;
2824   newname = (char*)alloca (newname_len);
2825   snprintf (newname, newname_len,
2826             "%s#%i", IDENTIFIER_POINTER (name), i);
2827   return get_identifier (newname);
2828 }
2829
2830 /* Return true if T is a primary function
2831    or class template instantiation.  */
2832
2833 bool
2834 primary_template_instantiation_p (const_tree t)
2835 {
2836   if (!t)
2837     return false;
2838
2839   if (TREE_CODE (t) == FUNCTION_DECL)
2840     return DECL_LANG_SPECIFIC (t)
2841            && DECL_TEMPLATE_INSTANTIATION (t)
2842            && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
2843   else if (CLASS_TYPE_P (t))
2844     return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
2845            && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
2846   return false;
2847 }
2848
2849 /* Return true if PARM is a template template parameter.  */
2850
2851 bool
2852 template_template_parameter_p (const_tree parm)
2853 {
2854   return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
2855 }
2856
2857 /* Return the template parameters of T if T is a
2858    primary template instantiation, NULL otherwise.  */
2859
2860 tree
2861 get_primary_template_innermost_parameters (const_tree t)
2862 {
2863   tree parms = NULL, template_info = NULL;
2864
2865   if ((template_info = get_template_info (t))
2866       && primary_template_instantiation_p (t))
2867     parms = INNERMOST_TEMPLATE_PARMS
2868         (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
2869
2870   return parms;
2871 }
2872
2873 /* Return the template parameters of the LEVELth level from the full list
2874    of template parameters PARMS.  */
2875
2876 tree
2877 get_template_parms_at_level (tree parms, int level)
2878 {
2879   tree p;
2880   if (!parms
2881       || TREE_CODE (parms) != TREE_LIST
2882       || level > TMPL_PARMS_DEPTH (parms))
2883     return NULL_TREE;
2884
2885   for (p = parms; p; p = TREE_CHAIN (p))
2886     if (TMPL_PARMS_DEPTH (p) == level)
2887       return p;
2888
2889   return NULL_TREE;
2890 }
2891
2892 /* Returns the template arguments of T if T is a template instantiation,
2893    NULL otherwise.  */
2894
2895 tree
2896 get_template_innermost_arguments (const_tree t)
2897 {
2898   tree args = NULL, template_info = NULL;
2899
2900   if ((template_info = get_template_info (t))
2901       && TI_ARGS (template_info))
2902     args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
2903
2904   return args;
2905 }
2906
2907 /* Return the argument pack elements of T if T is a template argument pack,
2908    NULL otherwise.  */
2909
2910 tree
2911 get_template_argument_pack_elems (const_tree t)
2912 {
2913   if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
2914       && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
2915     return NULL;
2916
2917   return ARGUMENT_PACK_ARGS (t);
2918 }
2919
2920 /* Structure used to track the progress of find_parameter_packs_r.  */
2921 struct find_parameter_pack_data 
2922 {
2923   /* TREE_LIST that will contain all of the parameter packs found by
2924      the traversal.  */
2925   tree* parameter_packs;
2926
2927   /* Set of AST nodes that have been visited by the traversal.  */
2928   struct pointer_set_t *visited;
2929 };
2930
2931 /* Identifies all of the argument packs that occur in a template
2932    argument and appends them to the TREE_LIST inside DATA, which is a
2933    find_parameter_pack_data structure. This is a subroutine of
2934    make_pack_expansion and uses_parameter_packs.  */
2935 static tree
2936 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2937 {
2938   tree t = *tp;
2939   struct find_parameter_pack_data* ppd = 
2940     (struct find_parameter_pack_data*)data;
2941   bool parameter_pack_p = false;
2942
2943   /* Identify whether this is a parameter pack or not.  */
2944   switch (TREE_CODE (t))
2945     {
2946     case TEMPLATE_PARM_INDEX:
2947       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2948         parameter_pack_p = true;
2949       break;
2950
2951     case TEMPLATE_TYPE_PARM:
2952     case TEMPLATE_TEMPLATE_PARM:
2953       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2954         parameter_pack_p = true;
2955       break;
2956
2957     case PARM_DECL:
2958       if (FUNCTION_PARAMETER_PACK_P (t))
2959         {
2960           /* We don't want to walk into the type of a PARM_DECL,
2961              because we don't want to see the type parameter pack.  */
2962           *walk_subtrees = 0;
2963           parameter_pack_p = true;
2964         }
2965       break;
2966
2967     default:
2968       /* Not a parameter pack.  */
2969       break;
2970     }
2971
2972   if (parameter_pack_p)
2973     {
2974       /* Add this parameter pack to the list.  */
2975       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2976     }
2977
2978   if (TYPE_P (t))
2979     cp_walk_tree (&TYPE_CONTEXT (t), 
2980                   &find_parameter_packs_r, ppd, ppd->visited);
2981
2982   /* This switch statement will return immediately if we don't find a
2983      parameter pack.  */
2984   switch (TREE_CODE (t)) 
2985     {
2986     case TEMPLATE_PARM_INDEX:
2987       return NULL_TREE;
2988
2989     case BOUND_TEMPLATE_TEMPLATE_PARM:
2990       /* Check the template itself.  */
2991       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
2992                     &find_parameter_packs_r, ppd, ppd->visited);
2993       /* Check the template arguments.  */
2994       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
2995                     ppd->visited);
2996       *walk_subtrees = 0;
2997       return NULL_TREE;
2998
2999     case TEMPLATE_TYPE_PARM:
3000     case TEMPLATE_TEMPLATE_PARM:
3001       return NULL_TREE;
3002
3003     case PARM_DECL:
3004       return NULL_TREE;
3005
3006     case RECORD_TYPE:
3007       if (TYPE_PTRMEMFUNC_P (t))
3008         return NULL_TREE;
3009       /* Fall through.  */
3010
3011     case UNION_TYPE:
3012     case ENUMERAL_TYPE:
3013       if (TYPE_TEMPLATE_INFO (t))
3014         cp_walk_tree (&TI_ARGS (TYPE_TEMPLATE_INFO (t)),
3015                       &find_parameter_packs_r, ppd, ppd->visited);
3016
3017       *walk_subtrees = 0;
3018       return NULL_TREE;
3019
3020     case TEMPLATE_DECL:
3021       cp_walk_tree (&TREE_TYPE (t),
3022                     &find_parameter_packs_r, ppd, ppd->visited);
3023       return NULL_TREE;
3024  
3025     case TYPENAME_TYPE:
3026       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3027                    ppd, ppd->visited);
3028       *walk_subtrees = 0;
3029       return NULL_TREE;
3030       
3031     case TYPE_PACK_EXPANSION:
3032     case EXPR_PACK_EXPANSION:
3033       *walk_subtrees = 0;
3034       return NULL_TREE;
3035
3036     case INTEGER_TYPE:
3037       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
3038                     ppd, ppd->visited);
3039       *walk_subtrees = 0;
3040       return NULL_TREE;
3041
3042     case IDENTIFIER_NODE:
3043       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
3044                     ppd->visited);
3045       *walk_subtrees = 0;
3046       return NULL_TREE;
3047
3048     default:
3049       return NULL_TREE;
3050     }
3051
3052   return NULL_TREE;
3053 }
3054
3055 /* Determines if the expression or type T uses any parameter packs.  */
3056 bool
3057 uses_parameter_packs (tree t)
3058 {
3059   tree parameter_packs = NULL_TREE;
3060   struct find_parameter_pack_data ppd;
3061   ppd.parameter_packs = &parameter_packs;
3062   ppd.visited = pointer_set_create ();
3063   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3064   pointer_set_destroy (ppd.visited);
3065   return parameter_packs != NULL_TREE;
3066 }
3067
3068 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3069    representation a base-class initializer into a parameter pack
3070    expansion. If all goes well, the resulting node will be an
3071    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3072    respectively.  */
3073 tree 
3074 make_pack_expansion (tree arg)
3075 {
3076   tree result;
3077   tree parameter_packs = NULL_TREE;
3078   bool for_types = false;
3079   struct find_parameter_pack_data ppd;
3080
3081   if (!arg || arg == error_mark_node)
3082     return arg;
3083
3084   if (TREE_CODE (arg) == TREE_LIST)
3085     {
3086       /* The only time we will see a TREE_LIST here is for a base
3087          class initializer.  In this case, the TREE_PURPOSE will be a
3088          _TYPE node (representing the base class expansion we're
3089          initializing) and the TREE_VALUE will be a TREE_LIST
3090          containing the initialization arguments. 
3091
3092          The resulting expansion looks somewhat different from most
3093          expansions. Rather than returning just one _EXPANSION, we
3094          return a TREE_LIST whose TREE_PURPOSE is a
3095          TYPE_PACK_EXPANSION containing the bases that will be
3096          initialized.  The TREE_VALUE will be identical to the
3097          original TREE_VALUE, which is a list of arguments that will
3098          be passed to each base.  We do not introduce any new pack
3099          expansion nodes into the TREE_VALUE (although it is possible
3100          that some already exist), because the TREE_PURPOSE and
3101          TREE_VALUE all need to be expanded together with the same
3102          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
3103          resulting TREE_PURPOSE will mention the parameter packs in
3104          both the bases and the arguments to the bases.  */
3105       tree purpose;
3106       tree value;
3107       tree parameter_packs = NULL_TREE;
3108
3109       /* Determine which parameter packs will be used by the base
3110          class expansion.  */
3111       ppd.visited = pointer_set_create ();
3112       ppd.parameter_packs = &parameter_packs;
3113       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
3114                     &ppd, ppd.visited);
3115
3116       if (parameter_packs == NULL_TREE)
3117         {
3118           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3119           pointer_set_destroy (ppd.visited);
3120           return error_mark_node;
3121         }
3122
3123       if (TREE_VALUE (arg) != void_type_node)
3124         {
3125           /* Collect the sets of parameter packs used in each of the
3126              initialization arguments.  */
3127           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3128             {
3129               /* Determine which parameter packs will be expanded in this
3130                  argument.  */
3131               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
3132                             &ppd, ppd.visited);
3133             }
3134         }
3135
3136       pointer_set_destroy (ppd.visited);
3137
3138       /* Create the pack expansion type for the base type.  */
3139       purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3140       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3141       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3142
3143       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3144          they will rarely be compared to anything.  */
3145       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3146
3147       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3148     }
3149
3150   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3151     for_types = true;
3152
3153   /* Build the PACK_EXPANSION_* node.  */
3154   result = for_types
3155      ? cxx_make_type (TYPE_PACK_EXPANSION)
3156      : make_node (EXPR_PACK_EXPANSION);
3157   SET_PACK_EXPANSION_PATTERN (result, arg);
3158   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3159     {
3160       /* Propagate type and const-expression information.  */
3161       TREE_TYPE (result) = TREE_TYPE (arg);
3162       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3163     }
3164   else
3165     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3166        they will rarely be compared to anything.  */
3167     SET_TYPE_STRUCTURAL_EQUALITY (result);
3168
3169   /* Determine which parameter packs will be expanded.  */
3170   ppd.parameter_packs = &parameter_packs;
3171   ppd.visited = pointer_set_create ();
3172   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3173   pointer_set_destroy (ppd.visited);
3174
3175   /* Make sure we found some parameter packs.  */
3176   if (parameter_packs == NULL_TREE)
3177     {
3178       if (TYPE_P (arg))
3179         error ("expansion pattern %<%T%> contains no argument packs", arg);
3180       else
3181         error ("expansion pattern %<%E%> contains no argument packs", arg);
3182       return error_mark_node;
3183     }
3184   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3185
3186   return result;
3187 }
3188
3189 /* Checks T for any "bare" parameter packs, which have not yet been
3190    expanded, and issues an error if any are found. This operation can
3191    only be done on full expressions or types (e.g., an expression
3192    statement, "if" condition, etc.), because we could have expressions like:
3193
3194      foo(f(g(h(args)))...)
3195
3196    where "args" is a parameter pack. check_for_bare_parameter_packs
3197    should not be called for the subexpressions args, h(args),
3198    g(h(args)), or f(g(h(args))), because we would produce erroneous
3199    error messages. 
3200
3201    Returns TRUE and emits an error if there were bare parameter packs,
3202    returns FALSE otherwise.  */
3203 bool 
3204 check_for_bare_parameter_packs (tree t)
3205 {
3206   tree parameter_packs = NULL_TREE;
3207   struct find_parameter_pack_data ppd;
3208
3209   if (!processing_template_decl || !t || t == error_mark_node)
3210     return false;
3211
3212   if (TREE_CODE (t) == TYPE_DECL)
3213     t = TREE_TYPE (t);
3214
3215   ppd.parameter_packs = &parameter_packs;
3216   ppd.visited = pointer_set_create ();
3217   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3218   pointer_set_destroy (ppd.visited);
3219
3220   if (parameter_packs) 
3221     {
3222       error ("parameter packs not expanded with %<...%>:");
3223       while (parameter_packs)
3224         {
3225           tree pack = TREE_VALUE (parameter_packs);
3226           tree name = NULL_TREE;
3227
3228           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3229               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3230             name = TYPE_NAME (pack);
3231           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3232             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3233           else
3234             name = DECL_NAME (pack);
3235
3236           if (name)
3237             inform (input_location, "        %qD", name);
3238           else
3239             inform (input_location, "        <anonymous>");
3240
3241           parameter_packs = TREE_CHAIN (parameter_packs);
3242         }
3243
3244       return true;
3245     }
3246
3247   return false;
3248 }
3249
3250 /* Expand any parameter packs that occur in the template arguments in
3251    ARGS.  */
3252 tree
3253 expand_template_argument_pack (tree args)
3254 {
3255   tree result_args = NULL_TREE;
3256   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3257   int num_result_args = -1;
3258   int non_default_args_count = -1;
3259
3260   /* First, determine if we need to expand anything, and the number of
3261      slots we'll need.  */
3262   for (in_arg = 0; in_arg < nargs; ++in_arg)
3263     {
3264       tree arg = TREE_VEC_ELT (args, in_arg);
3265       if (arg == NULL_TREE)
3266         return args;
3267       if (ARGUMENT_PACK_P (arg))
3268         {
3269           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3270           if (num_result_args < 0)
3271             num_result_args = in_arg + num_packed;
3272           else
3273             num_result_args += num_packed;
3274         }
3275       else
3276         {
3277           if (num_result_args >= 0)
3278             num_result_args++;
3279         }
3280     }
3281
3282   /* If no expansion is necessary, we're done.  */
3283   if (num_result_args < 0)
3284     return args;
3285
3286   /* Expand arguments.  */
3287   result_args = make_tree_vec (num_result_args);
3288   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3289     non_default_args_count =
3290       GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3291   for (in_arg = 0; in_arg < nargs; ++in_arg)
3292     {
3293       tree arg = TREE_VEC_ELT (args, in_arg);
3294       if (ARGUMENT_PACK_P (arg))
3295         {
3296           tree packed = ARGUMENT_PACK_ARGS (arg);
3297           int i, num_packed = TREE_VEC_LENGTH (packed);
3298           for (i = 0; i < num_packed; ++i, ++out_arg)
3299             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3300           if (non_default_args_count > 0)
3301             non_default_args_count += num_packed;
3302         }
3303       else
3304         {
3305           TREE_VEC_ELT (result_args, out_arg) = arg;
3306           ++out_arg;
3307         }
3308     }
3309   if (non_default_args_count >= 0)
3310     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3311   return result_args;
3312 }
3313
3314 /* Checks if DECL shadows a template parameter.
3315
3316    [temp.local]: A template-parameter shall not be redeclared within its
3317    scope (including nested scopes).
3318
3319    Emits an error and returns TRUE if the DECL shadows a parameter,
3320    returns FALSE otherwise.  */
3321
3322 bool
3323 check_template_shadow (tree decl)
3324 {
3325   tree olddecl;
3326
3327   /* If we're not in a template, we can't possibly shadow a template
3328      parameter.  */
3329   if (!current_template_parms)
3330     return true;
3331
3332   /* Figure out what we're shadowing.  */
3333   if (TREE_CODE (decl) == OVERLOAD)
3334     decl = OVL_CURRENT (decl);
3335   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3336
3337   /* If there's no previous binding for this name, we're not shadowing
3338      anything, let alone a template parameter.  */
3339   if (!olddecl)
3340     return true;
3341
3342   /* If we're not shadowing a template parameter, we're done.  Note
3343      that OLDDECL might be an OVERLOAD (or perhaps even an
3344      ERROR_MARK), so we can't just blithely assume it to be a _DECL
3345      node.  */
3346   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3347     return true;
3348
3349   /* We check for decl != olddecl to avoid bogus errors for using a
3350      name inside a class.  We check TPFI to avoid duplicate errors for
3351      inline member templates.  */
3352   if (decl == olddecl
3353       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
3354     return true;
3355
3356   error ("declaration of %q+#D", decl);
3357   error (" shadows template parm %q+#D", olddecl);
3358   return false;
3359 }
3360
3361 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3362    ORIG_LEVEL, DECL, and TYPE.  NUM_SIBLINGS is the total number of
3363    template parameters.  */
3364
3365 static tree
3366 build_template_parm_index (int index,
3367                            int level,
3368                            int orig_level,
3369                            int num_siblings,
3370                            tree decl,
3371                            tree type)
3372 {
3373   tree t = make_node (TEMPLATE_PARM_INDEX);
3374   TEMPLATE_PARM_IDX (t) = index;
3375   TEMPLATE_PARM_LEVEL (t) = level;
3376   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3377   TEMPLATE_PARM_NUM_SIBLINGS (t) = num_siblings;
3378   TEMPLATE_PARM_DECL (t) = decl;
3379   TREE_TYPE (t) = type;
3380   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3381   TREE_READONLY (t) = TREE_READONLY (decl);
3382
3383   return t;
3384 }
3385
3386 /* Find the canonical type parameter for the given template type
3387    parameter.  Returns the canonical type parameter, which may be TYPE
3388    if no such parameter existed.  */
3389
3390 static tree
3391 canonical_type_parameter (tree type)
3392 {
3393   tree list;
3394   int idx = TEMPLATE_TYPE_IDX (type);
3395   if (!canonical_template_parms)
3396     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
3397
3398   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
3399     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
3400
3401   list = VEC_index (tree, canonical_template_parms, idx);
3402   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3403     list = TREE_CHAIN (list);
3404
3405   if (list)
3406     return TREE_VALUE (list);
3407   else
3408     {
3409       VEC_replace(tree, canonical_template_parms, idx,
3410                   tree_cons (NULL_TREE, type, 
3411                              VEC_index (tree, canonical_template_parms, idx)));
3412       return type;
3413     }
3414 }
3415
3416 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3417    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
3418    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3419    new one is created.  */
3420
3421 static tree
3422 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3423                             tsubst_flags_t complain)
3424 {
3425   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3426       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3427           != TEMPLATE_PARM_LEVEL (index) - levels)
3428       || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3429     {
3430       tree orig_decl = TEMPLATE_PARM_DECL (index);
3431       tree decl, t;
3432
3433       decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3434                          TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3435       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3436       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3437       DECL_ARTIFICIAL (decl) = 1;
3438       SET_DECL_TEMPLATE_PARM_P (decl);
3439
3440       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3441                                      TEMPLATE_PARM_LEVEL (index) - levels,
3442                                      TEMPLATE_PARM_ORIG_LEVEL (index),
3443                                      TEMPLATE_PARM_NUM_SIBLINGS (index),
3444                                      decl, type);
3445       TEMPLATE_PARM_DESCENDANTS (index) = t;
3446       TEMPLATE_PARM_PARAMETER_PACK (t) 
3447         = TEMPLATE_PARM_PARAMETER_PACK (index);
3448
3449         /* Template template parameters need this.  */
3450       if (TREE_CODE (decl) == TEMPLATE_DECL)
3451         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3452           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3453            args, complain);
3454     }
3455
3456   return TEMPLATE_PARM_DESCENDANTS (index);
3457 }
3458
3459 /* Process information from new template parameter PARM and append it
3460    to the LIST being built.  This new parameter is a non-type
3461    parameter iff IS_NON_TYPE is true. This new parameter is a
3462    parameter pack iff IS_PARAMETER_PACK is true.  The location of PARM
3463    is in PARM_LOC. NUM_TEMPLATE_PARMS is the size of the template
3464    parameter list PARM belongs to. This is used used to create a
3465    proper canonical type for the type of PARM that is to be created,
3466    iff PARM is a type.  If the size is not known, this parameter shall
3467    be set to 0.  */
3468
3469 tree
3470 process_template_parm (tree list, location_t parm_loc, tree parm,
3471                        bool is_non_type, bool is_parameter_pack,
3472                        unsigned num_template_parms)
3473 {
3474   tree decl = 0;
3475   tree defval;
3476   tree err_parm_list;
3477   int idx = 0;
3478
3479   gcc_assert (TREE_CODE (parm) == TREE_LIST);
3480   defval = TREE_PURPOSE (parm);
3481
3482   if (list)
3483     {
3484       tree p = tree_last (list);
3485
3486       if (p && TREE_VALUE (p) != error_mark_node)
3487         {
3488           p = TREE_VALUE (p);
3489           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3490             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3491           else
3492             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3493         }
3494
3495       ++idx;
3496     }
3497   else
3498     idx = 0;
3499
3500   if (is_non_type)
3501     {
3502       parm = TREE_VALUE (parm);
3503
3504       SET_DECL_TEMPLATE_PARM_P (parm);
3505
3506       if (TREE_TYPE (parm) == error_mark_node)
3507         {
3508           err_parm_list = build_tree_list (defval, parm);
3509           TREE_VALUE (err_parm_list) = error_mark_node;
3510            return chainon (list, err_parm_list);
3511         }
3512       else
3513       {
3514         /* [temp.param]
3515
3516            The top-level cv-qualifiers on the template-parameter are
3517            ignored when determining its type.  */
3518         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3519         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3520           {
3521             err_parm_list = build_tree_list (defval, parm);
3522             TREE_VALUE (err_parm_list) = error_mark_node;
3523              return chainon (list, err_parm_list);
3524           }
3525
3526         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3527           {
3528             /* This template parameter is not a parameter pack, but it
3529                should be. Complain about "bare" parameter packs.  */
3530             check_for_bare_parameter_packs (TREE_TYPE (parm));
3531             
3532             /* Recover by calling this a parameter pack.  */
3533             is_parameter_pack = true;
3534           }
3535       }
3536
3537       /* A template parameter is not modifiable.  */
3538       TREE_CONSTANT (parm) = 1;
3539       TREE_READONLY (parm) = 1;
3540       decl = build_decl (parm_loc,
3541                          CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3542       TREE_CONSTANT (decl) = 1;
3543       TREE_READONLY (decl) = 1;
3544       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3545         = build_template_parm_index (idx, processing_template_decl,
3546                                      processing_template_decl,
3547                                      num_template_parms,
3548                                      decl, TREE_TYPE (parm));
3549
3550       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3551         = is_parameter_pack;
3552     }
3553   else
3554     {
3555       tree t;
3556       parm = TREE_VALUE (TREE_VALUE (parm));
3557
3558       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3559         {
3560           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3561           /* This is for distinguishing between real templates and template
3562              template parameters */
3563           TREE_TYPE (parm) = t;
3564           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3565           decl = parm;
3566         }
3567       else
3568         {
3569           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3570           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3571           decl = build_decl (parm_loc,
3572                              TYPE_DECL, parm, t);
3573         }
3574
3575       TYPE_NAME (t) = decl;
3576       TYPE_STUB_DECL (t) = decl;
3577       parm = decl;
3578       TEMPLATE_TYPE_PARM_INDEX (t)
3579         = build_template_parm_index (idx, processing_template_decl,
3580                                      processing_template_decl,
3581                                      num_template_parms,
3582                                      decl, TREE_TYPE (parm));
3583       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3584       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3585     }
3586   DECL_ARTIFICIAL (decl) = 1;
3587   SET_DECL_TEMPLATE_PARM_P (decl);
3588   pushdecl (decl);
3589   parm = build_tree_list (defval, parm);
3590   return chainon (list, parm);
3591 }
3592
3593 /* The end of a template parameter list has been reached.  Process the
3594    tree list into a parameter vector, converting each parameter into a more
3595    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3596    as PARM_DECLs.  */
3597
3598 tree
3599 end_template_parm_list (tree parms)
3600 {
3601   int nparms;
3602   tree parm, next;
3603   tree saved_parmlist = make_tree_vec (list_length (parms));
3604
3605   current_template_parms
3606     = tree_cons (size_int (processing_template_decl),
3607                  saved_parmlist, current_template_parms);
3608
3609   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3610     {
3611       next = TREE_CHAIN (parm);
3612       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3613       TREE_CHAIN (parm) = NULL_TREE;
3614     }
3615
3616   --processing_template_parmlist;
3617
3618   return saved_parmlist;
3619 }
3620
3621 /* Create a new type almost identical to TYPE but which has the
3622    following differences:
3623
3624      1/ T has a new TEMPLATE_PARM_INDEX that carries the new number of
3625      template sibling parameters of T.
3626
3627      2/ T has a new canonical type that matches the new number
3628      of sibling parms.
3629
3630      3/ From now on, T is going to be what lookups referring to the
3631      name of TYPE will return. No lookup should return TYPE anymore.
3632
3633    NUM_PARMS is the new number of sibling parms TYPE belongs to.
3634
3635    This is a subroutine of fixup_template_parms.  */
3636
3637 static tree
3638 fixup_template_type_parm_type (tree type, int num_parms)
3639 {
3640   tree orig_idx = TEMPLATE_TYPE_PARM_INDEX (type), idx;
3641   tree t;
3642   /* This is the decl which name is inserted into the symbol table for
3643      the template parm type. So whenever we lookup the type name, this
3644      is the DECL we get.  */
3645   tree decl;
3646
3647   /* Do not fix up the type twice.  */
3648   if (orig_idx && TEMPLATE_PARM_NUM_SIBLINGS (orig_idx) != 0)
3649     return type;
3650
3651   t = copy_type (type);
3652   decl = TYPE_NAME (t);
3653
3654   TYPE_MAIN_VARIANT (t) = t;
3655   TYPE_NEXT_VARIANT (t)= NULL_TREE;
3656   TYPE_POINTER_TO (t) = 0;
3657   TYPE_REFERENCE_TO (t) = 0;
3658
3659   idx = build_template_parm_index (TEMPLATE_PARM_IDX (orig_idx),
3660                                    TEMPLATE_PARM_LEVEL (orig_idx),
3661                                    TEMPLATE_PARM_ORIG_LEVEL (orig_idx),
3662                                    num_parms,
3663                                    decl, t);
3664   TEMPLATE_PARM_DESCENDANTS (idx) = TEMPLATE_PARM_DESCENDANTS (orig_idx);
3665   TEMPLATE_PARM_PARAMETER_PACK (idx) = TEMPLATE_PARM_PARAMETER_PACK (orig_idx);
3666   TEMPLATE_TYPE_PARM_INDEX (t) = idx;
3667
3668   TYPE_STUB_DECL (t) = decl;
3669   TEMPLATE_TYPE_DECL (t) = decl;
3670   if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
3671     TREE_TYPE (DECL_TEMPLATE_RESULT  (decl)) = t;
3672
3673   /* Update the type associated to the type name stored in the symbol
3674      table. Now, whenever the type name is looked up, the resulting
3675      type is properly fixed up.  */
3676   TREE_TYPE (decl) = t;
3677
3678   TYPE_CANONICAL (t) = canonical_type_parameter (t);
3679
3680   return t;
3681 }
3682
3683 /* Create and return a new TEMPLATE_PARM_INDEX that is almost
3684    identical to I, but that is fixed up as to:
3685
3686    1/ carry the number of sibling parms (NUM_PARMS) of the template
3687    parm represented by I.
3688
3689    2/ replace all references to template parm types declared before I
3690    (in the same template parm list as I) by references to template
3691    parm types contained in ARGS. ARGS should contain the list of
3692    template parms that have been fixed up so far, in a form suitable
3693    to be passed to tsubst.
3694
3695    This is a subroutine of fixup_template_parms.  */
3696
3697 static tree
3698 fixup_template_parm_index (tree i, tree args, int num_parms)
3699 {
3700   tree index, decl, type;
3701
3702   if (i == NULL_TREE
3703       || TREE_CODE (i) != TEMPLATE_PARM_INDEX
3704       /* Do not fix up the index twice.  */
3705       || (TEMPLATE_PARM_NUM_SIBLINGS (i) != 0))
3706     return i;
3707
3708   decl = TEMPLATE_PARM_DECL (i);
3709   type = TREE_TYPE (decl);
3710
3711   index = build_template_parm_index (TEMPLATE_PARM_IDX (i),
3712                                      TEMPLATE_PARM_LEVEL (i),
3713                                      TEMPLATE_PARM_ORIG_LEVEL (i),
3714                                      num_parms,
3715                                      decl, type);
3716
3717   TEMPLATE_PARM_DESCENDANTS (index) = TEMPLATE_PARM_DESCENDANTS (i);
3718   TEMPLATE_PARM_PARAMETER_PACK (index) = TEMPLATE_PARM_PARAMETER_PACK (i);
3719
3720   type = tsubst (type, args, tf_none, NULL_TREE);
3721   
3722   TREE_TYPE (decl) = type;
3723   TREE_TYPE (index) = type;
3724
3725   return index;
3726 }
3727
3728 /* 
3729    This is a subroutine of fixup_template_parms.
3730
3731    It computes the canonical type of the type of the template
3732    parameter PARM_DESC and update all references to that type so that
3733    they use the newly computed canonical type. No access check is
3734    performed during the fixup. PARM_DESC is a TREE_LIST which
3735    TREE_VALUE is the template parameter and its TREE_PURPOSE is the
3736    default argument of the template parm if any. IDX is the index of
3737    the template parameter, starting at 0. NUM_PARMS is the number of
3738    template parameters in the set PARM_DESC belongs to. ARGLIST is a
3739    TREE_VEC containing the full set of template parameters in a form
3740    suitable to be passed to substs functions as their ARGS
3741    argument. This is what current_template_args returns for a given
3742    template. The innermost vector of args in ARGLIST is the set of
3743    template parms that have been fixed up so far. This function adds
3744    the fixed up parameter into that vector.  */
3745
3746 static void
3747 fixup_template_parm (tree parm_desc,
3748                      int idx,
3749                      int num_parms,
3750                      tree arglist)
3751 {
3752   tree parm = TREE_VALUE (parm_desc);
3753   tree fixedup_args = INNERMOST_TEMPLATE_ARGS (arglist);
3754
3755   push_deferring_access_checks (dk_no_check);
3756
3757   if (TREE_CODE (parm) == TYPE_DECL)
3758     {
3759       /* PARM is a template type parameter. Fix up its type, add
3760          the fixed-up template parm to the vector of fixed-up
3761          template parms so far, and substitute the fixed-up
3762          template parms into the default argument of this
3763          parameter.  */
3764       tree t =
3765         fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3766       TREE_TYPE (parm) = t;
3767
3768       TREE_VEC_ELT (fixedup_args, idx) = template_parm_to_arg (parm_desc);
3769     }
3770   else if (TREE_CODE (parm) == TEMPLATE_DECL)
3771     {
3772       /* PARM is a template template parameter. This is going to
3773          be interesting.  */
3774       tree tparms, targs, innermost_args, t;
3775       int j;
3776
3777       /* First, fix up the parms of the template template parm
3778          because the parms are involved in defining the new canonical
3779          type of the template template parm.  */
3780
3781       /* So we need to substitute the template parm types that have
3782          been fixed up so far into the template parms of this template
3783          template parm. E.g, consider this:
3784
3785          template<class T, template<T u> class TT> class S;
3786
3787          In this case we want to substitute T into the
3788          template parameters of TT.
3789
3790          So let's walk the template parms of PARM here, and
3791          tsubst ARGLIST into into each of the template
3792          parms.   */
3793
3794       /* For this substitution we need to build the full set of
3795          template parameters and use that as arguments for the
3796          tsubsting function.  */
3797       tparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
3798
3799       /* This will contain the innermost parms of PARM into which
3800          we have substituted so far.  */
3801       innermost_args = make_tree_vec (TREE_VEC_LENGTH (tparms));
3802       targs = add_to_template_args (arglist, innermost_args);
3803       for (j = 0; j < TREE_VEC_LENGTH (tparms); ++j)
3804         {
3805           tree parameter;
3806
3807           parameter = TREE_VEC_ELT (tparms, j);
3808
3809           /* INNERMOST_ARGS needs to have at least the same number
3810              of elements as the index PARAMETER, ortherwise
3811              tsubsting into PARAMETER will result in partially
3812              instantiating it, reducing its tempate parm
3813              level. Let's tactically fill INNERMOST_ARGS for that
3814              purpose.  */
3815           TREE_VEC_ELT (innermost_args, j) =
3816             template_parm_to_arg (parameter);
3817
3818           fixup_template_parm (parameter, j,
3819                                TREE_VEC_LENGTH (tparms),
3820                                targs);
3821         }
3822
3823       /* Now fix up the type of the template template parm.  */
3824
3825       t = fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3826       TREE_TYPE (parm) = t;
3827
3828       TREE_VEC_ELT (fixedup_args, idx) =
3829         template_parm_to_arg (parm_desc);
3830     }
3831   else if (TREE_CODE (parm) == PARM_DECL)
3832     {
3833       /* PARM is a non-type template parameter. We need to:
3834
3835        * Fix up its TEMPLATE_PARM_INDEX to make it carry the
3836        proper number of sibling parameters.
3837
3838        * Make lookups of the template parameter return a reference
3839        to the fixed-up index. No lookup should return references
3840        to the former index anymore.
3841
3842        * Substitute the template parms that got fixed up so far
3843
3844        * into the type of PARM.  */
3845
3846       tree index = DECL_INITIAL (parm);
3847
3848       /* PUSHED_DECL is the decl added to the symbol table with
3849          the name of the parameter. E,g:
3850              
3851          template<class T, T u> //#0
3852          auto my_function(T t) -> decltype(u); //#1
3853
3854          Here, when looking up u at //#1, we get the decl of u
3855          resulting from the declaration in #0. This is what
3856          PUSHED_DECL is. We need to replace the reference to the
3857          old TEMPLATE_PARM_INDEX carried by PUSHED_DECL by the
3858          fixed-up TEMPLATE_PARM_INDEX.  */
3859       tree pushed_decl = TEMPLATE_PARM_DECL (index);
3860
3861       /* Let's fix up the TEMPLATE_PARM_INDEX then. Note that we must
3862          fixup the type of PUSHED_DECL as well and luckily
3863          fixup_template_parm_index does it for us too.  */
3864       tree fixed_up_index =
3865         fixup_template_parm_index (index, arglist, num_parms);
3866
3867       DECL_INITIAL (pushed_decl) = DECL_INITIAL (parm) = fixed_up_index;
3868
3869       /* Add this fixed up PARM to the template parms we've fixed
3870          up so far and use that to substitute the fixed-up
3871          template parms into the type of PARM.  */
3872       TREE_VEC_ELT (fixedup_args, idx) =
3873         template_parm_to_arg (parm_desc);
3874       TREE_TYPE (parm) = tsubst (TREE_TYPE (parm), arglist,
3875                                  tf_none, NULL_TREE);
3876     }
3877
3878   TREE_PURPOSE (parm_desc) =
3879     tsubst_template_arg (TREE_PURPOSE (parm_desc),
3880                          arglist, tf_none, parm);
3881
3882   pop_deferring_access_checks ();
3883 }
3884
3885 /* Walk the current template parms and properly compute the canonical
3886    types of the dependent types created during
3887    cp_parser_template_parameter_list.  */
3888
3889 void
3890 fixup_template_parms (void)
3891 {
3892   tree arglist;
3893   tree parameter_vec;
3894   tree fixedup_args;
3895   int i, num_parms;
3896
3897   parameter_vec = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3898   if (parameter_vec == NULL_TREE)
3899     return;
3900
3901   num_parms = TREE_VEC_LENGTH (parameter_vec);
3902
3903   /* This vector contains the current innermost template parms that
3904      have been fixed up so far.  The form of FIXEDUP_ARGS is suitable
3905      to be passed to tsubst* functions as their ARGS argument.  */
3906   fixedup_args = make_tree_vec (num_parms);
3907
3908   /* This vector contains the full set of template parms in a form
3909      suitable to be passed to substs functions as their ARGS
3910      argument.  */
3911   arglist = current_template_args ();
3912   arglist = add_outermost_template_args (arglist, fixedup_args);
3913
3914   /* Let's do the proper fixup now.  */
3915   for (i = 0; i < num_parms; ++i)
3916     fixup_template_parm (TREE_VEC_ELT (parameter_vec, i),
3917                          i, num_parms, arglist);
3918 }
3919
3920 /* end_template_decl is called after a template declaration is seen.  */
3921
3922 void
3923 end_template_decl (void)
3924 {
3925   reset_specialization ();
3926
3927   if (! processing_template_decl)
3928     return;
3929
3930   /* This matches the pushlevel in begin_template_parm_list.  */
3931   finish_scope ();
3932
3933   --processing_template_decl;
3934   current_template_parms = TREE_CHAIN (current_template_parms);
3935 }
3936
3937 /* Takes a TREE_LIST representing a template parameter and convert it
3938    into an argument suitable to be passed to the type substitution
3939    functions.  Note that If the TREE_LIST contains an error_mark
3940    node, the returned argument is error_mark_node.  */
3941
3942 static tree
3943 template_parm_to_arg (tree t)
3944 {
3945
3946   if (t == NULL_TREE
3947       || TREE_CODE (t) != TREE_LIST)
3948     return t;
3949
3950   if (error_operand_p (TREE_VALUE (t)))
3951     return error_mark_node;
3952
3953   t = TREE_VALUE (t);
3954
3955   if (TREE_CODE (t) == TYPE_DECL
3956       || TREE_CODE (t) == TEMPLATE_DECL)
3957     {
3958       t = TREE_TYPE (t);
3959
3960       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3961         {
3962           /* Turn this argument into a TYPE_ARGUMENT_PACK
3963              with a single element, which expands T.  */
3964           tree vec = make_tree_vec (1);
3965 #ifdef ENABLE_CHECKING
3966           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3967             (vec, TREE_VEC_LENGTH (vec));
3968 #endif
3969           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3970
3971           t = cxx_make_type (TYPE_ARGUMENT_PACK);
3972           SET_ARGUMENT_PACK_ARGS (t, vec);
3973         }
3974     }
3975   else
3976     {
3977       t = DECL_INITIAL (t);
3978
3979       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3980         {
3981           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3982              with a single element, which expands T.  */
3983           tree vec = make_tree_vec (1);
3984           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3985 #ifdef ENABLE_CHECKING
3986           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3987             (vec, TREE_VEC_LENGTH (vec));
3988 #endif
3989           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3990
3991           t  = make_node (NONTYPE_ARGUMENT_PACK);
3992           SET_ARGUMENT_PACK_ARGS (t, vec);
3993           TREE_TYPE (t) = type;
3994         }
3995     }
3996   return t;
3997 }
3998
3999 /* Within the declaration of a template, return all levels of template
4000    parameters that apply.  The template parameters are represented as
4001    a TREE_VEC, in the form documented in cp-tree.h for template
4002    arguments.  */
4003
4004 static tree
4005 current_template_args (void)
4006 {
4007   tree header;
4008   tree args = NULL_TREE;
4009   int length = TMPL_PARMS_DEPTH (current_template_parms);
4010   int l = length;
4011
4012   /* If there is only one level of template parameters, we do not
4013      create a TREE_VEC of TREE_VECs.  Instead, we return a single
4014      TREE_VEC containing the arguments.  */
4015   if (length > 1)
4016     args = make_tree_vec (length);
4017
4018   for (header = current_template_parms; header; header = TREE_CHAIN (header))
4019     {
4020       tree a = copy_node (TREE_VALUE (header));
4021       int i;
4022
4023       TREE_TYPE (a) = NULL_TREE;
4024       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
4025         TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
4026
4027 #ifdef ENABLE_CHECKING
4028       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
4029 #endif
4030
4031       if (length > 1)
4032         TREE_VEC_ELT (args, --l) = a;
4033       else
4034         args = a;
4035     }
4036
4037     if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
4038       /* This can happen for template parms of a template template
4039          parameter, e.g:
4040
4041          template<template<class T, class U> class TT> struct S;
4042
4043          Consider the level of the parms of TT; T and U both have
4044          level 2; TT has no template parm of level 1. So in this case
4045          the first element of full_template_args is NULL_TREE. If we
4046          leave it like this TMPL_ARG_DEPTH on args returns 1 instead
4047          of 2. This will make tsubst wrongly consider that T and U
4048          have level 1. Instead, let's create a dummy vector as the
4049          first element of full_template_args so that TMPL_ARG_DEPTH
4050          returns the correct depth for args.  */
4051       TREE_VEC_ELT (args, 0) = make_tree_vec (1);
4052   return args;
4053 }
4054
4055 /* Update the declared TYPE by doing any lookups which were thought to be
4056    dependent, but are not now that we know the SCOPE of the declarator.  */
4057
4058 tree
4059 maybe_update_decl_type (tree orig_type, tree scope)
4060 {
4061   tree type = orig_type;
4062
4063   if (type == NULL_TREE)
4064     return type;
4065
4066   if (TREE_CODE (orig_type) == TYPE_DECL)
4067     type = TREE_TYPE (type);
4068
4069   if (scope && TYPE_P (scope) && dependent_type_p (scope)
4070       && dependent_type_p (type)
4071       /* Don't bother building up the args in this case.  */
4072       && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4073     {
4074       /* tsubst in the args corresponding to the template parameters,
4075          including auto if present.  Most things will be unchanged, but
4076          make_typename_type and tsubst_qualified_id will resolve
4077          TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
4078       tree args = current_template_args ();
4079       tree auto_node = type_uses_auto (type);
4080       tree pushed;
4081       if (auto_node)
4082         {
4083           tree auto_vec = make_tree_vec (1);
4084           TREE_VEC_ELT (auto_vec, 0) = auto_node;
4085           args = add_to_template_args (args, auto_vec);
4086         }
4087       pushed = push_scope (scope);
4088       type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4089       if (pushed)
4090         pop_scope (scope);
4091     }
4092
4093   if (type == error_mark_node)
4094     return orig_type;
4095
4096   if (TREE_CODE (orig_type) == TYPE_DECL)
4097     {
4098       if (same_type_p (type, TREE_TYPE (orig_type)))
4099         type = orig_type;
4100       else
4101         type = TYPE_NAME (type);
4102     }
4103   return type;
4104 }
4105
4106 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4107    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
4108    a member template.  Used by push_template_decl below.  */
4109
4110 static tree
4111 build_template_decl (tree decl, tree parms, bool member_template_p)
4112 {
4113   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4114   DECL_TEMPLATE_PARMS (tmpl) = parms;
4115   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4116   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4117
4118   return tmpl;
4119 }
4120
4121 struct template_parm_data
4122 {
4123   /* The level of the template parameters we are currently
4124      processing.  */
4125   int level;
4126
4127   /* The index of the specialization argument we are currently
4128      processing.  */
4129   int current_arg;
4130
4131   /* An array whose size is the number of template parameters.  The
4132      elements are nonzero if the parameter has been used in any one
4133      of the arguments processed so far.  */
4134   int* parms;
4135
4136   /* An array whose size is the number of template arguments.  The
4137      elements are nonzero if the argument makes use of template
4138      parameters of this level.  */
4139   int* arg_uses_template_parms;
4140 };
4141
4142 /* Subroutine of push_template_decl used to see if each template
4143    parameter in a partial specialization is used in the explicit
4144    argument list.  If T is of the LEVEL given in DATA (which is
4145    treated as a template_parm_data*), then DATA->PARMS is marked
4146    appropriately.  */
4147
4148 static int
4149 mark_template_parm (tree t, void* data)
4150 {
4151   int level;
4152   int idx;
4153   struct template_parm_data* tpd = (struct template_parm_data*) data;
4154
4155   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4156     {
4157       level = TEMPLATE_PARM_LEVEL (t);
4158       idx = TEMPLATE_PARM_IDX (t);
4159     }
4160   else
4161     {
4162       level = TEMPLATE_TYPE_LEVEL (t);
4163       idx = TEMPLATE_TYPE_IDX (t);
4164     }
4165
4166   if (level == tpd->level)
4167     {
4168       tpd->parms[idx] = 1;
4169       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4170     }
4171
4172   /* Return zero so that for_each_template_parm will continue the
4173      traversal of the tree; we want to mark *every* template parm.  */
4174   return 0;
4175 }
4176
4177 /* Process the partial specialization DECL.  */
4178
4179 static tree
4180 process_partial_specialization (tree decl)
4181 {
4182   tree type = TREE_TYPE (decl);
4183   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
4184   tree specargs = CLASSTYPE_TI_ARGS (type);
4185   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4186   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4187   tree inner_parms;
4188   tree inst;
4189   int nargs = TREE_VEC_LENGTH (inner_args);
4190   int ntparms;
4191   int  i;
4192   bool did_error_intro = false;
4193   struct template_parm_data tpd;
4194   struct template_parm_data tpd2;
4195
4196   gcc_assert (current_template_parms);
4197
4198   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4199   ntparms = TREE_VEC_LENGTH (inner_parms);
4200
4201   /* We check that each of the template parameters given in the
4202      partial specialization is used in the argument list to the
4203      specialization.  For example:
4204
4205        template <class T> struct S;
4206        template <class T> struct S<T*>;
4207
4208      The second declaration is OK because `T*' uses the template
4209      parameter T, whereas
4210
4211        template <class T> struct S<int>;
4212
4213      is no good.  Even trickier is:
4214
4215        template <class T>
4216        struct S1
4217        {
4218           template <class U>
4219           struct S2;
4220           template <class U>
4221           struct S2<T>;
4222        };
4223
4224      The S2<T> declaration is actually invalid; it is a
4225      full-specialization.  Of course,
4226
4227           template <class U>
4228           struct S2<T (*)(U)>;
4229
4230      or some such would have been OK.  */
4231   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4232   tpd.parms = XALLOCAVEC (int, ntparms);
4233   memset (tpd.parms, 0, sizeof (int) * ntparms);
4234
4235   tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4236   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4237   for (i = 0; i < nargs; ++i)
4238     {
4239       tpd.current_arg = i;
4240       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4241                               &mark_template_parm,
4242                               &tpd,
4243                               NULL,
4244                               /*include_nondeduced_p=*/false);
4245     }
4246   for (i = 0; i < ntparms; ++i)
4247     if (tpd.parms[i] == 0)
4248       {
4249         /* One of the template parms was not used in the
4250            specialization.  */
4251         if (!did_error_intro)
4252           {
4253             error ("template parameters not used in partial specialization:");
4254             did_error_intro = true;
4255           }
4256
4257         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4258       }
4259
4260   if (did_error_intro)
4261     return error_mark_node;
4262
4263   /* [temp.class.spec]
4264
4265      The argument list of the specialization shall not be identical to
4266      the implicit argument list of the primary template.  */
4267   if (comp_template_args
4268       (inner_args,
4269        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
4270                                                    (maintmpl)))))
4271     error ("partial specialization %qT does not specialize any template arguments", type);
4272
4273   /* [temp.class.spec]
4274
4275      A partially specialized non-type argument expression shall not
4276      involve template parameters of the partial specialization except
4277      when the argument expression is a simple identifier.
4278
4279      The type of a template parameter corresponding to a specialized
4280      non-type argument shall not be dependent on a parameter of the
4281      specialization. 
4282
4283      Also, we verify that pack expansions only occur at the
4284      end of the argument list.  */
4285   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4286   tpd2.parms = 0;
4287   for (i = 0; i < nargs; ++i)
4288     {
4289       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4290       tree arg = TREE_VEC_ELT (inner_args, i);
4291       tree packed_args = NULL_TREE;
4292       int j, len = 1;
4293
4294       if (ARGUMENT_PACK_P (arg))
4295         {
4296           /* Extract the arguments from the argument pack. We'll be
4297              iterating over these in the following loop.  */
4298           packed_args = ARGUMENT_PACK_ARGS (arg);
4299           len = TREE_VEC_LENGTH (packed_args);
4300         }
4301
4302       for (j = 0; j < len; j++)
4303         {
4304           if (packed_args)
4305             /* Get the Jth argument in the parameter pack.  */
4306             arg = TREE_VEC_ELT (packed_args, j);
4307
4308           if (PACK_EXPANSION_P (arg))
4309             {
4310               /* Pack expansions must come at the end of the
4311                  argument list.  */
4312               if ((packed_args && j < len - 1)
4313                   || (!packed_args && i < nargs - 1))
4314                 {
4315                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4316                     error ("parameter pack argument %qE must be at the "
4317                            "end of the template argument list", arg);
4318                   else
4319                     error ("parameter pack argument %qT must be at the "
4320                            "end of the template argument list", arg);
4321                 }
4322             }
4323
4324           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4325             /* We only care about the pattern.  */
4326             arg = PACK_EXPANSION_PATTERN (arg);
4327
4328           if (/* These first two lines are the `non-type' bit.  */
4329               !TYPE_P (arg)
4330               && TREE_CODE (arg) != TEMPLATE_DECL
4331               /* This next line is the `argument expression is not just a
4332                  simple identifier' condition and also the `specialized
4333                  non-type argument' bit.  */
4334               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
4335             {
4336               if ((!packed_args && tpd.arg_uses_template_parms[i])
4337                   || (packed_args && uses_template_parms (arg)))
4338                 error ("template argument %qE involves template parameter(s)",
4339                        arg);
4340               else 
4341                 {
4342                   /* Look at the corresponding template parameter,
4343                      marking which template parameters its type depends
4344                      upon.  */
4345                   tree type = TREE_TYPE (parm);
4346
4347                   if (!tpd2.parms)
4348                     {
4349                       /* We haven't yet initialized TPD2.  Do so now.  */
4350                       tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4351                       /* The number of parameters here is the number in the
4352                          main template, which, as checked in the assertion
4353                          above, is NARGS.  */
4354                       tpd2.parms = XALLOCAVEC (int, nargs);
4355                       tpd2.level = 
4356                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4357                     }
4358
4359                   /* Mark the template parameters.  But this time, we're
4360                      looking for the template parameters of the main
4361                      template, not in the specialization.  */
4362                   tpd2.current_arg = i;
4363                   tpd2.arg_uses_template_parms[i] = 0;
4364                   memset (tpd2.parms, 0, sizeof (int) * nargs);
4365                   for_each_template_parm (type,
4366                                           &mark_template_parm,
4367                                           &tpd2,
4368                                           NULL,
4369                                           /*include_nondeduced_p=*/false);
4370
4371                   if (tpd2.arg_uses_template_parms [i])
4372                     {
4373                       /* The type depended on some template parameters.
4374                          If they are fully specialized in the
4375                          specialization, that's OK.  */
4376                       int j;
4377                       int count = 0;
4378                       for (j = 0; j < nargs; ++j)
4379                         if (tpd2.parms[j] != 0
4380                             && tpd.arg_uses_template_parms [j])
4381                           ++count;
4382                       if (count != 0)
4383                         error_n (input_location, count,
4384                                  "type %qT of template argument %qE depends "
4385                                  "on a template parameter",
4386                                  "type %qT of template argument %qE depends "
4387                                  "on template parameters",
4388                                  type,
4389                                  arg);
4390                     }
4391                 }
4392             }
4393         }
4394     }
4395
4396   /* We should only get here once.  */
4397   gcc_assert (!COMPLETE_TYPE_P (type));
4398
4399   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4400     = tree_cons (specargs, inner_parms,
4401                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4402   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4403
4404   for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4405        inst = TREE_CHAIN (inst))
4406     {
4407       tree inst_type = TREE_VALUE (inst);
4408       if (COMPLETE_TYPE_P (inst_type)
4409           && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4410         {
4411           tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
4412           if (spec && TREE_TYPE (spec) == type)
4413             permerror (input_location,
4414                        "partial specialization of %qT after instantiation "
4415                        "of %qT", type, inst_type);
4416         }
4417     }
4418
4419   return decl;
4420 }
4421
4422 /* Check that a template declaration's use of default arguments and
4423    parameter packs is not invalid.  Here, PARMS are the template
4424    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
4425    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
4426    specialization.
4427    
4428
4429    IS_FRIEND_DECL is nonzero if DECL is a friend function template
4430    declaration (but not a definition); 1 indicates a declaration, 2
4431    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4432    emitted for extraneous default arguments.
4433
4434    Returns TRUE if there were no errors found, FALSE otherwise. */
4435
4436 bool
4437 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
4438                          int is_partial, int is_friend_decl)
4439 {
4440   const char *msg;
4441   int last_level_to_check;
4442   tree parm_level;
4443   bool no_errors = true;
4444
4445   /* [temp.param]
4446
4447      A default template-argument shall not be specified in a
4448      function template declaration or a function template definition, nor
4449      in the template-parameter-list of the definition of a member of a
4450      class template.  */
4451
4452   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
4453     /* You can't have a function template declaration in a local
4454        scope, nor you can you define a member of a class template in a
4455        local scope.  */
4456     return true;
4457
4458   if (current_class_type
4459       && !TYPE_BEING_DEFINED (current_class_type)
4460       && DECL_LANG_SPECIFIC (decl)
4461       && DECL_DECLARES_FUNCTION_P (decl)
4462       /* If this is either a friend defined in the scope of the class
4463          or a member function.  */
4464       && (DECL_FUNCTION_MEMBER_P (decl)
4465           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4466           : DECL_FRIEND_CONTEXT (decl)
4467           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4468           : false)
4469       /* And, if it was a member function, it really was defined in
4470          the scope of the class.  */
4471       && (!DECL_FUNCTION_MEMBER_P (decl)
4472           || DECL_INITIALIZED_IN_CLASS_P (decl)))
4473     /* We already checked these parameters when the template was
4474        declared, so there's no need to do it again now.  This function
4475        was defined in class scope, but we're processing it's body now
4476        that the class is complete.  */
4477     return true;
4478
4479   /* Core issue 226 (C++0x only): the following only applies to class
4480      templates.  */
4481   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
4482     {
4483       /* [temp.param]
4484
4485          If a template-parameter has a default template-argument, all
4486          subsequent template-parameters shall have a default
4487          template-argument supplied.  */
4488       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4489         {
4490           tree inner_parms = TREE_VALUE (parm_level);
4491           int ntparms = TREE_VEC_LENGTH (inner_parms);
4492           int seen_def_arg_p = 0;
4493           int i;
4494
4495           for (i = 0; i < ntparms; ++i)
4496             {
4497               tree parm = TREE_VEC_ELT (inner_parms, i);
4498
4499               if (parm == error_mark_node)
4500                 continue;
4501
4502               if (TREE_PURPOSE (parm))
4503                 seen_def_arg_p = 1;
4504               else if (seen_def_arg_p
4505                        && !template_parameter_pack_p (TREE_VALUE (parm)))
4506                 {
4507                   error ("no default argument for %qD", TREE_VALUE (parm));
4508                   /* For better subsequent error-recovery, we indicate that
4509                      there should have been a default argument.  */
4510                   TREE_PURPOSE (parm) = error_mark_node;
4511                   no_errors = false;
4512                 }
4513               else if (is_primary
4514                        && !is_partial
4515                        && !is_friend_decl
4516                        /* Don't complain about an enclosing partial
4517                           specialization.  */
4518                        && parm_level == parms
4519                        && TREE_CODE (decl) == TYPE_DECL
4520                        && i < ntparms - 1
4521                        && template_parameter_pack_p (TREE_VALUE (parm)))
4522                 {
4523                   /* A primary class template can only have one
4524                      parameter pack, at the end of the template
4525                      parameter list.  */
4526
4527                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4528                     error ("parameter pack %qE must be at the end of the"
4529                            " template parameter list", TREE_VALUE (parm));
4530                   else
4531                     error ("parameter pack %qT must be at the end of the"
4532                            " template parameter list", 
4533                            TREE_TYPE (TREE_VALUE (parm)));
4534
4535                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
4536                     = error_mark_node;
4537                   no_errors = false;
4538                 }
4539             }
4540         }
4541     }
4542
4543   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4544       || is_partial 
4545       || !is_primary
4546       || is_friend_decl)
4547     /* For an ordinary class template, default template arguments are
4548        allowed at the innermost level, e.g.:
4549          template <class T = int>
4550          struct S {};
4551        but, in a partial specialization, they're not allowed even
4552        there, as we have in [temp.class.spec]:
4553
4554          The template parameter list of a specialization shall not
4555          contain default template argument values.
4556
4557        So, for a partial specialization, or for a function template
4558        (in C++98/C++03), we look at all of them.  */
4559     ;
4560   else
4561     /* But, for a primary class template that is not a partial
4562        specialization we look at all template parameters except the
4563        innermost ones.  */
4564     parms = TREE_CHAIN (parms);
4565
4566   /* Figure out what error message to issue.  */
4567   if (is_friend_decl == 2)
4568     msg = G_("default template arguments may not be used in function template "
4569              "friend re-declaration");
4570   else if (is_friend_decl)
4571     msg = G_("default template arguments may not be used in function template "
4572              "friend declarations");
4573   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4574     msg = G_("default template arguments may not be used in function templates "
4575              "without -std=c++0x or -std=gnu++0x");
4576   else if (is_partial)
4577     msg = G_("default template arguments may not be used in "
4578              "partial specializations");
4579   else
4580     msg = G_("default argument for template parameter for class enclosing %qD");
4581
4582   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4583     /* If we're inside a class definition, there's no need to
4584        examine the parameters to the class itself.  On the one
4585        hand, they will be checked when the class is defined, and,
4586        on the other, default arguments are valid in things like:
4587          template <class T = double>
4588          struct S { template <class U> void f(U); };
4589        Here the default argument for `S' has no bearing on the
4590        declaration of `f'.  */
4591     last_level_to_check = template_class_depth (current_class_type) + 1;
4592   else
4593     /* Check everything.  */
4594     last_level_to_check = 0;
4595
4596   for (parm_level = parms;
4597        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4598        parm_level = TREE_CHAIN (parm_level))
4599     {
4600       tree inner_parms = TREE_VALUE (parm_level);
4601       int i;
4602       int ntparms;
4603
4604       ntparms = TREE_VEC_LENGTH (inner_parms);
4605       for (i = 0; i < ntparms; ++i)
4606         {
4607           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4608             continue;
4609
4610           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4611             {
4612               if (msg)
4613                 {
4614                   no_errors = false;
4615                   if (is_friend_decl == 2)
4616                     return no_errors;
4617
4618                   error (msg, decl);
4619                   msg = 0;
4620                 }
4621
4622               /* Clear out the default argument so that we are not
4623                  confused later.  */
4624               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4625             }
4626         }
4627
4628       /* At this point, if we're still interested in issuing messages,
4629          they must apply to classes surrounding the object declared.  */
4630       if (msg)
4631         msg = G_("default argument for template parameter for class "
4632                  "enclosing %qD");
4633     }
4634
4635   return no_errors;
4636 }
4637
4638 /* Worker for push_template_decl_real, called via
4639    for_each_template_parm.  DATA is really an int, indicating the
4640    level of the parameters we are interested in.  If T is a template
4641    parameter of that level, return nonzero.  */
4642
4643 static int
4644 template_parm_this_level_p (tree t, void* data)
4645 {
4646   int this_level = *(int *)data;
4647   int level;
4648
4649   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4650     level = TEMPLATE_PARM_LEVEL (t);
4651   else
4652     level = TEMPLATE_TYPE_LEVEL (t);
4653   return level == this_level;
4654 }
4655
4656 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4657    parameters given by current_template_args, or reuses a
4658    previously existing one, if appropriate.  Returns the DECL, or an
4659    equivalent one, if it is replaced via a call to duplicate_decls.
4660
4661    If IS_FRIEND is true, DECL is a friend declaration.  */
4662
4663 tree
4664 push_template_decl_real (tree decl, bool is_friend)
4665 {
4666   tree tmpl;
4667   tree args;
4668   tree info;
4669   tree ctx;
4670   int primary;
4671   int is_partial;
4672   int new_template_p = 0;
4673   /* True if the template is a member template, in the sense of
4674      [temp.mem].  */
4675   bool member_template_p = false;
4676
4677   if (decl == error_mark_node || !current_template_parms)
4678     return error_mark_node;
4679
4680   /* See if this is a partial specialization.  */
4681   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4682                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4683                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4684
4685   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4686     is_friend = true;
4687
4688   if (is_friend)
4689     /* For a friend, we want the context of the friend function, not
4690        the type of which it is a friend.  */
4691     ctx = CP_DECL_CONTEXT (decl);
4692   else if (CP_DECL_CONTEXT (decl)
4693            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4694     /* In the case of a virtual function, we want the class in which
4695        it is defined.  */
4696     ctx = CP_DECL_CONTEXT (decl);
4697   else
4698     /* Otherwise, if we're currently defining some class, the DECL
4699        is assumed to be a member of the class.  */
4700     ctx = current_scope ();
4701
4702   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4703     ctx = NULL_TREE;
4704
4705   if (!DECL_CONTEXT (decl))
4706     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4707
4708   /* See if this is a primary template.  */
4709   if (is_friend && ctx)
4710     /* A friend template that specifies a class context, i.e.
4711          template <typename T> friend void A<T>::f();
4712        is not primary.  */
4713     primary = 0;
4714   else
4715     primary = template_parm_scope_p ();
4716
4717   if (primary)
4718     {
4719       if (DECL_CLASS_SCOPE_P (decl))
4720         member_template_p = true;
4721       if (TREE_CODE (decl) == TYPE_DECL
4722           && ANON_AGGRNAME_P (DECL_NAME (decl)))
4723         {
4724           error ("template class without a name");
4725           return error_mark_node;
4726         }
4727       else if (TREE_CODE (decl) == FUNCTION_DECL)
4728         {
4729           if (DECL_DESTRUCTOR_P (decl))
4730             {
4731               /* [temp.mem]
4732
4733                  A destructor shall not be a member template.  */
4734               error ("destructor %qD declared as member template", decl);
4735               return error_mark_node;
4736             }
4737           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4738               && (!prototype_p (TREE_TYPE (decl))
4739                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4740                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4741                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4742                       == void_list_node)))
4743             {
4744               /* [basic.stc.dynamic.allocation]
4745
4746                  An allocation function can be a function
4747                  template. ... Template allocation functions shall
4748                  have two or more parameters.  */
4749               error ("invalid template declaration of %qD", decl);
4750               return error_mark_node;
4751             }
4752         }
4753       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4754                && CLASS_TYPE_P (TREE_TYPE (decl)))
4755         /* OK */;
4756       else
4757         {
4758           error ("template declaration of %q#D", decl);
4759           return error_mark_node;
4760         }
4761     }
4762
4763   /* Check to see that the rules regarding the use of default
4764      arguments are not being violated.  */
4765   check_default_tmpl_args (decl, current_template_parms,
4766                            primary, is_partial, /*is_friend_decl=*/0);
4767
4768   /* Ensure that there are no parameter packs in the type of this
4769      declaration that have not been expanded.  */
4770   if (TREE_CODE (decl) == FUNCTION_DECL)
4771     {
4772       /* Check each of the arguments individually to see if there are
4773          any bare parameter packs.  */
4774       tree type = TREE_TYPE (decl);
4775       tree arg = DECL_ARGUMENTS (decl);
4776       tree argtype = TYPE_ARG_TYPES (type);
4777
4778       while (arg && argtype)
4779         {
4780           if (!FUNCTION_PARAMETER_PACK_P (arg)
4781               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4782             {
4783             /* This is a PARM_DECL that contains unexpanded parameter
4784                packs. We have already complained about this in the
4785                check_for_bare_parameter_packs call, so just replace
4786                these types with ERROR_MARK_NODE.  */
4787               TREE_TYPE (arg) = error_mark_node;
4788               TREE_VALUE (argtype) = error_mark_node;
4789             }
4790
4791           arg = DECL_CHAIN (arg);
4792           argtype = TREE_CHAIN (argtype);
4793         }
4794
4795       /* Check for bare parameter packs in the return type and the
4796          exception specifiers.  */
4797       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4798         /* Errors were already issued, set return type to int
4799            as the frontend doesn't expect error_mark_node as
4800            the return type.  */
4801         TREE_TYPE (type) = integer_type_node;
4802       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4803         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4804     }
4805   else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
4806     {
4807       TREE_TYPE (decl) = error_mark_node;
4808       return error_mark_node;
4809     }
4810
4811   if (is_partial)
4812     return process_partial_specialization (decl);
4813
4814   args = current_template_args ();
4815
4816   if (!ctx
4817       || TREE_CODE (ctx) == FUNCTION_DECL
4818       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4819       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4820     {
4821       if (DECL_LANG_SPECIFIC (decl)
4822           && DECL_TEMPLATE_INFO (decl)
4823           && DECL_TI_TEMPLATE (decl))
4824         tmpl = DECL_TI_TEMPLATE (decl);
4825       /* If DECL is a TYPE_DECL for a class-template, then there won't
4826          be DECL_LANG_SPECIFIC.  The information equivalent to
4827          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4828       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4829                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4830                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4831         {
4832           /* Since a template declaration already existed for this
4833              class-type, we must be redeclaring it here.  Make sure
4834              that the redeclaration is valid.  */
4835           redeclare_class_template (TREE_TYPE (decl),
4836                                     current_template_parms);
4837           /* We don't need to create a new TEMPLATE_DECL; just use the
4838              one we already had.  */
4839           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4840         }
4841       else
4842         {
4843           tmpl = build_template_decl (decl, current_template_parms,
4844                                       member_template_p);
4845           new_template_p = 1;
4846
4847           if (DECL_LANG_SPECIFIC (decl)
4848               && DECL_TEMPLATE_SPECIALIZATION (decl))
4849             {
4850               /* A specialization of a member template of a template
4851                  class.  */
4852               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4853               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4854               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4855             }
4856         }
4857     }
4858   else
4859     {
4860       tree a, t, current, parms;
4861       int i;
4862       tree tinfo = get_template_info (decl);
4863
4864       if (!tinfo)
4865         {
4866           error ("template definition of non-template %q#D", decl);
4867           return error_mark_node;
4868         }
4869
4870       tmpl = TI_TEMPLATE (tinfo);
4871
4872       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4873           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4874           && DECL_TEMPLATE_SPECIALIZATION (decl)
4875           && DECL_MEMBER_TEMPLATE_P (tmpl))
4876         {
4877           tree new_tmpl;
4878
4879           /* The declaration is a specialization of a member
4880              template, declared outside the class.  Therefore, the
4881              innermost template arguments will be NULL, so we
4882              replace them with the arguments determined by the
4883              earlier call to check_explicit_specialization.  */
4884           args = DECL_TI_ARGS (decl);
4885
4886           new_tmpl
4887             = build_template_decl (decl, current_template_parms,
4888                                    member_template_p);
4889           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4890           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4891           DECL_TI_TEMPLATE (decl) = new_tmpl;
4892           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4893           DECL_TEMPLATE_INFO (new_tmpl)
4894             = build_template_info (tmpl, args);
4895
4896           register_specialization (new_tmpl,
4897                                    most_general_template (tmpl),
4898                                    args,
4899                                    is_friend, 0);
4900           return decl;
4901         }
4902
4903       /* Make sure the template headers we got make sense.  */
4904
4905       parms = DECL_TEMPLATE_PARMS (tmpl);
4906       i = TMPL_PARMS_DEPTH (parms);
4907       if (TMPL_ARGS_DEPTH (args) != i)
4908         {
4909           error ("expected %d levels of template parms for %q#D, got %d",
4910                  i, decl, TMPL_ARGS_DEPTH (args));
4911         }
4912       else
4913         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
4914           {
4915             a = TMPL_ARGS_LEVEL (args, i);
4916             t = INNERMOST_TEMPLATE_PARMS (parms);
4917
4918             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
4919               {
4920                 if (current == decl)
4921                   error ("got %d template parameters for %q#D",
4922                          TREE_VEC_LENGTH (a), decl);
4923                 else
4924                   error ("got %d template parameters for %q#T",
4925                          TREE_VEC_LENGTH (a), current);
4926                 error ("  but %d required", TREE_VEC_LENGTH (t));
4927                 return error_mark_node;
4928               }
4929
4930             if (current == decl)
4931               current = ctx;
4932             else if (current == NULL_TREE)
4933               /* Can happen in erroneous input.  */
4934               break;
4935             else
4936               current = (TYPE_P (current)
4937                          ? TYPE_CONTEXT (current)
4938                          : DECL_CONTEXT (current));
4939           }
4940
4941       /* Check that the parms are used in the appropriate qualifying scopes
4942          in the declarator.  */
4943       if (!comp_template_args
4944           (TI_ARGS (tinfo),
4945            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4946         {
4947           error ("\
4948 template arguments to %qD do not match original template %qD",
4949                  decl, DECL_TEMPLATE_RESULT (tmpl));
4950           if (!uses_template_parms (TI_ARGS (tinfo)))
4951             inform (input_location, "use template<> for an explicit specialization");
4952           /* Avoid crash in import_export_decl.  */
4953           DECL_INTERFACE_KNOWN (decl) = 1;
4954           return error_mark_node;
4955         }
4956     }
4957
4958   DECL_TEMPLATE_RESULT (tmpl) = decl;
4959   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4960
4961   /* Push template declarations for global functions and types.  Note
4962      that we do not try to push a global template friend declared in a
4963      template class; such a thing may well depend on the template
4964      parameters of the class.  */
4965   if (new_template_p && !ctx
4966       && !(is_friend && template_class_depth (current_class_type) > 0))
4967     {
4968       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4969       if (tmpl == error_mark_node)
4970         return error_mark_node;
4971
4972       /* Hide template friend classes that haven't been declared yet.  */
4973       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4974         {
4975           DECL_ANTICIPATED (tmpl) = 1;
4976           DECL_FRIEND_P (tmpl) = 1;
4977         }
4978     }
4979
4980   if (primary)
4981     {
4982       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4983       int i;
4984
4985       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4986       if (DECL_CONV_FN_P (tmpl))
4987         {
4988           int depth = TMPL_PARMS_DEPTH (parms);
4989
4990           /* It is a conversion operator. See if the type converted to
4991              depends on innermost template operands.  */
4992
4993           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4994                                          depth))
4995             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4996         }
4997
4998       /* Give template template parms a DECL_CONTEXT of the template
4999          for which they are a parameter.  */
5000       parms = INNERMOST_TEMPLATE_PARMS (parms);
5001       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5002         {
5003           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5004           if (TREE_CODE (parm) == TEMPLATE_DECL)
5005             DECL_CONTEXT (parm) = tmpl;
5006         }
5007     }
5008
5009   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5010      back to its most general template.  If TMPL is a specialization,
5011      ARGS may only have the innermost set of arguments.  Add the missing
5012      argument levels if necessary.  */
5013   if (DECL_TEMPLATE_INFO (tmpl))
5014     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5015
5016   info = build_template_info (tmpl, args);
5017
5018   if (DECL_IMPLICIT_TYPEDEF_P (decl))
5019     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5020   else if (DECL_LANG_SPECIFIC (decl))
5021     DECL_TEMPLATE_INFO (decl) = info;
5022
5023   return DECL_TEMPLATE_RESULT (tmpl);
5024 }
5025
5026 tree
5027 push_template_decl (tree decl)
5028 {
5029   return push_template_decl_real (decl, false);
5030 }
5031
5032 /* Called when a class template TYPE is redeclared with the indicated
5033    template PARMS, e.g.:
5034
5035      template <class T> struct S;
5036      template <class T> struct S {};  */
5037
5038 bool
5039 redeclare_class_template (tree type, tree parms)
5040 {
5041   tree tmpl;
5042   tree tmpl_parms;
5043   int i;
5044
5045   if (!TYPE_TEMPLATE_INFO (type))
5046     {
5047       error ("%qT is not a template type", type);
5048       return false;
5049     }
5050
5051   tmpl = TYPE_TI_TEMPLATE (type);
5052   if (!PRIMARY_TEMPLATE_P (tmpl))
5053     /* The type is nested in some template class.  Nothing to worry
5054        about here; there are no new template parameters for the nested
5055        type.  */
5056     return true;
5057
5058   if (!parms)
5059     {
5060       error ("template specifiers not specified in declaration of %qD",
5061              tmpl);
5062       return false;
5063     }
5064
5065   parms = INNERMOST_TEMPLATE_PARMS (parms);
5066   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5067
5068   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5069     {
5070       error_n (input_location, TREE_VEC_LENGTH (parms),
5071                "redeclared with %d template parameter",
5072                "redeclared with %d template parameters",
5073                TREE_VEC_LENGTH (parms));
5074       inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5075                 "previous declaration %q+D used %d template parameter",
5076                 "previous declaration %q+D used %d template parameters",
5077                 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5078       return false;
5079     }
5080
5081   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5082     {
5083       tree tmpl_parm;
5084       tree parm;
5085       tree tmpl_default;
5086       tree parm_default;
5087
5088       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5089           || TREE_VEC_ELT (parms, i) == error_mark_node)
5090         continue;
5091
5092       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5093       if (tmpl_parm == error_mark_node)
5094         return false;
5095
5096       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5097       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5098       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5099
5100       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5101          TEMPLATE_DECL.  */
5102       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5103           || (TREE_CODE (tmpl_parm) != TYPE_DECL
5104               && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5105           || (TREE_CODE (tmpl_parm) != PARM_DECL
5106               && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5107                   != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5108           || (TREE_CODE (tmpl_parm) == PARM_DECL
5109               && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5110                   != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5111         {
5112           error ("template parameter %q+#D", tmpl_parm);
5113           error ("redeclared here as %q#D", parm);
5114           return false;
5115         }
5116
5117       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5118         {
5119           /* We have in [temp.param]:
5120
5121              A template-parameter may not be given default arguments
5122              by two different declarations in the same scope.  */
5123           error_at (input_location, "redefinition of default argument for %q#D", parm);
5124           inform (DECL_SOURCE_LOCATION (tmpl_parm),
5125                   "original definition appeared here");
5126           return false;
5127         }
5128
5129       if (parm_default != NULL_TREE)
5130         /* Update the previous template parameters (which are the ones
5131            that will really count) with the new default value.  */
5132         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5133       else if (tmpl_default != NULL_TREE)
5134         /* Update the new parameters, too; they'll be used as the
5135            parameters for any members.  */
5136         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5137     }
5138
5139     return true;
5140 }
5141
5142 /* Simplify EXPR if it is a non-dependent expression.  Returns the
5143    (possibly simplified) expression.  */
5144
5145 static tree
5146 fold_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5147 {
5148   if (expr == NULL_TREE)
5149     return NULL_TREE;
5150
5151   /* If we're in a template, but EXPR isn't value dependent, simplify
5152      it.  We're supposed to treat:
5153
5154        template <typename T> void f(T[1 + 1]);
5155        template <typename T> void f(T[2]);
5156
5157      as two declarations of the same function, for example.  */
5158   if (processing_template_decl
5159       && !type_dependent_expression_p (expr)
5160       && potential_constant_expression (expr)
5161       && !value_dependent_expression_p (expr))
5162     {
5163       HOST_WIDE_INT saved_processing_template_decl;
5164
5165       saved_processing_template_decl = processing_template_decl;
5166       processing_template_decl = 0;
5167       expr = tsubst_copy_and_build (expr,
5168                                     /*args=*/NULL_TREE,
5169                                     complain,
5170                                     /*in_decl=*/NULL_TREE,
5171                                     /*function_p=*/false,
5172                                     /*integral_constant_expression_p=*/true);
5173       processing_template_decl = saved_processing_template_decl;
5174     }
5175   return expr;
5176 }
5177
5178 tree
5179 fold_non_dependent_expr (tree expr)
5180 {
5181   return fold_non_dependent_expr_sfinae (expr, tf_error);
5182 }
5183
5184 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5185    must be a function or a pointer-to-function type, as specified
5186    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5187    and check that the resulting function has external linkage.  */
5188
5189 static tree
5190 convert_nontype_argument_function (tree type, tree expr)
5191 {
5192   tree fns = expr;
5193   tree fn, fn_no_ptr;
5194
5195   fn = instantiate_type (type, fns, tf_none);
5196   if (fn == error_mark_node)
5197     return error_mark_node;
5198
5199   fn_no_ptr = fn;
5200   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5201     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5202   if (TREE_CODE (fn_no_ptr) == BASELINK)
5203     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5204  
5205   /* [temp.arg.nontype]/1
5206
5207      A template-argument for a non-type, non-template template-parameter
5208      shall be one of:
5209      [...]
5210      -- the address of an object or function with external linkage.  */
5211   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
5212     {
5213       error ("%qE is not a valid template argument for type %qT "
5214              "because function %qD has not external linkage",
5215              expr, type, fn_no_ptr);
5216       return NULL_TREE;
5217     }
5218
5219   return fn;
5220 }
5221
5222 /* Subroutine of convert_nontype_argument.
5223    Check if EXPR of type TYPE is a valid pointer-to-member constant.
5224    Emit an error otherwise.  */
5225
5226 static bool
5227 check_valid_ptrmem_cst_expr (tree type, tree expr,
5228                              tsubst_flags_t complain)
5229 {
5230   STRIP_NOPS (expr);
5231   if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5232     return true;
5233   if (complain & tf_error)
5234     {
5235       error ("%qE is not a valid template argument for type %qT",
5236              expr, type);
5237       error ("it must be a pointer-to-member of the form %<&X::Y%>");
5238     }
5239   return false;
5240 }
5241
5242 /* Returns TRUE iff the address of OP is value-dependent.
5243
5244    14.6.2.4 [temp.dep.temp]:
5245    A non-integral non-type template-argument is dependent if its type is
5246    dependent or it has either of the following forms
5247      qualified-id
5248      & qualified-id
5249    and contains a nested-name-specifier which specifies a class-name that
5250    names a dependent type.
5251
5252    We generalize this to just say that the address of a member of a
5253    dependent class is value-dependent; the above doesn't cover the
5254    address of a static data member named with an unqualified-id.  */
5255
5256 static bool
5257 has_value_dependent_address (tree op)
5258 {
5259   /* We could use get_inner_reference here, but there's no need;
5260      this is only relevant for template non-type arguments, which
5261      can only be expressed as &id-expression.  */
5262   if (DECL_P (op))
5263     {
5264       tree ctx = CP_DECL_CONTEXT (op);
5265       if (TYPE_P (ctx) && dependent_type_p (ctx))
5266         return true;
5267     }
5268
5269   return false;
5270 }
5271
5272 /* Attempt to convert the non-type template parameter EXPR to the
5273    indicated TYPE.  If the conversion is successful, return the
5274    converted value.  If the conversion is unsuccessful, return
5275    NULL_TREE if we issued an error message, or error_mark_node if we
5276    did not.  We issue error messages for out-and-out bad template
5277    parameters, but not simply because the conversion failed, since we
5278    might be just trying to do argument deduction.  Both TYPE and EXPR
5279    must be non-dependent.
5280
5281    The conversion follows the special rules described in
5282    [temp.arg.nontype], and it is much more strict than an implicit
5283    conversion.
5284
5285    This function is called twice for each template argument (see
5286    lookup_template_class for a more accurate description of this
5287    problem). This means that we need to handle expressions which
5288    are not valid in a C++ source, but can be created from the
5289    first call (for instance, casts to perform conversions). These
5290    hacks can go away after we fix the double coercion problem.  */
5291
5292 static tree
5293 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5294 {
5295   tree expr_type;
5296
5297   /* Detect immediately string literals as invalid non-type argument.
5298      This special-case is not needed for correctness (we would easily
5299      catch this later), but only to provide better diagnostic for this
5300      common user mistake. As suggested by DR 100, we do not mention
5301      linkage issues in the diagnostic as this is not the point.  */
5302   /* FIXME we're making this OK.  */
5303   if (TREE_CODE (expr) == STRING_CST)
5304     {
5305       if (complain & tf_error)
5306         error ("%qE is not a valid template argument for type %qT "
5307                "because string literals can never be used in this context",
5308                expr, type);
5309       return NULL_TREE;
5310     }
5311
5312   /* Add the ADDR_EXPR now for the benefit of
5313      value_dependent_expression_p.  */
5314   if (TYPE_PTROBV_P (type))
5315     expr = decay_conversion (expr);
5316
5317   /* If we are in a template, EXPR may be non-dependent, but still
5318      have a syntactic, rather than semantic, form.  For example, EXPR
5319      might be a SCOPE_REF, rather than the VAR_DECL to which the
5320      SCOPE_REF refers.  Preserving the qualifying scope is necessary
5321      so that access checking can be performed when the template is
5322      instantiated -- but here we need the resolved form so that we can
5323      convert the argument.  */
5324   if (TYPE_REF_OBJ_P (type)
5325       && has_value_dependent_address (expr))
5326     /* If we want the address and it's value-dependent, don't fold.  */;
5327   else if (!type_unknown_p (expr))
5328     expr = fold_non_dependent_expr_sfinae (expr, complain);
5329   if (error_operand_p (expr))
5330     return error_mark_node;
5331   expr_type = TREE_TYPE (expr);
5332   if (TREE_CODE (type) == REFERENCE_TYPE)
5333     expr = mark_lvalue_use (expr);
5334   else
5335     expr = mark_rvalue_use (expr);
5336
5337   /* HACK: Due to double coercion, we can get a
5338      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5339      which is the tree that we built on the first call (see
5340      below when coercing to reference to object or to reference to
5341      function). We just strip everything and get to the arg.
5342      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5343      for examples.  */
5344   if (TREE_CODE (expr) == NOP_EXPR)
5345     {
5346       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5347         {
5348           /* ??? Maybe we could use convert_from_reference here, but we
5349              would need to relax its constraints because the NOP_EXPR
5350              could actually change the type to something more cv-qualified,
5351              and this is not folded by convert_from_reference.  */
5352           tree addr = TREE_OPERAND (expr, 0);
5353           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
5354           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
5355           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
5356           gcc_assert (same_type_ignoring_top_level_qualifiers_p
5357                       (TREE_TYPE (expr_type),
5358                        TREE_TYPE (TREE_TYPE (addr))));
5359
5360           expr = TREE_OPERAND (addr, 0);
5361           expr_type = TREE_TYPE (expr);
5362         }
5363
5364       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5365          parameter is a pointer to object, through decay and
5366          qualification conversion. Let's strip everything.  */
5367       else if (TYPE_PTROBV_P (type))
5368         {
5369           STRIP_NOPS (expr);
5370           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
5371           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
5372           /* Skip the ADDR_EXPR only if it is part of the decay for
5373              an array. Otherwise, it is part of the original argument
5374              in the source code.  */
5375           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
5376             expr = TREE_OPERAND (expr, 0);
5377           expr_type = TREE_TYPE (expr);
5378         }
5379     }
5380
5381   /* [temp.arg.nontype]/5, bullet 1
5382
5383      For a non-type template-parameter of integral or enumeration type,
5384      integral promotions (_conv.prom_) and integral conversions
5385      (_conv.integral_) are applied.  */
5386   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5387     {
5388       tree t = build_integral_nontype_arg_conv (type, expr, complain);
5389       t = maybe_constant_value (t);
5390       if (t != error_mark_node)
5391         expr = t;
5392
5393       if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5394         return error_mark_node;
5395
5396       /* Notice that there are constant expressions like '4 % 0' which
5397          do not fold into integer constants.  */
5398       if (TREE_CODE (expr) != INTEGER_CST)
5399         {
5400           if (complain & tf_error)
5401             {
5402               error ("%qE is not a valid template argument for type %qT "
5403                      "because it is a non-constant expression", expr, type);
5404               cxx_constant_value (expr);
5405             }
5406           return NULL_TREE;
5407         }
5408     }
5409   /* [temp.arg.nontype]/5, bullet 2
5410
5411      For a non-type template-parameter of type pointer to object,
5412      qualification conversions (_conv.qual_) and the array-to-pointer
5413      conversion (_conv.array_) are applied.  */
5414   else if (TYPE_PTROBV_P (type))
5415     {
5416       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
5417
5418          A template-argument for a non-type, non-template template-parameter
5419          shall be one of: [...]
5420
5421          -- the name of a non-type template-parameter;
5422          -- the address of an object or function with external linkage, [...]
5423             expressed as "& id-expression" where the & is optional if the name
5424             refers to a function or array, or if the corresponding
5425             template-parameter is a reference.
5426
5427         Here, we do not care about functions, as they are invalid anyway
5428         for a parameter of type pointer-to-object.  */
5429
5430       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5431         /* Non-type template parameters are OK.  */
5432         ;
5433       else if (TREE_CODE (expr) != ADDR_EXPR
5434                && TREE_CODE (expr_type) != ARRAY_TYPE)
5435         {
5436           if (TREE_CODE (expr) == VAR_DECL)
5437             {
5438               error ("%qD is not a valid template argument "
5439                      "because %qD is a variable, not the address of "
5440                      "a variable",
5441                      expr, expr);
5442               return NULL_TREE;
5443             }
5444           /* Other values, like integer constants, might be valid
5445              non-type arguments of some other type.  */
5446           return error_mark_node;
5447         }
5448       else
5449         {
5450           tree decl;
5451
5452           decl = ((TREE_CODE (expr) == ADDR_EXPR)
5453                   ? TREE_OPERAND (expr, 0) : expr);
5454           if (TREE_CODE (decl) != VAR_DECL)
5455             {
5456               error ("%qE is not a valid template argument of type %qT "
5457                      "because %qE is not a variable",
5458                      expr, type, decl);
5459               return NULL_TREE;
5460             }
5461           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
5462             {
5463               error ("%qE is not a valid template argument of type %qT "
5464                      "because %qD does not have external linkage",
5465                      expr, type, decl);
5466               return NULL_TREE;
5467             }
5468         }
5469
5470       expr = decay_conversion (expr);
5471       if (expr == error_mark_node)
5472         return error_mark_node;
5473
5474       expr = perform_qualification_conversions (type, expr);
5475       if (expr == error_mark_node)
5476         return error_mark_node;
5477     }
5478   /* [temp.arg.nontype]/5, bullet 3
5479
5480      For a non-type template-parameter of type reference to object, no
5481      conversions apply. The type referred to by the reference may be more
5482      cv-qualified than the (otherwise identical) type of the
5483      template-argument. The template-parameter is bound directly to the
5484      template-argument, which must be an lvalue.  */
5485   else if (TYPE_REF_OBJ_P (type))
5486     {
5487       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5488                                                       expr_type))
5489         return error_mark_node;
5490
5491       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5492         {
5493           error ("%qE is not a valid template argument for type %qT "
5494                  "because of conflicts in cv-qualification", expr, type);
5495           return NULL_TREE;
5496         }
5497
5498       if (!real_lvalue_p (expr))
5499         {
5500           error ("%qE is not a valid template argument for type %qT "
5501                  "because it is not an lvalue", expr, type);
5502           return NULL_TREE;
5503         }
5504
5505       /* [temp.arg.nontype]/1
5506
5507          A template-argument for a non-type, non-template template-parameter
5508          shall be one of: [...]
5509
5510          -- the address of an object or function with external linkage.  */
5511       if (TREE_CODE (expr) == INDIRECT_REF
5512           && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5513         {
5514           expr = TREE_OPERAND (expr, 0);
5515           if (DECL_P (expr))
5516             {
5517               error ("%q#D is not a valid template argument for type %qT "
5518                      "because a reference variable does not have a constant "
5519                      "address", expr, type);
5520               return NULL_TREE;
5521             }
5522         }
5523
5524       if (!DECL_P (expr))
5525         {
5526           error ("%qE is not a valid template argument for type %qT "
5527                  "because it is not an object with external linkage",
5528                  expr, type);
5529           return NULL_TREE;
5530         }
5531
5532       if (!DECL_EXTERNAL_LINKAGE_P (expr))
5533         {
5534           error ("%qE is not a valid template argument for type %qT "
5535                  "because object %qD has not external linkage",
5536                  expr, type, expr);
5537           return NULL_TREE;
5538         }
5539
5540       expr = build_nop (type, build_address (expr));
5541     }
5542   /* [temp.arg.nontype]/5, bullet 4
5543
5544      For a non-type template-parameter of type pointer to function, only
5545      the function-to-pointer conversion (_conv.func_) is applied. If the
5546      template-argument represents a set of overloaded functions (or a
5547      pointer to such), the matching function is selected from the set
5548      (_over.over_).  */
5549   else if (TYPE_PTRFN_P (type))
5550     {
5551       /* If the argument is a template-id, we might not have enough
5552          context information to decay the pointer.  */
5553       if (!type_unknown_p (expr_type))
5554         {
5555           expr = decay_conversion (expr);
5556           if (expr == error_mark_node)
5557             return error_mark_node;
5558         }
5559
5560       expr = convert_nontype_argument_function (type, expr);
5561       if (!expr || expr == error_mark_node)
5562         return expr;
5563
5564       if (TREE_CODE (expr) != ADDR_EXPR)
5565         {
5566           error ("%qE is not a valid template argument for type %qT", expr, type);
5567           error ("it must be the address of a function with external linkage");
5568           return NULL_TREE;
5569         }
5570     }
5571   /* [temp.arg.nontype]/5, bullet 5
5572
5573      For a non-type template-parameter of type reference to function, no
5574      conversions apply. If the template-argument represents a set of
5575      overloaded functions, the matching function is selected from the set
5576      (_over.over_).  */
5577   else if (TYPE_REFFN_P (type))
5578     {
5579       if (TREE_CODE (expr) == ADDR_EXPR)
5580         {
5581           error ("%qE is not a valid template argument for type %qT "
5582                  "because it is a pointer", expr, type);
5583           inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
5584           return NULL_TREE;
5585         }
5586
5587       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
5588       if (!expr || expr == error_mark_node)
5589         return expr;
5590
5591       expr = build_nop (type, build_address (expr));
5592     }
5593   /* [temp.arg.nontype]/5, bullet 6
5594
5595      For a non-type template-parameter of type pointer to member function,
5596      no conversions apply. If the template-argument represents a set of
5597      overloaded member functions, the matching member function is selected
5598      from the set (_over.over_).  */
5599   else if (TYPE_PTRMEMFUNC_P (type))
5600     {
5601       expr = instantiate_type (type, expr, tf_none);
5602       if (expr == error_mark_node)
5603         return error_mark_node;
5604
5605       /* [temp.arg.nontype] bullet 1 says the pointer to member
5606          expression must be a pointer-to-member constant.  */
5607       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
5608         return error_mark_node;
5609
5610       /* There is no way to disable standard conversions in
5611          resolve_address_of_overloaded_function (called by
5612          instantiate_type). It is possible that the call succeeded by
5613          converting &B::I to &D::I (where B is a base of D), so we need
5614          to reject this conversion here.
5615
5616          Actually, even if there was a way to disable standard conversions,
5617          it would still be better to reject them here so that we can
5618          provide a superior diagnostic.  */
5619       if (!same_type_p (TREE_TYPE (expr), type))
5620         {
5621           error ("%qE is not a valid template argument for type %qT "
5622                  "because it is of type %qT", expr, type,
5623                  TREE_TYPE (expr));
5624           /* If we are just one standard conversion off, explain.  */
5625           if (can_convert (type, TREE_TYPE (expr)))
5626             inform (input_location,
5627                     "standard conversions are not allowed in this context");
5628           return NULL_TREE;
5629         }
5630     }
5631   /* [temp.arg.nontype]/5, bullet 7
5632
5633      For a non-type template-parameter of type pointer to data member,
5634      qualification conversions (_conv.qual_) are applied.  */
5635   else if (TYPE_PTRMEM_P (type))
5636     {
5637       /* [temp.arg.nontype] bullet 1 says the pointer to member
5638          expression must be a pointer-to-member constant.  */
5639       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
5640         return error_mark_node;
5641
5642       expr = perform_qualification_conversions (type, expr);
5643       if (expr == error_mark_node)
5644         return expr;
5645     }
5646   /* A template non-type parameter must be one of the above.  */
5647   else
5648     gcc_unreachable ();
5649
5650   /* Sanity check: did we actually convert the argument to the
5651      right type?  */
5652   gcc_assert (same_type_ignoring_top_level_qualifiers_p
5653               (type, TREE_TYPE (expr)));
5654   return expr;
5655 }
5656
5657 /* Subroutine of coerce_template_template_parms, which returns 1 if
5658    PARM_PARM and ARG_PARM match using the rule for the template
5659    parameters of template template parameters. Both PARM and ARG are
5660    template parameters; the rest of the arguments are the same as for
5661    coerce_template_template_parms.
5662  */
5663 static int
5664 coerce_template_template_parm (tree parm,
5665                               tree arg,
5666                               tsubst_flags_t complain,
5667                               tree in_decl,
5668                               tree outer_args)
5669 {
5670   if (arg == NULL_TREE || arg == error_mark_node
5671       || parm == NULL_TREE || parm == error_mark_node)
5672     return 0;
5673   
5674   if (TREE_CODE (arg) != TREE_CODE (parm))
5675     return 0;
5676   
5677   switch (TREE_CODE (parm))
5678     {
5679     case TEMPLATE_DECL:
5680       /* We encounter instantiations of templates like
5681          template <template <template <class> class> class TT>
5682          class C;  */
5683       {
5684         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5685         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5686         
5687         if (!coerce_template_template_parms
5688             (parmparm, argparm, complain, in_decl, outer_args))
5689           return 0;
5690       }
5691       /* Fall through.  */
5692       
5693     case TYPE_DECL:
5694       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
5695           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
5696         /* Argument is a parameter pack but parameter is not.  */
5697         return 0;
5698       break;
5699       
5700     case PARM_DECL:
5701       /* The tsubst call is used to handle cases such as
5702          
5703            template <int> class C {};
5704            template <class T, template <T> class TT> class D {};
5705            D<int, C> d;
5706
5707          i.e. the parameter list of TT depends on earlier parameters.  */
5708       if (!uses_template_parms (TREE_TYPE (arg))
5709           && !same_type_p
5710                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
5711                  TREE_TYPE (arg)))
5712         return 0;
5713       
5714       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
5715           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
5716         /* Argument is a parameter pack but parameter is not.  */
5717         return 0;
5718       
5719       break;
5720
5721     default:
5722       gcc_unreachable ();
5723     }
5724
5725   return 1;
5726 }
5727
5728
5729 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
5730    template template parameters.  Both PARM_PARMS and ARG_PARMS are
5731    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
5732    or PARM_DECL.
5733
5734    Consider the example:
5735      template <class T> class A;
5736      template<template <class U> class TT> class B;
5737
5738    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
5739    the parameters to A, and OUTER_ARGS contains A.  */
5740
5741 static int
5742 coerce_template_template_parms (tree parm_parms,
5743                                 tree arg_parms,
5744                                 tsubst_flags_t complain,
5745                                 tree in_decl,
5746                                 tree outer_args)
5747 {
5748   int nparms, nargs, i;
5749   tree parm, arg;
5750   int variadic_p = 0;
5751
5752   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
5753   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
5754
5755   nparms = TREE_VEC_LENGTH (parm_parms);
5756   nargs = TREE_VEC_LENGTH (arg_parms);
5757
5758   /* Determine whether we have a parameter pack at the end of the
5759      template template parameter's template parameter list.  */
5760   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
5761     {
5762       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
5763       
5764       if (parm == error_mark_node)
5765         return 0;
5766
5767       switch (TREE_CODE (parm))
5768         {
5769         case TEMPLATE_DECL:
5770         case TYPE_DECL:
5771           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
5772             variadic_p = 1;
5773           break;
5774           
5775         case PARM_DECL:
5776           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
5777             variadic_p = 1;
5778           break;
5779           
5780         default:
5781           gcc_unreachable ();
5782         }
5783     }
5784  
5785   if (nargs != nparms
5786       && !(variadic_p && nargs >= nparms - 1))
5787     return 0;
5788
5789   /* Check all of the template parameters except the parameter pack at
5790      the end (if any).  */
5791   for (i = 0; i < nparms - variadic_p; ++i)
5792     {
5793       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
5794           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
5795         continue;
5796
5797       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
5798       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
5799
5800       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
5801                                           outer_args))
5802         return 0;
5803
5804     }
5805
5806   if (variadic_p)
5807     {
5808       /* Check each of the template parameters in the template
5809          argument against the template parameter pack at the end of
5810          the template template parameter.  */
5811       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
5812         return 0;
5813
5814       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
5815
5816       for (; i < nargs; ++i)
5817         {
5818           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
5819             continue;
5820  
5821           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
5822  
5823           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
5824                                               outer_args))
5825             return 0;
5826         }
5827     }
5828
5829   return 1;
5830 }
5831
5832 /* Verifies that the deduced template arguments (in TARGS) for the
5833    template template parameters (in TPARMS) represent valid bindings,
5834    by comparing the template parameter list of each template argument
5835    to the template parameter list of its corresponding template
5836    template parameter, in accordance with DR150. This
5837    routine can only be called after all template arguments have been
5838    deduced. It will return TRUE if all of the template template
5839    parameter bindings are okay, FALSE otherwise.  */
5840 bool 
5841 template_template_parm_bindings_ok_p (tree tparms, tree targs)
5842 {
5843   int i, ntparms = TREE_VEC_LENGTH (tparms);
5844   bool ret = true;
5845
5846   /* We're dealing with template parms in this process.  */
5847   ++processing_template_decl;
5848
5849   targs = INNERMOST_TEMPLATE_ARGS (targs);
5850
5851   for (i = 0; i < ntparms; ++i)
5852     {
5853       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
5854       tree targ = TREE_VEC_ELT (targs, i);
5855
5856       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
5857         {
5858           tree packed_args = NULL_TREE;
5859           int idx, len = 1;
5860
5861           if (ARGUMENT_PACK_P (targ))
5862             {
5863               /* Look inside the argument pack.  */
5864               packed_args = ARGUMENT_PACK_ARGS (targ);
5865               len = TREE_VEC_LENGTH (packed_args);
5866             }
5867
5868           for (idx = 0; idx < len; ++idx)
5869             {
5870               tree targ_parms = NULL_TREE;
5871
5872               if (packed_args)
5873                 /* Extract the next argument from the argument
5874                    pack.  */
5875                 targ = TREE_VEC_ELT (packed_args, idx);
5876
5877               if (PACK_EXPANSION_P (targ))
5878                 /* Look at the pattern of the pack expansion.  */
5879                 targ = PACK_EXPANSION_PATTERN (targ);
5880
5881               /* Extract the template parameters from the template
5882                  argument.  */
5883               if (TREE_CODE (targ) == TEMPLATE_DECL)
5884                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
5885               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
5886                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
5887
5888               /* Verify that we can coerce the template template
5889                  parameters from the template argument to the template
5890                  parameter.  This requires an exact match.  */
5891               if (targ_parms
5892                   && !coerce_template_template_parms
5893                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
5894                         targ_parms,
5895                         tf_none,
5896                         tparm,
5897                         targs))
5898                 {
5899                   ret = false;
5900                   goto out;
5901                 }
5902             }
5903         }
5904     }
5905
5906  out:
5907
5908   --processing_template_decl;
5909   return ret;
5910 }
5911
5912 /* Convert the indicated template ARG as necessary to match the
5913    indicated template PARM.  Returns the converted ARG, or
5914    error_mark_node if the conversion was unsuccessful.  Error and
5915    warning messages are issued under control of COMPLAIN.  This
5916    conversion is for the Ith parameter in the parameter list.  ARGS is
5917    the full set of template arguments deduced so far.  */
5918
5919 static tree
5920 convert_template_argument (tree parm,
5921                            tree arg,
5922                            tree args,
5923                            tsubst_flags_t complain,
5924                            int i,
5925                            tree in_decl)
5926 {
5927   tree orig_arg;
5928   tree val;
5929   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
5930
5931   if (TREE_CODE (arg) == TREE_LIST
5932       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
5933     {
5934       /* The template argument was the name of some
5935          member function.  That's usually
5936          invalid, but static members are OK.  In any
5937          case, grab the underlying fields/functions
5938          and issue an error later if required.  */
5939       orig_arg = TREE_VALUE (arg);
5940       TREE_TYPE (arg) = unknown_type_node;
5941     }
5942
5943   orig_arg = arg;
5944
5945   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
5946   requires_type = (TREE_CODE (parm) == TYPE_DECL
5947                    || requires_tmpl_type);
5948
5949   /* When determining whether an argument pack expansion is a template,
5950      look at the pattern.  */
5951   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
5952     arg = PACK_EXPANSION_PATTERN (arg);
5953
5954   /* Deal with an injected-class-name used as a template template arg.  */
5955   if (requires_tmpl_type && CLASS_TYPE_P (arg))
5956     {
5957       tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
5958       if (TREE_CODE (t) == TEMPLATE_DECL)
5959         {
5960           if (complain & tf_warning_or_error)
5961             pedwarn (input_location, OPT_pedantic, "injected-class-name %qD"
5962                      " used as template template argument", TYPE_NAME (arg));
5963           else if (flag_pedantic_errors)
5964             t = arg;
5965
5966           arg = t;
5967         }
5968     }
5969
5970   is_tmpl_type = 
5971     ((TREE_CODE (arg) == TEMPLATE_DECL
5972       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
5973      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
5974      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
5975
5976   if (is_tmpl_type
5977       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
5978           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
5979     arg = TYPE_STUB_DECL (arg);
5980
5981   is_type = TYPE_P (arg) || is_tmpl_type;
5982
5983   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
5984       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
5985     {
5986       permerror (input_location, "to refer to a type member of a template parameter, "
5987                  "use %<typename %E%>", orig_arg);
5988
5989       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
5990                                      TREE_OPERAND (arg, 1),
5991                                      typename_type,
5992                                      complain & tf_error);
5993       arg = orig_arg;
5994       is_type = 1;
5995     }
5996   if (is_type != requires_type)
5997     {
5998       if (in_decl)
5999         {
6000           if (complain & tf_error)
6001             {
6002               error ("type/value mismatch at argument %d in template "
6003                      "parameter list for %qD",
6004                      i + 1, in_decl);
6005               if (is_type)
6006                 error ("  expected a constant of type %qT, got %qT",
6007                        TREE_TYPE (parm),
6008                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6009               else if (requires_tmpl_type)
6010                 error ("  expected a class template, got %qE", orig_arg);
6011               else
6012                 error ("  expected a type, got %qE", orig_arg);
6013             }
6014         }
6015       return error_mark_node;
6016     }
6017   if (is_tmpl_type ^ requires_tmpl_type)
6018     {
6019       if (in_decl && (complain & tf_error))
6020         {
6021           error ("type/value mismatch at argument %d in template "
6022                  "parameter list for %qD",
6023                  i + 1, in_decl);
6024           if (is_tmpl_type)
6025             error ("  expected a type, got %qT", DECL_NAME (arg));
6026           else
6027             error ("  expected a class template, got %qT", orig_arg);
6028         }
6029       return error_mark_node;
6030     }
6031
6032   if (is_type)
6033     {
6034       if (requires_tmpl_type)
6035         {
6036           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6037             /* The number of argument required is not known yet.
6038                Just accept it for now.  */
6039             val = TREE_TYPE (arg);
6040           else
6041             {
6042               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6043               tree argparm;
6044
6045               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6046
6047               if (coerce_template_template_parms (parmparm, argparm,
6048                                                   complain, in_decl,
6049                                                   args))
6050                 {
6051                   val = arg;
6052
6053                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
6054                      TEMPLATE_DECL.  */
6055                   if (val != error_mark_node)
6056                     {
6057                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6058                         val = TREE_TYPE (val);
6059                       if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6060                         val = make_pack_expansion (val);
6061                     }
6062                 }
6063               else
6064                 {
6065                   if (in_decl && (complain & tf_error))
6066                     {
6067                       error ("type/value mismatch at argument %d in "
6068                              "template parameter list for %qD",
6069                              i + 1, in_decl);
6070                       error ("  expected a template of type %qD, got %qT",
6071                              parm, orig_arg);
6072                     }
6073
6074                   val = error_mark_node;
6075                 }
6076             }
6077         }
6078       else
6079         val = orig_arg;
6080       /* We only form one instance of each template specialization.
6081          Therefore, if we use a non-canonical variant (i.e., a
6082          typedef), any future messages referring to the type will use
6083          the typedef, which is confusing if those future uses do not
6084          themselves also use the typedef.  */
6085       if (TYPE_P (val))
6086         val = strip_typedefs (val);
6087     }
6088   else
6089     {
6090       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6091
6092       if (invalid_nontype_parm_type_p (t, complain))
6093         return error_mark_node;
6094
6095       if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6096         {
6097           if (same_type_p (t, TREE_TYPE (orig_arg)))
6098             val = orig_arg;
6099           else
6100             {
6101               /* Not sure if this is reachable, but it doesn't hurt
6102                  to be robust.  */
6103               error ("type mismatch in nontype parameter pack");
6104               val = error_mark_node;
6105             }
6106         }
6107       else if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
6108         /* We used to call digest_init here.  However, digest_init
6109            will report errors, which we don't want when complain
6110            is zero.  More importantly, digest_init will try too
6111            hard to convert things: for example, `0' should not be
6112            converted to pointer type at this point according to
6113            the standard.  Accepting this is not merely an
6114            extension, since deciding whether or not these
6115            conversions can occur is part of determining which
6116            function template to call, or whether a given explicit
6117            argument specification is valid.  */
6118         val = convert_nontype_argument (t, orig_arg, complain);
6119       else
6120         val = orig_arg;
6121
6122       if (val == NULL_TREE)
6123         val = error_mark_node;
6124       else if (val == error_mark_node && (complain & tf_error))
6125         error ("could not convert template argument %qE to %qT",  orig_arg, t);
6126
6127       if (TREE_CODE (val) == SCOPE_REF)
6128         {
6129           /* Strip typedefs from the SCOPE_REF.  */
6130           tree type = strip_typedefs (TREE_TYPE (val));
6131           tree scope = strip_typedefs (TREE_OPERAND (val, 0));
6132           val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6133                                       QUALIFIED_NAME_IS_TEMPLATE (val));
6134         }
6135     }
6136
6137   return val;
6138 }
6139
6140 /* Coerces the remaining template arguments in INNER_ARGS (from
6141    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6142    Returns the coerced argument pack. PARM_IDX is the position of this
6143    parameter in the template parameter list. ARGS is the original
6144    template argument list.  */
6145 static tree
6146 coerce_template_parameter_pack (tree parms,
6147                                 int parm_idx,
6148                                 tree args,
6149                                 tree inner_args,
6150                                 int arg_idx,
6151                                 tree new_args,
6152                                 int* lost,
6153                                 tree in_decl,
6154                                 tsubst_flags_t complain)
6155 {
6156   tree parm = TREE_VEC_ELT (parms, parm_idx);
6157   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6158   tree packed_args;
6159   tree argument_pack;
6160   tree packed_types = NULL_TREE;
6161
6162   if (arg_idx > nargs)
6163     arg_idx = nargs;
6164
6165   packed_args = make_tree_vec (nargs - arg_idx);
6166
6167   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
6168       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
6169     {
6170       /* When the template parameter is a non-type template
6171          parameter pack whose type uses parameter packs, we need
6172          to look at each of the template arguments
6173          separately. Build a vector of the types for these
6174          non-type template parameters in PACKED_TYPES.  */
6175       tree expansion 
6176         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
6177       packed_types = tsubst_pack_expansion (expansion, args,
6178                                             complain, in_decl);
6179
6180       if (packed_types == error_mark_node)
6181         return error_mark_node;
6182
6183       /* Check that we have the right number of arguments.  */
6184       if (arg_idx < nargs
6185           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
6186           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
6187         {
6188           int needed_parms 
6189             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
6190           error ("wrong number of template arguments (%d, should be %d)",
6191                  nargs, needed_parms);
6192           return error_mark_node;
6193         }
6194
6195       /* If we aren't able to check the actual arguments now
6196          (because they haven't been expanded yet), we can at least
6197          verify that all of the types used for the non-type
6198          template parameter pack are, in fact, valid for non-type
6199          template parameters.  */
6200       if (arg_idx < nargs 
6201           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6202         {
6203           int j, len = TREE_VEC_LENGTH (packed_types);
6204           for (j = 0; j < len; ++j)
6205             {
6206               tree t = TREE_VEC_ELT (packed_types, j);
6207               if (invalid_nontype_parm_type_p (t, complain))
6208                 return error_mark_node;
6209             }
6210         }
6211     }
6212
6213   /* Convert the remaining arguments, which will be a part of the
6214      parameter pack "parm".  */
6215   for (; arg_idx < nargs; ++arg_idx)
6216     {
6217       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6218       tree actual_parm = TREE_VALUE (parm);
6219
6220       if (packed_types && !PACK_EXPANSION_P (arg))
6221         {
6222           /* When we have a vector of types (corresponding to the
6223              non-type template parameter pack that uses parameter
6224              packs in its type, as mention above), and the
6225              argument is not an expansion (which expands to a
6226              currently unknown number of arguments), clone the
6227              parm and give it the next type in PACKED_TYPES.  */
6228           actual_parm = copy_node (actual_parm);
6229           TREE_TYPE (actual_parm) = 
6230             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
6231         }
6232
6233       if (arg != error_mark_node)
6234         arg = convert_template_argument (actual_parm, 
6235                                          arg, new_args, complain, parm_idx,
6236                                          in_decl);
6237       if (arg == error_mark_node)
6238         (*lost)++;
6239       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
6240     }
6241
6242   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6243       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6244     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6245   else
6246     {
6247       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6248       TREE_TYPE (argument_pack) 
6249         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6250       TREE_CONSTANT (argument_pack) = 1;
6251     }
6252
6253   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6254 #ifdef ENABLE_CHECKING
6255   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6256                                        TREE_VEC_LENGTH (packed_args));
6257 #endif
6258   return argument_pack;
6259 }
6260
6261 /* Convert all template arguments to their appropriate types, and
6262    return a vector containing the innermost resulting template
6263    arguments.  If any error occurs, return error_mark_node. Error and
6264    warning messages are issued under control of COMPLAIN.
6265
6266    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6267    for arguments not specified in ARGS.  Otherwise, if
6268    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6269    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
6270    USE_DEFAULT_ARGS is false, then all arguments must be specified in
6271    ARGS.  */
6272
6273 static tree
6274 coerce_template_parms (tree parms,
6275                        tree args,
6276                        tree in_decl,
6277                        tsubst_flags_t complain,
6278                        bool require_all_args,
6279                        bool use_default_args)
6280 {
6281   int nparms, nargs, parm_idx, arg_idx, lost = 0;
6282   tree inner_args;
6283   tree new_args;
6284   tree new_inner_args;
6285   int saved_unevaluated_operand;
6286   int saved_inhibit_evaluation_warnings;
6287
6288   /* When used as a boolean value, indicates whether this is a
6289      variadic template parameter list. Since it's an int, we can also
6290      subtract it from nparms to get the number of non-variadic
6291      parameters.  */
6292   int variadic_p = 0;
6293
6294   if (args == error_mark_node)
6295     return error_mark_node;
6296
6297   nparms = TREE_VEC_LENGTH (parms);
6298
6299   /* Determine if there are any parameter packs.  */
6300   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6301     {
6302       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
6303       if (template_parameter_pack_p (tparm))
6304         ++variadic_p;
6305     }
6306
6307   inner_args = INNERMOST_TEMPLATE_ARGS (args);
6308   /* If there are 0 or 1 parameter packs, we need to expand any argument
6309      packs so that we can deduce a parameter pack from some non-packed args
6310      followed by an argument pack, as in variadic85.C.  If there are more
6311      than that, we need to leave argument packs intact so the arguments are
6312      assigned to the right parameter packs.  This should only happen when
6313      dealing with a nested class inside a partial specialization of a class
6314      template, as in variadic92.C.  */
6315   if (variadic_p <= 1)
6316     inner_args = expand_template_argument_pack (inner_args);
6317
6318   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6319   if ((nargs > nparms && !variadic_p)
6320       || (nargs < nparms - variadic_p
6321           && require_all_args
6322           && (!use_default_args
6323               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6324                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6325     {
6326       if (complain & tf_error)
6327         {
6328           if (variadic_p)
6329             {
6330               --nparms;
6331               error ("wrong number of template arguments "
6332                      "(%d, should be %d or more)", nargs, nparms);
6333             }
6334           else
6335              error ("wrong number of template arguments "
6336                     "(%d, should be %d)", nargs, nparms);
6337
6338           if (in_decl)
6339             error ("provided for %q+D", in_decl);
6340         }
6341
6342       return error_mark_node;
6343     }
6344
6345   /* We need to evaluate the template arguments, even though this
6346      template-id may be nested within a "sizeof".  */
6347   saved_unevaluated_operand = cp_unevaluated_operand;
6348   cp_unevaluated_operand = 0;
6349   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6350   c_inhibit_evaluation_warnings = 0;
6351   new_inner_args = make_tree_vec (nparms);
6352   new_args = add_outermost_template_args (args, new_inner_args);
6353   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6354     {
6355       tree arg;
6356       tree parm;
6357
6358       /* Get the Ith template parameter.  */
6359       parm = TREE_VEC_ELT (parms, parm_idx);
6360  
6361       if (parm == error_mark_node)
6362       {
6363         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6364         continue;
6365       }
6366
6367       /* Calculate the next argument.  */
6368       if (arg_idx < nargs)
6369         arg = TREE_VEC_ELT (inner_args, arg_idx);
6370       else
6371         arg = NULL_TREE;
6372
6373       if (template_parameter_pack_p (TREE_VALUE (parm))
6374           && !(arg && ARGUMENT_PACK_P (arg)))
6375         {
6376           /* All remaining arguments will be placed in the
6377              template parameter pack PARM.  */
6378           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
6379                                                 inner_args, arg_idx,
6380                                                 new_args, &lost,
6381                                                 in_decl, complain);
6382
6383           /* Store this argument.  */
6384           if (arg == error_mark_node)
6385             lost++;
6386           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
6387
6388           /* We are done with all of the arguments.  */
6389           arg_idx = nargs;
6390           
6391           continue;
6392         }
6393       else if (arg)
6394         {
6395           if (PACK_EXPANSION_P (arg))
6396             {
6397               if (complain & tf_error)
6398                 {
6399                   /* FIXME this restriction was removed by N2555; see
6400                      bug 35722.  */
6401                   /* If ARG is a pack expansion, but PARM is not a
6402                      template parameter pack (if it were, we would have
6403                      handled it above), we're trying to expand into a
6404                      fixed-length argument list.  */
6405                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
6406                     sorry ("cannot expand %<%E%> into a fixed-length "
6407                            "argument list", arg);
6408                   else
6409                     sorry ("cannot expand %<%T%> into a fixed-length "
6410                            "argument list", arg);
6411                 }
6412               ++lost;
6413             }
6414         }
6415       else if (require_all_args)
6416         {
6417           /* There must be a default arg in this case.  */
6418           arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
6419                                      complain, in_decl);
6420           /* The position of the first default template argument,
6421              is also the number of non-defaulted arguments in NEW_INNER_ARGS.
6422              Record that.  */
6423           if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6424             SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args, arg_idx);
6425         }
6426       else
6427         break;
6428
6429       if (arg == error_mark_node)
6430         {
6431           if (complain & tf_error)
6432             error ("template argument %d is invalid", arg_idx + 1);
6433         }
6434       else if (!arg)
6435         /* This only occurs if there was an error in the template
6436            parameter list itself (which we would already have
6437            reported) that we are trying to recover from, e.g., a class
6438            template with a parameter list such as
6439            template<typename..., typename>.  */
6440         ++lost;
6441       else
6442         arg = convert_template_argument (TREE_VALUE (parm),
6443                                          arg, new_args, complain, 
6444                                          parm_idx, in_decl);
6445
6446       if (arg == error_mark_node)
6447         lost++;
6448       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
6449     }
6450   cp_unevaluated_operand = saved_unevaluated_operand;
6451   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
6452
6453   if (lost)
6454     return error_mark_node;
6455
6456 #ifdef ENABLE_CHECKING
6457   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6458     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
6459                                          TREE_VEC_LENGTH (new_inner_args));
6460 #endif
6461
6462   return new_inner_args;
6463 }
6464
6465 /* Returns 1 if template args OT and NT are equivalent.  */
6466
6467 static int
6468 template_args_equal (tree ot, tree nt)
6469 {
6470   if (nt == ot)
6471     return 1;
6472
6473   if (TREE_CODE (nt) == TREE_VEC)
6474     /* For member templates */
6475     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
6476   else if (PACK_EXPANSION_P (ot))
6477     return PACK_EXPANSION_P (nt) 
6478       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
6479                               PACK_EXPANSION_PATTERN (nt));
6480   else if (ARGUMENT_PACK_P (ot))
6481     {
6482       int i, len;
6483       tree opack, npack;
6484
6485       if (!ARGUMENT_PACK_P (nt))
6486         return 0;
6487
6488       opack = ARGUMENT_PACK_ARGS (ot);
6489       npack = ARGUMENT_PACK_ARGS (nt);
6490       len = TREE_VEC_LENGTH (opack);
6491       if (TREE_VEC_LENGTH (npack) != len)
6492         return 0;
6493       for (i = 0; i < len; ++i)
6494         if (!template_args_equal (TREE_VEC_ELT (opack, i),
6495                                   TREE_VEC_ELT (npack, i)))
6496           return 0;
6497       return 1;
6498     }
6499   else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
6500     {
6501       /* We get here probably because we are in the middle of substituting
6502          into the pattern of a pack expansion. In that case the
6503          ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
6504          interested in. So we want to use the initial pack argument for
6505          the comparison.  */
6506       ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
6507       if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
6508         nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
6509       return template_args_equal (ot, nt);
6510     }
6511   else if (TYPE_P (nt))
6512     return TYPE_P (ot) && same_type_p (ot, nt);
6513   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
6514     return 0;
6515   else
6516     return cp_tree_equal (ot, nt);
6517 }
6518
6519 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
6520    of template arguments.  Returns 0 otherwise.  */
6521
6522 int
6523 comp_template_args (tree oldargs, tree newargs)
6524 {
6525   int i;
6526
6527   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
6528     return 0;
6529
6530   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
6531     {
6532       tree nt = TREE_VEC_ELT (newargs, i);
6533       tree ot = TREE_VEC_ELT (oldargs, i);
6534
6535       if (! template_args_equal (ot, nt))
6536         return 0;
6537     }
6538   return 1;
6539 }
6540
6541 static void
6542 add_pending_template (tree d)
6543 {
6544   tree ti = (TYPE_P (d)
6545              ? CLASSTYPE_TEMPLATE_INFO (d)
6546              : DECL_TEMPLATE_INFO (d));
6547   struct pending_template *pt;
6548   int level;
6549
6550   if (TI_PENDING_TEMPLATE_FLAG (ti))
6551     return;
6552
6553   /* We are called both from instantiate_decl, where we've already had a
6554      tinst_level pushed, and instantiate_template, where we haven't.
6555      Compensate.  */
6556   level = !current_tinst_level || current_tinst_level->decl != d;
6557
6558   if (level)
6559     push_tinst_level (d);
6560
6561   pt = ggc_alloc_pending_template ();
6562   pt->next = NULL;
6563   pt->tinst = current_tinst_level;
6564   if (last_pending_template)
6565     last_pending_template->next = pt;
6566   else
6567     pending_templates = pt;
6568
6569   last_pending_template = pt;
6570
6571   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
6572
6573   if (level)
6574     pop_tinst_level ();
6575 }
6576
6577
6578 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
6579    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
6580    documentation for TEMPLATE_ID_EXPR.  */
6581
6582 tree
6583 lookup_template_function (tree fns, tree arglist)
6584 {
6585   tree type;
6586
6587   if (fns == error_mark_node || arglist == error_mark_node)
6588     return error_mark_node;
6589
6590   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
6591   gcc_assert (fns && (is_overloaded_fn (fns)
6592                       || TREE_CODE (fns) == IDENTIFIER_NODE));
6593
6594   if (BASELINK_P (fns))
6595     {
6596       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
6597                                          unknown_type_node,
6598                                          BASELINK_FUNCTIONS (fns),
6599                                          arglist);
6600       return fns;
6601     }
6602
6603   type = TREE_TYPE (fns);
6604   if (TREE_CODE (fns) == OVERLOAD || !type)
6605     type = unknown_type_node;
6606
6607   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
6608 }
6609
6610 /* Within the scope of a template class S<T>, the name S gets bound
6611    (in build_self_reference) to a TYPE_DECL for the class, not a
6612    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
6613    or one of its enclosing classes, and that type is a template,
6614    return the associated TEMPLATE_DECL.  Otherwise, the original
6615    DECL is returned.
6616
6617    Also handle the case when DECL is a TREE_LIST of ambiguous
6618    injected-class-names from different bases.  */
6619
6620 tree
6621 maybe_get_template_decl_from_type_decl (tree decl)
6622 {
6623   if (decl == NULL_TREE)
6624     return decl;
6625
6626   /* DR 176: A lookup that finds an injected-class-name (10.2
6627      [class.member.lookup]) can result in an ambiguity in certain cases
6628      (for example, if it is found in more than one base class). If all of
6629      the injected-class-names that are found refer to specializations of
6630      the same class template, and if the name is followed by a
6631      template-argument-list, the reference refers to the class template
6632      itself and not a specialization thereof, and is not ambiguous.  */
6633   if (TREE_CODE (decl) == TREE_LIST)
6634     {
6635       tree t, tmpl = NULL_TREE;
6636       for (t = decl; t; t = TREE_CHAIN (t))
6637         {
6638           tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
6639           if (!tmpl)
6640             tmpl = elt;
6641           else if (tmpl != elt)
6642             break;
6643         }
6644       if (tmpl && t == NULL_TREE)
6645         return tmpl;
6646       else
6647         return decl;
6648     }
6649
6650   return (decl != NULL_TREE
6651           && DECL_SELF_REFERENCE_P (decl)
6652           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
6653     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
6654 }
6655
6656 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
6657    parameters, find the desired type.
6658
6659    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
6660
6661    IN_DECL, if non-NULL, is the template declaration we are trying to
6662    instantiate.
6663
6664    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
6665    the class we are looking up.
6666
6667    Issue error and warning messages under control of COMPLAIN.
6668
6669    If the template class is really a local class in a template
6670    function, then the FUNCTION_CONTEXT is the function in which it is
6671    being instantiated.
6672
6673    ??? Note that this function is currently called *twice* for each
6674    template-id: the first time from the parser, while creating the
6675    incomplete type (finish_template_type), and the second type during the
6676    real instantiation (instantiate_template_class). This is surely something
6677    that we want to avoid. It also causes some problems with argument
6678    coercion (see convert_nontype_argument for more information on this).  */
6679
6680 tree
6681 lookup_template_class (tree d1,
6682                        tree arglist,
6683                        tree in_decl,
6684                        tree context,
6685                        int entering_scope,
6686                        tsubst_flags_t complain)
6687 {
6688   tree templ = NULL_TREE, parmlist;
6689   tree t;
6690   spec_entry **slot;
6691   spec_entry *entry;
6692   spec_entry elt;
6693   hashval_t hash;
6694
6695   timevar_push (TV_NAME_LOOKUP);
6696
6697   if (TREE_CODE (d1) == IDENTIFIER_NODE)
6698     {
6699       tree value = innermost_non_namespace_value (d1);
6700       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
6701         templ = value;
6702       else
6703         {
6704           if (context)
6705             push_decl_namespace (context);
6706           templ = lookup_name (d1);
6707           templ = maybe_get_template_decl_from_type_decl (templ);
6708           if (context)
6709             pop_decl_namespace ();
6710         }
6711       if (templ)
6712         context = DECL_CONTEXT (templ);
6713     }
6714   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
6715     {
6716       tree type = TREE_TYPE (d1);
6717
6718       /* If we are declaring a constructor, say A<T>::A<T>, we will get
6719          an implicit typename for the second A.  Deal with it.  */
6720       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
6721         type = TREE_TYPE (type);
6722
6723       if (CLASSTYPE_TEMPLATE_INFO (type))
6724         {
6725           templ = CLASSTYPE_TI_TEMPLATE (type);
6726           d1 = DECL_NAME (templ);
6727         }
6728     }
6729   else if (TREE_CODE (d1) == ENUMERAL_TYPE
6730            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
6731     {
6732       templ = TYPE_TI_TEMPLATE (d1);
6733       d1 = DECL_NAME (templ);
6734     }
6735   else if (TREE_CODE (d1) == TEMPLATE_DECL
6736            && DECL_TEMPLATE_RESULT (d1)
6737            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
6738     {
6739       templ = d1;
6740       d1 = DECL_NAME (templ);
6741       context = DECL_CONTEXT (templ);
6742     }
6743
6744   /* Issue an error message if we didn't find a template.  */
6745   if (! templ)
6746     {
6747       if (complain & tf_error)
6748         error ("%qT is not a template", d1);
6749       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6750     }
6751
6752   if (TREE_CODE (templ) != TEMPLATE_DECL
6753          /* Make sure it's a user visible template, if it was named by
6754             the user.  */
6755       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
6756           && !PRIMARY_TEMPLATE_P (templ)))
6757     {
6758       if (complain & tf_error)
6759         {
6760           error ("non-template type %qT used as a template", d1);
6761           if (in_decl)
6762             error ("for template declaration %q+D", in_decl);
6763         }
6764       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6765     }
6766
6767   complain &= ~tf_user;
6768
6769   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
6770     {
6771       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
6772          template arguments */
6773
6774       tree parm;
6775       tree arglist2;
6776       tree outer;
6777
6778       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
6779
6780       /* Consider an example where a template template parameter declared as
6781
6782            template <class T, class U = std::allocator<T> > class TT
6783
6784          The template parameter level of T and U are one level larger than
6785          of TT.  To proper process the default argument of U, say when an
6786          instantiation `TT<int>' is seen, we need to build the full
6787          arguments containing {int} as the innermost level.  Outer levels,
6788          available when not appearing as default template argument, can be
6789          obtained from the arguments of the enclosing template.
6790
6791          Suppose that TT is later substituted with std::vector.  The above
6792          instantiation is `TT<int, std::allocator<T> >' with TT at
6793          level 1, and T at level 2, while the template arguments at level 1
6794          becomes {std::vector} and the inner level 2 is {int}.  */
6795
6796       outer = DECL_CONTEXT (templ);
6797       if (outer)
6798         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
6799       else if (current_template_parms)
6800         /* This is an argument of the current template, so we haven't set
6801            DECL_CONTEXT yet.  */
6802         outer = current_template_args ();
6803
6804       if (outer)
6805         arglist = add_to_template_args (outer, arglist);
6806
6807       arglist2 = coerce_template_parms (parmlist, arglist, templ,
6808                                         complain,
6809                                         /*require_all_args=*/true,
6810                                         /*use_default_args=*/true);
6811       if (arglist2 == error_mark_node
6812           || (!uses_template_parms (arglist2)
6813               && check_instantiated_args (templ, arglist2, complain)))
6814         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6815
6816       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
6817       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
6818     }
6819   else
6820     {
6821       tree template_type = TREE_TYPE (templ);
6822       tree gen_tmpl;
6823       tree type_decl;
6824       tree found = NULL_TREE;
6825       int arg_depth;
6826       int parm_depth;
6827       int is_dependent_type;
6828       int use_partial_inst_tmpl = false;
6829
6830       gen_tmpl = most_general_template (templ);
6831       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
6832       parm_depth = TMPL_PARMS_DEPTH (parmlist);
6833       arg_depth = TMPL_ARGS_DEPTH (arglist);
6834
6835       if (arg_depth == 1 && parm_depth > 1)
6836         {
6837           /* We've been given an incomplete set of template arguments.
6838              For example, given:
6839
6840                template <class T> struct S1 {
6841                  template <class U> struct S2 {};
6842                  template <class U> struct S2<U*> {};
6843                 };
6844
6845              we will be called with an ARGLIST of `U*', but the
6846              TEMPLATE will be `template <class T> template
6847              <class U> struct S1<T>::S2'.  We must fill in the missing
6848              arguments.  */
6849           arglist
6850             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
6851                                            arglist);
6852           arg_depth = TMPL_ARGS_DEPTH (arglist);
6853         }
6854
6855       /* Now we should have enough arguments.  */
6856       gcc_assert (parm_depth == arg_depth);
6857
6858       /* From here on, we're only interested in the most general
6859          template.  */
6860
6861       /* Calculate the BOUND_ARGS.  These will be the args that are
6862          actually tsubst'd into the definition to create the
6863          instantiation.  */
6864       if (parm_depth > 1)
6865         {
6866           /* We have multiple levels of arguments to coerce, at once.  */
6867           int i;
6868           int saved_depth = TMPL_ARGS_DEPTH (arglist);
6869
6870           tree bound_args = make_tree_vec (parm_depth);
6871
6872           for (i = saved_depth,
6873                  t = DECL_TEMPLATE_PARMS (gen_tmpl);
6874                i > 0 && t != NULL_TREE;
6875                --i, t = TREE_CHAIN (t))
6876             {
6877               tree a;
6878               if (i == saved_depth)
6879                 a = coerce_template_parms (TREE_VALUE (t),
6880                                            arglist, gen_tmpl,
6881                                            complain,
6882                                            /*require_all_args=*/true,
6883                                            /*use_default_args=*/true);
6884               else
6885                 /* Outer levels should have already been coerced.  */
6886                 a = TMPL_ARGS_LEVEL (arglist, i);
6887
6888               /* Don't process further if one of the levels fails.  */
6889               if (a == error_mark_node)
6890                 {
6891                   /* Restore the ARGLIST to its full size.  */
6892                   TREE_VEC_LENGTH (arglist) = saved_depth;
6893                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6894                 }
6895
6896               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
6897
6898               /* We temporarily reduce the length of the ARGLIST so
6899                  that coerce_template_parms will see only the arguments
6900                  corresponding to the template parameters it is
6901                  examining.  */
6902               TREE_VEC_LENGTH (arglist)--;
6903             }
6904
6905           /* Restore the ARGLIST to its full size.  */
6906           TREE_VEC_LENGTH (arglist) = saved_depth;
6907
6908           arglist = bound_args;
6909         }
6910       else
6911         arglist
6912           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
6913                                    INNERMOST_TEMPLATE_ARGS (arglist),
6914                                    gen_tmpl,
6915                                    complain,
6916                                    /*require_all_args=*/true,
6917                                    /*use_default_args=*/true);
6918
6919       if (arglist == error_mark_node)
6920         /* We were unable to bind the arguments.  */
6921         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6922
6923       /* In the scope of a template class, explicit references to the
6924          template class refer to the type of the template, not any
6925          instantiation of it.  For example, in:
6926
6927            template <class T> class C { void f(C<T>); }
6928
6929          the `C<T>' is just the same as `C'.  Outside of the
6930          class, however, such a reference is an instantiation.  */
6931       if ((entering_scope
6932            || !PRIMARY_TEMPLATE_P (gen_tmpl)
6933            || currently_open_class (template_type))
6934           /* comp_template_args is expensive, check it last.  */
6935           && comp_template_args (TYPE_TI_ARGS (template_type),
6936                                  arglist))
6937         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, template_type);
6938
6939       /* If we already have this specialization, return it.  */
6940       elt.tmpl = gen_tmpl;
6941       elt.args = arglist;
6942       hash = hash_specialization (&elt);
6943       entry = (spec_entry *) htab_find_with_hash (type_specializations,
6944                                                   &elt, hash);
6945
6946       if (entry)
6947         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, entry->spec);
6948
6949       is_dependent_type = uses_template_parms (arglist);
6950
6951       /* If the deduced arguments are invalid, then the binding
6952          failed.  */
6953       if (!is_dependent_type
6954           && check_instantiated_args (gen_tmpl,
6955                                       INNERMOST_TEMPLATE_ARGS (arglist),
6956                                       complain))
6957         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6958
6959       if (!is_dependent_type
6960           && !PRIMARY_TEMPLATE_P (gen_tmpl)
6961           && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
6962           && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
6963         {
6964           found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
6965                                       DECL_NAME (gen_tmpl),
6966                                       /*tag_scope=*/ts_global);
6967           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
6968         }
6969
6970       context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
6971                         complain, in_decl);
6972       if (!context)
6973         context = global_namespace;
6974
6975       /* Create the type.  */
6976       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
6977         {
6978           if (!is_dependent_type)
6979             {
6980               set_current_access_from_decl (TYPE_NAME (template_type));
6981               t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
6982                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
6983                                       arglist, complain, in_decl),
6984                               SCOPED_ENUM_P (template_type), NULL);
6985             }
6986           else
6987             {
6988               /* We don't want to call start_enum for this type, since
6989                  the values for the enumeration constants may involve
6990                  template parameters.  And, no one should be interested
6991                  in the enumeration constants for such a type.  */
6992               t = cxx_make_type (ENUMERAL_TYPE);
6993               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
6994             }
6995           SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
6996         }
6997       else
6998         {
6999           t = make_class_type (TREE_CODE (template_type));
7000           CLASSTYPE_DECLARED_CLASS (t)
7001             = CLASSTYPE_DECLARED_CLASS (template_type);
7002           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7003           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7004
7005           /* A local class.  Make sure the decl gets registered properly.  */
7006           if (context == current_function_decl)
7007             pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7008
7009           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7010             /* This instantiation is another name for the primary
7011                template type. Set the TYPE_CANONICAL field
7012                appropriately. */
7013             TYPE_CANONICAL (t) = template_type;
7014           else if (any_template_arguments_need_structural_equality_p (arglist))
7015             /* Some of the template arguments require structural
7016                equality testing, so this template class requires
7017                structural equality testing. */
7018             SET_TYPE_STRUCTURAL_EQUALITY (t);
7019         }
7020
7021       /* If we called start_enum or pushtag above, this information
7022          will already be set up.  */
7023       if (!TYPE_NAME (t))
7024         {
7025           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7026
7027           type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7028           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7029           DECL_SOURCE_LOCATION (type_decl)
7030             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7031         }
7032       else
7033         type_decl = TYPE_NAME (t);
7034
7035       TREE_PRIVATE (type_decl)
7036         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
7037       TREE_PROTECTED (type_decl)
7038         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
7039       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7040         {
7041           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7042           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7043         }
7044
7045       /* Let's consider the explicit specialization of a member
7046          of a class template specialization that is implicitely instantiated,
7047          e.g.:
7048              template<class T>
7049              struct S
7050              {
7051                template<class U> struct M {}; //#0
7052              };
7053
7054              template<>
7055              template<>
7056              struct S<int>::M<char> //#1
7057              {
7058                int i;
7059              };
7060         [temp.expl.spec]/4 says this is valid.
7061
7062         In this case, when we write:
7063         S<int>::M<char> m;
7064
7065         M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7066         the one of #0.
7067
7068         When we encounter #1, we want to store the partial instantiation
7069         of M (template<class T> S<int>::M<T>) in it's CLASSTYPE_TI_TEMPLATE.
7070
7071         For all cases other than this "explicit specialization of member of a
7072         class template", we just want to store the most general template into
7073         the CLASSTYPE_TI_TEMPLATE of M.
7074
7075         This case of "explicit specialization of member of a class template"
7076         only happens when:
7077         1/ the enclosing class is an instantiation of, and therefore not
7078         the same as, the context of the most general template, and
7079         2/ we aren't looking at the partial instantiation itself, i.e.
7080         the innermost arguments are not the same as the innermost parms of
7081         the most general template.
7082
7083         So it's only when 1/ and 2/ happens that we want to use the partial
7084         instantiation of the member template in lieu of its most general
7085         template.  */
7086
7087       if (PRIMARY_TEMPLATE_P (gen_tmpl)
7088           && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7089           /* the enclosing class must be an instantiation...  */
7090           && CLASS_TYPE_P (context)
7091           && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7092         {
7093           tree partial_inst_args;
7094           TREE_VEC_LENGTH (arglist)--;
7095           ++processing_template_decl;
7096           partial_inst_args =
7097             tsubst (INNERMOST_TEMPLATE_ARGS
7098                         (CLASSTYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7099                     arglist, complain, NULL_TREE);
7100           --processing_template_decl;
7101           TREE_VEC_LENGTH (arglist)++;
7102           use_partial_inst_tmpl =
7103             /*...and we must not be looking at the partial instantiation
7104              itself. */
7105             !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7106                                  partial_inst_args);
7107         }
7108
7109       if (!use_partial_inst_tmpl)
7110         /* This case is easy; there are no member templates involved.  */
7111         found = gen_tmpl;
7112       else
7113         {
7114           /* This is a full instantiation of a member template.  Find
7115              the partial instantiation of which this is an instance.  */
7116
7117           /* Temporarily reduce by one the number of levels in the ARGLIST
7118              so as to avoid comparing the last set of arguments.  */
7119           TREE_VEC_LENGTH (arglist)--;
7120           found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7121           TREE_VEC_LENGTH (arglist)++;
7122           found = CLASSTYPE_TI_TEMPLATE (found);
7123         }
7124
7125       SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7126
7127       elt.spec = t;
7128       slot = (spec_entry **) htab_find_slot_with_hash (type_specializations,
7129                                                        &elt, hash, INSERT);
7130       *slot = ggc_alloc_spec_entry ();
7131       **slot = elt;
7132
7133       /* Note this use of the partial instantiation so we can check it
7134          later in maybe_process_partial_specialization.  */
7135       DECL_TEMPLATE_INSTANTIATIONS (templ)
7136         = tree_cons (arglist, t,
7137                      DECL_TEMPLATE_INSTANTIATIONS (templ));
7138
7139       if (TREE_CODE (t) == ENUMERAL_TYPE && !is_dependent_type)
7140         /* Now that the type has been registered on the instantiations
7141            list, we set up the enumerators.  Because the enumeration
7142            constants may involve the enumeration type itself, we make
7143            sure to register the type first, and then create the
7144            constants.  That way, doing tsubst_expr for the enumeration
7145            constants won't result in recursive calls here; we'll find
7146            the instantiation and exit above.  */
7147         tsubst_enum (template_type, t, arglist);
7148
7149       if (is_dependent_type)
7150         /* If the type makes use of template parameters, the
7151            code that generates debugging information will crash.  */
7152         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
7153
7154       /* Possibly limit visibility based on template args.  */
7155       TREE_PUBLIC (type_decl) = 1;
7156       determine_visibility (type_decl);
7157
7158       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
7159     }
7160   timevar_pop (TV_NAME_LOOKUP);
7161 }
7162 \f
7163 struct pair_fn_data
7164 {
7165   tree_fn_t fn;
7166   void *data;
7167   /* True when we should also visit template parameters that occur in
7168      non-deduced contexts.  */
7169   bool include_nondeduced_p;
7170   struct pointer_set_t *visited;
7171 };
7172
7173 /* Called from for_each_template_parm via walk_tree.  */
7174
7175 static tree
7176 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
7177 {
7178   tree t = *tp;
7179   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
7180   tree_fn_t fn = pfd->fn;
7181   void *data = pfd->data;
7182
7183   if (TYPE_P (t)
7184       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
7185       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
7186                                  pfd->include_nondeduced_p))
7187     return error_mark_node;
7188
7189   switch (TREE_CODE (t))
7190     {
7191     case RECORD_TYPE:
7192       if (TYPE_PTRMEMFUNC_P (t))
7193         break;
7194       /* Fall through.  */
7195
7196     case UNION_TYPE:
7197     case ENUMERAL_TYPE:
7198       if (!TYPE_TEMPLATE_INFO (t))
7199         *walk_subtrees = 0;
7200       else if (for_each_template_parm (TI_ARGS (TYPE_TEMPLATE_INFO (t)),
7201                                        fn, data, pfd->visited, 
7202                                        pfd->include_nondeduced_p))
7203         return error_mark_node;
7204       break;
7205
7206     case INTEGER_TYPE:
7207       if (for_each_template_parm (TYPE_MIN_VALUE (t),
7208                                   fn, data, pfd->visited, 
7209                                   pfd->include_nondeduced_p)
7210           || for_each_template_parm (TYPE_MAX_VALUE (t),
7211                                      fn, data, pfd->visited,
7212                                      pfd->include_nondeduced_p))
7213         return error_mark_node;
7214       break;
7215
7216     case METHOD_TYPE:
7217       /* Since we're not going to walk subtrees, we have to do this
7218          explicitly here.  */
7219       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
7220                                   pfd->visited, pfd->include_nondeduced_p))
7221         return error_mark_node;
7222       /* Fall through.  */
7223
7224     case FUNCTION_TYPE:
7225       /* Check the return type.  */
7226       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7227                                   pfd->include_nondeduced_p))
7228         return error_mark_node;
7229
7230       /* Check the parameter types.  Since default arguments are not
7231          instantiated until they are needed, the TYPE_ARG_TYPES may
7232          contain expressions that involve template parameters.  But,
7233          no-one should be looking at them yet.  And, once they're
7234          instantiated, they don't contain template parameters, so
7235          there's no point in looking at them then, either.  */
7236       {
7237         tree parm;
7238
7239         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
7240           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
7241                                       pfd->visited, pfd->include_nondeduced_p))
7242             return error_mark_node;
7243
7244         /* Since we've already handled the TYPE_ARG_TYPES, we don't
7245            want walk_tree walking into them itself.  */
7246         *walk_subtrees = 0;
7247       }
7248       break;
7249
7250     case TYPEOF_TYPE:
7251       if (pfd->include_nondeduced_p
7252           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
7253                                      pfd->visited, 
7254                                      pfd->include_nondeduced_p))
7255         return error_mark_node;
7256       break;
7257
7258     case FUNCTION_DECL:
7259     case VAR_DECL:
7260       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
7261           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
7262                                      pfd->visited, pfd->include_nondeduced_p))
7263         return error_mark_node;
7264       /* Fall through.  */
7265
7266     case PARM_DECL:
7267     case CONST_DECL:
7268       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
7269           && for_each_template_parm (DECL_INITIAL (t), fn, data,
7270                                      pfd->visited, pfd->include_nondeduced_p))
7271         return error_mark_node;
7272       if (DECL_CONTEXT (t)
7273           && pfd->include_nondeduced_p
7274           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
7275                                      pfd->visited, pfd->include_nondeduced_p))
7276         return error_mark_node;
7277       break;
7278
7279     case BOUND_TEMPLATE_TEMPLATE_PARM:
7280       /* Record template parameters such as `T' inside `TT<T>'.  */
7281       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
7282                                   pfd->include_nondeduced_p))
7283         return error_mark_node;
7284       /* Fall through.  */
7285
7286     case TEMPLATE_TEMPLATE_PARM:
7287     case TEMPLATE_TYPE_PARM:
7288     case TEMPLATE_PARM_INDEX:
7289       if (fn && (*fn)(t, data))
7290         return error_mark_node;
7291       else if (!fn)
7292         return error_mark_node;
7293       break;
7294
7295     case TEMPLATE_DECL:
7296       /* A template template parameter is encountered.  */
7297       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
7298           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7299                                      pfd->include_nondeduced_p))
7300         return error_mark_node;
7301
7302       /* Already substituted template template parameter */
7303       *walk_subtrees = 0;
7304       break;
7305
7306     case TYPENAME_TYPE:
7307       if (!fn
7308           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
7309                                      data, pfd->visited, 
7310                                      pfd->include_nondeduced_p))
7311         return error_mark_node;
7312       break;
7313
7314     case CONSTRUCTOR:
7315       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
7316           && pfd->include_nondeduced_p
7317           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
7318                                      (TREE_TYPE (t)), fn, data,
7319                                      pfd->visited, pfd->include_nondeduced_p))
7320         return error_mark_node;
7321       break;
7322
7323     case INDIRECT_REF:
7324     case COMPONENT_REF:
7325       /* If there's no type, then this thing must be some expression
7326          involving template parameters.  */
7327       if (!fn && !TREE_TYPE (t))
7328         return error_mark_node;
7329       break;
7330
7331     case MODOP_EXPR:
7332     case CAST_EXPR:
7333     case REINTERPRET_CAST_EXPR:
7334     case CONST_CAST_EXPR:
7335     case STATIC_CAST_EXPR:
7336     case DYNAMIC_CAST_EXPR:
7337     case ARROW_EXPR:
7338     case DOTSTAR_EXPR:
7339     case TYPEID_EXPR:
7340     case PSEUDO_DTOR_EXPR:
7341       if (!fn)
7342         return error_mark_node;
7343       break;
7344
7345     default:
7346       break;
7347     }
7348
7349   /* We didn't find any template parameters we liked.  */
7350   return NULL_TREE;
7351 }
7352
7353 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
7354    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
7355    call FN with the parameter and the DATA.
7356    If FN returns nonzero, the iteration is terminated, and
7357    for_each_template_parm returns 1.  Otherwise, the iteration
7358    continues.  If FN never returns a nonzero value, the value
7359    returned by for_each_template_parm is 0.  If FN is NULL, it is
7360    considered to be the function which always returns 1.
7361
7362    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
7363    parameters that occur in non-deduced contexts.  When false, only
7364    visits those template parameters that can be deduced.  */
7365
7366 static int
7367 for_each_template_parm (tree t, tree_fn_t fn, void* data,
7368                         struct pointer_set_t *visited,
7369                         bool include_nondeduced_p)
7370 {
7371   struct pair_fn_data pfd;
7372   int result;
7373
7374   /* Set up.  */
7375   pfd.fn = fn;
7376   pfd.data = data;
7377   pfd.include_nondeduced_p = include_nondeduced_p;
7378
7379   /* Walk the tree.  (Conceptually, we would like to walk without
7380      duplicates, but for_each_template_parm_r recursively calls
7381      for_each_template_parm, so we would need to reorganize a fair
7382      bit to use walk_tree_without_duplicates, so we keep our own
7383      visited list.)  */
7384   if (visited)
7385     pfd.visited = visited;
7386   else
7387     pfd.visited = pointer_set_create ();
7388   result = cp_walk_tree (&t,
7389                          for_each_template_parm_r,
7390                          &pfd,
7391                          pfd.visited) != NULL_TREE;
7392
7393   /* Clean up.  */
7394   if (!visited)
7395     {
7396       pointer_set_destroy (pfd.visited);
7397       pfd.visited = 0;
7398     }
7399
7400   return result;
7401 }
7402
7403 /* Returns true if T depends on any template parameter.  */
7404
7405 int
7406 uses_template_parms (tree t)
7407 {
7408   bool dependent_p;
7409   int saved_processing_template_decl;
7410
7411   saved_processing_template_decl = processing_template_decl;
7412   if (!saved_processing_template_decl)
7413     processing_template_decl = 1;
7414   if (TYPE_P (t))
7415     dependent_p = dependent_type_p (t);
7416   else if (TREE_CODE (t) == TREE_VEC)
7417     dependent_p = any_dependent_template_arguments_p (t);
7418   else if (TREE_CODE (t) == TREE_LIST)
7419     dependent_p = (uses_template_parms (TREE_VALUE (t))
7420                    || uses_template_parms (TREE_CHAIN (t)));
7421   else if (TREE_CODE (t) == TYPE_DECL)
7422     dependent_p = dependent_type_p (TREE_TYPE (t));
7423   else if (DECL_P (t)
7424            || EXPR_P (t)
7425            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
7426            || TREE_CODE (t) == OVERLOAD
7427            || TREE_CODE (t) == BASELINK
7428            || TREE_CODE (t) == IDENTIFIER_NODE
7429            || TREE_CODE (t) == TRAIT_EXPR
7430            || TREE_CODE (t) == CONSTRUCTOR
7431            || CONSTANT_CLASS_P (t))
7432     dependent_p = (type_dependent_expression_p (t)
7433                    || value_dependent_expression_p (t));
7434   else
7435     {
7436       gcc_assert (t == error_mark_node);
7437       dependent_p = false;
7438     }
7439
7440   processing_template_decl = saved_processing_template_decl;
7441
7442   return dependent_p;
7443 }
7444
7445 /* Returns true if T depends on any template parameter with level LEVEL.  */
7446
7447 int
7448 uses_template_parms_level (tree t, int level)
7449 {
7450   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
7451                                  /*include_nondeduced_p=*/true);
7452 }
7453
7454 static int tinst_depth;
7455 extern int max_tinst_depth;
7456 #ifdef GATHER_STATISTICS
7457 int depth_reached;
7458 #endif
7459 static int tinst_level_tick;
7460 static int last_template_error_tick;
7461
7462 /* We're starting to instantiate D; record the template instantiation context
7463    for diagnostics and to restore it later.  */
7464
7465 int
7466 push_tinst_level (tree d)
7467 {
7468   struct tinst_level *new_level;
7469
7470   if (tinst_depth >= max_tinst_depth)
7471     {
7472       /* If the instantiation in question still has unbound template parms,
7473          we don't really care if we can't instantiate it, so just return.
7474          This happens with base instantiation for implicit `typename'.  */
7475       if (uses_template_parms (d))
7476         return 0;
7477
7478       last_template_error_tick = tinst_level_tick;
7479       error ("template instantiation depth exceeds maximum of %d (use "
7480              "-ftemplate-depth= to increase the maximum) instantiating %qD",
7481              max_tinst_depth, d);
7482
7483       print_instantiation_context ();
7484
7485       return 0;
7486     }
7487
7488   new_level = ggc_alloc_tinst_level ();
7489   new_level->decl = d;
7490   new_level->locus = input_location;
7491   new_level->in_system_header_p = in_system_header;
7492   new_level->next = current_tinst_level;
7493   current_tinst_level = new_level;
7494
7495   ++tinst_depth;
7496 #ifdef GATHER_STATISTICS
7497   if (tinst_depth > depth_reached)
7498     depth_reached = tinst_depth;
7499 #endif
7500
7501   ++tinst_level_tick;
7502   return 1;
7503 }
7504
7505 /* We're done instantiating this template; return to the instantiation
7506    context.  */
7507
7508 void
7509 pop_tinst_level (void)
7510 {
7511   /* Restore the filename and line number stashed away when we started
7512      this instantiation.  */
7513   input_location = current_tinst_level->locus;
7514   current_tinst_level = current_tinst_level->next;
7515   --tinst_depth;
7516   ++tinst_level_tick;
7517 }
7518
7519 /* We're instantiating a deferred template; restore the template
7520    instantiation context in which the instantiation was requested, which
7521    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
7522
7523 static tree
7524 reopen_tinst_level (struct tinst_level *level)
7525 {
7526   struct tinst_level *t;
7527
7528   tinst_depth = 0;
7529   for (t = level; t; t = t->next)
7530     ++tinst_depth;
7531
7532   current_tinst_level = level;
7533   pop_tinst_level ();
7534   return level->decl;
7535 }
7536
7537 /* Returns the TINST_LEVEL which gives the original instantiation
7538    context.  */
7539
7540 struct tinst_level *
7541 outermost_tinst_level (void)
7542 {
7543   struct tinst_level *level = current_tinst_level;
7544   if (level)
7545     while (level->next)
7546       level = level->next;
7547   return level;
7548 }
7549
7550 /* Returns TRUE if PARM is a parameter of the template TEMPL.  */
7551
7552 bool
7553 parameter_of_template_p (tree parm, tree templ)
7554 {
7555   tree parms;
7556   int i;
7557
7558   if (!parm || !templ)
7559     return false;
7560
7561   gcc_assert (DECL_TEMPLATE_PARM_P (parm));
7562   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
7563
7564   parms = DECL_TEMPLATE_PARMS (templ);
7565   parms = INNERMOST_TEMPLATE_PARMS (parms);
7566
7567   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
7568     if (parm == TREE_VALUE (TREE_VEC_ELT (parms, i)))
7569       return true;
7570
7571   return false;
7572 }
7573
7574 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
7575    vector of template arguments, as for tsubst.
7576
7577    Returns an appropriate tsubst'd friend declaration.  */
7578
7579 static tree
7580 tsubst_friend_function (tree decl, tree args)
7581 {
7582   tree new_friend;
7583
7584   if (TREE_CODE (decl) == FUNCTION_DECL
7585       && DECL_TEMPLATE_INSTANTIATION (decl)
7586       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
7587     /* This was a friend declared with an explicit template
7588        argument list, e.g.:
7589
7590        friend void f<>(T);
7591
7592        to indicate that f was a template instantiation, not a new
7593        function declaration.  Now, we have to figure out what
7594        instantiation of what template.  */
7595     {
7596       tree template_id, arglist, fns;
7597       tree new_args;
7598       tree tmpl;
7599       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
7600
7601       /* Friend functions are looked up in the containing namespace scope.
7602          We must enter that scope, to avoid finding member functions of the
7603          current class with same name.  */
7604       push_nested_namespace (ns);
7605       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
7606                          tf_warning_or_error, NULL_TREE,
7607                          /*integral_constant_expression_p=*/false);
7608       pop_nested_namespace (ns);
7609       arglist = tsubst (DECL_TI_ARGS (decl), args,
7610                         tf_warning_or_error, NULL_TREE);
7611       template_id = lookup_template_function (fns, arglist);
7612
7613       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
7614       tmpl = determine_specialization (template_id, new_friend,
7615                                        &new_args,
7616                                        /*need_member_template=*/0,
7617                                        TREE_VEC_LENGTH (args),
7618                                        tsk_none);
7619       return instantiate_template (tmpl, new_args, tf_error);
7620     }
7621
7622   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
7623
7624   /* The NEW_FRIEND will look like an instantiation, to the
7625      compiler, but is not an instantiation from the point of view of
7626      the language.  For example, we might have had:
7627
7628      template <class T> struct S {
7629        template <class U> friend void f(T, U);
7630      };
7631
7632      Then, in S<int>, template <class U> void f(int, U) is not an
7633      instantiation of anything.  */
7634   if (new_friend == error_mark_node)
7635     return error_mark_node;
7636
7637   DECL_USE_TEMPLATE (new_friend) = 0;
7638   if (TREE_CODE (decl) == TEMPLATE_DECL)
7639     {
7640       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
7641       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
7642         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
7643     }
7644
7645   /* The mangled name for the NEW_FRIEND is incorrect.  The function
7646      is not a template instantiation and should not be mangled like
7647      one.  Therefore, we forget the mangling here; we'll recompute it
7648      later if we need it.  */
7649   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
7650     {
7651       SET_DECL_RTL (new_friend, NULL);
7652       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
7653     }
7654
7655   if (DECL_NAMESPACE_SCOPE_P (new_friend))
7656     {
7657       tree old_decl;
7658       tree new_friend_template_info;
7659       tree new_friend_result_template_info;
7660       tree ns;
7661       int  new_friend_is_defn;
7662
7663       /* We must save some information from NEW_FRIEND before calling
7664          duplicate decls since that function will free NEW_FRIEND if
7665          possible.  */
7666       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
7667       new_friend_is_defn =
7668             (DECL_INITIAL (DECL_TEMPLATE_RESULT
7669                            (template_for_substitution (new_friend)))
7670              != NULL_TREE);
7671       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
7672         {
7673           /* This declaration is a `primary' template.  */
7674           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
7675
7676           new_friend_result_template_info
7677             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
7678         }
7679       else
7680         new_friend_result_template_info = NULL_TREE;
7681
7682       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
7683       if (new_friend_is_defn)
7684         DECL_INITIAL (new_friend) = error_mark_node;
7685
7686       /* Inside pushdecl_namespace_level, we will push into the
7687          current namespace. However, the friend function should go
7688          into the namespace of the template.  */
7689       ns = decl_namespace_context (new_friend);
7690       push_nested_namespace (ns);
7691       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
7692       pop_nested_namespace (ns);
7693
7694       if (old_decl == error_mark_node)
7695         return error_mark_node;
7696
7697       if (old_decl != new_friend)
7698         {
7699           /* This new friend declaration matched an existing
7700              declaration.  For example, given:
7701
7702                template <class T> void f(T);
7703                template <class U> class C {
7704                  template <class T> friend void f(T) {}
7705                };
7706
7707              the friend declaration actually provides the definition
7708              of `f', once C has been instantiated for some type.  So,
7709              old_decl will be the out-of-class template declaration,
7710              while new_friend is the in-class definition.
7711
7712              But, if `f' was called before this point, the
7713              instantiation of `f' will have DECL_TI_ARGS corresponding
7714              to `T' but not to `U', references to which might appear
7715              in the definition of `f'.  Previously, the most general
7716              template for an instantiation of `f' was the out-of-class
7717              version; now it is the in-class version.  Therefore, we
7718              run through all specialization of `f', adding to their
7719              DECL_TI_ARGS appropriately.  In particular, they need a
7720              new set of outer arguments, corresponding to the
7721              arguments for this class instantiation.
7722
7723              The same situation can arise with something like this:
7724
7725                friend void f(int);
7726                template <class T> class C {
7727                  friend void f(T) {}
7728                };
7729
7730              when `C<int>' is instantiated.  Now, `f(int)' is defined
7731              in the class.  */
7732
7733           if (!new_friend_is_defn)
7734             /* On the other hand, if the in-class declaration does
7735                *not* provide a definition, then we don't want to alter
7736                existing definitions.  We can just leave everything
7737                alone.  */
7738             ;
7739           else
7740             {
7741               tree new_template = TI_TEMPLATE (new_friend_template_info);
7742               tree new_args = TI_ARGS (new_friend_template_info);
7743
7744               /* Overwrite whatever template info was there before, if
7745                  any, with the new template information pertaining to
7746                  the declaration.  */
7747               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
7748
7749               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
7750                 {
7751                   /* We should have called reregister_specialization in
7752                      duplicate_decls.  */
7753                   gcc_assert (retrieve_specialization (new_template,
7754                                                        new_args, 0)
7755                               == old_decl);
7756
7757                   /* Instantiate it if the global has already been used.  */
7758                   if (DECL_ODR_USED (old_decl))
7759                     instantiate_decl (old_decl, /*defer_ok=*/true,
7760                                       /*expl_inst_class_mem_p=*/false);
7761                 }
7762               else
7763                 {
7764                   tree t;
7765
7766                   /* Indicate that the old function template is a partial
7767                      instantiation.  */
7768                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
7769                     = new_friend_result_template_info;
7770
7771                   gcc_assert (new_template
7772                               == most_general_template (new_template));
7773                   gcc_assert (new_template != old_decl);
7774
7775                   /* Reassign any specializations already in the hash table
7776                      to the new more general template, and add the
7777                      additional template args.  */
7778                   for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
7779                        t != NULL_TREE;
7780                        t = TREE_CHAIN (t))
7781                     {
7782                       tree spec = TREE_VALUE (t);
7783                       spec_entry elt;
7784
7785                       elt.tmpl = old_decl;
7786                       elt.args = DECL_TI_ARGS (spec);
7787                       elt.spec = NULL_TREE;
7788
7789                       htab_remove_elt (decl_specializations, &elt);
7790
7791                       DECL_TI_ARGS (spec)
7792                         = add_outermost_template_args (new_args,
7793                                                        DECL_TI_ARGS (spec));
7794
7795                       register_specialization
7796                         (spec, new_template, DECL_TI_ARGS (spec), true, 0);
7797
7798                     }
7799                   DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
7800                 }
7801             }
7802
7803           /* The information from NEW_FRIEND has been merged into OLD_DECL
7804              by duplicate_decls.  */
7805           new_friend = old_decl;
7806         }
7807     }
7808   else
7809     {
7810       tree context = DECL_CONTEXT (new_friend);
7811       bool dependent_p;
7812
7813       /* In the code
7814            template <class T> class C {
7815              template <class U> friend void C1<U>::f (); // case 1
7816              friend void C2<T>::f ();                    // case 2
7817            };
7818          we only need to make sure CONTEXT is a complete type for
7819          case 2.  To distinguish between the two cases, we note that
7820          CONTEXT of case 1 remains dependent type after tsubst while
7821          this isn't true for case 2.  */
7822       ++processing_template_decl;
7823       dependent_p = dependent_type_p (context);
7824       --processing_template_decl;
7825
7826       if (!dependent_p
7827           && !complete_type_or_else (context, NULL_TREE))
7828         return error_mark_node;
7829
7830       if (COMPLETE_TYPE_P (context))
7831         {
7832           /* Check to see that the declaration is really present, and,
7833              possibly obtain an improved declaration.  */
7834           tree fn = check_classfn (context,
7835                                    new_friend, NULL_TREE);
7836
7837           if (fn)
7838             new_friend = fn;
7839         }
7840     }
7841
7842   return new_friend;
7843 }
7844
7845 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
7846    template arguments, as for tsubst.
7847
7848    Returns an appropriate tsubst'd friend type or error_mark_node on
7849    failure.  */
7850
7851 static tree
7852 tsubst_friend_class (tree friend_tmpl, tree args)
7853 {
7854   tree friend_type;
7855   tree tmpl;
7856   tree context;
7857
7858   context = CP_DECL_CONTEXT (friend_tmpl);
7859
7860   if (context != global_namespace)
7861     {
7862       if (TREE_CODE (context) == NAMESPACE_DECL)
7863         push_nested_namespace (context);
7864       else
7865         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
7866     }
7867
7868   /* Look for a class template declaration.  We look for hidden names
7869      because two friend declarations of the same template are the
7870      same.  For example, in:
7871
7872        struct A { 
7873          template <typename> friend class F;
7874        };
7875        template <typename> struct B { 
7876          template <typename> friend class F;
7877        };
7878
7879      both F templates are the same.  */
7880   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
7881                            /*block_p=*/true, 0, 
7882                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
7883
7884   /* But, if we don't find one, it might be because we're in a
7885      situation like this:
7886
7887        template <class T>
7888        struct S {
7889          template <class U>
7890          friend struct S;
7891        };
7892
7893      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
7894      for `S<int>', not the TEMPLATE_DECL.  */
7895   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
7896     {
7897       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
7898       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
7899     }
7900
7901   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
7902     {
7903       /* The friend template has already been declared.  Just
7904          check to see that the declarations match, and install any new
7905          default parameters.  We must tsubst the default parameters,
7906          of course.  We only need the innermost template parameters
7907          because that is all that redeclare_class_template will look
7908          at.  */
7909       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
7910           > TMPL_ARGS_DEPTH (args))
7911         {
7912           tree parms;
7913           location_t saved_input_location;
7914           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
7915                                          args, tf_warning_or_error);
7916
7917           saved_input_location = input_location;
7918           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
7919           redeclare_class_template (TREE_TYPE (tmpl), parms);
7920           input_location = saved_input_location;
7921           
7922         }
7923
7924       friend_type = TREE_TYPE (tmpl);
7925     }
7926   else
7927     {
7928       /* The friend template has not already been declared.  In this
7929          case, the instantiation of the template class will cause the
7930          injection of this template into the global scope.  */
7931       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
7932       if (tmpl == error_mark_node)
7933         return error_mark_node;
7934
7935       /* The new TMPL is not an instantiation of anything, so we
7936          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
7937          the new type because that is supposed to be the corresponding
7938          template decl, i.e., TMPL.  */
7939       DECL_USE_TEMPLATE (tmpl) = 0;
7940       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
7941       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
7942       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
7943         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
7944
7945       /* Inject this template into the global scope.  */
7946       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
7947     }
7948
7949   if (context != global_namespace)
7950     {
7951       if (TREE_CODE (context) == NAMESPACE_DECL)
7952         pop_nested_namespace (context);
7953       else
7954         pop_nested_class ();
7955     }
7956
7957   return friend_type;
7958 }
7959
7960 /* Returns zero if TYPE cannot be completed later due to circularity.
7961    Otherwise returns one.  */
7962
7963 static int
7964 can_complete_type_without_circularity (tree type)
7965 {
7966   if (type == NULL_TREE || type == error_mark_node)
7967     return 0;
7968   else if (COMPLETE_TYPE_P (type))
7969     return 1;
7970   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
7971     return can_complete_type_without_circularity (TREE_TYPE (type));
7972   else if (CLASS_TYPE_P (type)
7973            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
7974     return 0;
7975   else
7976     return 1;
7977 }
7978
7979 /* Apply any attributes which had to be deferred until instantiation
7980    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
7981    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
7982
7983 static void
7984 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
7985                                 tree args, tsubst_flags_t complain, tree in_decl)
7986 {
7987   tree last_dep = NULL_TREE;
7988   tree t;
7989   tree *p;
7990
7991   for (t = attributes; t; t = TREE_CHAIN (t))
7992     if (ATTR_IS_DEPENDENT (t))
7993       {
7994         last_dep = t;
7995         attributes = copy_list (attributes);
7996         break;
7997       }
7998
7999   if (DECL_P (*decl_p))
8000     {
8001       if (TREE_TYPE (*decl_p) == error_mark_node)
8002         return;
8003       p = &DECL_ATTRIBUTES (*decl_p);
8004     }
8005   else
8006     p = &TYPE_ATTRIBUTES (*decl_p);
8007
8008   if (last_dep)
8009     {
8010       tree late_attrs = NULL_TREE;
8011       tree *q = &late_attrs;
8012
8013       for (*p = attributes; *p; )
8014         {
8015           t = *p;
8016           if (ATTR_IS_DEPENDENT (t))
8017             {
8018               *p = TREE_CHAIN (t);
8019               TREE_CHAIN (t) = NULL_TREE;
8020               /* If the first attribute argument is an identifier, don't
8021                  pass it through tsubst.  Attributes like mode, format,
8022                  cleanup and several target specific attributes expect it
8023                  unmodified.  */
8024               if (TREE_VALUE (t)
8025                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
8026                   && TREE_VALUE (TREE_VALUE (t))
8027                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
8028                       == IDENTIFIER_NODE))
8029                 {
8030                   tree chain
8031                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
8032                                    in_decl,
8033                                    /*integral_constant_expression_p=*/false);
8034                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
8035                     TREE_VALUE (t)
8036                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
8037                                    chain);
8038                 }
8039               else
8040                 TREE_VALUE (t)
8041                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
8042                                  /*integral_constant_expression_p=*/false);
8043               *q = t;
8044               q = &TREE_CHAIN (t);
8045             }
8046           else
8047             p = &TREE_CHAIN (t);
8048         }
8049
8050       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
8051     }
8052 }
8053
8054 /* Perform (or defer) access check for typedefs that were referenced
8055    from within the template TMPL code.
8056    This is a subroutine of instantiate_template and instantiate_class_template.
8057    TMPL is the template to consider and TARGS is the list of arguments of
8058    that template.  */
8059
8060 static void
8061 perform_typedefs_access_check (tree tmpl, tree targs)
8062 {
8063   location_t saved_location;
8064   int i;
8065   qualified_typedef_usage_t *iter;
8066
8067   if (!tmpl
8068       || (!CLASS_TYPE_P (tmpl)
8069           && TREE_CODE (tmpl) != FUNCTION_DECL))
8070     return;
8071
8072   saved_location = input_location;
8073   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
8074                     get_types_needing_access_check (tmpl),
8075                     i, iter)
8076     {
8077       tree type_decl = iter->typedef_decl;
8078       tree type_scope = iter->context;
8079
8080       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
8081         continue;
8082
8083       if (uses_template_parms (type_decl))
8084         type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
8085       if (uses_template_parms (type_scope))
8086         type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
8087
8088       /* Make access check error messages point to the location
8089          of the use of the typedef.  */
8090       input_location = iter->locus;
8091       perform_or_defer_access_check (TYPE_BINFO (type_scope),
8092                                      type_decl, type_decl);
8093     }
8094     input_location = saved_location;
8095 }
8096
8097 tree
8098 instantiate_class_template (tree type)
8099 {
8100   tree templ, args, pattern, t, member;
8101   tree typedecl;
8102   tree pbinfo;
8103   tree base_list;
8104   unsigned int saved_maximum_field_alignment;
8105
8106   if (type == error_mark_node)
8107     return error_mark_node;
8108
8109   if (COMPLETE_OR_OPEN_TYPE_P (type)
8110       || uses_template_parms (type))
8111     return type;
8112
8113   /* Figure out which template is being instantiated.  */
8114   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
8115   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8116
8117   /* Determine what specialization of the original template to
8118      instantiate.  */
8119   t = most_specialized_class (type, templ, tf_warning_or_error);
8120   if (t == error_mark_node)
8121     {
8122       TYPE_BEING_DEFINED (type) = 1;
8123       return error_mark_node;
8124     }
8125   else if (t)
8126     {
8127       /* This TYPE is actually an instantiation of a partial
8128          specialization.  We replace the innermost set of ARGS with
8129          the arguments appropriate for substitution.  For example,
8130          given:
8131
8132            template <class T> struct S {};
8133            template <class T> struct S<T*> {};
8134
8135          and supposing that we are instantiating S<int*>, ARGS will
8136          presently be {int*} -- but we need {int}.  */
8137       pattern = TREE_TYPE (t);
8138       args = TREE_PURPOSE (t);
8139     }
8140   else
8141     {
8142       pattern = TREE_TYPE (templ);
8143       args = CLASSTYPE_TI_ARGS (type);
8144     }
8145
8146   /* If the template we're instantiating is incomplete, then clearly
8147      there's nothing we can do.  */
8148   if (!COMPLETE_TYPE_P (pattern))
8149     return type;
8150
8151   /* If we've recursively instantiated too many templates, stop.  */
8152   if (! push_tinst_level (type))
8153     return type;
8154
8155   /* Now we're really doing the instantiation.  Mark the type as in
8156      the process of being defined.  */
8157   TYPE_BEING_DEFINED (type) = 1;
8158
8159   /* We may be in the middle of deferred access check.  Disable
8160      it now.  */
8161   push_deferring_access_checks (dk_no_deferred);
8162
8163   push_to_top_level ();
8164   /* Use #pragma pack from the template context.  */
8165   saved_maximum_field_alignment = maximum_field_alignment;
8166   maximum_field_alignment = TYPE_PRECISION (pattern);
8167
8168   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8169
8170   /* Set the input location to the most specialized template definition.
8171      This is needed if tsubsting causes an error.  */
8172   typedecl = TYPE_MAIN_DECL (pattern);
8173   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
8174     DECL_SOURCE_LOCATION (typedecl);
8175
8176   TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern);
8177   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
8178   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
8179   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
8180   TYPE_HAS_COPY_ASSIGN (type) = TYPE_HAS_COPY_ASSIGN (pattern);
8181   TYPE_HAS_CONST_COPY_ASSIGN (type) = TYPE_HAS_CONST_COPY_ASSIGN (pattern);
8182   TYPE_HAS_COPY_CTOR (type) = TYPE_HAS_COPY_CTOR (pattern);
8183   TYPE_HAS_CONST_COPY_CTOR (type) = TYPE_HAS_CONST_COPY_CTOR (pattern);
8184   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
8185   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
8186   TYPE_PACKED (type) = TYPE_PACKED (pattern);
8187   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
8188   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
8189   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
8190   if (ANON_AGGR_TYPE_P (pattern))
8191     SET_ANON_AGGR_TYPE_P (type);
8192   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
8193     {
8194       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
8195       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
8196     }
8197
8198   pbinfo = TYPE_BINFO (pattern);
8199
8200   /* We should never instantiate a nested class before its enclosing
8201      class; we need to look up the nested class by name before we can
8202      instantiate it, and that lookup should instantiate the enclosing
8203      class.  */
8204   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
8205               || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
8206
8207   base_list = NULL_TREE;
8208   if (BINFO_N_BASE_BINFOS (pbinfo))
8209     {
8210       tree pbase_binfo;
8211       tree pushed_scope;
8212       int i;
8213
8214       /* We must enter the scope containing the type, as that is where
8215          the accessibility of types named in dependent bases are
8216          looked up from.  */
8217       pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
8218
8219       /* Substitute into each of the bases to determine the actual
8220          basetypes.  */
8221       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
8222         {
8223           tree base;
8224           tree access = BINFO_BASE_ACCESS (pbinfo, i);
8225           tree expanded_bases = NULL_TREE;
8226           int idx, len = 1;
8227
8228           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
8229             {
8230               expanded_bases = 
8231                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
8232                                        args, tf_error, NULL_TREE);
8233               if (expanded_bases == error_mark_node)
8234                 continue;
8235
8236               len = TREE_VEC_LENGTH (expanded_bases);
8237             }
8238
8239           for (idx = 0; idx < len; idx++)
8240             {
8241               if (expanded_bases)
8242                 /* Extract the already-expanded base class.  */
8243                 base = TREE_VEC_ELT (expanded_bases, idx);
8244               else
8245                 /* Substitute to figure out the base class.  */
8246                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
8247                                NULL_TREE);
8248
8249               if (base == error_mark_node)
8250                 continue;
8251
8252               base_list = tree_cons (access, base, base_list);
8253               if (BINFO_VIRTUAL_P (pbase_binfo))
8254                 TREE_TYPE (base_list) = integer_type_node;
8255             }
8256         }
8257
8258       /* The list is now in reverse order; correct that.  */
8259       base_list = nreverse (base_list);
8260
8261       if (pushed_scope)
8262         pop_scope (pushed_scope);
8263     }
8264   /* Now call xref_basetypes to set up all the base-class
8265      information.  */
8266   xref_basetypes (type, base_list);
8267
8268   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
8269                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
8270                                   args, tf_error, NULL_TREE);
8271   fixup_attribute_variants (type);
8272
8273   /* Now that our base classes are set up, enter the scope of the
8274      class, so that name lookups into base classes, etc. will work
8275      correctly.  This is precisely analogous to what we do in
8276      begin_class_definition when defining an ordinary non-template
8277      class, except we also need to push the enclosing classes.  */
8278   push_nested_class (type);
8279
8280   /* Now members are processed in the order of declaration.  */
8281   for (member = CLASSTYPE_DECL_LIST (pattern);
8282        member; member = TREE_CHAIN (member))
8283     {
8284       tree t = TREE_VALUE (member);
8285
8286       if (TREE_PURPOSE (member))
8287         {
8288           if (TYPE_P (t))
8289             {
8290               /* Build new CLASSTYPE_NESTED_UTDS.  */
8291
8292               tree newtag;
8293               bool class_template_p;
8294
8295               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
8296                                   && TYPE_LANG_SPECIFIC (t)
8297                                   && CLASSTYPE_IS_TEMPLATE (t));
8298               /* If the member is a class template, then -- even after
8299                  substitution -- there may be dependent types in the
8300                  template argument list for the class.  We increment
8301                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
8302                  that function will assume that no types are dependent
8303                  when outside of a template.  */
8304               if (class_template_p)
8305                 ++processing_template_decl;
8306               newtag = tsubst (t, args, tf_error, NULL_TREE);
8307               if (class_template_p)
8308                 --processing_template_decl;
8309               if (newtag == error_mark_node)
8310                 continue;
8311
8312               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
8313                 {
8314                   tree name = TYPE_IDENTIFIER (t);
8315
8316                   if (class_template_p)
8317                     /* Unfortunately, lookup_template_class sets
8318                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
8319                        instantiation (i.e., for the type of a member
8320                        template class nested within a template class.)
8321                        This behavior is required for
8322                        maybe_process_partial_specialization to work
8323                        correctly, but is not accurate in this case;
8324                        the TAG is not an instantiation of anything.
8325                        (The corresponding TEMPLATE_DECL is an
8326                        instantiation, but the TYPE is not.) */
8327                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
8328
8329                   /* Now, we call pushtag to put this NEWTAG into the scope of
8330                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
8331                      pushtag calling push_template_decl.  We don't have to do
8332                      this for enums because it will already have been done in
8333                      tsubst_enum.  */
8334                   if (name)
8335                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
8336                   pushtag (name, newtag, /*tag_scope=*/ts_current);
8337                 }
8338             }
8339           else if (TREE_CODE (t) == FUNCTION_DECL
8340                    || DECL_FUNCTION_TEMPLATE_P (t))
8341             {
8342               /* Build new TYPE_METHODS.  */
8343               tree r;
8344
8345               if (TREE_CODE (t) == TEMPLATE_DECL)
8346                 ++processing_template_decl;
8347               r = tsubst (t, args, tf_error, NULL_TREE);
8348               if (TREE_CODE (t) == TEMPLATE_DECL)
8349                 --processing_template_decl;
8350               set_current_access_from_decl (r);
8351               finish_member_declaration (r);
8352             }
8353           else
8354             {
8355               /* Build new TYPE_FIELDS.  */
8356               if (TREE_CODE (t) == STATIC_ASSERT)
8357                 {
8358                   tree condition = 
8359                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
8360                                  tf_warning_or_error, NULL_TREE,
8361                                  /*integral_constant_expression_p=*/true);
8362                   finish_static_assert (condition,
8363                                         STATIC_ASSERT_MESSAGE (t), 
8364                                         STATIC_ASSERT_SOURCE_LOCATION (t),
8365                                         /*member_p=*/true);
8366                 }
8367               else if (TREE_CODE (t) != CONST_DECL)
8368                 {
8369                   tree r;
8370
8371                   /* The file and line for this declaration, to
8372                      assist in error message reporting.  Since we
8373                      called push_tinst_level above, we don't need to
8374                      restore these.  */
8375                   input_location = DECL_SOURCE_LOCATION (t);
8376
8377                   if (TREE_CODE (t) == TEMPLATE_DECL)
8378                     ++processing_template_decl;
8379                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
8380                   if (TREE_CODE (t) == TEMPLATE_DECL)
8381                     --processing_template_decl;
8382                   if (TREE_CODE (r) == VAR_DECL)
8383                     {
8384                       /* In [temp.inst]:
8385
8386                            [t]he initialization (and any associated
8387                            side-effects) of a static data member does
8388                            not occur unless the static data member is
8389                            itself used in a way that requires the
8390                            definition of the static data member to
8391                            exist.
8392
8393                          Therefore, we do not substitute into the
8394                          initialized for the static data member here.  */
8395                       finish_static_data_member_decl
8396                         (r,
8397                          /*init=*/NULL_TREE,
8398                          /*init_const_expr_p=*/false,
8399                          /*asmspec_tree=*/NULL_TREE,
8400                          /*flags=*/0);
8401                       if (DECL_INITIALIZED_IN_CLASS_P (r))
8402                         check_static_variable_definition (r, TREE_TYPE (r));
8403                     }
8404                   else if (TREE_CODE (r) == FIELD_DECL)
8405                     {
8406                       /* Determine whether R has a valid type and can be
8407                          completed later.  If R is invalid, then it is
8408                          replaced by error_mark_node so that it will not be
8409                          added to TYPE_FIELDS.  */
8410                       tree rtype = TREE_TYPE (r);
8411                       if (can_complete_type_without_circularity (rtype))
8412                         complete_type (rtype);
8413
8414                       if (!COMPLETE_TYPE_P (rtype))
8415                         {
8416                           cxx_incomplete_type_error (r, rtype);
8417                           r = error_mark_node;
8418                         }
8419                     }
8420
8421                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
8422                      such a thing will already have been added to the field
8423                      list by tsubst_enum in finish_member_declaration in the
8424                      CLASSTYPE_NESTED_UTDS case above.  */
8425                   if (!(TREE_CODE (r) == TYPE_DECL
8426                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
8427                         && DECL_ARTIFICIAL (r)))
8428                     {
8429                       set_current_access_from_decl (r);
8430                       finish_member_declaration (r);
8431                     }
8432                 }
8433             }
8434         }
8435       else
8436         {
8437           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
8438             {
8439               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
8440
8441               tree friend_type = t;
8442               bool adjust_processing_template_decl = false;
8443
8444               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8445                 {
8446                   /* template <class T> friend class C;  */
8447                   friend_type = tsubst_friend_class (friend_type, args);
8448                   adjust_processing_template_decl = true;
8449                 }
8450               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
8451                 {
8452                   /* template <class T> friend class C::D;  */
8453                   friend_type = tsubst (friend_type, args,
8454                                         tf_warning_or_error, NULL_TREE);
8455                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8456                     friend_type = TREE_TYPE (friend_type);
8457                   adjust_processing_template_decl = true;
8458                 }
8459               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
8460                 {
8461                   /* This could be either
8462
8463                        friend class T::C;
8464
8465                      when dependent_type_p is false or
8466
8467                        template <class U> friend class T::C;
8468
8469                      otherwise.  */
8470                   friend_type = tsubst (friend_type, args,
8471                                         tf_warning_or_error, NULL_TREE);
8472                   /* Bump processing_template_decl for correct
8473                      dependent_type_p calculation.  */
8474                   ++processing_template_decl;
8475                   if (dependent_type_p (friend_type))
8476                     adjust_processing_template_decl = true;
8477                   --processing_template_decl;
8478                 }
8479               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
8480                        && hidden_name_p (TYPE_NAME (friend_type)))
8481                 {
8482                   /* friend class C;
8483
8484                      where C hasn't been declared yet.  Let's lookup name
8485                      from namespace scope directly, bypassing any name that
8486                      come from dependent base class.  */
8487                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
8488
8489                   /* The call to xref_tag_from_type does injection for friend
8490                      classes.  */
8491                   push_nested_namespace (ns);
8492                   friend_type =
8493                     xref_tag_from_type (friend_type, NULL_TREE,
8494                                         /*tag_scope=*/ts_current);
8495                   pop_nested_namespace (ns);
8496                 }
8497               else if (uses_template_parms (friend_type))
8498                 /* friend class C<T>;  */
8499                 friend_type = tsubst (friend_type, args,
8500                                       tf_warning_or_error, NULL_TREE);
8501               /* Otherwise it's
8502
8503                    friend class C;
8504
8505                  where C is already declared or
8506
8507                    friend class C<int>;
8508
8509                  We don't have to do anything in these cases.  */
8510
8511               if (adjust_processing_template_decl)
8512                 /* Trick make_friend_class into realizing that the friend
8513                    we're adding is a template, not an ordinary class.  It's
8514                    important that we use make_friend_class since it will
8515                    perform some error-checking and output cross-reference
8516                    information.  */
8517                 ++processing_template_decl;
8518
8519               if (friend_type != error_mark_node)
8520                 make_friend_class (type, friend_type, /*complain=*/false);
8521
8522               if (adjust_processing_template_decl)
8523                 --processing_template_decl;
8524             }
8525           else
8526             {
8527               /* Build new DECL_FRIENDLIST.  */
8528               tree r;
8529
8530               /* The file and line for this declaration, to
8531                  assist in error message reporting.  Since we
8532                  called push_tinst_level above, we don't need to
8533                  restore these.  */
8534               input_location = DECL_SOURCE_LOCATION (t);
8535
8536               if (TREE_CODE (t) == TEMPLATE_DECL)
8537                 {
8538                   ++processing_template_decl;
8539                   push_deferring_access_checks (dk_no_check);
8540                 }
8541
8542               r = tsubst_friend_function (t, args);
8543               add_friend (type, r, /*complain=*/false);
8544               if (TREE_CODE (t) == TEMPLATE_DECL)
8545                 {
8546                   pop_deferring_access_checks ();
8547                   --processing_template_decl;
8548                 }
8549             }
8550         }
8551     }
8552
8553   /* Set the file and line number information to whatever is given for
8554      the class itself.  This puts error messages involving generated
8555      implicit functions at a predictable point, and the same point
8556      that would be used for non-template classes.  */
8557   input_location = DECL_SOURCE_LOCATION (typedecl);
8558
8559   unreverse_member_declarations (type);
8560   finish_struct_1 (type);
8561   TYPE_BEING_DEFINED (type) = 0;
8562
8563   /* We don't instantiate default arguments for member functions.  14.7.1:
8564
8565      The implicit instantiation of a class template specialization causes
8566      the implicit instantiation of the declarations, but not of the
8567      definitions or default arguments, of the class member functions,
8568      member classes, static data members and member templates....  */
8569
8570   /* Some typedefs referenced from within the template code need to be access
8571      checked at template instantiation time, i.e now. These types were
8572      added to the template at parsing time. Let's get those and perform
8573      the access checks then.  */
8574   perform_typedefs_access_check (pattern, args);
8575   perform_deferred_access_checks ();
8576   pop_nested_class ();
8577   maximum_field_alignment = saved_maximum_field_alignment;
8578   pop_from_top_level ();
8579   pop_deferring_access_checks ();
8580   pop_tinst_level ();
8581
8582   /* The vtable for a template class can be emitted in any translation
8583      unit in which the class is instantiated.  When there is no key
8584      method, however, finish_struct_1 will already have added TYPE to
8585      the keyed_classes list.  */
8586   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
8587     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
8588
8589   return type;
8590 }
8591
8592 static tree
8593 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8594 {
8595   tree r;
8596
8597   if (!t)
8598     r = t;
8599   else if (TYPE_P (t))
8600     r = tsubst (t, args, complain, in_decl);
8601   else
8602     {
8603       if (!(complain & tf_warning))
8604         ++c_inhibit_evaluation_warnings;
8605       r = tsubst_expr (t, args, complain, in_decl,
8606                        /*integral_constant_expression_p=*/true);
8607       if (!(complain & tf_warning))
8608         --c_inhibit_evaluation_warnings;
8609     }
8610   return r;
8611 }
8612
8613 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
8614    NONTYPE_ARGUMENT_PACK.  */
8615
8616 static tree
8617 make_fnparm_pack (tree spec_parm)
8618 {
8619   /* Collect all of the extra "packed" parameters into an
8620      argument pack.  */
8621   tree parmvec;
8622   tree parmtypevec;
8623   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
8624   tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
8625   int i, len = list_length (spec_parm);
8626
8627   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
8628   parmvec = make_tree_vec (len);
8629   parmtypevec = make_tree_vec (len);
8630   for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
8631     {
8632       TREE_VEC_ELT (parmvec, i) = spec_parm;
8633       TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
8634     }
8635
8636   /* Build the argument packs.  */
8637   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
8638   SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
8639   TREE_TYPE (argpack) = argtypepack;
8640
8641   return argpack;
8642 }        
8643
8644 /* Substitute ARGS into T, which is an pack expansion
8645    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
8646    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
8647    (if only a partial substitution could be performed) or
8648    ERROR_MARK_NODE if there was an error.  */
8649 tree
8650 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
8651                        tree in_decl)
8652 {
8653   tree pattern;
8654   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
8655   int i, len = -1;
8656   tree result;
8657   int incomplete = 0;
8658   htab_t saved_local_specializations = NULL;
8659
8660   gcc_assert (PACK_EXPANSION_P (t));
8661   pattern = PACK_EXPANSION_PATTERN (t);
8662
8663   /* Determine the argument packs that will instantiate the parameter
8664      packs used in the expansion expression. While we're at it,
8665      compute the number of arguments to be expanded and make sure it
8666      is consistent.  */
8667   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
8668        pack = TREE_CHAIN (pack))
8669     {
8670       tree parm_pack = TREE_VALUE (pack);
8671       tree arg_pack = NULL_TREE;
8672       tree orig_arg = NULL_TREE;
8673
8674       if (TREE_CODE (parm_pack) == PARM_DECL)
8675         {
8676           if (!cp_unevaluated_operand)
8677             arg_pack = retrieve_local_specialization (parm_pack);
8678           else
8679             {
8680               /* We can't rely on local_specializations for a parameter
8681                  name used later in a function declaration (such as in a
8682                  late-specified return type).  Even if it exists, it might
8683                  have the wrong value for a recursive call.  Just make a
8684                  dummy decl, since it's only used for its type.  */
8685               arg_pack = tsubst_decl (parm_pack, args, complain);
8686               arg_pack = make_fnparm_pack (arg_pack);
8687             }
8688         }
8689       else
8690         {
8691           int level, idx, levels;
8692           template_parm_level_and_index (parm_pack, &level, &idx);
8693
8694           levels = TMPL_ARGS_DEPTH (args);
8695           if (level <= levels)
8696             arg_pack = TMPL_ARG (args, level, idx);
8697         }
8698
8699       orig_arg = arg_pack;
8700       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
8701         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
8702       
8703       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
8704         /* This can only happen if we forget to expand an argument
8705            pack somewhere else. Just return an error, silently.  */
8706         {
8707           result = make_tree_vec (1);
8708           TREE_VEC_ELT (result, 0) = error_mark_node;
8709           return result;
8710         }
8711
8712       if (arg_pack
8713           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
8714           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
8715         {
8716           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
8717           tree pattern = PACK_EXPANSION_PATTERN (expansion);
8718           if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack))
8719               || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern)))
8720             /* The argument pack that the parameter maps to is just an
8721                expansion of the parameter itself, such as one would
8722                find in the implicit typedef of a class inside the
8723                class itself.  Consider this parameter "unsubstituted",
8724                so that we will maintain the outer pack expansion.  */
8725             arg_pack = NULL_TREE;
8726         }
8727           
8728       if (arg_pack)
8729         {
8730           int my_len = 
8731             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
8732
8733           /* It's all-or-nothing with incomplete argument packs.  */
8734           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
8735             return error_mark_node;
8736           
8737           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
8738             incomplete = 1;
8739
8740           if (len < 0)
8741             len = my_len;
8742           else if (len != my_len)
8743             {
8744               if (incomplete)
8745                 /* We got explicit args for some packs but not others;
8746                    do nothing now and try again after deduction.  */
8747                 return t;
8748               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
8749                 error ("mismatched argument pack lengths while expanding "
8750                        "%<%T%>",
8751                        pattern);
8752               else
8753                 error ("mismatched argument pack lengths while expanding "
8754                        "%<%E%>",
8755                        pattern);
8756               return error_mark_node;
8757             }
8758
8759           /* Keep track of the parameter packs and their corresponding
8760              argument packs.  */
8761           packs = tree_cons (parm_pack, arg_pack, packs);
8762           TREE_TYPE (packs) = orig_arg;
8763         }
8764       else
8765         /* We can't substitute for this parameter pack.  */
8766         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
8767                                          TREE_VALUE (pack),
8768                                          unsubstituted_packs);
8769     }
8770
8771   /* We cannot expand this expansion expression, because we don't have
8772      all of the argument packs we need. Substitute into the pattern
8773      and return a PACK_EXPANSION_*. The caller will need to deal with
8774      that.  */
8775   if (unsubstituted_packs)
8776     {
8777       tree new_pat;
8778       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
8779         new_pat = tsubst_expr (pattern, args, complain, in_decl,
8780                                /*integral_constant_expression_p=*/false);
8781       else
8782         new_pat = tsubst (pattern, args, complain, in_decl);
8783       return make_pack_expansion (new_pat);
8784     }
8785
8786   /* We could not find any argument packs that work.  */
8787   if (len < 0)
8788     return error_mark_node;
8789
8790   if (cp_unevaluated_operand)
8791     {
8792       /* We're in a late-specified return type, so create our own local
8793          specializations table; the current table is either NULL or (in the
8794          case of recursive unification) might have bindings that we don't
8795          want to use or alter.  */
8796       saved_local_specializations = local_specializations;
8797       local_specializations = htab_create (37,
8798                                            hash_local_specialization,
8799                                            eq_local_specializations,
8800                                            NULL);
8801     }
8802
8803   /* For each argument in each argument pack, substitute into the
8804      pattern.  */
8805   result = make_tree_vec (len + incomplete);
8806   for (i = 0; i < len + incomplete; ++i)
8807     {
8808       /* For parameter pack, change the substitution of the parameter
8809          pack to the ith argument in its argument pack, then expand
8810          the pattern.  */
8811       for (pack = packs; pack; pack = TREE_CHAIN (pack))
8812         {
8813           tree parm = TREE_PURPOSE (pack);
8814
8815           if (TREE_CODE (parm) == PARM_DECL)
8816             {
8817               /* Select the Ith argument from the pack.  */
8818               tree arg = make_node (ARGUMENT_PACK_SELECT);
8819               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
8820               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
8821               mark_used (parm);
8822               register_local_specialization (arg, parm);
8823             }
8824           else
8825             {
8826               tree value = parm;
8827               int idx, level;
8828               template_parm_level_and_index (parm, &level, &idx);
8829               
8830               if (i < len) 
8831                 {
8832                   /* Select the Ith argument from the pack. */
8833                   value = make_node (ARGUMENT_PACK_SELECT);
8834                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
8835                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
8836                 }
8837
8838               /* Update the corresponding argument.  */
8839               TMPL_ARG (args, level, idx) = value;
8840             }
8841         }
8842
8843       /* Substitute into the PATTERN with the altered arguments.  */
8844       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
8845         TREE_VEC_ELT (result, i) = 
8846           tsubst_expr (pattern, args, complain, in_decl,
8847                        /*integral_constant_expression_p=*/false);
8848       else
8849         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
8850
8851       if (i == len)
8852         /* When we have incomplete argument packs, the last "expanded"
8853            result is itself a pack expansion, which allows us
8854            to deduce more arguments.  */
8855         TREE_VEC_ELT (result, i) = 
8856           make_pack_expansion (TREE_VEC_ELT (result, i));
8857
8858       if (TREE_VEC_ELT (result, i) == error_mark_node)
8859         {
8860           result = error_mark_node;
8861           break;
8862         }
8863     }
8864
8865   /* Update ARGS to restore the substitution from parameter packs to
8866      their argument packs.  */
8867   for (pack = packs; pack; pack = TREE_CHAIN (pack))
8868     {
8869       tree parm = TREE_PURPOSE (pack);
8870
8871       if (TREE_CODE (parm) == PARM_DECL)
8872         register_local_specialization (TREE_TYPE (pack), parm);
8873       else
8874         {
8875           int idx, level;
8876           template_parm_level_and_index (parm, &level, &idx);
8877           
8878           /* Update the corresponding argument.  */
8879           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
8880             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
8881               TREE_TYPE (pack);
8882           else
8883             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
8884         }
8885     }
8886
8887   if (saved_local_specializations)
8888     {
8889       htab_delete (local_specializations);
8890       local_specializations = saved_local_specializations;
8891     }
8892   
8893   return result;
8894 }
8895
8896 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
8897    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
8898    parameter packs; all parms generated from a function parameter pack will
8899    have the same DECL_PARM_INDEX.  */
8900
8901 tree
8902 get_pattern_parm (tree parm, tree tmpl)
8903 {
8904   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
8905   tree patparm;
8906
8907   if (DECL_ARTIFICIAL (parm))
8908     {
8909       for (patparm = DECL_ARGUMENTS (pattern);
8910            patparm; patparm = DECL_CHAIN (patparm))
8911         if (DECL_ARTIFICIAL (patparm)
8912             && DECL_NAME (parm) == DECL_NAME (patparm))
8913           break;
8914     }
8915   else
8916     {
8917       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
8918       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
8919       gcc_assert (DECL_PARM_INDEX (patparm)
8920                   == DECL_PARM_INDEX (parm));
8921     }
8922
8923   return patparm;
8924 }
8925
8926 /* Substitute ARGS into the vector or list of template arguments T.  */
8927
8928 static tree
8929 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8930 {
8931   tree orig_t = t;
8932   int len = TREE_VEC_LENGTH (t);
8933   int need_new = 0, i, expanded_len_adjust = 0, out;
8934   tree *elts = XALLOCAVEC (tree, len);
8935
8936   for (i = 0; i < len; i++)
8937     {
8938       tree orig_arg = TREE_VEC_ELT (t, i);
8939       tree new_arg;
8940
8941       if (TREE_CODE (orig_arg) == TREE_VEC)
8942         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
8943       else if (PACK_EXPANSION_P (orig_arg))
8944         {
8945           /* Substitute into an expansion expression.  */
8946           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
8947
8948           if (TREE_CODE (new_arg) == TREE_VEC)
8949             /* Add to the expanded length adjustment the number of
8950                expanded arguments. We subtract one from this
8951                measurement, because the argument pack expression
8952                itself is already counted as 1 in
8953                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
8954                the argument pack is empty.  */
8955             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
8956         }
8957       else if (ARGUMENT_PACK_P (orig_arg))
8958         {
8959           /* Substitute into each of the arguments.  */
8960           new_arg = TYPE_P (orig_arg)
8961             ? cxx_make_type (TREE_CODE (orig_arg))
8962             : make_node (TREE_CODE (orig_arg));
8963           
8964           SET_ARGUMENT_PACK_ARGS (
8965             new_arg,
8966             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
8967                                   args, complain, in_decl));
8968
8969           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
8970             new_arg = error_mark_node;
8971
8972           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
8973             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
8974                                           complain, in_decl);
8975             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
8976
8977             if (TREE_TYPE (new_arg) == error_mark_node)
8978               new_arg = error_mark_node;
8979           }
8980         }
8981       else
8982         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
8983
8984       if (new_arg == error_mark_node)
8985         return error_mark_node;
8986
8987       elts[i] = new_arg;
8988       if (new_arg != orig_arg)
8989         need_new = 1;
8990     }
8991
8992   if (!need_new)
8993     return t;
8994
8995   /* Make space for the expanded arguments coming from template
8996      argument packs.  */
8997   t = make_tree_vec (len + expanded_len_adjust);
8998   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
8999      arguments for a member template.
9000      In that case each TREE_VEC in ORIG_T represents a level of template
9001      arguments, and ORIG_T won't carry any non defaulted argument count.
9002      It will rather be the nested TREE_VECs that will carry one.
9003      In other words, ORIG_T carries a non defaulted argument count only
9004      if it doesn't contain any nested TREE_VEC.  */
9005   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
9006     {
9007       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
9008       count += expanded_len_adjust;
9009       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
9010     }
9011   for (i = 0, out = 0; i < len; i++)
9012     {
9013       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
9014            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
9015           && TREE_CODE (elts[i]) == TREE_VEC)
9016         {
9017           int idx;
9018
9019           /* Now expand the template argument pack "in place".  */
9020           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
9021             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
9022         }
9023       else
9024         {
9025           TREE_VEC_ELT (t, out) = elts[i];
9026           out++;
9027         }
9028     }
9029
9030   return t;
9031 }
9032
9033 /* Return the result of substituting ARGS into the template parameters
9034    given by PARMS.  If there are m levels of ARGS and m + n levels of
9035    PARMS, then the result will contain n levels of PARMS.  For
9036    example, if PARMS is `template <class T> template <class U>
9037    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
9038    result will be `template <int*, double, class V>'.  */
9039
9040 static tree
9041 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
9042 {
9043   tree r = NULL_TREE;
9044   tree* new_parms;
9045
9046   /* When substituting into a template, we must set
9047      PROCESSING_TEMPLATE_DECL as the template parameters may be
9048      dependent if they are based on one-another, and the dependency
9049      predicates are short-circuit outside of templates.  */
9050   ++processing_template_decl;
9051
9052   for (new_parms = &r;
9053        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
9054        new_parms = &(TREE_CHAIN (*new_parms)),
9055          parms = TREE_CHAIN (parms))
9056     {
9057       tree new_vec =
9058         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
9059       int i;
9060
9061       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
9062         {
9063           tree tuple;
9064
9065           if (parms == error_mark_node)
9066             continue;
9067
9068           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
9069
9070           if (tuple == error_mark_node)
9071             continue;
9072
9073           TREE_VEC_ELT (new_vec, i) =
9074             tsubst_template_parm (tuple, args, complain);
9075         }
9076
9077       *new_parms =
9078         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
9079                              - TMPL_ARGS_DEPTH (args)),
9080                    new_vec, NULL_TREE);
9081     }
9082
9083   --processing_template_decl;
9084
9085   return r;
9086 }
9087
9088 /* Return the result of substituting ARGS into one template parameter
9089    given by T. T Must be a TREE_LIST which TREE_VALUE is the template
9090    parameter and which TREE_PURPOSE is the default argument of the
9091    template parameter.  */
9092
9093 static tree
9094 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
9095 {
9096   tree default_value, parm_decl;
9097
9098   if (args == NULL_TREE
9099       || t == NULL_TREE
9100       || t == error_mark_node)
9101     return t;
9102
9103   gcc_assert (TREE_CODE (t) == TREE_LIST);
9104
9105   default_value = TREE_PURPOSE (t);
9106   parm_decl = TREE_VALUE (t);
9107
9108   parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
9109   if (TREE_CODE (parm_decl) == PARM_DECL
9110       && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
9111     parm_decl = error_mark_node;
9112   default_value = tsubst_template_arg (default_value, args,
9113                                        complain, NULL_TREE);
9114
9115   return build_tree_list (default_value, parm_decl);
9116 }
9117
9118 /* Substitute the ARGS into the indicated aggregate (or enumeration)
9119    type T.  If T is not an aggregate or enumeration type, it is
9120    handled as if by tsubst.  IN_DECL is as for tsubst.  If
9121    ENTERING_SCOPE is nonzero, T is the context for a template which
9122    we are presently tsubst'ing.  Return the substituted value.  */
9123
9124 static tree
9125 tsubst_aggr_type (tree t,
9126                   tree args,
9127                   tsubst_flags_t complain,
9128                   tree in_decl,
9129                   int entering_scope)
9130 {
9131   if (t == NULL_TREE)
9132     return NULL_TREE;
9133
9134   switch (TREE_CODE (t))
9135     {
9136     case RECORD_TYPE:
9137       if (TYPE_PTRMEMFUNC_P (t))
9138         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
9139
9140       /* Else fall through.  */
9141     case ENUMERAL_TYPE:
9142     case UNION_TYPE:
9143       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
9144         {
9145           tree argvec;
9146           tree context;
9147           tree r;
9148           int saved_unevaluated_operand;
9149           int saved_inhibit_evaluation_warnings;
9150
9151           /* In "sizeof(X<I>)" we need to evaluate "I".  */
9152           saved_unevaluated_operand = cp_unevaluated_operand;
9153           cp_unevaluated_operand = 0;
9154           saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
9155           c_inhibit_evaluation_warnings = 0;
9156
9157           /* First, determine the context for the type we are looking
9158              up.  */
9159           context = TYPE_CONTEXT (t);
9160           if (context)
9161             {
9162               context = tsubst_aggr_type (context, args, complain,
9163                                           in_decl, /*entering_scope=*/1);
9164               /* If context is a nested class inside a class template,
9165                  it may still need to be instantiated (c++/33959).  */
9166               if (TYPE_P (context))
9167                 context = complete_type (context);
9168             }
9169
9170           /* Then, figure out what arguments are appropriate for the
9171              type we are trying to find.  For example, given:
9172
9173                template <class T> struct S;
9174                template <class T, class U> void f(T, U) { S<U> su; }
9175
9176              and supposing that we are instantiating f<int, double>,
9177              then our ARGS will be {int, double}, but, when looking up
9178              S we only want {double}.  */
9179           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
9180                                          complain, in_decl);
9181           if (argvec == error_mark_node)
9182             r = error_mark_node;
9183           else
9184             {
9185               r = lookup_template_class (t, argvec, in_decl, context,
9186                                          entering_scope, complain);
9187               r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
9188             }
9189
9190           cp_unevaluated_operand = saved_unevaluated_operand;
9191           c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
9192
9193           return r;
9194         }
9195       else
9196         /* This is not a template type, so there's nothing to do.  */
9197         return t;
9198
9199     default:
9200       return tsubst (t, args, complain, in_decl);
9201     }
9202 }
9203
9204 /* Substitute into the default argument ARG (a default argument for
9205    FN), which has the indicated TYPE.  */
9206
9207 tree
9208 tsubst_default_argument (tree fn, tree type, tree arg)
9209 {
9210   tree saved_class_ptr = NULL_TREE;
9211   tree saved_class_ref = NULL_TREE;
9212
9213   /* This can happen in invalid code.  */
9214   if (TREE_CODE (arg) == DEFAULT_ARG)
9215     return arg;
9216
9217   /* This default argument came from a template.  Instantiate the
9218      default argument here, not in tsubst.  In the case of
9219      something like:
9220
9221        template <class T>
9222        struct S {
9223          static T t();
9224          void f(T = t());
9225        };
9226
9227      we must be careful to do name lookup in the scope of S<T>,
9228      rather than in the current class.  */
9229   push_access_scope (fn);
9230   /* The "this" pointer is not valid in a default argument.  */
9231   if (cfun)
9232     {
9233       saved_class_ptr = current_class_ptr;
9234       cp_function_chain->x_current_class_ptr = NULL_TREE;
9235       saved_class_ref = current_class_ref;
9236       cp_function_chain->x_current_class_ref = NULL_TREE;
9237     }
9238
9239   push_deferring_access_checks(dk_no_deferred);
9240   /* The default argument expression may cause implicitly defined
9241      member functions to be synthesized, which will result in garbage
9242      collection.  We must treat this situation as if we were within
9243      the body of function so as to avoid collecting live data on the
9244      stack.  */
9245   ++function_depth;
9246   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
9247                      tf_warning_or_error, NULL_TREE,
9248                      /*integral_constant_expression_p=*/false);
9249   --function_depth;
9250   pop_deferring_access_checks();
9251
9252   /* Restore the "this" pointer.  */
9253   if (cfun)
9254     {
9255       cp_function_chain->x_current_class_ptr = saved_class_ptr;
9256       cp_function_chain->x_current_class_ref = saved_class_ref;
9257     }
9258
9259   /* Make sure the default argument is reasonable.  */
9260   arg = check_default_argument (type, arg);
9261
9262   pop_access_scope (fn);
9263
9264   return arg;
9265 }
9266
9267 /* Substitute into all the default arguments for FN.  */
9268
9269 static void
9270 tsubst_default_arguments (tree fn)
9271 {
9272   tree arg;
9273   tree tmpl_args;
9274
9275   tmpl_args = DECL_TI_ARGS (fn);
9276
9277   /* If this function is not yet instantiated, we certainly don't need
9278      its default arguments.  */
9279   if (uses_template_parms (tmpl_args))
9280     return;
9281   /* Don't do this again for clones.  */
9282   if (DECL_CLONED_FUNCTION_P (fn))
9283     return;
9284
9285   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
9286        arg;
9287        arg = TREE_CHAIN (arg))
9288     if (TREE_PURPOSE (arg))
9289       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
9290                                                     TREE_VALUE (arg),
9291                                                     TREE_PURPOSE (arg));
9292 }
9293
9294 /* Substitute the ARGS into the T, which is a _DECL.  Return the
9295    result of the substitution.  Issue error and warning messages under
9296    control of COMPLAIN.  */
9297
9298 static tree
9299 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
9300 {
9301 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
9302   location_t saved_loc;
9303   tree r = NULL_TREE;
9304   tree in_decl = t;
9305   hashval_t hash = 0;
9306
9307   /* Set the filename and linenumber to improve error-reporting.  */
9308   saved_loc = input_location;
9309   input_location = DECL_SOURCE_LOCATION (t);
9310
9311   switch (TREE_CODE (t))
9312     {
9313     case TEMPLATE_DECL:
9314       {
9315         /* We can get here when processing a member function template,
9316            member class template, or template template parameter.  */
9317         tree decl = DECL_TEMPLATE_RESULT (t);
9318         tree spec;
9319         tree tmpl_args;
9320         tree full_args;
9321
9322         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9323           {
9324             /* Template template parameter is treated here.  */
9325             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9326             if (new_type == error_mark_node)
9327               RETURN (error_mark_node);
9328
9329             r = copy_decl (t);
9330             DECL_CHAIN (r) = NULL_TREE;
9331             TREE_TYPE (r) = new_type;
9332             DECL_TEMPLATE_RESULT (r)
9333               = build_decl (DECL_SOURCE_LOCATION (decl),
9334                             TYPE_DECL, DECL_NAME (decl), new_type);
9335             DECL_TEMPLATE_PARMS (r)
9336               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
9337                                        complain);
9338             TYPE_NAME (new_type) = r;
9339             break;
9340           }
9341
9342         /* We might already have an instance of this template.
9343            The ARGS are for the surrounding class type, so the
9344            full args contain the tsubst'd args for the context,
9345            plus the innermost args from the template decl.  */
9346         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
9347           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
9348           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
9349         /* Because this is a template, the arguments will still be
9350            dependent, even after substitution.  If
9351            PROCESSING_TEMPLATE_DECL is not set, the dependency
9352            predicates will short-circuit.  */
9353         ++processing_template_decl;
9354         full_args = tsubst_template_args (tmpl_args, args,
9355                                           complain, in_decl);
9356         --processing_template_decl;
9357         if (full_args == error_mark_node)
9358           RETURN (error_mark_node);
9359
9360         /* If this is a default template template argument,
9361            tsubst might not have changed anything.  */
9362         if (full_args == tmpl_args)
9363           RETURN (t);
9364
9365         hash = hash_tmpl_and_args (t, full_args);
9366         spec = retrieve_specialization (t, full_args, hash);
9367         if (spec != NULL_TREE)
9368           {
9369             r = spec;
9370             break;
9371           }
9372
9373         /* Make a new template decl.  It will be similar to the
9374            original, but will record the current template arguments.
9375            We also create a new function declaration, which is just
9376            like the old one, but points to this new template, rather
9377            than the old one.  */
9378         r = copy_decl (t);
9379         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
9380         DECL_CHAIN (r) = NULL_TREE;
9381
9382         DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
9383
9384         if (TREE_CODE (decl) == TYPE_DECL)
9385           {
9386             tree new_type;
9387             ++processing_template_decl;
9388             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9389             --processing_template_decl;
9390             if (new_type == error_mark_node)
9391               RETURN (error_mark_node);
9392
9393             TREE_TYPE (r) = new_type;
9394             CLASSTYPE_TI_TEMPLATE (new_type) = r;
9395             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
9396             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
9397             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
9398           }
9399         else
9400           {
9401             tree new_decl;
9402             ++processing_template_decl;
9403             new_decl = tsubst (decl, args, complain, in_decl);
9404             --processing_template_decl;
9405             if (new_decl == error_mark_node)
9406               RETURN (error_mark_node);
9407
9408             DECL_TEMPLATE_RESULT (r) = new_decl;
9409             DECL_TI_TEMPLATE (new_decl) = r;
9410             TREE_TYPE (r) = TREE_TYPE (new_decl);
9411             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
9412             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
9413           }
9414
9415         SET_DECL_IMPLICIT_INSTANTIATION (r);
9416         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
9417         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
9418
9419         /* The template parameters for this new template are all the
9420            template parameters for the old template, except the
9421            outermost level of parameters.  */
9422         DECL_TEMPLATE_PARMS (r)
9423           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
9424                                    complain);
9425
9426         if (PRIMARY_TEMPLATE_P (t))
9427           DECL_PRIMARY_TEMPLATE (r) = r;
9428
9429         if (TREE_CODE (decl) != TYPE_DECL)
9430           /* Record this non-type partial instantiation.  */
9431           register_specialization (r, t,
9432                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
9433                                    false, hash);
9434       }
9435       break;
9436
9437     case FUNCTION_DECL:
9438       {
9439         tree ctx;
9440         tree argvec = NULL_TREE;
9441         tree *friends;
9442         tree gen_tmpl;
9443         tree type;
9444         int member;
9445         int args_depth;
9446         int parms_depth;
9447
9448         /* Nobody should be tsubst'ing into non-template functions.  */
9449         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
9450
9451         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
9452           {
9453             tree spec;
9454             bool dependent_p;
9455
9456             /* If T is not dependent, just return it.  We have to
9457                increment PROCESSING_TEMPLATE_DECL because
9458                value_dependent_expression_p assumes that nothing is
9459                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
9460             ++processing_template_decl;
9461             dependent_p = value_dependent_expression_p (t);
9462             --processing_template_decl;
9463             if (!dependent_p)
9464               RETURN (t);
9465
9466             /* Calculate the most general template of which R is a
9467                specialization, and the complete set of arguments used to
9468                specialize R.  */
9469             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
9470             argvec = tsubst_template_args (DECL_TI_ARGS
9471                                           (DECL_TEMPLATE_RESULT
9472                                                  (DECL_TI_TEMPLATE (t))),
9473                                            args, complain, in_decl);
9474
9475             /* Check to see if we already have this specialization.  */
9476             hash = hash_tmpl_and_args (gen_tmpl, argvec);
9477             spec = retrieve_specialization (gen_tmpl, argvec, hash);
9478
9479             if (spec)
9480               {
9481                 r = spec;
9482                 break;
9483               }
9484
9485             /* We can see more levels of arguments than parameters if
9486                there was a specialization of a member template, like
9487                this:
9488
9489                  template <class T> struct S { template <class U> void f(); }
9490                  template <> template <class U> void S<int>::f(U);
9491
9492                Here, we'll be substituting into the specialization,
9493                because that's where we can find the code we actually
9494                want to generate, but we'll have enough arguments for
9495                the most general template.
9496
9497                We also deal with the peculiar case:
9498
9499                  template <class T> struct S {
9500                    template <class U> friend void f();
9501                  };
9502                  template <class U> void f() {}
9503                  template S<int>;
9504                  template void f<double>();
9505
9506                Here, the ARGS for the instantiation of will be {int,
9507                double}.  But, we only need as many ARGS as there are
9508                levels of template parameters in CODE_PATTERN.  We are
9509                careful not to get fooled into reducing the ARGS in
9510                situations like:
9511
9512                  template <class T> struct S { template <class U> void f(U); }
9513                  template <class T> template <> void S<T>::f(int) {}
9514
9515                which we can spot because the pattern will be a
9516                specialization in this case.  */
9517             args_depth = TMPL_ARGS_DEPTH (args);
9518             parms_depth =
9519               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
9520             if (args_depth > parms_depth
9521                 && !DECL_TEMPLATE_SPECIALIZATION (t))
9522               args = get_innermost_template_args (args, parms_depth);
9523           }
9524         else
9525           {
9526             /* This special case arises when we have something like this:
9527
9528                  template <class T> struct S {
9529                    friend void f<int>(int, double);
9530                  };
9531
9532                Here, the DECL_TI_TEMPLATE for the friend declaration
9533                will be an IDENTIFIER_NODE.  We are being called from
9534                tsubst_friend_function, and we want only to create a
9535                new decl (R) with appropriate types so that we can call
9536                determine_specialization.  */
9537             gen_tmpl = NULL_TREE;
9538           }
9539
9540         if (DECL_CLASS_SCOPE_P (t))
9541           {
9542             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
9543               member = 2;
9544             else
9545               member = 1;
9546             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
9547                                     complain, t, /*entering_scope=*/1);
9548           }
9549         else
9550           {
9551             member = 0;
9552             ctx = DECL_CONTEXT (t);
9553           }
9554         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9555         if (type == error_mark_node)
9556           RETURN (error_mark_node);
9557
9558         /* We do NOT check for matching decls pushed separately at this
9559            point, as they may not represent instantiations of this
9560            template, and in any case are considered separate under the
9561            discrete model.  */
9562         r = copy_decl (t);
9563         DECL_USE_TEMPLATE (r) = 0;
9564         TREE_TYPE (r) = type;
9565         /* Clear out the mangled name and RTL for the instantiation.  */
9566         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
9567         SET_DECL_RTL (r, NULL);
9568         /* Leave DECL_INITIAL set on deleted instantiations.  */
9569         if (!DECL_DELETED_FN (r))
9570           DECL_INITIAL (r) = NULL_TREE;
9571         DECL_CONTEXT (r) = ctx;
9572
9573         if (member && DECL_CONV_FN_P (r))
9574           /* Type-conversion operator.  Reconstruct the name, in
9575              case it's the name of one of the template's parameters.  */
9576           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
9577
9578         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
9579                                      complain, t);
9580         DECL_RESULT (r) = NULL_TREE;
9581
9582         TREE_STATIC (r) = 0;
9583         TREE_PUBLIC (r) = TREE_PUBLIC (t);
9584         DECL_EXTERNAL (r) = 1;
9585         /* If this is an instantiation of a function with internal
9586            linkage, we already know what object file linkage will be
9587            assigned to the instantiation.  */
9588         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
9589         DECL_DEFER_OUTPUT (r) = 0;
9590         DECL_CHAIN (r) = NULL_TREE;
9591         DECL_PENDING_INLINE_INFO (r) = 0;
9592         DECL_PENDING_INLINE_P (r) = 0;
9593         DECL_SAVED_TREE (r) = NULL_TREE;
9594         DECL_STRUCT_FUNCTION (r) = NULL;
9595         TREE_USED (r) = 0;
9596         /* We'll re-clone as appropriate in instantiate_template.  */
9597         DECL_CLONED_FUNCTION (r) = NULL_TREE;
9598
9599         /* If we aren't complaining now, return on error before we register
9600            the specialization so that we'll complain eventually.  */
9601         if ((complain & tf_error) == 0
9602             && IDENTIFIER_OPNAME_P (DECL_NAME (r))
9603             && !grok_op_properties (r, /*complain=*/false))
9604           RETURN (error_mark_node);
9605
9606         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
9607            this in the special friend case mentioned above where
9608            GEN_TMPL is NULL.  */
9609         if (gen_tmpl)
9610           {
9611             DECL_TEMPLATE_INFO (r)
9612               = build_template_info (gen_tmpl, argvec);
9613             SET_DECL_IMPLICIT_INSTANTIATION (r);
9614             register_specialization (r, gen_tmpl, argvec, false, hash);
9615
9616             /* We're not supposed to instantiate default arguments
9617                until they are called, for a template.  But, for a
9618                declaration like:
9619
9620                  template <class T> void f ()
9621                  { extern void g(int i = T()); }
9622
9623                we should do the substitution when the template is
9624                instantiated.  We handle the member function case in
9625                instantiate_class_template since the default arguments
9626                might refer to other members of the class.  */
9627             if (!member
9628                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
9629                 && !uses_template_parms (argvec))
9630               tsubst_default_arguments (r);
9631           }
9632         else
9633           DECL_TEMPLATE_INFO (r) = NULL_TREE;
9634
9635         /* Copy the list of befriending classes.  */
9636         for (friends = &DECL_BEFRIENDING_CLASSES (r);
9637              *friends;
9638              friends = &TREE_CHAIN (*friends))
9639           {
9640             *friends = copy_node (*friends);
9641             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
9642                                             args, complain,
9643                                             in_decl);
9644           }
9645
9646         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
9647           {
9648             maybe_retrofit_in_chrg (r);
9649             if (DECL_CONSTRUCTOR_P (r))
9650               grok_ctor_properties (ctx, r);
9651             /* If this is an instantiation of a member template, clone it.
9652                If it isn't, that'll be handled by
9653                clone_constructors_and_destructors.  */
9654             if (PRIMARY_TEMPLATE_P (gen_tmpl))
9655               clone_function_decl (r, /*update_method_vec_p=*/0);
9656           }
9657         else if ((complain & tf_error) != 0
9658                  && IDENTIFIER_OPNAME_P (DECL_NAME (r))
9659                  && !grok_op_properties (r, /*complain=*/true))
9660           RETURN (error_mark_node);
9661
9662         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
9663           SET_DECL_FRIEND_CONTEXT (r,
9664                                    tsubst (DECL_FRIEND_CONTEXT (t),
9665                                             args, complain, in_decl));
9666
9667         /* Possibly limit visibility based on template args.  */
9668         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
9669         if (DECL_VISIBILITY_SPECIFIED (t))
9670           {
9671             DECL_VISIBILITY_SPECIFIED (r) = 0;
9672             DECL_ATTRIBUTES (r)
9673               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
9674           }
9675         determine_visibility (r);
9676         if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
9677             && !processing_template_decl)
9678           defaulted_late_check (r);
9679
9680         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9681                                         args, complain, in_decl);
9682       }
9683       break;
9684
9685     case PARM_DECL:
9686       {
9687         tree type = NULL_TREE;
9688         int i, len = 1;
9689         tree expanded_types = NULL_TREE;
9690         tree prev_r = NULL_TREE;
9691         tree first_r = NULL_TREE;
9692
9693         if (FUNCTION_PARAMETER_PACK_P (t))
9694           {
9695             /* If there is a local specialization that isn't a
9696                parameter pack, it means that we're doing a "simple"
9697                substitution from inside tsubst_pack_expansion. Just
9698                return the local specialization (which will be a single
9699                parm).  */
9700             tree spec = retrieve_local_specialization (t);
9701             if (spec 
9702                 && TREE_CODE (spec) == PARM_DECL
9703                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
9704               RETURN (spec);
9705
9706             /* Expand the TYPE_PACK_EXPANSION that provides the types for
9707                the parameters in this function parameter pack.  */
9708             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
9709                                                     complain, in_decl);
9710             if (TREE_CODE (expanded_types) == TREE_VEC)
9711               {
9712                 len = TREE_VEC_LENGTH (expanded_types);
9713
9714                 /* Zero-length parameter packs are boring. Just substitute
9715                    into the chain.  */
9716                 if (len == 0)
9717                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
9718                                   TREE_CHAIN (t)));
9719               }
9720             else
9721               {
9722                 /* All we did was update the type. Make a note of that.  */
9723                 type = expanded_types;
9724                 expanded_types = NULL_TREE;
9725               }
9726           }
9727
9728         /* Loop through all of the parameter's we'll build. When T is
9729            a function parameter pack, LEN is the number of expanded
9730            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
9731         r = NULL_TREE;
9732         for (i = 0; i < len; ++i)
9733           {
9734             prev_r = r;
9735             r = copy_node (t);
9736             if (DECL_TEMPLATE_PARM_P (t))
9737               SET_DECL_TEMPLATE_PARM_P (r);
9738
9739             /* An argument of a function parameter pack is not a parameter
9740                pack.  */
9741             FUNCTION_PARAMETER_PACK_P (r) = false;
9742
9743             if (expanded_types)
9744               /* We're on the Ith parameter of the function parameter
9745                  pack.  */
9746               {
9747                 /* Get the Ith type.  */
9748                 type = TREE_VEC_ELT (expanded_types, i);
9749
9750                 if (DECL_NAME (r))
9751                   /* Rename the parameter to include the index.  */
9752                   DECL_NAME (r) =
9753                     make_ith_pack_parameter_name (DECL_NAME (r), i);
9754               }
9755             else if (!type)
9756               /* We're dealing with a normal parameter.  */
9757               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9758
9759             type = type_decays_to (type);
9760             TREE_TYPE (r) = type;
9761             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9762
9763             if (DECL_INITIAL (r))
9764               {
9765                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
9766                   DECL_INITIAL (r) = TREE_TYPE (r);
9767                 else
9768                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
9769                                              complain, in_decl);
9770               }
9771
9772             DECL_CONTEXT (r) = NULL_TREE;
9773
9774             if (!DECL_TEMPLATE_PARM_P (r))
9775               DECL_ARG_TYPE (r) = type_passed_as (type);
9776
9777             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9778                                             args, complain, in_decl);
9779
9780             /* Keep track of the first new parameter we
9781                generate. That's what will be returned to the
9782                caller.  */
9783             if (!first_r)
9784               first_r = r;
9785
9786             /* Build a proper chain of parameters when substituting
9787                into a function parameter pack.  */
9788             if (prev_r)
9789               DECL_CHAIN (prev_r) = r;
9790           }
9791
9792         if (DECL_CHAIN (t))
9793           DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
9794                                    complain, DECL_CHAIN (t));
9795
9796         /* FIRST_R contains the start of the chain we've built.  */
9797         r = first_r;
9798       }
9799       break;
9800
9801     case FIELD_DECL:
9802       {
9803         tree type;
9804
9805         r = copy_decl (t);
9806         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9807         if (type == error_mark_node)
9808           RETURN (error_mark_node);
9809         TREE_TYPE (r) = type;
9810         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9811
9812         /* DECL_INITIAL gives the number of bits in a bit-field.  */
9813         DECL_INITIAL (r)
9814           = tsubst_expr (DECL_INITIAL (t), args,
9815                          complain, in_decl,
9816                          /*integral_constant_expression_p=*/true);
9817         /* We don't have to set DECL_CONTEXT here; it is set by
9818            finish_member_declaration.  */
9819         DECL_CHAIN (r) = NULL_TREE;
9820         if (VOID_TYPE_P (type))
9821           error ("instantiation of %q+D as type %qT", r, type);
9822
9823         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9824                                         args, complain, in_decl);
9825       }
9826       break;
9827
9828     case USING_DECL:
9829       /* We reach here only for member using decls.  */
9830       if (DECL_DEPENDENT_P (t))
9831         {
9832           r = do_class_using_decl
9833             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
9834              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
9835           if (!r)
9836             r = error_mark_node;
9837           else
9838             {
9839               TREE_PROTECTED (r) = TREE_PROTECTED (t);
9840               TREE_PRIVATE (r) = TREE_PRIVATE (t);
9841             }
9842         }
9843       else
9844         {
9845           r = copy_node (t);
9846           DECL_CHAIN (r) = NULL_TREE;
9847         }
9848       break;
9849
9850     case TYPE_DECL:
9851     case VAR_DECL:
9852       {
9853         tree argvec = NULL_TREE;
9854         tree gen_tmpl = NULL_TREE;
9855         tree spec;
9856         tree tmpl = NULL_TREE;
9857         tree ctx;
9858         tree type = NULL_TREE;
9859         bool local_p;
9860
9861         if (TREE_CODE (t) == TYPE_DECL
9862             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
9863           {
9864             /* If this is the canonical decl, we don't have to
9865                mess with instantiations, and often we can't (for
9866                typename, template type parms and such).  Note that
9867                TYPE_NAME is not correct for the above test if
9868                we've copied the type for a typedef.  */
9869             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9870             if (type == error_mark_node)
9871               RETURN (error_mark_node);
9872             r = TYPE_NAME (type);
9873             break;
9874           }
9875
9876         /* Check to see if we already have the specialization we
9877            need.  */
9878         spec = NULL_TREE;
9879         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
9880           {
9881             /* T is a static data member or namespace-scope entity.
9882                We have to substitute into namespace-scope variables
9883                (even though such entities are never templates) because
9884                of cases like:
9885                
9886                  template <class T> void f() { extern T t; }
9887
9888                where the entity referenced is not known until
9889                instantiation time.  */
9890             local_p = false;
9891             ctx = DECL_CONTEXT (t);
9892             if (DECL_CLASS_SCOPE_P (t))
9893               {
9894                 ctx = tsubst_aggr_type (ctx, args,
9895                                         complain,
9896                                         in_decl, /*entering_scope=*/1);
9897                 /* If CTX is unchanged, then T is in fact the
9898                    specialization we want.  That situation occurs when
9899                    referencing a static data member within in its own
9900                    class.  We can use pointer equality, rather than
9901                    same_type_p, because DECL_CONTEXT is always
9902                    canonical.  */
9903                 if (ctx == DECL_CONTEXT (t))
9904                   spec = t;
9905               }
9906
9907             if (!spec)
9908               {
9909                 tmpl = DECL_TI_TEMPLATE (t);
9910                 gen_tmpl = most_general_template (tmpl);
9911                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
9912                 hash = hash_tmpl_and_args (gen_tmpl, argvec);
9913                 spec = retrieve_specialization (gen_tmpl, argvec, hash);
9914               }
9915           }
9916         else
9917           {
9918             /* A local variable.  */
9919             local_p = true;
9920             /* Subsequent calls to pushdecl will fill this in.  */
9921             ctx = NULL_TREE;
9922             spec = retrieve_local_specialization (t);
9923           }
9924         /* If we already have the specialization we need, there is
9925            nothing more to do.  */ 
9926         if (spec)
9927           {
9928             r = spec;
9929             break;
9930           }
9931
9932         /* Create a new node for the specialization we need.  */
9933         r = copy_decl (t);
9934         if (type == NULL_TREE)
9935           {
9936             if (is_typedef_decl (t))
9937               type = DECL_ORIGINAL_TYPE (t);
9938             else
9939               type = TREE_TYPE (t);
9940             if (TREE_CODE (t) == VAR_DECL && VAR_HAD_UNKNOWN_BOUND (t))
9941               type = strip_array_domain (type);
9942             type = tsubst (type, args, complain, in_decl);
9943           }
9944         if (TREE_CODE (r) == VAR_DECL)
9945           {
9946             /* Even if the original location is out of scope, the
9947                newly substituted one is not.  */
9948             DECL_DEAD_FOR_LOCAL (r) = 0;
9949             DECL_INITIALIZED_P (r) = 0;
9950             DECL_TEMPLATE_INSTANTIATED (r) = 0;
9951             if (type == error_mark_node)
9952               RETURN (error_mark_node);
9953             if (TREE_CODE (type) == FUNCTION_TYPE)
9954               {
9955                 /* It may seem that this case cannot occur, since:
9956
9957                      typedef void f();
9958                      void g() { f x; }
9959
9960                    declares a function, not a variable.  However:
9961       
9962                      typedef void f();
9963                      template <typename T> void g() { T t; }
9964                      template void g<f>();
9965
9966                    is an attempt to declare a variable with function
9967                    type.  */
9968                 error ("variable %qD has function type",
9969                        /* R is not yet sufficiently initialized, so we
9970                           just use its name.  */
9971                        DECL_NAME (r));
9972                 RETURN (error_mark_node);
9973               }
9974             type = complete_type (type);
9975             /* Wait until cp_finish_decl to set this again, to handle
9976                circular dependency (template/instantiate6.C). */
9977             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
9978             type = check_var_type (DECL_NAME (r), type);
9979
9980             if (DECL_HAS_VALUE_EXPR_P (t))
9981               {
9982                 tree ve = DECL_VALUE_EXPR (t);
9983                 ve = tsubst_expr (ve, args, complain, in_decl,
9984                                   /*constant_expression_p=*/false);
9985                 SET_DECL_VALUE_EXPR (r, ve);
9986               }
9987           }
9988         else if (DECL_SELF_REFERENCE_P (t))
9989           SET_DECL_SELF_REFERENCE_P (r);
9990         TREE_TYPE (r) = type;
9991         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9992         DECL_CONTEXT (r) = ctx;
9993         /* Clear out the mangled name and RTL for the instantiation.  */
9994         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
9995         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
9996           SET_DECL_RTL (r, NULL);
9997         /* The initializer must not be expanded until it is required;
9998            see [temp.inst].  */
9999         DECL_INITIAL (r) = NULL_TREE;
10000         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10001           SET_DECL_RTL (r, NULL);
10002         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
10003         if (TREE_CODE (r) == VAR_DECL)
10004           {
10005             /* Possibly limit visibility based on template args.  */
10006             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10007             if (DECL_VISIBILITY_SPECIFIED (t))
10008               {
10009                 DECL_VISIBILITY_SPECIFIED (r) = 0;
10010                 DECL_ATTRIBUTES (r)
10011                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10012               }
10013             determine_visibility (r);
10014           }
10015
10016         if (!local_p)
10017           {
10018             /* A static data member declaration is always marked
10019                external when it is declared in-class, even if an
10020                initializer is present.  We mimic the non-template
10021                processing here.  */
10022             DECL_EXTERNAL (r) = 1;
10023
10024             register_specialization (r, gen_tmpl, argvec, false, hash);
10025             DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
10026             SET_DECL_IMPLICIT_INSTANTIATION (r);
10027           }
10028         else if (cp_unevaluated_operand)
10029           {
10030             /* We're substituting this var in a decltype outside of its
10031                scope, such as for a lambda return type.  Don't add it to
10032                local_specializations, do perform auto deduction.  */
10033             tree auto_node = type_uses_auto (type);
10034             tree init
10035               = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
10036                              /*constant_expression_p=*/false);
10037
10038             if (auto_node && init)
10039               {
10040                 init = resolve_nondeduced_context (init);
10041                 if (describable_type (init))
10042                   {
10043                     type = do_auto_deduction (type, init, auto_node);
10044                     TREE_TYPE (r) = type;
10045                   }
10046               }
10047           }
10048         else
10049           register_local_specialization (r, t);
10050
10051         DECL_CHAIN (r) = NULL_TREE;
10052
10053         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
10054                                         /*flags=*/0,
10055                                         args, complain, in_decl);
10056
10057         /* Preserve a typedef that names a type.  */
10058         if (is_typedef_decl (r))
10059           {
10060             DECL_ORIGINAL_TYPE (r) = NULL_TREE;
10061             set_underlying_type (r);
10062           }
10063
10064         layout_decl (r, 0);
10065       }
10066       break;
10067
10068     default:
10069       gcc_unreachable ();
10070     }
10071 #undef RETURN
10072
10073  out:
10074   /* Restore the file and line information.  */
10075   input_location = saved_loc;
10076
10077   return r;
10078 }
10079
10080 /* Substitute into the ARG_TYPES of a function type.  */
10081
10082 static tree
10083 tsubst_arg_types (tree arg_types,
10084                   tree args,
10085                   tsubst_flags_t complain,
10086                   tree in_decl)
10087 {
10088   tree remaining_arg_types;
10089   tree type = NULL_TREE;
10090   int i = 1;
10091   tree expanded_args = NULL_TREE;
10092   tree default_arg;
10093
10094   if (!arg_types || arg_types == void_list_node)
10095     return arg_types;
10096
10097   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
10098                                           args, complain, in_decl);
10099   if (remaining_arg_types == error_mark_node)
10100     return error_mark_node;
10101
10102   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
10103     {
10104       /* For a pack expansion, perform substitution on the
10105          entire expression. Later on, we'll handle the arguments
10106          one-by-one.  */
10107       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
10108                                             args, complain, in_decl);
10109
10110       if (TREE_CODE (expanded_args) == TREE_VEC)
10111         /* So that we'll spin through the parameters, one by one.  */
10112         i = TREE_VEC_LENGTH (expanded_args);
10113       else
10114         {
10115           /* We only partially substituted into the parameter
10116              pack. Our type is TYPE_PACK_EXPANSION.  */
10117           type = expanded_args;
10118           expanded_args = NULL_TREE;
10119         }
10120     }
10121
10122   while (i > 0) {
10123     --i;
10124     
10125     if (expanded_args)
10126       type = TREE_VEC_ELT (expanded_args, i);
10127     else if (!type)
10128       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
10129
10130     if (type == error_mark_node)
10131       return error_mark_node;
10132     if (VOID_TYPE_P (type))
10133       {
10134         if (complain & tf_error)
10135           {
10136             error ("invalid parameter type %qT", type);
10137             if (in_decl)
10138               error ("in declaration %q+D", in_decl);
10139           }
10140         return error_mark_node;
10141     }
10142     
10143     /* Do array-to-pointer, function-to-pointer conversion, and ignore
10144        top-level qualifiers as required.  */
10145     type = TYPE_MAIN_VARIANT (type_decays_to (type));
10146
10147     /* We do not substitute into default arguments here.  The standard
10148        mandates that they be instantiated only when needed, which is
10149        done in build_over_call.  */
10150     default_arg = TREE_PURPOSE (arg_types);
10151
10152     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
10153       {
10154         /* We've instantiated a template before its default arguments
10155            have been parsed.  This can happen for a nested template
10156            class, and is not an error unless we require the default
10157            argument in a call of this function.  */
10158         remaining_arg_types = 
10159           tree_cons (default_arg, type, remaining_arg_types);
10160         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
10161                        remaining_arg_types);
10162       }
10163     else
10164       remaining_arg_types = 
10165         hash_tree_cons (default_arg, type, remaining_arg_types);
10166   }
10167         
10168   return remaining_arg_types;
10169 }
10170
10171 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
10172    *not* handle the exception-specification for FNTYPE, because the
10173    initial substitution of explicitly provided template parameters
10174    during argument deduction forbids substitution into the
10175    exception-specification:
10176
10177      [temp.deduct]
10178
10179      All references in the function type of the function template to  the
10180      corresponding template parameters are replaced by the specified tem-
10181      plate argument values.  If a substitution in a template parameter or
10182      in  the function type of the function template results in an invalid
10183      type, type deduction fails.  [Note: The equivalent  substitution  in
10184      exception specifications is done only when the function is instanti-
10185      ated, at which point a program is  ill-formed  if  the  substitution
10186      results in an invalid type.]  */
10187
10188 static tree
10189 tsubst_function_type (tree t,
10190                       tree args,
10191                       tsubst_flags_t complain,
10192                       tree in_decl)
10193 {
10194   tree return_type;
10195   tree arg_types;
10196   tree fntype;
10197
10198   /* The TYPE_CONTEXT is not used for function/method types.  */
10199   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
10200
10201   /* Substitute the return type.  */
10202   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10203   if (return_type == error_mark_node)
10204     return error_mark_node;
10205   /* The standard does not presently indicate that creation of a
10206      function type with an invalid return type is a deduction failure.
10207      However, that is clearly analogous to creating an array of "void"
10208      or a reference to a reference.  This is core issue #486.  */
10209   if (TREE_CODE (return_type) == ARRAY_TYPE
10210       || TREE_CODE (return_type) == FUNCTION_TYPE)
10211     {
10212       if (complain & tf_error)
10213         {
10214           if (TREE_CODE (return_type) == ARRAY_TYPE)
10215             error ("function returning an array");
10216           else
10217             error ("function returning a function");
10218         }
10219       return error_mark_node;
10220     }
10221
10222   /* Substitute the argument types.  */
10223   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
10224                                 complain, in_decl);
10225   if (arg_types == error_mark_node)
10226     return error_mark_node;
10227
10228   /* Construct a new type node and return it.  */
10229   if (TREE_CODE (t) == FUNCTION_TYPE)
10230     {
10231       fntype = build_function_type (return_type, arg_types);
10232       fntype = apply_memfn_quals (fntype, type_memfn_quals (t));
10233     }
10234   else
10235     {
10236       tree r = TREE_TYPE (TREE_VALUE (arg_types));
10237       if (! MAYBE_CLASS_TYPE_P (r))
10238         {
10239           /* [temp.deduct]
10240
10241              Type deduction may fail for any of the following
10242              reasons:
10243
10244              -- Attempting to create "pointer to member of T" when T
10245              is not a class type.  */
10246           if (complain & tf_error)
10247             error ("creating pointer to member function of non-class type %qT",
10248                       r);
10249           return error_mark_node;
10250         }
10251
10252       fntype = build_method_type_directly (r, return_type,
10253                                            TREE_CHAIN (arg_types));
10254     }
10255   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
10256
10257   return fntype;
10258 }
10259
10260 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
10261    ARGS into that specification, and return the substituted
10262    specification.  If there is no specification, return NULL_TREE.  */
10263
10264 static tree
10265 tsubst_exception_specification (tree fntype,
10266                                 tree args,
10267                                 tsubst_flags_t complain,
10268                                 tree in_decl)
10269 {
10270   tree specs;
10271   tree new_specs;
10272
10273   specs = TYPE_RAISES_EXCEPTIONS (fntype);
10274   new_specs = NULL_TREE;
10275   if (specs && TREE_PURPOSE (specs))
10276     {
10277       /* A noexcept-specifier.  */
10278       new_specs = tsubst_copy_and_build
10279         (TREE_PURPOSE (specs), args, complain, in_decl, /*function_p=*/false,
10280          /*integral_constant_expression_p=*/true);
10281       new_specs = build_noexcept_spec (new_specs, complain);
10282     }
10283   else if (specs)
10284     {
10285       if (! TREE_VALUE (specs))
10286         new_specs = specs;
10287       else
10288         while (specs)
10289           {
10290             tree spec;
10291             int i, len = 1;
10292             tree expanded_specs = NULL_TREE;
10293
10294             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
10295               {
10296                 /* Expand the pack expansion type.  */
10297                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
10298                                                        args, complain,
10299                                                        in_decl);
10300
10301                 if (expanded_specs == error_mark_node)
10302                   return error_mark_node;
10303                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
10304                   len = TREE_VEC_LENGTH (expanded_specs);
10305                 else
10306                   {
10307                     /* We're substituting into a member template, so
10308                        we got a TYPE_PACK_EXPANSION back.  Add that
10309                        expansion and move on.  */
10310                     gcc_assert (TREE_CODE (expanded_specs) 
10311                                 == TYPE_PACK_EXPANSION);
10312                     new_specs = add_exception_specifier (new_specs,
10313                                                          expanded_specs,
10314                                                          complain);
10315                     specs = TREE_CHAIN (specs);
10316                     continue;
10317                   }
10318               }
10319
10320             for (i = 0; i < len; ++i)
10321               {
10322                 if (expanded_specs)
10323                   spec = TREE_VEC_ELT (expanded_specs, i);
10324                 else
10325                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
10326                 if (spec == error_mark_node)
10327                   return spec;
10328                 new_specs = add_exception_specifier (new_specs, spec, 
10329                                                      complain);
10330               }
10331
10332             specs = TREE_CHAIN (specs);
10333           }
10334     }
10335   return new_specs;
10336 }
10337
10338 /* Take the tree structure T and replace template parameters used
10339    therein with the argument vector ARGS.  IN_DECL is an associated
10340    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
10341    Issue error and warning messages under control of COMPLAIN.  Note
10342    that we must be relatively non-tolerant of extensions here, in
10343    order to preserve conformance; if we allow substitutions that
10344    should not be allowed, we may allow argument deductions that should
10345    not succeed, and therefore report ambiguous overload situations
10346    where there are none.  In theory, we could allow the substitution,
10347    but indicate that it should have failed, and allow our caller to
10348    make sure that the right thing happens, but we don't try to do this
10349    yet.
10350
10351    This function is used for dealing with types, decls and the like;
10352    for expressions, use tsubst_expr or tsubst_copy.  */
10353
10354 tree
10355 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10356 {
10357   enum tree_code code;
10358   tree type, r;
10359
10360   if (t == NULL_TREE || t == error_mark_node
10361       || t == integer_type_node
10362       || t == void_type_node
10363       || t == char_type_node
10364       || t == unknown_type_node
10365       || TREE_CODE (t) == NAMESPACE_DECL
10366       || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
10367     return t;
10368
10369   if (DECL_P (t))
10370     return tsubst_decl (t, args, complain);
10371
10372   if (args == NULL_TREE)
10373     return t;
10374
10375   code = TREE_CODE (t);
10376
10377   if (code == IDENTIFIER_NODE)
10378     type = IDENTIFIER_TYPE_VALUE (t);
10379   else
10380     type = TREE_TYPE (t);
10381
10382   gcc_assert (type != unknown_type_node);
10383
10384   /* Reuse typedefs.  We need to do this to handle dependent attributes,
10385      such as attribute aligned.  */
10386   if (TYPE_P (t)
10387       && typedef_variant_p (t))
10388     {
10389       tree decl = TYPE_NAME (t);
10390       
10391       if (DECL_CLASS_SCOPE_P (decl)
10392           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
10393           && uses_template_parms (DECL_CONTEXT (decl)))
10394         {
10395           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
10396           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
10397           r = retrieve_specialization (tmpl, gen_args, 0);
10398         }
10399       else if (DECL_FUNCTION_SCOPE_P (decl)
10400                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
10401                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
10402         r = retrieve_local_specialization (decl);
10403       else
10404         /* The typedef is from a non-template context.  */
10405         return t;
10406
10407       if (r)
10408         {
10409           r = TREE_TYPE (r);
10410           r = cp_build_qualified_type_real
10411             (r, cp_type_quals (t) | cp_type_quals (r),
10412              complain | tf_ignore_bad_quals);
10413           return r;
10414         }
10415       /* Else we must be instantiating the typedef, so fall through.  */
10416     }
10417
10418   if (type
10419       && code != TYPENAME_TYPE
10420       && code != TEMPLATE_TYPE_PARM
10421       && code != IDENTIFIER_NODE
10422       && code != FUNCTION_TYPE
10423       && code != METHOD_TYPE)
10424     type = tsubst (type, args, complain, in_decl);
10425   if (type == error_mark_node)
10426     return error_mark_node;
10427
10428   switch (code)
10429     {
10430     case RECORD_TYPE:
10431     case UNION_TYPE:
10432     case ENUMERAL_TYPE:
10433       return tsubst_aggr_type (t, args, complain, in_decl,
10434                                /*entering_scope=*/0);
10435
10436     case ERROR_MARK:
10437     case IDENTIFIER_NODE:
10438     case VOID_TYPE:
10439     case REAL_TYPE:
10440     case COMPLEX_TYPE:
10441     case VECTOR_TYPE:
10442     case BOOLEAN_TYPE:
10443     case NULLPTR_TYPE:
10444     case LANG_TYPE:
10445       return t;
10446
10447     case INTEGER_TYPE:
10448       if (t == integer_type_node)
10449         return t;
10450
10451       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
10452           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
10453         return t;
10454
10455       {
10456         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
10457
10458         max = tsubst_expr (omax, args, complain, in_decl,
10459                            /*integral_constant_expression_p=*/false);
10460
10461         /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
10462            needed.  */
10463         if (TREE_CODE (max) == NOP_EXPR
10464             && TREE_SIDE_EFFECTS (omax)
10465             && !TREE_TYPE (max))
10466           TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
10467
10468         /* If we're in a partial instantiation, preserve the magic NOP_EXPR
10469            with TREE_SIDE_EFFECTS that indicates this is not an integral
10470            constant expression.  */
10471         if (processing_template_decl
10472             && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
10473           {
10474             gcc_assert (TREE_CODE (max) == NOP_EXPR);
10475             TREE_SIDE_EFFECTS (max) = 1;
10476           }
10477
10478         return compute_array_index_type (NULL_TREE, max, complain);
10479       }
10480
10481     case TEMPLATE_TYPE_PARM:
10482     case TEMPLATE_TEMPLATE_PARM:
10483     case BOUND_TEMPLATE_TEMPLATE_PARM:
10484     case TEMPLATE_PARM_INDEX:
10485       {
10486         int idx;
10487         int level;
10488         int levels;
10489         tree arg = NULL_TREE;
10490
10491         r = NULL_TREE;
10492
10493         gcc_assert (TREE_VEC_LENGTH (args) > 0);
10494         template_parm_level_and_index (t, &level, &idx); 
10495
10496         levels = TMPL_ARGS_DEPTH (args);
10497         if (level <= levels)
10498           {
10499             arg = TMPL_ARG (args, level, idx);
10500
10501             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
10502               /* See through ARGUMENT_PACK_SELECT arguments. */
10503               arg = ARGUMENT_PACK_SELECT_ARG (arg);
10504           }
10505
10506         if (arg == error_mark_node)
10507           return error_mark_node;
10508         else if (arg != NULL_TREE)
10509           {
10510             if (ARGUMENT_PACK_P (arg))
10511               /* If ARG is an argument pack, we don't actually want to
10512                  perform a substitution here, because substitutions
10513                  for argument packs are only done
10514                  element-by-element. We can get to this point when
10515                  substituting the type of a non-type template
10516                  parameter pack, when that type actually contains
10517                  template parameter packs from an outer template, e.g.,
10518
10519                  template<typename... Types> struct A {
10520                    template<Types... Values> struct B { };
10521                  };  */
10522               return t;
10523
10524             if (code == TEMPLATE_TYPE_PARM)
10525               {
10526                 int quals;
10527                 gcc_assert (TYPE_P (arg));
10528
10529                 quals = cp_type_quals (arg) | cp_type_quals (t);
10530                   
10531                 return cp_build_qualified_type_real
10532                   (arg, quals, complain | tf_ignore_bad_quals);
10533               }
10534             else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
10535               {
10536                 /* We are processing a type constructed from a
10537                    template template parameter.  */
10538                 tree argvec = tsubst (TYPE_TI_ARGS (t),
10539                                       args, complain, in_decl);
10540                 if (argvec == error_mark_node)
10541                   return error_mark_node;
10542
10543                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
10544                    are resolving nested-types in the signature of a
10545                    member function templates.  Otherwise ARG is a
10546                    TEMPLATE_DECL and is the real template to be
10547                    instantiated.  */
10548                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
10549                   arg = TYPE_NAME (arg);
10550
10551                 r = lookup_template_class (arg,
10552                                            argvec, in_decl,
10553                                            DECL_CONTEXT (arg),
10554                                             /*entering_scope=*/0,
10555                                            complain);
10556                 return cp_build_qualified_type_real
10557                   (r, cp_type_quals (t), complain);
10558               }
10559             else
10560               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
10561               return unshare_expr (arg);
10562           }
10563
10564         if (level == 1)
10565           /* This can happen during the attempted tsubst'ing in
10566              unify.  This means that we don't yet have any information
10567              about the template parameter in question.  */
10568           return t;
10569
10570         /* If we get here, we must have been looking at a parm for a
10571            more deeply nested template.  Make a new version of this
10572            template parameter, but with a lower level.  */
10573         switch (code)
10574           {
10575           case TEMPLATE_TYPE_PARM:
10576           case TEMPLATE_TEMPLATE_PARM:
10577           case BOUND_TEMPLATE_TEMPLATE_PARM:
10578             if (cp_type_quals (t))
10579               {
10580                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
10581                 r = cp_build_qualified_type_real
10582                   (r, cp_type_quals (t),
10583                    complain | (code == TEMPLATE_TYPE_PARM
10584                                ? tf_ignore_bad_quals : 0));
10585               }
10586             else
10587               {
10588                 r = copy_type (t);
10589                 TEMPLATE_TYPE_PARM_INDEX (r)
10590                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
10591                                                 r, levels, args, complain);
10592                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
10593                 TYPE_MAIN_VARIANT (r) = r;
10594                 TYPE_POINTER_TO (r) = NULL_TREE;
10595                 TYPE_REFERENCE_TO (r) = NULL_TREE;
10596
10597                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
10598                   /* We have reduced the level of the template
10599                      template parameter, but not the levels of its
10600                      template parameters, so canonical_type_parameter
10601                      will not be able to find the canonical template
10602                      template parameter for this level. Thus, we
10603                      require structural equality checking to compare
10604                      TEMPLATE_TEMPLATE_PARMs. */
10605                   SET_TYPE_STRUCTURAL_EQUALITY (r);
10606                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
10607                   SET_TYPE_STRUCTURAL_EQUALITY (r);
10608                 else
10609                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
10610
10611                 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
10612                   {
10613                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
10614                                           complain, in_decl);
10615                     if (argvec == error_mark_node)
10616                       return error_mark_node;
10617
10618                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
10619                       = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
10620                   }
10621               }
10622             break;
10623
10624           case TEMPLATE_PARM_INDEX:
10625             r = reduce_template_parm_level (t, type, levels, args, complain);
10626             break;
10627
10628           default:
10629             gcc_unreachable ();
10630           }
10631
10632         return r;
10633       }
10634
10635     case TREE_LIST:
10636       {
10637         tree purpose, value, chain;
10638
10639         if (t == void_list_node)
10640           return t;
10641
10642         purpose = TREE_PURPOSE (t);
10643         if (purpose)
10644           {
10645             purpose = tsubst (purpose, args, complain, in_decl);
10646             if (purpose == error_mark_node)
10647               return error_mark_node;
10648           }
10649         value = TREE_VALUE (t);
10650         if (value)
10651           {
10652             value = tsubst (value, args, complain, in_decl);
10653             if (value == error_mark_node)
10654               return error_mark_node;
10655           }
10656         chain = TREE_CHAIN (t);
10657         if (chain && chain != void_type_node)
10658           {
10659             chain = tsubst (chain, args, complain, in_decl);
10660             if (chain == error_mark_node)
10661               return error_mark_node;
10662           }
10663         if (purpose == TREE_PURPOSE (t)
10664             && value == TREE_VALUE (t)
10665             && chain == TREE_CHAIN (t))
10666           return t;
10667         return hash_tree_cons (purpose, value, chain);
10668       }
10669
10670     case TREE_BINFO:
10671       /* We should never be tsubsting a binfo.  */
10672       gcc_unreachable ();
10673
10674     case TREE_VEC:
10675       /* A vector of template arguments.  */
10676       gcc_assert (!type);
10677       return tsubst_template_args (t, args, complain, in_decl);
10678
10679     case POINTER_TYPE:
10680     case REFERENCE_TYPE:
10681       {
10682         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
10683           return t;
10684
10685         /* [temp.deduct]
10686
10687            Type deduction may fail for any of the following
10688            reasons:
10689
10690            -- Attempting to create a pointer to reference type.
10691            -- Attempting to create a reference to a reference type or
10692               a reference to void.
10693
10694           Core issue 106 says that creating a reference to a reference
10695           during instantiation is no longer a cause for failure. We
10696           only enforce this check in strict C++98 mode.  */
10697         if ((TREE_CODE (type) == REFERENCE_TYPE
10698              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
10699             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
10700           {
10701             static location_t last_loc;
10702
10703             /* We keep track of the last time we issued this error
10704                message to avoid spewing a ton of messages during a
10705                single bad template instantiation.  */
10706             if (complain & tf_error
10707                 && last_loc != input_location)
10708               {
10709                 if (TREE_CODE (type) == VOID_TYPE)
10710                   error ("forming reference to void");
10711                else if (code == POINTER_TYPE)
10712                  error ("forming pointer to reference type %qT", type);
10713                else
10714                   error ("forming reference to reference type %qT", type);
10715                 last_loc = input_location;
10716               }
10717
10718             return error_mark_node;
10719           }
10720         else if (code == POINTER_TYPE)
10721           {
10722             r = build_pointer_type (type);
10723             if (TREE_CODE (type) == METHOD_TYPE)
10724               r = build_ptrmemfunc_type (r);
10725           }
10726         else if (TREE_CODE (type) == REFERENCE_TYPE)
10727           /* In C++0x, during template argument substitution, when there is an
10728              attempt to create a reference to a reference type, reference
10729              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
10730
10731              "If a template-argument for a template-parameter T names a type
10732              that is a reference to a type A, an attempt to create the type
10733              'lvalue reference to cv T' creates the type 'lvalue reference to
10734              A,' while an attempt to create the type type rvalue reference to
10735              cv T' creates the type T"
10736           */
10737           r = cp_build_reference_type
10738               (TREE_TYPE (type),
10739                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
10740         else
10741           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
10742         r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
10743
10744         if (r != error_mark_node)
10745           /* Will this ever be needed for TYPE_..._TO values?  */
10746           layout_type (r);
10747
10748         return r;
10749       }
10750     case OFFSET_TYPE:
10751       {
10752         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
10753         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
10754           {
10755             /* [temp.deduct]
10756
10757                Type deduction may fail for any of the following
10758                reasons:
10759
10760                -- Attempting to create "pointer to member of T" when T
10761                   is not a class type.  */
10762             if (complain & tf_error)
10763               error ("creating pointer to member of non-class type %qT", r);
10764             return error_mark_node;
10765           }
10766         if (TREE_CODE (type) == REFERENCE_TYPE)
10767           {
10768             if (complain & tf_error)
10769               error ("creating pointer to member reference type %qT", type);
10770             return error_mark_node;
10771           }
10772         if (TREE_CODE (type) == VOID_TYPE)
10773           {
10774             if (complain & tf_error)
10775               error ("creating pointer to member of type void");
10776             return error_mark_node;
10777           }
10778         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
10779         if (TREE_CODE (type) == FUNCTION_TYPE)
10780           {
10781             /* The type of the implicit object parameter gets its
10782                cv-qualifiers from the FUNCTION_TYPE. */
10783             tree memptr;
10784             tree method_type = build_memfn_type (type, r, type_memfn_quals (type));
10785             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
10786             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
10787                                                  complain);
10788           }
10789         else
10790           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
10791                                                cp_type_quals (t),
10792                                                complain);
10793       }
10794     case FUNCTION_TYPE:
10795     case METHOD_TYPE:
10796       {
10797         tree fntype;
10798         tree specs;
10799         fntype = tsubst_function_type (t, args, complain, in_decl);
10800         if (fntype == error_mark_node)
10801           return error_mark_node;
10802
10803         /* Substitute the exception specification.  */
10804         specs = tsubst_exception_specification (t, args, complain,
10805                                                 in_decl);
10806         if (specs == error_mark_node)
10807           return error_mark_node;
10808         if (specs)
10809           fntype = build_exception_variant (fntype, specs);
10810         return fntype;
10811       }
10812     case ARRAY_TYPE:
10813       {
10814         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
10815         if (domain == error_mark_node)
10816           return error_mark_node;
10817
10818         /* As an optimization, we avoid regenerating the array type if
10819            it will obviously be the same as T.  */
10820         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
10821           return t;
10822
10823         /* These checks should match the ones in grokdeclarator.
10824
10825            [temp.deduct]
10826
10827            The deduction may fail for any of the following reasons:
10828
10829            -- Attempting to create an array with an element type that
10830               is void, a function type, or a reference type, or [DR337]
10831               an abstract class type.  */
10832         if (TREE_CODE (type) == VOID_TYPE
10833             || TREE_CODE (type) == FUNCTION_TYPE
10834             || TREE_CODE (type) == REFERENCE_TYPE)
10835           {
10836             if (complain & tf_error)
10837               error ("creating array of %qT", type);
10838             return error_mark_node;
10839           }
10840         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
10841           {
10842             if (complain & tf_error)
10843               error ("creating array of %qT, which is an abstract class type",
10844                      type);
10845             return error_mark_node;
10846           }
10847
10848         r = build_cplus_array_type (type, domain);
10849
10850         if (TYPE_USER_ALIGN (t))
10851           {
10852             TYPE_ALIGN (r) = TYPE_ALIGN (t);
10853             TYPE_USER_ALIGN (r) = 1;
10854           }
10855
10856         return r;
10857       }
10858
10859     case TYPENAME_TYPE:
10860       {
10861         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
10862                                      in_decl, /*entering_scope=*/1);
10863         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
10864                               complain, in_decl);
10865
10866         if (ctx == error_mark_node || f == error_mark_node)
10867           return error_mark_node;
10868
10869         if (!MAYBE_CLASS_TYPE_P (ctx))
10870           {
10871             if (complain & tf_error)
10872               error ("%qT is not a class, struct, or union type", ctx);
10873             return error_mark_node;
10874           }
10875         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
10876           {
10877             /* Normally, make_typename_type does not require that the CTX
10878                have complete type in order to allow things like:
10879
10880                  template <class T> struct S { typename S<T>::X Y; };
10881
10882                But, such constructs have already been resolved by this
10883                point, so here CTX really should have complete type, unless
10884                it's a partial instantiation.  */
10885             ctx = complete_type (ctx);
10886             if (!COMPLETE_TYPE_P (ctx))
10887               {
10888                 if (complain & tf_error)
10889                   cxx_incomplete_type_error (NULL_TREE, ctx);
10890                 return error_mark_node;
10891               }
10892           }
10893
10894         f = make_typename_type (ctx, f, typename_type,
10895                                 (complain & tf_error) | tf_keep_type_decl);
10896         if (f == error_mark_node)
10897           return f;
10898         if (TREE_CODE (f) == TYPE_DECL)
10899           {
10900             complain |= tf_ignore_bad_quals;
10901             f = TREE_TYPE (f);
10902           }
10903
10904         if (TREE_CODE (f) != TYPENAME_TYPE)
10905           {
10906             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
10907               error ("%qT resolves to %qT, which is not an enumeration type",
10908                      t, f);
10909             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
10910               error ("%qT resolves to %qT, which is is not a class type",
10911                      t, f);
10912           }
10913
10914         return cp_build_qualified_type_real
10915           (f, cp_type_quals (f) | cp_type_quals (t), complain);
10916       }
10917
10918     case UNBOUND_CLASS_TEMPLATE:
10919       {
10920         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
10921                                      in_decl, /*entering_scope=*/1);
10922         tree name = TYPE_IDENTIFIER (t);
10923         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
10924
10925         if (ctx == error_mark_node || name == error_mark_node)
10926           return error_mark_node;
10927
10928         if (parm_list)
10929           parm_list = tsubst_template_parms (parm_list, args, complain);
10930         return make_unbound_class_template (ctx, name, parm_list, complain);
10931       }
10932
10933     case TYPEOF_TYPE:
10934       {
10935         tree type;
10936
10937         ++cp_unevaluated_operand;
10938         ++c_inhibit_evaluation_warnings;
10939
10940         type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
10941                             complain, in_decl,
10942                             /*integral_constant_expression_p=*/false);
10943
10944         --cp_unevaluated_operand;
10945         --c_inhibit_evaluation_warnings;
10946
10947         type = finish_typeof (type);
10948         return cp_build_qualified_type_real (type,
10949                                              cp_type_quals (t)
10950                                              | cp_type_quals (type),
10951                                              complain);
10952       }
10953
10954     case DECLTYPE_TYPE:
10955       {
10956         tree type;
10957
10958         ++cp_unevaluated_operand;
10959         ++c_inhibit_evaluation_warnings;
10960
10961         type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
10962                             complain, in_decl,
10963                             /*integral_constant_expression_p=*/false);
10964
10965         --cp_unevaluated_operand;
10966         --c_inhibit_evaluation_warnings;
10967
10968         if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
10969           type = lambda_capture_field_type (type);
10970         else if (DECLTYPE_FOR_LAMBDA_RETURN (t))
10971           type = lambda_return_type (type);
10972         else
10973           type = finish_decltype_type
10974             (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
10975         return cp_build_qualified_type_real (type,
10976                                              cp_type_quals (t)
10977                                              | cp_type_quals (type),
10978                                              complain);
10979       }
10980
10981     case TYPE_ARGUMENT_PACK:
10982     case NONTYPE_ARGUMENT_PACK:
10983       {
10984         tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
10985         tree packed_out = 
10986           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
10987                                 args,
10988                                 complain,
10989                                 in_decl);
10990         SET_ARGUMENT_PACK_ARGS (r, packed_out);
10991
10992         /* For template nontype argument packs, also substitute into
10993            the type.  */
10994         if (code == NONTYPE_ARGUMENT_PACK)
10995           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
10996
10997         return r;
10998       }
10999       break;
11000
11001     case INTEGER_CST:
11002     case REAL_CST:
11003     case STRING_CST:
11004     case PLUS_EXPR:
11005     case MINUS_EXPR:
11006     case NEGATE_EXPR:
11007     case NOP_EXPR:
11008     case INDIRECT_REF:
11009     case ADDR_EXPR:
11010     case CALL_EXPR:
11011     case ARRAY_REF:
11012     case SCOPE_REF:
11013       /* We should use one of the expression tsubsts for these codes.  */
11014       gcc_unreachable ();
11015
11016     default:
11017       sorry ("use of %qs in template", tree_code_name [(int) code]);
11018       return error_mark_node;
11019     }
11020 }
11021
11022 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
11023    type of the expression on the left-hand side of the "." or "->"
11024    operator.  */
11025
11026 static tree
11027 tsubst_baselink (tree baselink, tree object_type,
11028                  tree args, tsubst_flags_t complain, tree in_decl)
11029 {
11030     tree name;
11031     tree qualifying_scope;
11032     tree fns;
11033     tree optype;
11034     tree template_args = 0;
11035     bool template_id_p = false;
11036
11037     /* A baselink indicates a function from a base class.  Both the
11038        BASELINK_ACCESS_BINFO and the base class referenced may
11039        indicate bases of the template class, rather than the
11040        instantiated class.  In addition, lookups that were not
11041        ambiguous before may be ambiguous now.  Therefore, we perform
11042        the lookup again.  */
11043     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
11044     qualifying_scope = tsubst (qualifying_scope, args,
11045                                complain, in_decl);
11046     fns = BASELINK_FUNCTIONS (baselink);
11047     optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
11048     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
11049       {
11050         template_id_p = true;
11051         template_args = TREE_OPERAND (fns, 1);
11052         fns = TREE_OPERAND (fns, 0);
11053         if (template_args)
11054           template_args = tsubst_template_args (template_args, args,
11055                                                 complain, in_decl);
11056       }
11057     name = DECL_NAME (get_first_fn (fns));
11058     if (IDENTIFIER_TYPENAME_P (name))
11059       name = mangle_conv_op_name_for_type (optype);
11060     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
11061     if (!baselink)
11062       return error_mark_node;
11063
11064     /* If lookup found a single function, mark it as used at this
11065        point.  (If it lookup found multiple functions the one selected
11066        later by overload resolution will be marked as used at that
11067        point.)  */
11068     if (BASELINK_P (baselink))
11069       fns = BASELINK_FUNCTIONS (baselink);
11070     if (!template_id_p && !really_overloaded_fn (fns))
11071       mark_used (OVL_CURRENT (fns));
11072
11073     /* Add back the template arguments, if present.  */
11074     if (BASELINK_P (baselink) && template_id_p)
11075       BASELINK_FUNCTIONS (baselink)
11076         = build_nt (TEMPLATE_ID_EXPR,
11077                     BASELINK_FUNCTIONS (baselink),
11078                     template_args);
11079     /* Update the conversion operator type.  */
11080     BASELINK_OPTYPE (baselink) = optype;
11081
11082     if (!object_type)
11083       object_type = current_class_type;
11084     return adjust_result_of_qualified_name_lookup (baselink,
11085                                                    qualifying_scope,
11086                                                    object_type);
11087 }
11088
11089 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
11090    true if the qualified-id will be a postfix-expression in-and-of
11091    itself; false if more of the postfix-expression follows the
11092    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
11093    of "&".  */
11094
11095 static tree
11096 tsubst_qualified_id (tree qualified_id, tree args,
11097                      tsubst_flags_t complain, tree in_decl,
11098                      bool done, bool address_p)
11099 {
11100   tree expr;
11101   tree scope;
11102   tree name;
11103   bool is_template;
11104   tree template_args;
11105
11106   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
11107
11108   /* Figure out what name to look up.  */
11109   name = TREE_OPERAND (qualified_id, 1);
11110   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11111     {
11112       is_template = true;
11113       template_args = TREE_OPERAND (name, 1);
11114       if (template_args)
11115         template_args = tsubst_template_args (template_args, args,
11116                                               complain, in_decl);
11117       name = TREE_OPERAND (name, 0);
11118     }
11119   else
11120     {
11121       is_template = false;
11122       template_args = NULL_TREE;
11123     }
11124
11125   /* Substitute into the qualifying scope.  When there are no ARGS, we
11126      are just trying to simplify a non-dependent expression.  In that
11127      case the qualifying scope may be dependent, and, in any case,
11128      substituting will not help.  */
11129   scope = TREE_OPERAND (qualified_id, 0);
11130   if (args)
11131     {
11132       scope = tsubst (scope, args, complain, in_decl);
11133       expr = tsubst_copy (name, args, complain, in_decl);
11134     }
11135   else
11136     expr = name;
11137
11138   if (dependent_scope_p (scope))
11139     return build_qualified_name (NULL_TREE, scope, expr,
11140                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
11141
11142   if (!BASELINK_P (name) && !DECL_P (expr))
11143     {
11144       if (TREE_CODE (expr) == BIT_NOT_EXPR)
11145         {
11146           /* A BIT_NOT_EXPR is used to represent a destructor.  */
11147           if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
11148             {
11149               error ("qualifying type %qT does not match destructor name ~%qT",
11150                      scope, TREE_OPERAND (expr, 0));
11151               expr = error_mark_node;
11152             }
11153           else
11154             expr = lookup_qualified_name (scope, complete_dtor_identifier,
11155                                           /*is_type_p=*/0, false);
11156         }
11157       else
11158         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
11159       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
11160                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
11161         {
11162           if (complain & tf_error)
11163             {
11164               error ("dependent-name %qE is parsed as a non-type, but "
11165                      "instantiation yields a type", qualified_id);
11166               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
11167             }
11168           return error_mark_node;
11169         }
11170     }
11171
11172   if (DECL_P (expr))
11173     {
11174       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
11175                                            scope);
11176       /* Remember that there was a reference to this entity.  */
11177       mark_used (expr);
11178     }
11179
11180   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
11181     {
11182       if (complain & tf_error)
11183         qualified_name_lookup_error (scope,
11184                                      TREE_OPERAND (qualified_id, 1),
11185                                      expr, input_location);
11186       return error_mark_node;
11187     }
11188
11189   if (is_template)
11190     expr = lookup_template_function (expr, template_args);
11191
11192   if (expr == error_mark_node && complain & tf_error)
11193     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
11194                                  expr, input_location);
11195   else if (TYPE_P (scope))
11196     {
11197       expr = (adjust_result_of_qualified_name_lookup
11198               (expr, scope, current_class_type));
11199       expr = (finish_qualified_id_expr
11200               (scope, expr, done, address_p,
11201                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
11202                /*template_arg_p=*/false));
11203     }
11204
11205   /* Expressions do not generally have reference type.  */
11206   if (TREE_CODE (expr) != SCOPE_REF
11207       /* However, if we're about to form a pointer-to-member, we just
11208          want the referenced member referenced.  */
11209       && TREE_CODE (expr) != OFFSET_REF)
11210     expr = convert_from_reference (expr);
11211
11212   return expr;
11213 }
11214
11215 /* Like tsubst, but deals with expressions.  This function just replaces
11216    template parms; to finish processing the resultant expression, use
11217    tsubst_expr.  */
11218
11219 static tree
11220 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11221 {
11222   enum tree_code code;
11223   tree r;
11224
11225   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
11226     return t;
11227
11228   code = TREE_CODE (t);
11229
11230   switch (code)
11231     {
11232     case PARM_DECL:
11233       r = retrieve_local_specialization (t);
11234
11235       if (r == NULL)
11236         {
11237           tree c;
11238           /* This can happen for a parameter name used later in a function
11239              declaration (such as in a late-specified return type).  Just
11240              make a dummy decl, since it's only used for its type.  */
11241           gcc_assert (cp_unevaluated_operand != 0);
11242           /* We copy T because want to tsubst the PARM_DECL only,
11243              not the following PARM_DECLs that are chained to T.  */
11244           c = copy_node (t);
11245           r = tsubst_decl (c, args, complain);
11246           /* Give it the template pattern as its context; its true context
11247              hasn't been instantiated yet and this is good enough for
11248              mangling.  */
11249           DECL_CONTEXT (r) = DECL_CONTEXT (t);
11250         }
11251       
11252       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
11253         r = ARGUMENT_PACK_SELECT_ARG (r);
11254       mark_used (r);
11255       return r;
11256
11257     case CONST_DECL:
11258       {
11259         tree enum_type;
11260         tree v;
11261
11262         if (DECL_TEMPLATE_PARM_P (t))
11263           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
11264         /* There is no need to substitute into namespace-scope
11265            enumerators.  */
11266         if (DECL_NAMESPACE_SCOPE_P (t))
11267           return t;
11268         /* If ARGS is NULL, then T is known to be non-dependent.  */
11269         if (args == NULL_TREE)
11270           return integral_constant_value (t);
11271
11272         /* Unfortunately, we cannot just call lookup_name here.
11273            Consider:
11274
11275              template <int I> int f() {
11276              enum E { a = I };
11277              struct S { void g() { E e = a; } };
11278              };
11279
11280            When we instantiate f<7>::S::g(), say, lookup_name is not
11281            clever enough to find f<7>::a.  */
11282         enum_type
11283           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
11284                               /*entering_scope=*/0);
11285
11286         for (v = TYPE_VALUES (enum_type);
11287              v != NULL_TREE;
11288              v = TREE_CHAIN (v))
11289           if (TREE_PURPOSE (v) == DECL_NAME (t))
11290             return TREE_VALUE (v);
11291
11292           /* We didn't find the name.  That should never happen; if
11293              name-lookup found it during preliminary parsing, we
11294              should find it again here during instantiation.  */
11295         gcc_unreachable ();
11296       }
11297       return t;
11298
11299     case FIELD_DECL:
11300       if (DECL_CONTEXT (t))
11301         {
11302           tree ctx;
11303
11304           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
11305                                   /*entering_scope=*/1);
11306           if (ctx != DECL_CONTEXT (t))
11307             {
11308               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
11309               if (!r)
11310                 {
11311                   if (complain & tf_error)
11312                     error ("using invalid field %qD", t);
11313                   return error_mark_node;
11314                 }
11315               return r;
11316             }
11317         }
11318
11319       return t;
11320
11321     case VAR_DECL:
11322     case FUNCTION_DECL:
11323       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
11324           || local_variable_p (t))
11325         t = tsubst (t, args, complain, in_decl);
11326       mark_used (t);
11327       return t;
11328
11329     case OVERLOAD:
11330       /* An OVERLOAD will always be a non-dependent overload set; an
11331          overload set from function scope will just be represented with an
11332          IDENTIFIER_NODE, and from class scope with a BASELINK.  */
11333       gcc_assert (!uses_template_parms (t));
11334       return t;
11335
11336     case BASELINK:
11337       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
11338
11339     case TEMPLATE_DECL:
11340       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
11341         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
11342                        args, complain, in_decl);
11343       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
11344         return tsubst (t, args, complain, in_decl);
11345       else if (DECL_CLASS_SCOPE_P (t)
11346                && uses_template_parms (DECL_CONTEXT (t)))
11347         {
11348           /* Template template argument like the following example need
11349              special treatment:
11350
11351                template <template <class> class TT> struct C {};
11352                template <class T> struct D {
11353                  template <class U> struct E {};
11354                  C<E> c;                                // #1
11355                };
11356                D<int> d;                                // #2
11357
11358              We are processing the template argument `E' in #1 for
11359              the template instantiation #2.  Originally, `E' is a
11360              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
11361              have to substitute this with one having context `D<int>'.  */
11362
11363           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
11364           return lookup_field (context, DECL_NAME(t), 0, false);
11365         }
11366       else
11367         /* Ordinary template template argument.  */
11368         return t;
11369
11370     case CAST_EXPR:
11371     case REINTERPRET_CAST_EXPR:
11372     case CONST_CAST_EXPR:
11373     case STATIC_CAST_EXPR:
11374     case DYNAMIC_CAST_EXPR:
11375     case NOP_EXPR:
11376       return build1
11377         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11378          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
11379
11380     case SIZEOF_EXPR:
11381       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
11382         {
11383           /* We only want to compute the number of arguments.  */
11384           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
11385                                                 complain, in_decl);
11386           int len = 0;
11387
11388           if (TREE_CODE (expanded) == TREE_VEC)
11389             len = TREE_VEC_LENGTH (expanded);
11390
11391           if (expanded == error_mark_node)
11392             return error_mark_node;
11393           else if (PACK_EXPANSION_P (expanded)
11394                    || (TREE_CODE (expanded) == TREE_VEC
11395                        && len > 0
11396                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
11397             {
11398               if (TREE_CODE (expanded) == TREE_VEC)
11399                 expanded = TREE_VEC_ELT (expanded, len - 1);
11400
11401               if (TYPE_P (expanded))
11402                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
11403                                                    complain & tf_error);
11404               else
11405                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
11406                                                    complain & tf_error);
11407             }
11408           else
11409             return build_int_cst (size_type_node, len);
11410         }
11411       /* Fall through */
11412
11413     case INDIRECT_REF:
11414     case NEGATE_EXPR:
11415     case TRUTH_NOT_EXPR:
11416     case BIT_NOT_EXPR:
11417     case ADDR_EXPR:
11418     case UNARY_PLUS_EXPR:      /* Unary + */
11419     case ALIGNOF_EXPR:
11420     case AT_ENCODE_EXPR:
11421     case ARROW_EXPR:
11422     case THROW_EXPR:
11423     case TYPEID_EXPR:
11424     case REALPART_EXPR:
11425     case IMAGPART_EXPR:
11426       return build1
11427         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11428          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
11429
11430     case COMPONENT_REF:
11431       {
11432         tree object;
11433         tree name;
11434
11435         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
11436         name = TREE_OPERAND (t, 1);
11437         if (TREE_CODE (name) == BIT_NOT_EXPR)
11438           {
11439             name = tsubst_copy (TREE_OPERAND (name, 0), args,
11440                                 complain, in_decl);
11441             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
11442           }
11443         else if (TREE_CODE (name) == SCOPE_REF
11444                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
11445           {
11446             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
11447                                      complain, in_decl);
11448             name = TREE_OPERAND (name, 1);
11449             name = tsubst_copy (TREE_OPERAND (name, 0), args,
11450                                 complain, in_decl);
11451             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
11452             name = build_qualified_name (/*type=*/NULL_TREE,
11453                                          base, name,
11454                                          /*template_p=*/false);
11455           }
11456         else if (TREE_CODE (name) == BASELINK)
11457           name = tsubst_baselink (name,
11458                                   non_reference (TREE_TYPE (object)),
11459                                   args, complain,
11460                                   in_decl);
11461         else
11462           name = tsubst_copy (name, args, complain, in_decl);
11463         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
11464       }
11465
11466     case PLUS_EXPR:
11467     case MINUS_EXPR:
11468     case MULT_EXPR:
11469     case TRUNC_DIV_EXPR:
11470     case CEIL_DIV_EXPR:
11471     case FLOOR_DIV_EXPR:
11472     case ROUND_DIV_EXPR:
11473     case EXACT_DIV_EXPR:
11474     case BIT_AND_EXPR:
11475     case BIT_IOR_EXPR:
11476     case BIT_XOR_EXPR:
11477     case TRUNC_MOD_EXPR:
11478     case FLOOR_MOD_EXPR:
11479     case TRUTH_ANDIF_EXPR:
11480     case TRUTH_ORIF_EXPR:
11481     case TRUTH_AND_EXPR:
11482     case TRUTH_OR_EXPR:
11483     case RSHIFT_EXPR:
11484     case LSHIFT_EXPR:
11485     case RROTATE_EXPR:
11486     case LROTATE_EXPR:
11487     case EQ_EXPR:
11488     case NE_EXPR:
11489     case MAX_EXPR:
11490     case MIN_EXPR:
11491     case LE_EXPR:
11492     case GE_EXPR:
11493     case LT_EXPR:
11494     case GT_EXPR:
11495     case COMPOUND_EXPR:
11496     case DOTSTAR_EXPR:
11497     case MEMBER_REF:
11498     case PREDECREMENT_EXPR:
11499     case PREINCREMENT_EXPR:
11500     case POSTDECREMENT_EXPR:
11501     case POSTINCREMENT_EXPR:
11502       return build_nt
11503         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11504          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11505
11506     case SCOPE_REF:
11507       return build_qualified_name (/*type=*/NULL_TREE,
11508                                    tsubst_copy (TREE_OPERAND (t, 0),
11509                                                 args, complain, in_decl),
11510                                    tsubst_copy (TREE_OPERAND (t, 1),
11511                                                 args, complain, in_decl),
11512                                    QUALIFIED_NAME_IS_TEMPLATE (t));
11513
11514     case ARRAY_REF:
11515       return build_nt
11516         (ARRAY_REF,
11517          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11518          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11519          NULL_TREE, NULL_TREE);
11520
11521     case CALL_EXPR:
11522       {
11523         int n = VL_EXP_OPERAND_LENGTH (t);
11524         tree result = build_vl_exp (CALL_EXPR, n);
11525         int i;
11526         for (i = 0; i < n; i++)
11527           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
11528                                              complain, in_decl);
11529         return result;
11530       }
11531
11532     case COND_EXPR:
11533     case MODOP_EXPR:
11534     case PSEUDO_DTOR_EXPR:
11535       {
11536         r = build_nt
11537           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11538            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11539            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
11540         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
11541         return r;
11542       }
11543
11544     case NEW_EXPR:
11545       {
11546         r = build_nt
11547         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11548          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11549          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
11550         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
11551         return r;
11552       }
11553
11554     case DELETE_EXPR:
11555       {
11556         r = build_nt
11557         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11558          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11559         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
11560         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
11561         return r;
11562       }
11563
11564     case TEMPLATE_ID_EXPR:
11565       {
11566         /* Substituted template arguments */
11567         tree fn = TREE_OPERAND (t, 0);
11568         tree targs = TREE_OPERAND (t, 1);
11569
11570         fn = tsubst_copy (fn, args, complain, in_decl);
11571         if (targs)
11572           targs = tsubst_template_args (targs, args, complain, in_decl);
11573
11574         return lookup_template_function (fn, targs);
11575       }
11576
11577     case TREE_LIST:
11578       {
11579         tree purpose, value, chain;
11580
11581         if (t == void_list_node)
11582           return t;
11583
11584         purpose = TREE_PURPOSE (t);
11585         if (purpose)
11586           purpose = tsubst_copy (purpose, args, complain, in_decl);
11587         value = TREE_VALUE (t);
11588         if (value)
11589           value = tsubst_copy (value, args, complain, in_decl);
11590         chain = TREE_CHAIN (t);
11591         if (chain && chain != void_type_node)
11592           chain = tsubst_copy (chain, args, complain, in_decl);
11593         if (purpose == TREE_PURPOSE (t)
11594             && value == TREE_VALUE (t)
11595             && chain == TREE_CHAIN (t))
11596           return t;
11597         return tree_cons (purpose, value, chain);
11598       }
11599
11600     case RECORD_TYPE:
11601     case UNION_TYPE:
11602     case ENUMERAL_TYPE:
11603     case INTEGER_TYPE:
11604     case TEMPLATE_TYPE_PARM:
11605     case TEMPLATE_TEMPLATE_PARM:
11606     case BOUND_TEMPLATE_TEMPLATE_PARM:
11607     case TEMPLATE_PARM_INDEX:
11608     case POINTER_TYPE:
11609     case REFERENCE_TYPE:
11610     case OFFSET_TYPE:
11611     case FUNCTION_TYPE:
11612     case METHOD_TYPE:
11613     case ARRAY_TYPE:
11614     case TYPENAME_TYPE:
11615     case UNBOUND_CLASS_TEMPLATE:
11616     case TYPEOF_TYPE:
11617     case DECLTYPE_TYPE:
11618     case TYPE_DECL:
11619       return tsubst (t, args, complain, in_decl);
11620
11621     case IDENTIFIER_NODE:
11622       if (IDENTIFIER_TYPENAME_P (t))
11623         {
11624           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11625           return mangle_conv_op_name_for_type (new_type);
11626         }
11627       else
11628         return t;
11629
11630     case CONSTRUCTOR:
11631       /* This is handled by tsubst_copy_and_build.  */
11632       gcc_unreachable ();
11633
11634     case VA_ARG_EXPR:
11635       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
11636                                           in_decl),
11637                              tsubst (TREE_TYPE (t), args, complain, in_decl));
11638
11639     case CLEANUP_POINT_EXPR:
11640       /* We shouldn't have built any of these during initial template
11641          generation.  Instead, they should be built during instantiation
11642          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
11643       gcc_unreachable ();
11644
11645     case OFFSET_REF:
11646       r = build2
11647         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11648          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11649          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11650       PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
11651       mark_used (TREE_OPERAND (r, 1));
11652       return r;
11653
11654     case EXPR_PACK_EXPANSION:
11655       error ("invalid use of pack expansion expression");
11656       return error_mark_node;
11657
11658     case NONTYPE_ARGUMENT_PACK:
11659       error ("use %<...%> to expand argument pack");
11660       return error_mark_node;
11661
11662     case INTEGER_CST:
11663     case REAL_CST:
11664     case STRING_CST:
11665     case COMPLEX_CST:
11666       {
11667         /* Instantiate any typedefs in the type.  */
11668         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11669         r = fold_convert (type, t);
11670         gcc_assert (TREE_CODE (r) == code);
11671         return r;
11672       }
11673
11674     case PTRMEM_CST:
11675       /* These can sometimes show up in a partial instantiation, but never
11676          involve template parms.  */
11677       gcc_assert (!uses_template_parms (t));
11678       return t;
11679
11680     default:
11681       gcc_unreachable ();
11682     }
11683 }
11684
11685 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
11686
11687 static tree
11688 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
11689                     tree in_decl)
11690 {
11691   tree new_clauses = NULL, nc, oc;
11692
11693   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
11694     {
11695       nc = copy_node (oc);
11696       OMP_CLAUSE_CHAIN (nc) = new_clauses;
11697       new_clauses = nc;
11698
11699       switch (OMP_CLAUSE_CODE (nc))
11700         {
11701         case OMP_CLAUSE_LASTPRIVATE:
11702           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
11703             {
11704               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
11705               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
11706                            in_decl, /*integral_constant_expression_p=*/false);
11707               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
11708                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
11709             }
11710           /* FALLTHRU */
11711         case OMP_CLAUSE_PRIVATE:
11712         case OMP_CLAUSE_SHARED:
11713         case OMP_CLAUSE_FIRSTPRIVATE:
11714         case OMP_CLAUSE_REDUCTION:
11715         case OMP_CLAUSE_COPYIN:
11716         case OMP_CLAUSE_COPYPRIVATE:
11717         case OMP_CLAUSE_IF:
11718         case OMP_CLAUSE_NUM_THREADS:
11719         case OMP_CLAUSE_SCHEDULE:
11720         case OMP_CLAUSE_COLLAPSE:
11721           OMP_CLAUSE_OPERAND (nc, 0)
11722             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
11723                            in_decl, /*integral_constant_expression_p=*/false);
11724           break;
11725         case OMP_CLAUSE_NOWAIT:
11726         case OMP_CLAUSE_ORDERED:
11727         case OMP_CLAUSE_DEFAULT:
11728         case OMP_CLAUSE_UNTIED:
11729           break;
11730         default:
11731           gcc_unreachable ();
11732         }
11733     }
11734
11735   return finish_omp_clauses (nreverse (new_clauses));
11736 }
11737
11738 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
11739
11740 static tree
11741 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
11742                           tree in_decl)
11743 {
11744 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
11745
11746   tree purpose, value, chain;
11747
11748   if (t == NULL)
11749     return t;
11750
11751   if (TREE_CODE (t) != TREE_LIST)
11752     return tsubst_copy_and_build (t, args, complain, in_decl,
11753                                   /*function_p=*/false,
11754                                   /*integral_constant_expression_p=*/false);
11755
11756   if (t == void_list_node)
11757     return t;
11758
11759   purpose = TREE_PURPOSE (t);
11760   if (purpose)
11761     purpose = RECUR (purpose);
11762   value = TREE_VALUE (t);
11763   if (value && TREE_CODE (value) != LABEL_DECL)
11764     value = RECUR (value);
11765   chain = TREE_CHAIN (t);
11766   if (chain && chain != void_type_node)
11767     chain = RECUR (chain);
11768   return tree_cons (purpose, value, chain);
11769 #undef RECUR
11770 }
11771
11772 /* Substitute one OMP_FOR iterator.  */
11773
11774 static void
11775 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
11776                          tree condv, tree incrv, tree *clauses,
11777                          tree args, tsubst_flags_t complain, tree in_decl,
11778                          bool integral_constant_expression_p)
11779 {
11780 #define RECUR(NODE)                             \
11781   tsubst_expr ((NODE), args, complain, in_decl, \
11782                integral_constant_expression_p)
11783   tree decl, init, cond, incr, auto_node;
11784
11785   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
11786   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
11787   decl = RECUR (TREE_OPERAND (init, 0));
11788   init = TREE_OPERAND (init, 1);
11789   auto_node = type_uses_auto (TREE_TYPE (decl));
11790   if (auto_node && init)
11791     {
11792       tree init_expr = init;
11793       if (TREE_CODE (init_expr) == DECL_EXPR)
11794         init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
11795       init_expr = RECUR (init_expr);
11796       TREE_TYPE (decl)
11797         = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
11798     }
11799   gcc_assert (!type_dependent_expression_p (decl));
11800
11801   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
11802     {
11803       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
11804       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
11805       if (TREE_CODE (incr) == MODIFY_EXPR)
11806         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
11807                                     RECUR (TREE_OPERAND (incr, 1)),
11808                                     complain);
11809       else
11810         incr = RECUR (incr);
11811       TREE_VEC_ELT (declv, i) = decl;
11812       TREE_VEC_ELT (initv, i) = init;
11813       TREE_VEC_ELT (condv, i) = cond;
11814       TREE_VEC_ELT (incrv, i) = incr;
11815       return;
11816     }
11817
11818   if (init && TREE_CODE (init) != DECL_EXPR)
11819     {
11820       tree c;
11821       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
11822         {
11823           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
11824                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
11825               && OMP_CLAUSE_DECL (c) == decl)
11826             break;
11827           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
11828                    && OMP_CLAUSE_DECL (c) == decl)
11829             error ("iteration variable %qD should not be firstprivate", decl);
11830           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
11831                    && OMP_CLAUSE_DECL (c) == decl)
11832             error ("iteration variable %qD should not be reduction", decl);
11833         }
11834       if (c == NULL)
11835         {
11836           c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
11837           OMP_CLAUSE_DECL (c) = decl;
11838           c = finish_omp_clauses (c);
11839           if (c)
11840             {
11841               OMP_CLAUSE_CHAIN (c) = *clauses;
11842               *clauses = c;
11843             }
11844         }
11845     }
11846   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
11847   if (COMPARISON_CLASS_P (cond))
11848     cond = build2 (TREE_CODE (cond), boolean_type_node,
11849                    RECUR (TREE_OPERAND (cond, 0)),
11850                    RECUR (TREE_OPERAND (cond, 1)));
11851   else
11852     cond = RECUR (cond);
11853   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
11854   switch (TREE_CODE (incr))
11855     {
11856     case PREINCREMENT_EXPR:
11857     case PREDECREMENT_EXPR:
11858     case POSTINCREMENT_EXPR:
11859     case POSTDECREMENT_EXPR:
11860       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
11861                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
11862       break;
11863     case MODIFY_EXPR:
11864       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
11865           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
11866         {
11867           tree rhs = TREE_OPERAND (incr, 1);
11868           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
11869                          RECUR (TREE_OPERAND (incr, 0)),
11870                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
11871                                  RECUR (TREE_OPERAND (rhs, 0)),
11872                                  RECUR (TREE_OPERAND (rhs, 1))));
11873         }
11874       else
11875         incr = RECUR (incr);
11876       break;
11877     case MODOP_EXPR:
11878       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
11879           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
11880         {
11881           tree lhs = RECUR (TREE_OPERAND (incr, 0));
11882           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
11883                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
11884                                  TREE_TYPE (decl), lhs,
11885                                  RECUR (TREE_OPERAND (incr, 2))));
11886         }
11887       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
11888                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
11889                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
11890         {
11891           tree rhs = TREE_OPERAND (incr, 2);
11892           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
11893                          RECUR (TREE_OPERAND (incr, 0)),
11894                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
11895                                  RECUR (TREE_OPERAND (rhs, 0)),
11896                                  RECUR (TREE_OPERAND (rhs, 1))));
11897         }
11898       else
11899         incr = RECUR (incr);
11900       break;
11901     default:
11902       incr = RECUR (incr);
11903       break;
11904     }
11905
11906   TREE_VEC_ELT (declv, i) = decl;
11907   TREE_VEC_ELT (initv, i) = init;
11908   TREE_VEC_ELT (condv, i) = cond;
11909   TREE_VEC_ELT (incrv, i) = incr;
11910 #undef RECUR
11911 }
11912
11913 /* Like tsubst_copy for expressions, etc. but also does semantic
11914    processing.  */
11915
11916 static tree
11917 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
11918              bool integral_constant_expression_p)
11919 {
11920 #define RECUR(NODE)                             \
11921   tsubst_expr ((NODE), args, complain, in_decl, \
11922                integral_constant_expression_p)
11923
11924   tree stmt, tmp;
11925
11926   if (t == NULL_TREE || t == error_mark_node)
11927     return t;
11928
11929   if (EXPR_HAS_LOCATION (t))
11930     input_location = EXPR_LOCATION (t);
11931   if (STATEMENT_CODE_P (TREE_CODE (t)))
11932     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
11933
11934   switch (TREE_CODE (t))
11935     {
11936     case STATEMENT_LIST:
11937       {
11938         tree_stmt_iterator i;
11939         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
11940           RECUR (tsi_stmt (i));
11941         break;
11942       }
11943
11944     case CTOR_INITIALIZER:
11945       finish_mem_initializers (tsubst_initializer_list
11946                                (TREE_OPERAND (t, 0), args));
11947       break;
11948
11949     case RETURN_EXPR:
11950       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
11951       break;
11952
11953     case EXPR_STMT:
11954       tmp = RECUR (EXPR_STMT_EXPR (t));
11955       if (EXPR_STMT_STMT_EXPR_RESULT (t))
11956         finish_stmt_expr_expr (tmp, cur_stmt_expr);
11957       else
11958         finish_expr_stmt (tmp);
11959       break;
11960
11961     case USING_STMT:
11962       do_using_directive (USING_STMT_NAMESPACE (t));
11963       break;
11964
11965     case DECL_EXPR:
11966       {
11967         tree decl, pattern_decl;
11968         tree init;
11969
11970         pattern_decl = decl = DECL_EXPR_DECL (t);
11971         if (TREE_CODE (decl) == LABEL_DECL)
11972           finish_label_decl (DECL_NAME (decl));
11973         else if (TREE_CODE (decl) == USING_DECL)
11974           {
11975             tree scope = USING_DECL_SCOPE (decl);
11976             tree name = DECL_NAME (decl);
11977             tree decl;
11978
11979             scope = tsubst (scope, args, complain, in_decl);
11980             decl = lookup_qualified_name (scope, name,
11981                                           /*is_type_p=*/false,
11982                                           /*complain=*/false);
11983             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
11984               qualified_name_lookup_error (scope, name, decl, input_location);
11985             else
11986               do_local_using_decl (decl, scope, name);
11987           }
11988         else
11989           {
11990             init = DECL_INITIAL (decl);
11991             decl = tsubst (decl, args, complain, in_decl);
11992             if (decl != error_mark_node)
11993               {
11994                 /* By marking the declaration as instantiated, we avoid
11995                    trying to instantiate it.  Since instantiate_decl can't
11996                    handle local variables, and since we've already done
11997                    all that needs to be done, that's the right thing to
11998                    do.  */
11999                 if (TREE_CODE (decl) == VAR_DECL)
12000                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12001                 if (TREE_CODE (decl) == VAR_DECL
12002                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
12003                   /* Anonymous aggregates are a special case.  */
12004                   finish_anon_union (decl);
12005                 else
12006                   {
12007                     int const_init = false;
12008                     maybe_push_decl (decl);
12009                     if (TREE_CODE (decl) == VAR_DECL
12010                         && DECL_PRETTY_FUNCTION_P (decl))
12011                       {
12012                         /* For __PRETTY_FUNCTION__ we have to adjust the
12013                            initializer.  */
12014                         const char *const name
12015                           = cxx_printable_name (current_function_decl, 2);
12016                         init = cp_fname_init (name, &TREE_TYPE (decl));
12017                       }
12018                     else
12019                       {
12020                         tree t = RECUR (init);
12021
12022                         if (init && !t)
12023                           {
12024                             /* If we had an initializer but it
12025                                instantiated to nothing,
12026                                value-initialize the object.  This will
12027                                only occur when the initializer was a
12028                                pack expansion where the parameter packs
12029                                used in that expansion were of length
12030                                zero.  */
12031                             init = build_value_init (TREE_TYPE (decl),
12032                                                      complain);
12033                             if (TREE_CODE (init) == AGGR_INIT_EXPR)
12034                               init = get_target_expr (init);
12035                           }
12036                         else
12037                           init = t;
12038                       }
12039
12040                     if (TREE_CODE (decl) == VAR_DECL)
12041                       const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
12042                                     (pattern_decl));
12043                     cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
12044                   }
12045               }
12046           }
12047
12048         /* A DECL_EXPR can also be used as an expression, in the condition
12049            clause of an if/for/while construct.  */
12050         return decl;
12051       }
12052
12053     case FOR_STMT:
12054       stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12055       RECUR (FOR_INIT_STMT (t));
12056       finish_for_init_stmt (stmt);
12057       tmp = RECUR (FOR_COND (t));
12058       finish_for_cond (tmp, stmt);
12059       tmp = RECUR (FOR_EXPR (t));
12060       finish_for_expr (tmp, stmt);
12061       RECUR (FOR_BODY (t));
12062       finish_for_stmt (stmt);
12063       break;
12064
12065     case RANGE_FOR_STMT:
12066       {
12067         tree decl, expr;
12068         stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12069         decl = RANGE_FOR_DECL (t);
12070         decl = tsubst (decl, args, complain, in_decl);
12071         maybe_push_decl (decl);
12072         expr = RECUR (RANGE_FOR_EXPR (t));
12073         stmt = cp_convert_range_for (stmt, decl, expr);
12074         RECUR (RANGE_FOR_BODY (t));
12075         finish_for_stmt (stmt);
12076       }
12077       break;
12078
12079     case WHILE_STMT:
12080       stmt = begin_while_stmt ();
12081       tmp = RECUR (WHILE_COND (t));
12082       finish_while_stmt_cond (tmp, stmt);
12083       RECUR (WHILE_BODY (t));
12084       finish_while_stmt (stmt);
12085       break;
12086
12087     case DO_STMT:
12088       stmt = begin_do_stmt ();
12089       RECUR (DO_BODY (t));
12090       finish_do_body (stmt);
12091       tmp = RECUR (DO_COND (t));
12092       finish_do_stmt (tmp, stmt);
12093       break;
12094
12095     case IF_STMT:
12096       stmt = begin_if_stmt ();
12097       tmp = RECUR (IF_COND (t));
12098       finish_if_stmt_cond (tmp, stmt);
12099       RECUR (THEN_CLAUSE (t));
12100       finish_then_clause (stmt);
12101
12102       if (ELSE_CLAUSE (t))
12103         {
12104           begin_else_clause (stmt);
12105           RECUR (ELSE_CLAUSE (t));
12106           finish_else_clause (stmt);
12107         }
12108
12109       finish_if_stmt (stmt);
12110       break;
12111
12112     case BIND_EXPR:
12113       if (BIND_EXPR_BODY_BLOCK (t))
12114         stmt = begin_function_body ();
12115       else
12116         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
12117                                     ? BCS_TRY_BLOCK : 0);
12118
12119       RECUR (BIND_EXPR_BODY (t));
12120
12121       if (BIND_EXPR_BODY_BLOCK (t))
12122         finish_function_body (stmt);
12123       else
12124         finish_compound_stmt (stmt);
12125       break;
12126
12127     case BREAK_STMT:
12128       finish_break_stmt ();
12129       break;
12130
12131     case CONTINUE_STMT:
12132       finish_continue_stmt ();
12133       break;
12134
12135     case SWITCH_STMT:
12136       stmt = begin_switch_stmt ();
12137       tmp = RECUR (SWITCH_STMT_COND (t));
12138       finish_switch_cond (tmp, stmt);
12139       RECUR (SWITCH_STMT_BODY (t));
12140       finish_switch_stmt (stmt);
12141       break;
12142
12143     case CASE_LABEL_EXPR:
12144       finish_case_label (EXPR_LOCATION (t),
12145                          RECUR (CASE_LOW (t)),
12146                          RECUR (CASE_HIGH (t)));
12147       break;
12148
12149     case LABEL_EXPR:
12150       {
12151         tree decl = LABEL_EXPR_LABEL (t);
12152         tree label;
12153
12154         label = finish_label_stmt (DECL_NAME (decl));
12155         if (DECL_ATTRIBUTES (decl) != NULL_TREE)
12156           cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
12157       }
12158       break;
12159
12160     case GOTO_EXPR:
12161       tmp = GOTO_DESTINATION (t);
12162       if (TREE_CODE (tmp) != LABEL_DECL)
12163         /* Computed goto's must be tsubst'd into.  On the other hand,
12164            non-computed gotos must not be; the identifier in question
12165            will have no binding.  */
12166         tmp = RECUR (tmp);
12167       else
12168         tmp = DECL_NAME (tmp);
12169       finish_goto_stmt (tmp);
12170       break;
12171
12172     case ASM_EXPR:
12173       tmp = finish_asm_stmt
12174         (ASM_VOLATILE_P (t),
12175          RECUR (ASM_STRING (t)),
12176          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
12177          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
12178          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
12179          tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
12180       {
12181         tree asm_expr = tmp;
12182         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
12183           asm_expr = TREE_OPERAND (asm_expr, 0);
12184         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
12185       }
12186       break;
12187
12188     case TRY_BLOCK:
12189       if (CLEANUP_P (t))
12190         {
12191           stmt = begin_try_block ();
12192           RECUR (TRY_STMTS (t));
12193           finish_cleanup_try_block (stmt);
12194           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
12195         }
12196       else
12197         {
12198           tree compound_stmt = NULL_TREE;
12199
12200           if (FN_TRY_BLOCK_P (t))
12201             stmt = begin_function_try_block (&compound_stmt);
12202           else
12203             stmt = begin_try_block ();
12204
12205           RECUR (TRY_STMTS (t));
12206
12207           if (FN_TRY_BLOCK_P (t))
12208             finish_function_try_block (stmt);
12209           else
12210             finish_try_block (stmt);
12211
12212           RECUR (TRY_HANDLERS (t));
12213           if (FN_TRY_BLOCK_P (t))
12214             finish_function_handler_sequence (stmt, compound_stmt);
12215           else
12216             finish_handler_sequence (stmt);
12217         }
12218       break;
12219
12220     case HANDLER:
12221       {
12222         tree decl = HANDLER_PARMS (t);
12223
12224         if (decl)
12225           {
12226             decl = tsubst (decl, args, complain, in_decl);
12227             /* Prevent instantiate_decl from trying to instantiate
12228                this variable.  We've already done all that needs to be
12229                done.  */
12230             if (decl != error_mark_node)
12231               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12232           }
12233         stmt = begin_handler ();
12234         finish_handler_parms (decl, stmt);
12235         RECUR (HANDLER_BODY (t));
12236         finish_handler (stmt);
12237       }
12238       break;
12239
12240     case TAG_DEFN:
12241       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
12242       break;
12243
12244     case STATIC_ASSERT:
12245       {
12246         tree condition = 
12247           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
12248                        args,
12249                        complain, in_decl,
12250                        /*integral_constant_expression_p=*/true);
12251         finish_static_assert (condition,
12252                               STATIC_ASSERT_MESSAGE (t),
12253                               STATIC_ASSERT_SOURCE_LOCATION (t),
12254                               /*member_p=*/false);
12255       }
12256       break;
12257
12258     case OMP_PARALLEL:
12259       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
12260                                 args, complain, in_decl);
12261       stmt = begin_omp_parallel ();
12262       RECUR (OMP_PARALLEL_BODY (t));
12263       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
12264         = OMP_PARALLEL_COMBINED (t);
12265       break;
12266
12267     case OMP_TASK:
12268       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
12269                                 args, complain, in_decl);
12270       stmt = begin_omp_task ();
12271       RECUR (OMP_TASK_BODY (t));
12272       finish_omp_task (tmp, stmt);
12273       break;
12274
12275     case OMP_FOR:
12276       {
12277         tree clauses, body, pre_body;
12278         tree declv, initv, condv, incrv;
12279         int i;
12280
12281         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
12282                                       args, complain, in_decl);
12283         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12284         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12285         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12286         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12287
12288         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
12289           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
12290                                    &clauses, args, complain, in_decl,
12291                                    integral_constant_expression_p);
12292
12293         stmt = begin_omp_structured_block ();
12294
12295         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
12296           if (TREE_VEC_ELT (initv, i) == NULL
12297               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
12298             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
12299           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
12300             {
12301               tree init = RECUR (TREE_VEC_ELT (initv, i));
12302               gcc_assert (init == TREE_VEC_ELT (declv, i));
12303               TREE_VEC_ELT (initv, i) = NULL_TREE;
12304             }
12305           else
12306             {
12307               tree decl_expr = TREE_VEC_ELT (initv, i);
12308               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
12309               gcc_assert (init != NULL);
12310               TREE_VEC_ELT (initv, i) = RECUR (init);
12311               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
12312               RECUR (decl_expr);
12313               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
12314             }
12315
12316         pre_body = push_stmt_list ();
12317         RECUR (OMP_FOR_PRE_BODY (t));
12318         pre_body = pop_stmt_list (pre_body);
12319
12320         body = push_stmt_list ();
12321         RECUR (OMP_FOR_BODY (t));
12322         body = pop_stmt_list (body);
12323
12324         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
12325                             body, pre_body, clauses);
12326
12327         add_stmt (finish_omp_structured_block (stmt));
12328       }
12329       break;
12330
12331     case OMP_SECTIONS:
12332     case OMP_SINGLE:
12333       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
12334       stmt = push_stmt_list ();
12335       RECUR (OMP_BODY (t));
12336       stmt = pop_stmt_list (stmt);
12337
12338       t = copy_node (t);
12339       OMP_BODY (t) = stmt;
12340       OMP_CLAUSES (t) = tmp;
12341       add_stmt (t);
12342       break;
12343
12344     case OMP_SECTION:
12345     case OMP_CRITICAL:
12346     case OMP_MASTER:
12347     case OMP_ORDERED:
12348       stmt = push_stmt_list ();
12349       RECUR (OMP_BODY (t));
12350       stmt = pop_stmt_list (stmt);
12351
12352       t = copy_node (t);
12353       OMP_BODY (t) = stmt;
12354       add_stmt (t);
12355       break;
12356
12357     case OMP_ATOMIC:
12358       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
12359       {
12360         tree op1 = TREE_OPERAND (t, 1);
12361         tree lhs = RECUR (TREE_OPERAND (op1, 0));
12362         tree rhs = RECUR (TREE_OPERAND (op1, 1));
12363         finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
12364       }
12365       break;
12366
12367     case EXPR_PACK_EXPANSION:
12368       error ("invalid use of pack expansion expression");
12369       return error_mark_node;
12370
12371     case NONTYPE_ARGUMENT_PACK:
12372       error ("use %<...%> to expand argument pack");
12373       return error_mark_node;
12374
12375     default:
12376       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
12377
12378       return tsubst_copy_and_build (t, args, complain, in_decl,
12379                                     /*function_p=*/false,
12380                                     integral_constant_expression_p);
12381     }
12382
12383   return NULL_TREE;
12384 #undef RECUR
12385 }
12386
12387 /* T is a postfix-expression that is not being used in a function
12388    call.  Return the substituted version of T.  */
12389
12390 static tree
12391 tsubst_non_call_postfix_expression (tree t, tree args,
12392                                     tsubst_flags_t complain,
12393                                     tree in_decl)
12394 {
12395   if (TREE_CODE (t) == SCOPE_REF)
12396     t = tsubst_qualified_id (t, args, complain, in_decl,
12397                              /*done=*/false, /*address_p=*/false);
12398   else
12399     t = tsubst_copy_and_build (t, args, complain, in_decl,
12400                                /*function_p=*/false,
12401                                /*integral_constant_expression_p=*/false);
12402
12403   return t;
12404 }
12405
12406 /* Like tsubst but deals with expressions and performs semantic
12407    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
12408
12409 tree
12410 tsubst_copy_and_build (tree t,
12411                        tree args,
12412                        tsubst_flags_t complain,
12413                        tree in_decl,
12414                        bool function_p,
12415                        bool integral_constant_expression_p)
12416 {
12417 #define RECUR(NODE)                                             \
12418   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
12419                          /*function_p=*/false,                  \
12420                          integral_constant_expression_p)
12421
12422   tree op1;
12423
12424   if (t == NULL_TREE || t == error_mark_node)
12425     return t;
12426
12427   switch (TREE_CODE (t))
12428     {
12429     case USING_DECL:
12430       t = DECL_NAME (t);
12431       /* Fall through.  */
12432     case IDENTIFIER_NODE:
12433       {
12434         tree decl;
12435         cp_id_kind idk;
12436         bool non_integral_constant_expression_p;
12437         const char *error_msg;
12438
12439         if (IDENTIFIER_TYPENAME_P (t))
12440           {
12441             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12442             t = mangle_conv_op_name_for_type (new_type);
12443           }
12444
12445         /* Look up the name.  */
12446         decl = lookup_name (t);
12447
12448         /* By convention, expressions use ERROR_MARK_NODE to indicate
12449            failure, not NULL_TREE.  */
12450         if (decl == NULL_TREE)
12451           decl = error_mark_node;
12452
12453         decl = finish_id_expression (t, decl, NULL_TREE,
12454                                      &idk,
12455                                      integral_constant_expression_p,
12456                                      /*allow_non_integral_constant_expression_p=*/false,
12457                                      &non_integral_constant_expression_p,
12458                                      /*template_p=*/false,
12459                                      /*done=*/true,
12460                                      /*address_p=*/false,
12461                                      /*template_arg_p=*/false,
12462                                      &error_msg,
12463                                      input_location);
12464         if (error_msg)
12465           error (error_msg);
12466         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
12467           decl = unqualified_name_lookup_error (decl);
12468         return decl;
12469       }
12470
12471     case TEMPLATE_ID_EXPR:
12472       {
12473         tree object;
12474         tree templ = RECUR (TREE_OPERAND (t, 0));
12475         tree targs = TREE_OPERAND (t, 1);
12476
12477         if (targs)
12478           targs = tsubst_template_args (targs, args, complain, in_decl);
12479
12480         if (TREE_CODE (templ) == COMPONENT_REF)
12481           {
12482             object = TREE_OPERAND (templ, 0);
12483             templ = TREE_OPERAND (templ, 1);
12484           }
12485         else
12486           object = NULL_TREE;
12487         templ = lookup_template_function (templ, targs);
12488
12489         if (object)
12490           return build3 (COMPONENT_REF, TREE_TYPE (templ),
12491                          object, templ, NULL_TREE);
12492         else
12493           return baselink_for_fns (templ);
12494       }
12495
12496     case INDIRECT_REF:
12497       {
12498         tree r = RECUR (TREE_OPERAND (t, 0));
12499
12500         if (REFERENCE_REF_P (t))
12501           {
12502             /* A type conversion to reference type will be enclosed in
12503                such an indirect ref, but the substitution of the cast
12504                will have also added such an indirect ref.  */
12505             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
12506               r = convert_from_reference (r);
12507           }
12508         else
12509           r = build_x_indirect_ref (r, RO_UNARY_STAR, complain);
12510         return r;
12511       }
12512
12513     case NOP_EXPR:
12514       return build_nop
12515         (tsubst (TREE_TYPE (t), args, complain, in_decl),
12516          RECUR (TREE_OPERAND (t, 0)));
12517
12518     case CAST_EXPR:
12519     case REINTERPRET_CAST_EXPR:
12520     case CONST_CAST_EXPR:
12521     case DYNAMIC_CAST_EXPR:
12522     case STATIC_CAST_EXPR:
12523       {
12524         tree type;
12525         tree op;
12526
12527         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12528         if (integral_constant_expression_p
12529             && !cast_valid_in_integral_constant_expression_p (type))
12530           {
12531             if (complain & tf_error)
12532               error ("a cast to a type other than an integral or "
12533                      "enumeration type cannot appear in a constant-expression");
12534             return error_mark_node; 
12535           }
12536
12537         op = RECUR (TREE_OPERAND (t, 0));
12538
12539         switch (TREE_CODE (t))
12540           {
12541           case CAST_EXPR:
12542             return build_functional_cast (type, op, complain);
12543           case REINTERPRET_CAST_EXPR:
12544             return build_reinterpret_cast (type, op, complain);
12545           case CONST_CAST_EXPR:
12546             return build_const_cast (type, op, complain);
12547           case DYNAMIC_CAST_EXPR:
12548             return build_dynamic_cast (type, op, complain);
12549           case STATIC_CAST_EXPR:
12550             return build_static_cast (type, op, complain);
12551           default:
12552             gcc_unreachable ();
12553           }
12554       }
12555
12556     case POSTDECREMENT_EXPR:
12557     case POSTINCREMENT_EXPR:
12558       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12559                                                 args, complain, in_decl);
12560       return build_x_unary_op (TREE_CODE (t), op1, complain);
12561
12562     case PREDECREMENT_EXPR:
12563     case PREINCREMENT_EXPR:
12564     case NEGATE_EXPR:
12565     case BIT_NOT_EXPR:
12566     case ABS_EXPR:
12567     case TRUTH_NOT_EXPR:
12568     case UNARY_PLUS_EXPR:  /* Unary + */
12569     case REALPART_EXPR:
12570     case IMAGPART_EXPR:
12571       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
12572                                complain);
12573
12574     case ADDR_EXPR:
12575       op1 = TREE_OPERAND (t, 0);
12576       if (TREE_CODE (op1) == LABEL_DECL)
12577         return finish_label_address_expr (DECL_NAME (op1),
12578                                           EXPR_LOCATION (op1));
12579       if (TREE_CODE (op1) == SCOPE_REF)
12580         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
12581                                    /*done=*/true, /*address_p=*/true);
12582       else
12583         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
12584                                                   in_decl);
12585       return build_x_unary_op (ADDR_EXPR, op1, complain);
12586
12587     case PLUS_EXPR:
12588     case MINUS_EXPR:
12589     case MULT_EXPR:
12590     case TRUNC_DIV_EXPR:
12591     case CEIL_DIV_EXPR:
12592     case FLOOR_DIV_EXPR:
12593     case ROUND_DIV_EXPR:
12594     case EXACT_DIV_EXPR:
12595     case BIT_AND_EXPR:
12596     case BIT_IOR_EXPR:
12597     case BIT_XOR_EXPR:
12598     case TRUNC_MOD_EXPR:
12599     case FLOOR_MOD_EXPR:
12600     case TRUTH_ANDIF_EXPR:
12601     case TRUTH_ORIF_EXPR:
12602     case TRUTH_AND_EXPR:
12603     case TRUTH_OR_EXPR:
12604     case RSHIFT_EXPR:
12605     case LSHIFT_EXPR:
12606     case RROTATE_EXPR:
12607     case LROTATE_EXPR:
12608     case EQ_EXPR:
12609     case NE_EXPR:
12610     case MAX_EXPR:
12611     case MIN_EXPR:
12612     case LE_EXPR:
12613     case GE_EXPR:
12614     case LT_EXPR:
12615     case GT_EXPR:
12616     case MEMBER_REF:
12617     case DOTSTAR_EXPR:
12618       return build_x_binary_op
12619         (TREE_CODE (t),
12620          RECUR (TREE_OPERAND (t, 0)),
12621          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
12622           ? ERROR_MARK
12623           : TREE_CODE (TREE_OPERAND (t, 0))),
12624          RECUR (TREE_OPERAND (t, 1)),
12625          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
12626           ? ERROR_MARK
12627           : TREE_CODE (TREE_OPERAND (t, 1))),
12628          /*overloaded_p=*/NULL,
12629          complain);
12630
12631     case SCOPE_REF:
12632       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
12633                                   /*address_p=*/false);
12634     case ARRAY_REF:
12635       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12636                                                 args, complain, in_decl);
12637       return build_x_array_ref (op1, RECUR (TREE_OPERAND (t, 1)), complain);
12638
12639     case SIZEOF_EXPR:
12640       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12641         return tsubst_copy (t, args, complain, in_decl);
12642       /* Fall through */
12643       
12644     case ALIGNOF_EXPR:
12645       op1 = TREE_OPERAND (t, 0);
12646       if (!args)
12647         {
12648           /* When there are no ARGS, we are trying to evaluate a
12649              non-dependent expression from the parser.  Trying to do
12650              the substitutions may not work.  */
12651           if (!TYPE_P (op1))
12652             op1 = TREE_TYPE (op1);
12653         }
12654       else
12655         {
12656           ++cp_unevaluated_operand;
12657           ++c_inhibit_evaluation_warnings;
12658           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
12659                                        /*function_p=*/false,
12660                                        /*integral_constant_expression_p=*/false);
12661           --cp_unevaluated_operand;
12662           --c_inhibit_evaluation_warnings;
12663         }
12664       if (TYPE_P (op1))
12665         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
12666                                            complain & tf_error);
12667       else
12668         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
12669                                            complain & tf_error);
12670
12671     case AT_ENCODE_EXPR:
12672       {
12673         op1 = TREE_OPERAND (t, 0);
12674         ++cp_unevaluated_operand;
12675         ++c_inhibit_evaluation_warnings;
12676         op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
12677                                      /*function_p=*/false,
12678                                      /*integral_constant_expression_p=*/false);
12679         --cp_unevaluated_operand;
12680         --c_inhibit_evaluation_warnings;
12681         return objc_build_encode_expr (op1);
12682       }
12683
12684     case NOEXCEPT_EXPR:
12685       op1 = TREE_OPERAND (t, 0);
12686       ++cp_unevaluated_operand;
12687       ++c_inhibit_evaluation_warnings;
12688       op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
12689                                    /*function_p=*/false,
12690                                    /*integral_constant_expression_p=*/false);
12691       --cp_unevaluated_operand;
12692       --c_inhibit_evaluation_warnings;
12693       return finish_noexcept_expr (op1, complain);
12694
12695     case MODOP_EXPR:
12696       {
12697         tree r = build_x_modify_expr
12698           (RECUR (TREE_OPERAND (t, 0)),
12699            TREE_CODE (TREE_OPERAND (t, 1)),
12700            RECUR (TREE_OPERAND (t, 2)),
12701            complain);
12702         /* TREE_NO_WARNING must be set if either the expression was
12703            parenthesized or it uses an operator such as >>= rather
12704            than plain assignment.  In the former case, it was already
12705            set and must be copied.  In the latter case,
12706            build_x_modify_expr sets it and it must not be reset
12707            here.  */
12708         if (TREE_NO_WARNING (t))
12709           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12710         return r;
12711       }
12712
12713     case ARROW_EXPR:
12714       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12715                                                 args, complain, in_decl);
12716       /* Remember that there was a reference to this entity.  */
12717       if (DECL_P (op1))
12718         mark_used (op1);
12719       return build_x_arrow (op1);
12720
12721     case NEW_EXPR:
12722       {
12723         tree placement = RECUR (TREE_OPERAND (t, 0));
12724         tree init = RECUR (TREE_OPERAND (t, 3));
12725         VEC(tree,gc) *placement_vec;
12726         VEC(tree,gc) *init_vec;
12727         tree ret;
12728
12729         if (placement == NULL_TREE)
12730           placement_vec = NULL;
12731         else
12732           {
12733             placement_vec = make_tree_vector ();
12734             for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
12735               VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement));
12736           }
12737
12738         /* If there was an initializer in the original tree, but it
12739            instantiated to an empty list, then we should pass a
12740            non-NULL empty vector to tell build_new that it was an
12741            empty initializer() rather than no initializer.  This can
12742            only happen when the initializer is a pack expansion whose
12743            parameter packs are of length zero.  */
12744         if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
12745           init_vec = NULL;
12746         else
12747           {
12748             init_vec = make_tree_vector ();
12749             if (init == void_zero_node)
12750               gcc_assert (init_vec != NULL);
12751             else
12752               {
12753                 for (; init != NULL_TREE; init = TREE_CHAIN (init))
12754                   VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init));
12755               }
12756           }
12757
12758         ret = build_new (&placement_vec,
12759                          tsubst (TREE_OPERAND (t, 1), args, complain, in_decl),
12760                          RECUR (TREE_OPERAND (t, 2)),
12761                          &init_vec,
12762                          NEW_EXPR_USE_GLOBAL (t),
12763                          complain);
12764
12765         if (placement_vec != NULL)
12766           release_tree_vector (placement_vec);
12767         if (init_vec != NULL)
12768           release_tree_vector (init_vec);
12769
12770         return ret;
12771       }
12772
12773     case DELETE_EXPR:
12774      return delete_sanity
12775        (RECUR (TREE_OPERAND (t, 0)),
12776         RECUR (TREE_OPERAND (t, 1)),
12777         DELETE_EXPR_USE_VEC (t),
12778         DELETE_EXPR_USE_GLOBAL (t));
12779
12780     case COMPOUND_EXPR:
12781       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
12782                                     RECUR (TREE_OPERAND (t, 1)),
12783                                     complain);
12784
12785     case CALL_EXPR:
12786       {
12787         tree function;
12788         VEC(tree,gc) *call_args;
12789         unsigned int nargs, i;
12790         bool qualified_p;
12791         bool koenig_p;
12792         tree ret;
12793
12794         function = CALL_EXPR_FN (t);
12795         /* When we parsed the expression,  we determined whether or
12796            not Koenig lookup should be performed.  */
12797         koenig_p = KOENIG_LOOKUP_P (t);
12798         if (TREE_CODE (function) == SCOPE_REF)
12799           {
12800             qualified_p = true;
12801             function = tsubst_qualified_id (function, args, complain, in_decl,
12802                                             /*done=*/false,
12803                                             /*address_p=*/false);
12804           }
12805         else
12806           {
12807             if (TREE_CODE (function) == COMPONENT_REF)
12808               {
12809                 tree op = TREE_OPERAND (function, 1);
12810
12811                 qualified_p = (TREE_CODE (op) == SCOPE_REF
12812                                || (BASELINK_P (op)
12813                                    && BASELINK_QUALIFIED_P (op)));
12814               }
12815             else
12816               qualified_p = false;
12817
12818             function = tsubst_copy_and_build (function, args, complain,
12819                                               in_decl,
12820                                               !qualified_p,
12821                                               integral_constant_expression_p);
12822
12823             if (BASELINK_P (function))
12824               qualified_p = true;
12825           }
12826
12827         nargs = call_expr_nargs (t);
12828         call_args = make_tree_vector ();
12829         for (i = 0; i < nargs; ++i)
12830           {
12831             tree arg = CALL_EXPR_ARG (t, i);
12832
12833             if (!PACK_EXPANSION_P (arg))
12834               VEC_safe_push (tree, gc, call_args,
12835                              RECUR (CALL_EXPR_ARG (t, i)));
12836             else
12837               {
12838                 /* Expand the pack expansion and push each entry onto
12839                    CALL_ARGS.  */
12840                 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
12841                 if (TREE_CODE (arg) == TREE_VEC)
12842                   {
12843                     unsigned int len, j;
12844
12845                     len = TREE_VEC_LENGTH (arg);
12846                     for (j = 0; j < len; ++j)
12847                       {
12848                         tree value = TREE_VEC_ELT (arg, j);
12849                         if (value != NULL_TREE)
12850                           value = convert_from_reference (value);
12851                         VEC_safe_push (tree, gc, call_args, value);
12852                       }
12853                   }
12854                 else
12855                   {
12856                     /* A partial substitution.  Add one entry.  */
12857                     VEC_safe_push (tree, gc, call_args, arg);
12858                   }
12859               }
12860           }
12861
12862         /* We do not perform argument-dependent lookup if normal
12863            lookup finds a non-function, in accordance with the
12864            expected resolution of DR 218.  */
12865         if (koenig_p
12866             && ((is_overloaded_fn (function)
12867                  /* If lookup found a member function, the Koenig lookup is
12868                     not appropriate, even if an unqualified-name was used
12869                     to denote the function.  */
12870                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
12871                 || TREE_CODE (function) == IDENTIFIER_NODE)
12872             /* Only do this when substitution turns a dependent call
12873                into a non-dependent call.  */
12874             && type_dependent_expression_p_push (t)
12875             && !any_type_dependent_arguments_p (call_args))
12876           function = perform_koenig_lookup (function, call_args, false);
12877
12878         if (TREE_CODE (function) == IDENTIFIER_NODE)
12879           {
12880             unqualified_name_lookup_error (function);
12881             release_tree_vector (call_args);
12882             return error_mark_node;
12883           }
12884
12885         /* Remember that there was a reference to this entity.  */
12886         if (DECL_P (function))
12887           mark_used (function);
12888
12889         if (TREE_CODE (function) == OFFSET_REF)
12890           ret = build_offset_ref_call_from_tree (function, &call_args);
12891         else if (TREE_CODE (function) == COMPONENT_REF)
12892           {
12893             tree instance = TREE_OPERAND (function, 0);
12894             tree fn = TREE_OPERAND (function, 1);
12895
12896             if (processing_template_decl
12897                 && (type_dependent_expression_p (instance)
12898                     || (!BASELINK_P (fn)
12899                         && TREE_CODE (fn) != FIELD_DECL)
12900                     || type_dependent_expression_p (fn)
12901                     || any_type_dependent_arguments_p (call_args)))
12902               ret = build_nt_call_vec (function, call_args);
12903             else if (!BASELINK_P (fn))
12904               ret = finish_call_expr (function, &call_args,
12905                                        /*disallow_virtual=*/false,
12906                                        /*koenig_p=*/false,
12907                                        complain);
12908             else
12909               ret = (build_new_method_call
12910                       (instance, fn,
12911                        &call_args, NULL_TREE,
12912                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
12913                        /*fn_p=*/NULL,
12914                        complain));
12915           }
12916         else
12917           ret = finish_call_expr (function, &call_args,
12918                                   /*disallow_virtual=*/qualified_p,
12919                                   koenig_p,
12920                                   complain);
12921
12922         release_tree_vector (call_args);
12923
12924         return ret;
12925       }
12926
12927     case COND_EXPR:
12928       return build_x_conditional_expr
12929         (RECUR (TREE_OPERAND (t, 0)),
12930          RECUR (TREE_OPERAND (t, 1)),
12931          RECUR (TREE_OPERAND (t, 2)),
12932          complain);
12933
12934     case PSEUDO_DTOR_EXPR:
12935       return finish_pseudo_destructor_expr
12936         (RECUR (TREE_OPERAND (t, 0)),
12937          RECUR (TREE_OPERAND (t, 1)),
12938          RECUR (TREE_OPERAND (t, 2)));
12939
12940     case TREE_LIST:
12941       {
12942         tree purpose, value, chain;
12943
12944         if (t == void_list_node)
12945           return t;
12946
12947         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
12948             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
12949           {
12950             /* We have pack expansions, so expand those and
12951                create a new list out of it.  */
12952             tree purposevec = NULL_TREE;
12953             tree valuevec = NULL_TREE;
12954             tree chain;
12955             int i, len = -1;
12956
12957             /* Expand the argument expressions.  */
12958             if (TREE_PURPOSE (t))
12959               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
12960                                                  complain, in_decl);
12961             if (TREE_VALUE (t))
12962               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
12963                                                complain, in_decl);
12964
12965             /* Build the rest of the list.  */
12966             chain = TREE_CHAIN (t);
12967             if (chain && chain != void_type_node)
12968               chain = RECUR (chain);
12969
12970             /* Determine the number of arguments.  */
12971             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
12972               {
12973                 len = TREE_VEC_LENGTH (purposevec);
12974                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
12975               }
12976             else if (TREE_CODE (valuevec) == TREE_VEC)
12977               len = TREE_VEC_LENGTH (valuevec);
12978             else
12979               {
12980                 /* Since we only performed a partial substitution into
12981                    the argument pack, we only return a single list
12982                    node.  */
12983                 if (purposevec == TREE_PURPOSE (t)
12984                     && valuevec == TREE_VALUE (t)
12985                     && chain == TREE_CHAIN (t))
12986                   return t;
12987
12988                 return tree_cons (purposevec, valuevec, chain);
12989               }
12990             
12991             /* Convert the argument vectors into a TREE_LIST */
12992             i = len;
12993             while (i > 0)
12994               {
12995                 /* Grab the Ith values.  */
12996                 i--;
12997                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
12998                                      : NULL_TREE;
12999                 value 
13000                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
13001                              : NULL_TREE;
13002
13003                 /* Build the list (backwards).  */
13004                 chain = tree_cons (purpose, value, chain);
13005               }
13006
13007             return chain;
13008           }
13009
13010         purpose = TREE_PURPOSE (t);
13011         if (purpose)
13012           purpose = RECUR (purpose);
13013         value = TREE_VALUE (t);
13014         if (value)
13015           value = RECUR (value);
13016         chain = TREE_CHAIN (t);
13017         if (chain && chain != void_type_node)
13018           chain = RECUR (chain);
13019         if (purpose == TREE_PURPOSE (t)
13020             && value == TREE_VALUE (t)
13021             && chain == TREE_CHAIN (t))
13022           return t;
13023         return tree_cons (purpose, value, chain);
13024       }
13025
13026     case COMPONENT_REF:
13027       {
13028         tree object;
13029         tree object_type;
13030         tree member;
13031
13032         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13033                                                      args, complain, in_decl);
13034         /* Remember that there was a reference to this entity.  */
13035         if (DECL_P (object))
13036           mark_used (object);
13037         object_type = TREE_TYPE (object);
13038
13039         member = TREE_OPERAND (t, 1);
13040         if (BASELINK_P (member))
13041           member = tsubst_baselink (member,
13042                                     non_reference (TREE_TYPE (object)),
13043                                     args, complain, in_decl);
13044         else
13045           member = tsubst_copy (member, args, complain, in_decl);
13046         if (member == error_mark_node)
13047           return error_mark_node;
13048
13049         if (object_type && !CLASS_TYPE_P (object_type))
13050           {
13051             if (SCALAR_TYPE_P (object_type))
13052               {
13053                 tree s = NULL_TREE;
13054                 tree dtor = member;
13055
13056                 if (TREE_CODE (dtor) == SCOPE_REF)
13057                   {
13058                     s = TREE_OPERAND (dtor, 0);
13059                     dtor = TREE_OPERAND (dtor, 1);
13060                   }
13061                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
13062                   {
13063                     dtor = TREE_OPERAND (dtor, 0);
13064                     if (TYPE_P (dtor))
13065                       return finish_pseudo_destructor_expr (object, s, dtor);
13066                   }
13067               }
13068           }
13069         else if (TREE_CODE (member) == SCOPE_REF
13070                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
13071           {
13072             tree tmpl;
13073             tree args;
13074
13075             /* Lookup the template functions now that we know what the
13076                scope is.  */
13077             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
13078             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
13079             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
13080                                             /*is_type_p=*/false,
13081                                             /*complain=*/false);
13082             if (BASELINK_P (member))
13083               {
13084                 BASELINK_FUNCTIONS (member)
13085                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
13086                               args);
13087                 member = (adjust_result_of_qualified_name_lookup
13088                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
13089                            object_type));
13090               }
13091             else
13092               {
13093                 qualified_name_lookup_error (object_type, tmpl, member,
13094                                              input_location);
13095                 return error_mark_node;
13096               }
13097           }
13098         else if (TREE_CODE (member) == SCOPE_REF
13099                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
13100                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
13101           {
13102             if (complain & tf_error)
13103               {
13104                 if (TYPE_P (TREE_OPERAND (member, 0)))
13105                   error ("%qT is not a class or namespace",
13106                          TREE_OPERAND (member, 0));
13107                 else
13108                   error ("%qD is not a class or namespace",
13109                          TREE_OPERAND (member, 0));
13110               }
13111             return error_mark_node;
13112           }
13113         else if (TREE_CODE (member) == FIELD_DECL)
13114           return finish_non_static_data_member (member, object, NULL_TREE);
13115
13116         return finish_class_member_access_expr (object, member,
13117                                                 /*template_p=*/false,
13118                                                 complain);
13119       }
13120
13121     case THROW_EXPR:
13122       return build_throw
13123         (RECUR (TREE_OPERAND (t, 0)));
13124
13125     case CONSTRUCTOR:
13126       {
13127         VEC(constructor_elt,gc) *n;
13128         constructor_elt *ce;
13129         unsigned HOST_WIDE_INT idx;
13130         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13131         bool process_index_p;
13132         int newlen;
13133         bool need_copy_p = false;
13134         tree r;
13135
13136         if (type == error_mark_node)
13137           return error_mark_node;
13138
13139         /* digest_init will do the wrong thing if we let it.  */
13140         if (type && TYPE_PTRMEMFUNC_P (type))
13141           return t;
13142
13143         /* We do not want to process the index of aggregate
13144            initializers as they are identifier nodes which will be
13145            looked up by digest_init.  */
13146         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
13147
13148         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
13149         newlen = VEC_length (constructor_elt, n);
13150         FOR_EACH_VEC_ELT (constructor_elt, n, idx, ce)
13151           {
13152             if (ce->index && process_index_p)
13153               ce->index = RECUR (ce->index);
13154
13155             if (PACK_EXPANSION_P (ce->value))
13156               {
13157                 /* Substitute into the pack expansion.  */
13158                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
13159                                                   in_decl);
13160
13161                 if (ce->value == error_mark_node)
13162                   ;
13163                 else if (TREE_VEC_LENGTH (ce->value) == 1)
13164                   /* Just move the argument into place.  */
13165                   ce->value = TREE_VEC_ELT (ce->value, 0);
13166                 else
13167                   {
13168                     /* Update the length of the final CONSTRUCTOR
13169                        arguments vector, and note that we will need to
13170                        copy.*/
13171                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
13172                     need_copy_p = true;
13173                   }
13174               }
13175             else
13176               ce->value = RECUR (ce->value);
13177           }
13178
13179         if (need_copy_p)
13180           {
13181             VEC(constructor_elt,gc) *old_n = n;
13182
13183             n = VEC_alloc (constructor_elt, gc, newlen);
13184             FOR_EACH_VEC_ELT (constructor_elt, old_n, idx, ce)
13185               {
13186                 if (TREE_CODE (ce->value) == TREE_VEC)
13187                   {
13188                     int i, len = TREE_VEC_LENGTH (ce->value);
13189                     for (i = 0; i < len; ++i)
13190                       CONSTRUCTOR_APPEND_ELT (n, 0,
13191                                               TREE_VEC_ELT (ce->value, i));
13192                   }
13193                 else
13194                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
13195               }
13196           }
13197
13198         r = build_constructor (init_list_type_node, n);
13199         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
13200
13201         if (TREE_HAS_CONSTRUCTOR (t))
13202           return finish_compound_literal (type, r);
13203
13204         TREE_TYPE (r) = type;
13205         return r;
13206       }
13207
13208     case TYPEID_EXPR:
13209       {
13210         tree operand_0 = TREE_OPERAND (t, 0);
13211         if (TYPE_P (operand_0))
13212           {
13213             operand_0 = tsubst (operand_0, args, complain, in_decl);
13214             return get_typeid (operand_0);
13215           }
13216         else
13217           {
13218             operand_0 = RECUR (operand_0);
13219             return build_typeid (operand_0);
13220           }
13221       }
13222
13223     case VAR_DECL:
13224       if (!args)
13225         return t;
13226       /* Fall through */
13227
13228     case PARM_DECL:
13229       {
13230         tree r = tsubst_copy (t, args, complain, in_decl);
13231
13232         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
13233           /* If the original type was a reference, we'll be wrapped in
13234              the appropriate INDIRECT_REF.  */
13235           r = convert_from_reference (r);
13236         return r;
13237       }
13238
13239     case VA_ARG_EXPR:
13240       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
13241                              tsubst (TREE_TYPE (t), args, complain, in_decl));
13242
13243     case OFFSETOF_EXPR:
13244       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
13245
13246     case TRAIT_EXPR:
13247       {
13248         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
13249                                   complain, in_decl);
13250
13251         tree type2 = TRAIT_EXPR_TYPE2 (t);
13252         if (type2)
13253           type2 = tsubst_copy (type2, args, complain, in_decl);
13254         
13255         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
13256       }
13257
13258     case STMT_EXPR:
13259       {
13260         tree old_stmt_expr = cur_stmt_expr;
13261         tree stmt_expr = begin_stmt_expr ();
13262
13263         cur_stmt_expr = stmt_expr;
13264         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
13265                      integral_constant_expression_p);
13266         stmt_expr = finish_stmt_expr (stmt_expr, false);
13267         cur_stmt_expr = old_stmt_expr;
13268
13269         /* If the resulting list of expression statement is empty,
13270            fold it further into void_zero_node.  */
13271         if (empty_expr_stmt_p (stmt_expr))
13272           stmt_expr = void_zero_node;
13273
13274         return stmt_expr;
13275       }
13276
13277     case CONST_DECL:
13278       t = tsubst_copy (t, args, complain, in_decl);
13279       /* As in finish_id_expression, we resolve enumeration constants
13280          to their underlying values.  */
13281       if (TREE_CODE (t) == CONST_DECL)
13282         {
13283           used_types_insert (TREE_TYPE (t));
13284           return DECL_INITIAL (t);
13285         }
13286       return t;
13287
13288     case LAMBDA_EXPR:
13289       {
13290         tree r = build_lambda_expr ();
13291
13292         tree type = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
13293         TREE_TYPE (r) = type;
13294         CLASSTYPE_LAMBDA_EXPR (type) = r;
13295
13296         LAMBDA_EXPR_LOCATION (r)
13297           = LAMBDA_EXPR_LOCATION (t);
13298         LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
13299           = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
13300         LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
13301         LAMBDA_EXPR_DISCRIMINATOR (r)
13302           = (LAMBDA_EXPR_DISCRIMINATOR (t));
13303         LAMBDA_EXPR_CAPTURE_LIST (r)
13304           = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
13305         LAMBDA_EXPR_THIS_CAPTURE (r)
13306           = RECUR (LAMBDA_EXPR_THIS_CAPTURE (t));
13307         LAMBDA_EXPR_EXTRA_SCOPE (r)
13308           = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
13309
13310         /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
13311         determine_visibility (TYPE_NAME (type));
13312         /* Now that we know visibility, instantiate the type so we have a
13313            declaration of the op() for later calls to lambda_function.  */
13314         complete_type (type);
13315
13316         type = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
13317         if (type)
13318           apply_lambda_return_type (r, type);
13319
13320         return build_lambda_object (r);
13321       }
13322
13323     case TARGET_EXPR:
13324       /* We can get here for a constant initializer of non-dependent type.
13325          FIXME stop folding in cp_parser_initializer_clause.  */
13326       gcc_assert (TREE_CONSTANT (t));
13327       return get_target_expr (RECUR (TARGET_EXPR_INITIAL (t)));
13328
13329     default:
13330       /* Handle Objective-C++ constructs, if appropriate.  */
13331       {
13332         tree subst
13333           = objcp_tsubst_copy_and_build (t, args, complain,
13334                                          in_decl, /*function_p=*/false);
13335         if (subst)
13336           return subst;
13337       }
13338       return tsubst_copy (t, args, complain, in_decl);
13339     }
13340
13341 #undef RECUR
13342 }
13343
13344 /* Verify that the instantiated ARGS are valid. For type arguments,
13345    make sure that the type's linkage is ok. For non-type arguments,
13346    make sure they are constants if they are integral or enumerations.
13347    Emit an error under control of COMPLAIN, and return TRUE on error.  */
13348
13349 static bool
13350 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
13351 {
13352   if (ARGUMENT_PACK_P (t))
13353     {
13354       tree vec = ARGUMENT_PACK_ARGS (t);
13355       int len = TREE_VEC_LENGTH (vec);
13356       bool result = false;
13357       int i;
13358
13359       for (i = 0; i < len; ++i)
13360         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
13361           result = true;
13362       return result;
13363     }
13364   else if (TYPE_P (t))
13365     {
13366       /* [basic.link]: A name with no linkage (notably, the name
13367          of a class or enumeration declared in a local scope)
13368          shall not be used to declare an entity with linkage.
13369          This implies that names with no linkage cannot be used as
13370          template arguments
13371
13372          DR 757 relaxes this restriction for C++0x.  */
13373       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
13374                  : no_linkage_check (t, /*relaxed_p=*/false));
13375
13376       if (nt)
13377         {
13378           /* DR 488 makes use of a type with no linkage cause
13379              type deduction to fail.  */
13380           if (complain & tf_error)
13381             {
13382               if (TYPE_ANONYMOUS_P (nt))
13383                 error ("%qT is/uses anonymous type", t);
13384               else
13385                 error ("template argument for %qD uses local type %qT",
13386                        tmpl, t);
13387             }
13388           return true;
13389         }
13390       /* In order to avoid all sorts of complications, we do not
13391          allow variably-modified types as template arguments.  */
13392       else if (variably_modified_type_p (t, NULL_TREE))
13393         {
13394           if (complain & tf_error)
13395             error ("%qT is a variably modified type", t);
13396           return true;
13397         }
13398     }
13399   /* A non-type argument of integral or enumerated type must be a
13400      constant.  */
13401   else if (TREE_TYPE (t)
13402            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
13403            && !TREE_CONSTANT (t))
13404     {
13405       if (complain & tf_error)
13406         error ("integral expression %qE is not constant", t);
13407       return true;
13408     }
13409   return false;
13410 }
13411
13412 static bool
13413 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
13414 {
13415   int ix, len = DECL_NTPARMS (tmpl);
13416   bool result = false;
13417
13418   for (ix = 0; ix != len; ix++)
13419     {
13420       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
13421         result = true;
13422     }
13423   if (result && (complain & tf_error))
13424     error ("  trying to instantiate %qD", tmpl);
13425   return result;
13426 }
13427
13428 /* Instantiate the indicated variable or function template TMPL with
13429    the template arguments in TARG_PTR.  */
13430
13431 tree
13432 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
13433 {
13434   tree targ_ptr = orig_args;
13435   tree fndecl;
13436   tree gen_tmpl;
13437   tree spec;
13438   HOST_WIDE_INT saved_processing_template_decl;
13439
13440   if (tmpl == error_mark_node)
13441     return error_mark_node;
13442
13443   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
13444
13445   /* If this function is a clone, handle it specially.  */
13446   if (DECL_CLONED_FUNCTION_P (tmpl))
13447     {
13448       tree spec;
13449       tree clone;
13450
13451       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
13452          DECL_CLONED_FUNCTION.  */
13453       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
13454                                    targ_ptr, complain);
13455       if (spec == error_mark_node)
13456         return error_mark_node;
13457
13458       /* Look for the clone.  */
13459       FOR_EACH_CLONE (clone, spec)
13460         if (DECL_NAME (clone) == DECL_NAME (tmpl))
13461           return clone;
13462       /* We should always have found the clone by now.  */
13463       gcc_unreachable ();
13464       return NULL_TREE;
13465     }
13466
13467   /* Check to see if we already have this specialization.  */
13468   gen_tmpl = most_general_template (tmpl);
13469   if (tmpl != gen_tmpl)
13470     /* The TMPL is a partial instantiation.  To get a full set of
13471        arguments we must add the arguments used to perform the
13472        partial instantiation.  */
13473     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
13474                                             targ_ptr);
13475
13476   /* It would be nice to avoid hashing here and then again in tsubst_decl,
13477      but it doesn't seem to be on the hot path.  */
13478   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
13479
13480   gcc_assert (tmpl == gen_tmpl
13481               || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
13482                   == spec)
13483               || fndecl == NULL_TREE);
13484
13485   if (spec != NULL_TREE)
13486     return spec;
13487
13488   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
13489                                complain))
13490     return error_mark_node;
13491
13492   /* We are building a FUNCTION_DECL, during which the access of its
13493      parameters and return types have to be checked.  However this
13494      FUNCTION_DECL which is the desired context for access checking
13495      is not built yet.  We solve this chicken-and-egg problem by
13496      deferring all checks until we have the FUNCTION_DECL.  */
13497   push_deferring_access_checks (dk_deferred);
13498
13499   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
13500      (because, for example, we have encountered a non-dependent
13501      function call in the body of a template function and must now
13502      determine which of several overloaded functions will be called),
13503      within the instantiation itself we are not processing a
13504      template.  */  
13505   saved_processing_template_decl = processing_template_decl;
13506   processing_template_decl = 0;
13507   /* Substitute template parameters to obtain the specialization.  */
13508   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
13509                    targ_ptr, complain, gen_tmpl);
13510   processing_template_decl = saved_processing_template_decl;
13511   if (fndecl == error_mark_node)
13512     return error_mark_node;
13513
13514   /* Now we know the specialization, compute access previously
13515      deferred.  */
13516   push_access_scope (fndecl);
13517
13518   /* Some typedefs referenced from within the template code need to be access
13519      checked at template instantiation time, i.e now. These types were
13520      added to the template at parsing time. Let's get those and perfom
13521      the acces checks then.  */
13522   perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
13523   perform_deferred_access_checks ();
13524   pop_access_scope (fndecl);
13525   pop_deferring_access_checks ();
13526
13527   /* The DECL_TI_TEMPLATE should always be the immediate parent
13528      template, not the most general template.  */
13529   DECL_TI_TEMPLATE (fndecl) = tmpl;
13530
13531   /* If we've just instantiated the main entry point for a function,
13532      instantiate all the alternate entry points as well.  We do this
13533      by cloning the instantiation of the main entry point, not by
13534      instantiating the template clones.  */
13535   if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
13536     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
13537
13538   return fndecl;
13539 }
13540
13541 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
13542    NARGS elements of the arguments that are being used when calling
13543    it.  TARGS is a vector into which the deduced template arguments
13544    are placed.
13545
13546    Return zero for success, 2 for an incomplete match that doesn't resolve
13547    all the types, and 1 for complete failure.  An error message will be
13548    printed only for an incomplete match.
13549
13550    If FN is a conversion operator, or we are trying to produce a specific
13551    specialization, RETURN_TYPE is the return type desired.
13552
13553    The EXPLICIT_TARGS are explicit template arguments provided via a
13554    template-id.
13555
13556    The parameter STRICT is one of:
13557
13558    DEDUCE_CALL:
13559      We are deducing arguments for a function call, as in
13560      [temp.deduct.call].
13561
13562    DEDUCE_CONV:
13563      We are deducing arguments for a conversion function, as in
13564      [temp.deduct.conv].
13565
13566    DEDUCE_EXACT:
13567      We are deducing arguments when doing an explicit instantiation
13568      as in [temp.explicit], when determining an explicit specialization
13569      as in [temp.expl.spec], or when taking the address of a function
13570      template, as in [temp.deduct.funcaddr].  */
13571
13572 int
13573 fn_type_unification (tree fn,
13574                      tree explicit_targs,
13575                      tree targs,
13576                      const tree *args,
13577                      unsigned int nargs,
13578                      tree return_type,
13579                      unification_kind_t strict,
13580                      int flags)
13581 {
13582   tree parms;
13583   tree fntype;
13584   int result;
13585   bool incomplete_argument_packs_p = false;
13586
13587   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
13588
13589   fntype = TREE_TYPE (fn);
13590   if (explicit_targs)
13591     {
13592       /* [temp.deduct]
13593
13594          The specified template arguments must match the template
13595          parameters in kind (i.e., type, nontype, template), and there
13596          must not be more arguments than there are parameters;
13597          otherwise type deduction fails.
13598
13599          Nontype arguments must match the types of the corresponding
13600          nontype template parameters, or must be convertible to the
13601          types of the corresponding nontype parameters as specified in
13602          _temp.arg.nontype_, otherwise type deduction fails.
13603
13604          All references in the function type of the function template
13605          to the corresponding template parameters are replaced by the
13606          specified template argument values.  If a substitution in a
13607          template parameter or in the function type of the function
13608          template results in an invalid type, type deduction fails.  */
13609       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
13610       int i, len = TREE_VEC_LENGTH (tparms);
13611       tree converted_args;
13612       bool incomplete = false;
13613
13614       if (explicit_targs == error_mark_node)
13615         return 1;
13616
13617       converted_args
13618         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
13619                                   /*require_all_args=*/false,
13620                                   /*use_default_args=*/false));
13621       if (converted_args == error_mark_node)
13622         return 1;
13623
13624       /* Substitute the explicit args into the function type.  This is
13625          necessary so that, for instance, explicitly declared function
13626          arguments can match null pointed constants.  If we were given
13627          an incomplete set of explicit args, we must not do semantic
13628          processing during substitution as we could create partial
13629          instantiations.  */
13630       for (i = 0; i < len; i++)
13631         {
13632           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
13633           bool parameter_pack = false;
13634
13635           /* Dig out the actual parm.  */
13636           if (TREE_CODE (parm) == TYPE_DECL
13637               || TREE_CODE (parm) == TEMPLATE_DECL)
13638             {
13639               parm = TREE_TYPE (parm);
13640               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
13641             }
13642           else if (TREE_CODE (parm) == PARM_DECL)
13643             {
13644               parm = DECL_INITIAL (parm);
13645               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
13646             }
13647
13648           if (parameter_pack)
13649             {
13650               int level, idx;
13651               tree targ;
13652               template_parm_level_and_index (parm, &level, &idx);
13653
13654               /* Mark the argument pack as "incomplete". We could
13655                  still deduce more arguments during unification.  */
13656               targ = TMPL_ARG (converted_args, level, idx);
13657               if (targ)
13658                 {
13659                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
13660                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
13661                     = ARGUMENT_PACK_ARGS (targ);
13662                 }
13663
13664               /* We have some incomplete argument packs.  */
13665               incomplete_argument_packs_p = true;
13666             }
13667         }
13668
13669       if (incomplete_argument_packs_p)
13670         /* Any substitution is guaranteed to be incomplete if there
13671            are incomplete argument packs, because we can still deduce
13672            more arguments.  */
13673         incomplete = 1;
13674       else
13675         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
13676
13677       processing_template_decl += incomplete;
13678       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
13679       processing_template_decl -= incomplete;
13680
13681       if (fntype == error_mark_node)
13682         return 1;
13683
13684       /* Place the explicitly specified arguments in TARGS.  */
13685       for (i = NUM_TMPL_ARGS (converted_args); i--;)
13686         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
13687     }
13688
13689   /* Never do unification on the 'this' parameter.  */
13690   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
13691
13692   if (return_type)
13693     {
13694       tree *new_args;
13695
13696       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
13697       new_args = XALLOCAVEC (tree, nargs + 1);
13698       new_args[0] = return_type;
13699       memcpy (new_args + 1, args, nargs * sizeof (tree));
13700       args = new_args;
13701       ++nargs;
13702     }
13703
13704   /* We allow incomplete unification without an error message here
13705      because the standard doesn't seem to explicitly prohibit it.  Our
13706      callers must be ready to deal with unification failures in any
13707      event.  */
13708   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
13709                                   targs, parms, args, nargs, /*subr=*/0,
13710                                   strict, flags);
13711
13712   if (result == 0 && incomplete_argument_packs_p)
13713     {
13714       int i, len = NUM_TMPL_ARGS (targs);
13715
13716       /* Clear the "incomplete" flags on all argument packs.  */
13717       for (i = 0; i < len; i++)
13718         {
13719           tree arg = TREE_VEC_ELT (targs, i);
13720           if (ARGUMENT_PACK_P (arg))
13721             {
13722               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
13723               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
13724             }
13725         }
13726     }
13727
13728   /* Now that we have bindings for all of the template arguments,
13729      ensure that the arguments deduced for the template template
13730      parameters have compatible template parameter lists.  We cannot
13731      check this property before we have deduced all template
13732      arguments, because the template parameter types of a template
13733      template parameter might depend on prior template parameters
13734      deduced after the template template parameter.  The following
13735      ill-formed example illustrates this issue:
13736
13737        template<typename T, template<T> class C> void f(C<5>, T);
13738
13739        template<int N> struct X {};
13740
13741        void g() {
13742          f(X<5>(), 5l); // error: template argument deduction fails
13743        }
13744
13745      The template parameter list of 'C' depends on the template type
13746      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
13747      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
13748      time that we deduce 'C'.  */
13749   if (result == 0
13750       && !template_template_parm_bindings_ok_p 
13751            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
13752     return 1;
13753
13754   if (result == 0)
13755     /* All is well so far.  Now, check:
13756
13757        [temp.deduct]
13758
13759        When all template arguments have been deduced, all uses of
13760        template parameters in nondeduced contexts are replaced with
13761        the corresponding deduced argument values.  If the
13762        substitution results in an invalid type, as described above,
13763        type deduction fails.  */
13764     {
13765       tree substed = tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE);
13766       if (substed == error_mark_node)
13767         return 1;
13768
13769       /* If we're looking for an exact match, check that what we got
13770          is indeed an exact match.  It might not be if some template
13771          parameters are used in non-deduced contexts.  */
13772       if (strict == DEDUCE_EXACT)
13773         {
13774           unsigned int i;
13775
13776           tree sarg
13777             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
13778           if (return_type)
13779             sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
13780           for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
13781             if (!same_type_p (args[i], TREE_VALUE (sarg)))
13782               return 1;
13783         }
13784     }
13785
13786   return result;
13787 }
13788
13789 /* Adjust types before performing type deduction, as described in
13790    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
13791    sections are symmetric.  PARM is the type of a function parameter
13792    or the return type of the conversion function.  ARG is the type of
13793    the argument passed to the call, or the type of the value
13794    initialized with the result of the conversion function.
13795    ARG_EXPR is the original argument expression, which may be null.  */
13796
13797 static int
13798 maybe_adjust_types_for_deduction (unification_kind_t strict,
13799                                   tree* parm,
13800                                   tree* arg,
13801                                   tree arg_expr)
13802 {
13803   int result = 0;
13804
13805   switch (strict)
13806     {
13807     case DEDUCE_CALL:
13808       break;
13809
13810     case DEDUCE_CONV:
13811       {
13812         /* Swap PARM and ARG throughout the remainder of this
13813            function; the handling is precisely symmetric since PARM
13814            will initialize ARG rather than vice versa.  */
13815         tree* temp = parm;
13816         parm = arg;
13817         arg = temp;
13818         break;
13819       }
13820
13821     case DEDUCE_EXACT:
13822       /* Core issue #873: Do the DR606 thing (see below) for these cases,
13823          too, but here handle it by stripping the reference from PARM
13824          rather than by adding it to ARG.  */
13825       if (TREE_CODE (*parm) == REFERENCE_TYPE
13826           && TYPE_REF_IS_RVALUE (*parm)
13827           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
13828           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
13829           && TREE_CODE (*arg) == REFERENCE_TYPE
13830           && !TYPE_REF_IS_RVALUE (*arg))
13831         *parm = TREE_TYPE (*parm);
13832       /* Nothing else to do in this case.  */
13833       return 0;
13834
13835     default:
13836       gcc_unreachable ();
13837     }
13838
13839   if (TREE_CODE (*parm) != REFERENCE_TYPE)
13840     {
13841       /* [temp.deduct.call]
13842
13843          If P is not a reference type:
13844
13845          --If A is an array type, the pointer type produced by the
13846          array-to-pointer standard conversion (_conv.array_) is
13847          used in place of A for type deduction; otherwise,
13848
13849          --If A is a function type, the pointer type produced by
13850          the function-to-pointer standard conversion
13851          (_conv.func_) is used in place of A for type deduction;
13852          otherwise,
13853
13854          --If A is a cv-qualified type, the top level
13855          cv-qualifiers of A's type are ignored for type
13856          deduction.  */
13857       if (TREE_CODE (*arg) == ARRAY_TYPE)
13858         *arg = build_pointer_type (TREE_TYPE (*arg));
13859       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
13860         *arg = build_pointer_type (*arg);
13861       else
13862         *arg = TYPE_MAIN_VARIANT (*arg);
13863     }
13864
13865   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
13866      of the form T&&, where T is a template parameter, and the argument
13867      is an lvalue, T is deduced as A& */
13868   if (TREE_CODE (*parm) == REFERENCE_TYPE
13869       && TYPE_REF_IS_RVALUE (*parm)
13870       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
13871       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
13872       && arg_expr && real_lvalue_p (arg_expr))
13873     *arg = build_reference_type (*arg);
13874
13875   /* [temp.deduct.call]
13876
13877      If P is a cv-qualified type, the top level cv-qualifiers
13878      of P's type are ignored for type deduction.  If P is a
13879      reference type, the type referred to by P is used for
13880      type deduction.  */
13881   *parm = TYPE_MAIN_VARIANT (*parm);
13882   if (TREE_CODE (*parm) == REFERENCE_TYPE)
13883     {
13884       *parm = TREE_TYPE (*parm);
13885       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
13886     }
13887
13888   /* DR 322. For conversion deduction, remove a reference type on parm
13889      too (which has been swapped into ARG).  */
13890   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
13891     *arg = TREE_TYPE (*arg);
13892
13893   return result;
13894 }
13895
13896 /* Most parms like fn_type_unification.
13897
13898    If SUBR is 1, we're being called recursively (to unify the
13899    arguments of a function or method parameter of a function
13900    template). */
13901
13902 static int
13903 type_unification_real (tree tparms,
13904                        tree targs,
13905                        tree xparms,
13906                        const tree *xargs,
13907                        unsigned int xnargs,
13908                        int subr,
13909                        unification_kind_t strict,
13910                        int flags)
13911 {
13912   tree parm, arg, arg_expr;
13913   int i;
13914   int ntparms = TREE_VEC_LENGTH (tparms);
13915   int sub_strict;
13916   int saw_undeduced = 0;
13917   tree parms;
13918   const tree *args;
13919   unsigned int nargs;
13920   unsigned int ia;
13921
13922   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
13923   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
13924   gcc_assert (ntparms > 0);
13925
13926   /* Reset the number of non-defaulted template arguments contained
13927      in in TARGS.  */
13928   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
13929
13930   switch (strict)
13931     {
13932     case DEDUCE_CALL:
13933       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
13934                     | UNIFY_ALLOW_DERIVED);
13935       break;
13936
13937     case DEDUCE_CONV:
13938       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
13939       break;
13940
13941     case DEDUCE_EXACT:
13942       sub_strict = UNIFY_ALLOW_NONE;
13943       break;
13944
13945     default:
13946       gcc_unreachable ();
13947     }
13948
13949  again:
13950   parms = xparms;
13951   args = xargs;
13952   nargs = xnargs;
13953
13954   ia = 0;
13955   while (parms && parms != void_list_node
13956          && ia < nargs)
13957     {
13958       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
13959         break;
13960
13961       parm = TREE_VALUE (parms);
13962       parms = TREE_CHAIN (parms);
13963       arg = args[ia];
13964       ++ia;
13965       arg_expr = NULL;
13966
13967       if (arg == error_mark_node)
13968         return 1;
13969       if (arg == unknown_type_node)
13970         /* We can't deduce anything from this, but we might get all the
13971            template args from other function args.  */
13972         continue;
13973
13974       /* Conversions will be performed on a function argument that
13975          corresponds with a function parameter that contains only
13976          non-deducible template parameters and explicitly specified
13977          template parameters.  */
13978       if (!uses_template_parms (parm))
13979         {
13980           tree type;
13981
13982           if (!TYPE_P (arg))
13983             type = TREE_TYPE (arg);
13984           else
13985             type = arg;
13986
13987           if (same_type_p (parm, type))
13988             continue;
13989           if (strict != DEDUCE_EXACT
13990               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
13991                                   flags))
13992             continue;
13993
13994           return 1;
13995         }
13996
13997       if (!TYPE_P (arg))
13998         {
13999           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
14000           if (type_unknown_p (arg))
14001             {
14002               /* [temp.deduct.type] 
14003
14004                  A template-argument can be deduced from a pointer to
14005                  function or pointer to member function argument if
14006                  the set of overloaded functions does not contain
14007                  function templates and at most one of a set of
14008                  overloaded functions provides a unique match.  */
14009               if (resolve_overloaded_unification
14010                   (tparms, targs, parm, arg, strict, sub_strict))
14011                 continue;
14012
14013               return 1;
14014             }
14015           arg_expr = arg;
14016           arg = unlowered_expr_type (arg);
14017           if (arg == error_mark_node)
14018             return 1;
14019         }
14020
14021       {
14022         int arg_strict = sub_strict;
14023
14024         if (!subr)
14025           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
14026                                                           arg_expr);
14027
14028         if (arg == init_list_type_node && arg_expr)
14029           arg = arg_expr;
14030         if (unify (tparms, targs, parm, arg, arg_strict))
14031           return 1;
14032       }
14033     }
14034
14035
14036   if (parms 
14037       && parms != void_list_node
14038       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
14039     {
14040       /* Unify the remaining arguments with the pack expansion type.  */
14041       tree argvec;
14042       tree parmvec = make_tree_vec (1);
14043
14044       /* Allocate a TREE_VEC and copy in all of the arguments */ 
14045       argvec = make_tree_vec (nargs - ia);
14046       for (i = 0; ia < nargs; ++ia, ++i)
14047         TREE_VEC_ELT (argvec, i) = args[ia];
14048
14049       /* Copy the parameter into parmvec.  */
14050       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
14051       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
14052                                 /*call_args_p=*/true, /*subr=*/subr))
14053         return 1;
14054
14055       /* Advance to the end of the list of parameters.  */
14056       parms = TREE_CHAIN (parms);
14057     }
14058
14059   /* Fail if we've reached the end of the parm list, and more args
14060      are present, and the parm list isn't variadic.  */
14061   if (ia < nargs && parms == void_list_node)
14062     return 1;
14063   /* Fail if parms are left and they don't have default values.  */
14064   if (parms && parms != void_list_node
14065       && TREE_PURPOSE (parms) == NULL_TREE)
14066     return 1;
14067
14068   if (!subr)
14069     for (i = 0; i < ntparms; i++)
14070       if (!TREE_VEC_ELT (targs, i))
14071         {
14072           tree tparm;
14073
14074           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
14075             continue;
14076
14077           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14078
14079           /* If this is an undeduced nontype parameter that depends on
14080              a type parameter, try another pass; its type may have been
14081              deduced from a later argument than the one from which
14082              this parameter can be deduced.  */
14083           if (TREE_CODE (tparm) == PARM_DECL
14084               && uses_template_parms (TREE_TYPE (tparm))
14085               && !saw_undeduced++)
14086             goto again;
14087
14088           /* Core issue #226 (C++0x) [temp.deduct]:
14089
14090                If a template argument has not been deduced, its
14091                default template argument, if any, is used. 
14092
14093              When we are in C++98 mode, TREE_PURPOSE will either
14094              be NULL_TREE or ERROR_MARK_NODE, so we do not need
14095              to explicitly check cxx_dialect here.  */
14096           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
14097             {
14098               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14099               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
14100               arg = tsubst_template_arg (arg, targs, tf_none, NULL_TREE);
14101               arg = convert_template_argument (parm, arg, targs, tf_none,
14102                                                i, NULL_TREE);
14103               if (arg == error_mark_node)
14104                 return 1;
14105               else
14106                 {
14107                   TREE_VEC_ELT (targs, i) = arg;
14108                   /* The position of the first default template argument,
14109                      is also the number of non-defaulted arguments in TARGS.
14110                      Record that.  */
14111                   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
14112                     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
14113                   continue;
14114                 }
14115             }
14116
14117           /* If the type parameter is a parameter pack, then it will
14118              be deduced to an empty parameter pack.  */
14119           if (template_parameter_pack_p (tparm))
14120             {
14121               tree arg;
14122
14123               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
14124                 {
14125                   arg = make_node (NONTYPE_ARGUMENT_PACK);
14126                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
14127                   TREE_CONSTANT (arg) = 1;
14128                 }
14129               else
14130                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
14131
14132               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
14133
14134               TREE_VEC_ELT (targs, i) = arg;
14135               continue;
14136             }
14137
14138           return 2;
14139         }
14140 #ifdef ENABLE_CHECKING
14141   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
14142     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
14143 #endif
14144
14145   return 0;
14146 }
14147
14148 /* Subroutine of type_unification_real.  Args are like the variables
14149    at the call site.  ARG is an overloaded function (or template-id);
14150    we try deducing template args from each of the overloads, and if
14151    only one succeeds, we go with that.  Modifies TARGS and returns
14152    true on success.  */
14153
14154 static bool
14155 resolve_overloaded_unification (tree tparms,
14156                                 tree targs,
14157                                 tree parm,
14158                                 tree arg,
14159                                 unification_kind_t strict,
14160                                 int sub_strict)
14161 {
14162   tree tempargs = copy_node (targs);
14163   int good = 0;
14164   tree goodfn = NULL_TREE;
14165   bool addr_p;
14166
14167   if (TREE_CODE (arg) == ADDR_EXPR)
14168     {
14169       arg = TREE_OPERAND (arg, 0);
14170       addr_p = true;
14171     }
14172   else
14173     addr_p = false;
14174
14175   if (TREE_CODE (arg) == COMPONENT_REF)
14176     /* Handle `&x' where `x' is some static or non-static member
14177        function name.  */
14178     arg = TREE_OPERAND (arg, 1);
14179
14180   if (TREE_CODE (arg) == OFFSET_REF)
14181     arg = TREE_OPERAND (arg, 1);
14182
14183   /* Strip baselink information.  */
14184   if (BASELINK_P (arg))
14185     arg = BASELINK_FUNCTIONS (arg);
14186
14187   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
14188     {
14189       /* If we got some explicit template args, we need to plug them into
14190          the affected templates before we try to unify, in case the
14191          explicit args will completely resolve the templates in question.  */
14192
14193       tree expl_subargs = TREE_OPERAND (arg, 1);
14194       arg = TREE_OPERAND (arg, 0);
14195
14196       for (; arg; arg = OVL_NEXT (arg))
14197         {
14198           tree fn = OVL_CURRENT (arg);
14199           tree subargs, elem;
14200
14201           if (TREE_CODE (fn) != TEMPLATE_DECL)
14202             continue;
14203
14204           ++processing_template_decl;
14205           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
14206                                   expl_subargs, /*check_ret=*/false);
14207           if (subargs)
14208             {
14209               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
14210               if (try_one_overload (tparms, targs, tempargs, parm,
14211                                     elem, strict, sub_strict, addr_p)
14212                   && (!goodfn || !decls_match (goodfn, elem)))
14213                 {
14214                   goodfn = elem;
14215                   ++good;
14216                 }
14217             }
14218           --processing_template_decl;
14219         }
14220     }
14221   else if (TREE_CODE (arg) != OVERLOAD
14222            && TREE_CODE (arg) != FUNCTION_DECL)
14223     /* If ARG is, for example, "(0, &f)" then its type will be unknown
14224        -- but the deduction does not succeed because the expression is
14225        not just the function on its own.  */
14226     return false;
14227   else
14228     for (; arg; arg = OVL_NEXT (arg))
14229       if (try_one_overload (tparms, targs, tempargs, parm,
14230                             TREE_TYPE (OVL_CURRENT (arg)),
14231                             strict, sub_strict, addr_p)
14232           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
14233         {
14234           goodfn = OVL_CURRENT (arg);
14235           ++good;
14236         }
14237
14238   /* [temp.deduct.type] A template-argument can be deduced from a pointer
14239      to function or pointer to member function argument if the set of
14240      overloaded functions does not contain function templates and at most
14241      one of a set of overloaded functions provides a unique match.
14242
14243      So if we found multiple possibilities, we return success but don't
14244      deduce anything.  */
14245
14246   if (good == 1)
14247     {
14248       int i = TREE_VEC_LENGTH (targs);
14249       for (; i--; )
14250         if (TREE_VEC_ELT (tempargs, i))
14251           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
14252     }
14253   if (good)
14254     return true;
14255
14256   return false;
14257 }
14258
14259 /* Core DR 115: In contexts where deduction is done and fails, or in
14260    contexts where deduction is not done, if a template argument list is
14261    specified and it, along with any default template arguments, identifies
14262    a single function template specialization, then the template-id is an
14263    lvalue for the function template specialization.  */
14264
14265 tree
14266 resolve_nondeduced_context (tree orig_expr)
14267 {
14268   tree expr, offset, baselink;
14269   bool addr;
14270
14271   if (!type_unknown_p (orig_expr))
14272     return orig_expr;
14273
14274   expr = orig_expr;
14275   addr = false;
14276   offset = NULL_TREE;
14277   baselink = NULL_TREE;
14278
14279   if (TREE_CODE (expr) == ADDR_EXPR)
14280     {
14281       expr = TREE_OPERAND (expr, 0);
14282       addr = true;
14283     }
14284   if (TREE_CODE (expr) == OFFSET_REF)
14285     {
14286       offset = expr;
14287       expr = TREE_OPERAND (expr, 1);
14288     }
14289   if (TREE_CODE (expr) == BASELINK)
14290     {
14291       baselink = expr;
14292       expr = BASELINK_FUNCTIONS (expr);
14293     }
14294
14295   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
14296     {
14297       int good = 0;
14298       tree goodfn = NULL_TREE;
14299
14300       /* If we got some explicit template args, we need to plug them into
14301          the affected templates before we try to unify, in case the
14302          explicit args will completely resolve the templates in question.  */
14303
14304       tree expl_subargs = TREE_OPERAND (expr, 1);
14305       tree arg = TREE_OPERAND (expr, 0);
14306       tree badfn = NULL_TREE;
14307       tree badargs = NULL_TREE;
14308
14309       for (; arg; arg = OVL_NEXT (arg))
14310         {
14311           tree fn = OVL_CURRENT (arg);
14312           tree subargs, elem;
14313
14314           if (TREE_CODE (fn) != TEMPLATE_DECL)
14315             continue;
14316
14317           ++processing_template_decl;
14318           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
14319                                   expl_subargs, /*check_ret=*/false);
14320           if (subargs && !any_dependent_template_arguments_p (subargs))
14321             {
14322               elem = instantiate_template (fn, subargs, tf_none);
14323               if (elem == error_mark_node)
14324                 {
14325                   badfn = fn;
14326                   badargs = subargs;
14327                 }
14328               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
14329                 {
14330                   goodfn = elem;
14331                   ++good;
14332                 }
14333             }
14334           --processing_template_decl;
14335         }
14336       if (good == 1)
14337         {
14338           expr = goodfn;
14339           if (baselink)
14340             expr = build_baselink (BASELINK_BINFO (baselink),
14341                                    BASELINK_ACCESS_BINFO (baselink),
14342                                    expr, BASELINK_OPTYPE (baselink));
14343           if (offset)
14344             {
14345               tree base
14346                 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
14347               expr = build_offset_ref (base, expr, addr);
14348             }
14349           if (addr)
14350             expr = cp_build_addr_expr (expr, tf_warning_or_error);
14351           return expr;
14352         }
14353       else if (good == 0 && badargs)
14354         /* There were no good options and at least one bad one, so let the
14355            user know what the problem is.  */
14356         instantiate_template (badfn, badargs, tf_warning_or_error);
14357     }
14358   return orig_expr;
14359 }
14360
14361 /* Subroutine of resolve_overloaded_unification; does deduction for a single
14362    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
14363    different overloads deduce different arguments for a given parm.
14364    ADDR_P is true if the expression for which deduction is being
14365    performed was of the form "& fn" rather than simply "fn".
14366
14367    Returns 1 on success.  */
14368
14369 static int
14370 try_one_overload (tree tparms,
14371                   tree orig_targs,
14372                   tree targs,
14373                   tree parm,
14374                   tree arg,
14375                   unification_kind_t strict,
14376                   int sub_strict,
14377                   bool addr_p)
14378 {
14379   int nargs;
14380   tree tempargs;
14381   int i;
14382
14383   /* [temp.deduct.type] A template-argument can be deduced from a pointer
14384      to function or pointer to member function argument if the set of
14385      overloaded functions does not contain function templates and at most
14386      one of a set of overloaded functions provides a unique match.
14387
14388      So if this is a template, just return success.  */
14389
14390   if (uses_template_parms (arg))
14391     return 1;
14392
14393   if (TREE_CODE (arg) == METHOD_TYPE)
14394     arg = build_ptrmemfunc_type (build_pointer_type (arg));
14395   else if (addr_p)
14396     arg = build_pointer_type (arg);
14397
14398   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
14399
14400   /* We don't copy orig_targs for this because if we have already deduced
14401      some template args from previous args, unify would complain when we
14402      try to deduce a template parameter for the same argument, even though
14403      there isn't really a conflict.  */
14404   nargs = TREE_VEC_LENGTH (targs);
14405   tempargs = make_tree_vec (nargs);
14406
14407   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
14408     return 0;
14409
14410   /* First make sure we didn't deduce anything that conflicts with
14411      explicitly specified args.  */
14412   for (i = nargs; i--; )
14413     {
14414       tree elt = TREE_VEC_ELT (tempargs, i);
14415       tree oldelt = TREE_VEC_ELT (orig_targs, i);
14416
14417       if (!elt)
14418         /*NOP*/;
14419       else if (uses_template_parms (elt))
14420         /* Since we're unifying against ourselves, we will fill in
14421            template args used in the function parm list with our own
14422            template parms.  Discard them.  */
14423         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
14424       else if (oldelt && !template_args_equal (oldelt, elt))
14425         return 0;
14426     }
14427
14428   for (i = nargs; i--; )
14429     {
14430       tree elt = TREE_VEC_ELT (tempargs, i);
14431
14432       if (elt)
14433         TREE_VEC_ELT (targs, i) = elt;
14434     }
14435
14436   return 1;
14437 }
14438
14439 /* PARM is a template class (perhaps with unbound template
14440    parameters).  ARG is a fully instantiated type.  If ARG can be
14441    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
14442    TARGS are as for unify.  */
14443
14444 static tree
14445 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
14446 {
14447   tree copy_of_targs;
14448
14449   if (!CLASSTYPE_TEMPLATE_INFO (arg)
14450       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
14451           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
14452     return NULL_TREE;
14453
14454   /* We need to make a new template argument vector for the call to
14455      unify.  If we used TARGS, we'd clutter it up with the result of
14456      the attempted unification, even if this class didn't work out.
14457      We also don't want to commit ourselves to all the unifications
14458      we've already done, since unification is supposed to be done on
14459      an argument-by-argument basis.  In other words, consider the
14460      following pathological case:
14461
14462        template <int I, int J, int K>
14463        struct S {};
14464
14465        template <int I, int J>
14466        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
14467
14468        template <int I, int J, int K>
14469        void f(S<I, J, K>, S<I, I, I>);
14470
14471        void g() {
14472          S<0, 0, 0> s0;
14473          S<0, 1, 2> s2;
14474
14475          f(s0, s2);
14476        }
14477
14478      Now, by the time we consider the unification involving `s2', we
14479      already know that we must have `f<0, 0, 0>'.  But, even though
14480      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
14481      because there are two ways to unify base classes of S<0, 1, 2>
14482      with S<I, I, I>.  If we kept the already deduced knowledge, we
14483      would reject the possibility I=1.  */
14484   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
14485
14486   /* If unification failed, we're done.  */
14487   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
14488              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
14489     return NULL_TREE;
14490
14491   return arg;
14492 }
14493
14494 /* Given a template type PARM and a class type ARG, find the unique
14495    base type in ARG that is an instance of PARM.  We do not examine
14496    ARG itself; only its base-classes.  If there is not exactly one
14497    appropriate base class, return NULL_TREE.  PARM may be the type of
14498    a partial specialization, as well as a plain template type.  Used
14499    by unify.  */
14500
14501 static tree
14502 get_template_base (tree tparms, tree targs, tree parm, tree arg)
14503 {
14504   tree rval = NULL_TREE;
14505   tree binfo;
14506
14507   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
14508
14509   binfo = TYPE_BINFO (complete_type (arg));
14510   if (!binfo)
14511     /* The type could not be completed.  */
14512     return NULL_TREE;
14513
14514   /* Walk in inheritance graph order.  The search order is not
14515      important, and this avoids multiple walks of virtual bases.  */
14516   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
14517     {
14518       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
14519
14520       if (r)
14521         {
14522           /* If there is more than one satisfactory baseclass, then:
14523
14524                [temp.deduct.call]
14525
14526               If they yield more than one possible deduced A, the type
14527               deduction fails.
14528
14529              applies.  */
14530           if (rval && !same_type_p (r, rval))
14531             return NULL_TREE;
14532
14533           rval = r;
14534         }
14535     }
14536
14537   return rval;
14538 }
14539
14540 /* Returns the level of DECL, which declares a template parameter.  */
14541
14542 static int
14543 template_decl_level (tree decl)
14544 {
14545   switch (TREE_CODE (decl))
14546     {
14547     case TYPE_DECL:
14548     case TEMPLATE_DECL:
14549       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
14550
14551     case PARM_DECL:
14552       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
14553
14554     default:
14555       gcc_unreachable ();
14556     }
14557   return 0;
14558 }
14559
14560 /* Decide whether ARG can be unified with PARM, considering only the
14561    cv-qualifiers of each type, given STRICT as documented for unify.
14562    Returns nonzero iff the unification is OK on that basis.  */
14563
14564 static int
14565 check_cv_quals_for_unify (int strict, tree arg, tree parm)
14566 {
14567   int arg_quals = cp_type_quals (arg);
14568   int parm_quals = cp_type_quals (parm);
14569
14570   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14571       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
14572     {
14573       /*  Although a CVR qualifier is ignored when being applied to a
14574           substituted template parameter ([8.3.2]/1 for example), that
14575           does not allow us to unify "const T" with "int&" because both
14576           types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
14577           It is ok when we're allowing additional CV qualifiers
14578           at the outer level [14.8.2.1]/3,1st bullet.  */
14579       if ((TREE_CODE (arg) == REFERENCE_TYPE
14580            || TREE_CODE (arg) == FUNCTION_TYPE
14581            || TREE_CODE (arg) == METHOD_TYPE)
14582           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
14583         return 0;
14584
14585       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
14586           && (parm_quals & TYPE_QUAL_RESTRICT))
14587         return 0;
14588     }
14589
14590   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
14591       && (arg_quals & parm_quals) != parm_quals)
14592     return 0;
14593
14594   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
14595       && (parm_quals & arg_quals) != arg_quals)
14596     return 0;
14597
14598   return 1;
14599 }
14600
14601 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
14602 void 
14603 template_parm_level_and_index (tree parm, int* level, int* index)
14604 {
14605   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14606       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
14607       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
14608     {
14609       *index = TEMPLATE_TYPE_IDX (parm);
14610       *level = TEMPLATE_TYPE_LEVEL (parm);
14611     }
14612   else
14613     {
14614       *index = TEMPLATE_PARM_IDX (parm);
14615       *level = TEMPLATE_PARM_LEVEL (parm);
14616     }
14617 }
14618
14619 /* Unifies the remaining arguments in PACKED_ARGS with the pack
14620    expansion at the end of PACKED_PARMS. Returns 0 if the type
14621    deduction succeeds, 1 otherwise. STRICT is the same as in
14622    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
14623    call argument list. We'll need to adjust the arguments to make them
14624    types. SUBR tells us if this is from a recursive call to
14625    type_unification_real.  */
14626 int
14627 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
14628                       tree packed_args, int strict, bool call_args_p,
14629                       bool subr)
14630 {
14631   tree parm 
14632     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
14633   tree pattern = PACK_EXPANSION_PATTERN (parm);
14634   tree pack, packs = NULL_TREE;
14635   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
14636   int len = TREE_VEC_LENGTH (packed_args);
14637
14638   /* Determine the parameter packs we will be deducing from the
14639      pattern, and record their current deductions.  */
14640   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
14641        pack; pack = TREE_CHAIN (pack))
14642     {
14643       tree parm_pack = TREE_VALUE (pack);
14644       int idx, level;
14645
14646       /* Determine the index and level of this parameter pack.  */
14647       template_parm_level_and_index (parm_pack, &level, &idx);
14648
14649       /* Keep track of the parameter packs and their corresponding
14650          argument packs.  */
14651       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
14652       TREE_TYPE (packs) = make_tree_vec (len - start);
14653     }
14654   
14655   /* Loop through all of the arguments that have not yet been
14656      unified and unify each with the pattern.  */
14657   for (i = start; i < len; i++)
14658     {
14659       tree parm = pattern;
14660
14661       /* For each parameter pack, clear out the deduced value so that
14662          we can deduce it again.  */
14663       for (pack = packs; pack; pack = TREE_CHAIN (pack))
14664         {
14665           int idx, level;
14666           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14667
14668           TMPL_ARG (targs, level, idx) = NULL_TREE;
14669         }
14670
14671       /* Unify the pattern with the current argument.  */
14672       {
14673         tree arg = TREE_VEC_ELT (packed_args, i);
14674         tree arg_expr = NULL_TREE;
14675         int arg_strict = strict;
14676         bool skip_arg_p = false;
14677
14678         if (call_args_p)
14679           {
14680             int sub_strict;
14681
14682             /* This mirrors what we do in type_unification_real.  */
14683             switch (strict)
14684               {
14685               case DEDUCE_CALL:
14686                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
14687                               | UNIFY_ALLOW_MORE_CV_QUAL
14688                               | UNIFY_ALLOW_DERIVED);
14689                 break;
14690                 
14691               case DEDUCE_CONV:
14692                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
14693                 break;
14694                 
14695               case DEDUCE_EXACT:
14696                 sub_strict = UNIFY_ALLOW_NONE;
14697                 break;
14698                 
14699               default:
14700                 gcc_unreachable ();
14701               }
14702
14703             if (!TYPE_P (arg))
14704               {
14705                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
14706                 if (type_unknown_p (arg))
14707                   {
14708                     /* [temp.deduct.type] A template-argument can be
14709                        deduced from a pointer to function or pointer
14710                        to member function argument if the set of
14711                        overloaded functions does not contain function
14712                        templates and at most one of a set of
14713                        overloaded functions provides a unique
14714                        match.  */
14715
14716                     if (resolve_overloaded_unification
14717                         (tparms, targs, parm, arg,
14718                          (unification_kind_t) strict,
14719                          sub_strict)
14720                         != 0)
14721                       return 1;
14722                     skip_arg_p = true;
14723                   }
14724
14725                 if (!skip_arg_p)
14726                   {
14727                     arg_expr = arg;
14728                     arg = unlowered_expr_type (arg);
14729                     if (arg == error_mark_node)
14730                       return 1;
14731                   }
14732               }
14733       
14734             arg_strict = sub_strict;
14735
14736             if (!subr)
14737               arg_strict |= 
14738                 maybe_adjust_types_for_deduction ((unification_kind_t) strict,
14739                                                   &parm, &arg, arg_expr);
14740           }
14741
14742         if (!skip_arg_p)
14743           {
14744             /* For deduction from an init-list we need the actual list.  */
14745             if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
14746               arg = arg_expr;
14747             if (unify (tparms, targs, parm, arg, arg_strict))
14748               return 1;
14749           }
14750       }
14751
14752       /* For each parameter pack, collect the deduced value.  */
14753       for (pack = packs; pack; pack = TREE_CHAIN (pack))
14754         {
14755           int idx, level;
14756           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14757
14758           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
14759             TMPL_ARG (targs, level, idx);
14760         }
14761     }
14762
14763   /* Verify that the results of unification with the parameter packs
14764      produce results consistent with what we've seen before, and make
14765      the deduced argument packs available.  */
14766   for (pack = packs; pack; pack = TREE_CHAIN (pack))
14767     {
14768       tree old_pack = TREE_VALUE (pack);
14769       tree new_args = TREE_TYPE (pack);
14770       int i, len = TREE_VEC_LENGTH (new_args);
14771       int idx, level;
14772       bool nondeduced_p = false;
14773
14774       /* By default keep the original deduced argument pack.
14775          If necessary, more specific code is going to update the
14776          resulting deduced argument later down in this function.  */
14777       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14778       TMPL_ARG (targs, level, idx) = old_pack;
14779
14780       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
14781          actually deduce anything.  */
14782       for (i = 0; i < len && !nondeduced_p; ++i)
14783         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
14784           nondeduced_p = true;
14785       if (nondeduced_p)
14786         continue;
14787
14788       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
14789         {
14790           /* Prepend the explicit arguments onto NEW_ARGS.  */
14791           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
14792           tree old_args = new_args;
14793           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
14794           int len = explicit_len + TREE_VEC_LENGTH (old_args);
14795
14796           /* Copy the explicit arguments.  */
14797           new_args = make_tree_vec (len);
14798           for (i = 0; i < explicit_len; i++)
14799             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
14800
14801           /* Copy the deduced arguments.  */
14802           for (; i < len; i++)
14803             TREE_VEC_ELT (new_args, i) =
14804               TREE_VEC_ELT (old_args, i - explicit_len);
14805         }
14806
14807       if (!old_pack)
14808         {
14809           tree result;
14810           /* Build the deduced *_ARGUMENT_PACK.  */
14811           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
14812             {
14813               result = make_node (NONTYPE_ARGUMENT_PACK);
14814               TREE_TYPE (result) = 
14815                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
14816               TREE_CONSTANT (result) = 1;
14817             }
14818           else
14819             result = cxx_make_type (TYPE_ARGUMENT_PACK);
14820
14821           SET_ARGUMENT_PACK_ARGS (result, new_args);
14822
14823           /* Note the deduced argument packs for this parameter
14824              pack.  */
14825           TMPL_ARG (targs, level, idx) = result;
14826         }
14827       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
14828                && (ARGUMENT_PACK_ARGS (old_pack) 
14829                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
14830         {
14831           /* We only had the explicitly-provided arguments before, but
14832              now we have a complete set of arguments.  */
14833           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
14834
14835           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
14836           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
14837           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
14838         }
14839       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
14840                                     new_args))
14841         /* Inconsistent unification of this parameter pack.  */
14842         return 1;
14843     }
14844
14845   return 0;
14846 }
14847
14848 /* Deduce the value of template parameters.  TPARMS is the (innermost)
14849    set of template parameters to a template.  TARGS is the bindings
14850    for those template parameters, as determined thus far; TARGS may
14851    include template arguments for outer levels of template parameters
14852    as well.  PARM is a parameter to a template function, or a
14853    subcomponent of that parameter; ARG is the corresponding argument.
14854    This function attempts to match PARM with ARG in a manner
14855    consistent with the existing assignments in TARGS.  If more values
14856    are deduced, then TARGS is updated.
14857
14858    Returns 0 if the type deduction succeeds, 1 otherwise.  The
14859    parameter STRICT is a bitwise or of the following flags:
14860
14861      UNIFY_ALLOW_NONE:
14862        Require an exact match between PARM and ARG.
14863      UNIFY_ALLOW_MORE_CV_QUAL:
14864        Allow the deduced ARG to be more cv-qualified (by qualification
14865        conversion) than ARG.
14866      UNIFY_ALLOW_LESS_CV_QUAL:
14867        Allow the deduced ARG to be less cv-qualified than ARG.
14868      UNIFY_ALLOW_DERIVED:
14869        Allow the deduced ARG to be a template base class of ARG,
14870        or a pointer to a template base class of the type pointed to by
14871        ARG.
14872      UNIFY_ALLOW_INTEGER:
14873        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
14874        case for more information.
14875      UNIFY_ALLOW_OUTER_LEVEL:
14876        This is the outermost level of a deduction. Used to determine validity
14877        of qualification conversions. A valid qualification conversion must
14878        have const qualified pointers leading up to the inner type which
14879        requires additional CV quals, except at the outer level, where const
14880        is not required [conv.qual]. It would be normal to set this flag in
14881        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
14882      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
14883        This is the outermost level of a deduction, and PARM can be more CV
14884        qualified at this point.
14885      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
14886        This is the outermost level of a deduction, and PARM can be less CV
14887        qualified at this point.  */
14888
14889 static int
14890 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
14891 {
14892   int idx;
14893   tree targ;
14894   tree tparm;
14895   int strict_in = strict;
14896
14897   /* I don't think this will do the right thing with respect to types.
14898      But the only case I've seen it in so far has been array bounds, where
14899      signedness is the only information lost, and I think that will be
14900      okay.  */
14901   while (TREE_CODE (parm) == NOP_EXPR)
14902     parm = TREE_OPERAND (parm, 0);
14903
14904   if (arg == error_mark_node)
14905     return 1;
14906   if (arg == unknown_type_node
14907       || arg == init_list_type_node)
14908     /* We can't deduce anything from this, but we might get all the
14909        template args from other function args.  */
14910     return 0;
14911
14912   /* If PARM uses template parameters, then we can't bail out here,
14913      even if ARG == PARM, since we won't record unifications for the
14914      template parameters.  We might need them if we're trying to
14915      figure out which of two things is more specialized.  */
14916   if (arg == parm && !uses_template_parms (parm))
14917     return 0;
14918
14919   /* Handle init lists early, so the rest of the function can assume
14920      we're dealing with a type. */
14921   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
14922     {
14923       tree elt, elttype;
14924       unsigned i;
14925       tree orig_parm = parm;
14926
14927       /* Replace T with std::initializer_list<T> for deduction.  */
14928       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14929           && flag_deduce_init_list)
14930         parm = listify (parm);
14931
14932       if (!is_std_init_list (parm))
14933         /* We can only deduce from an initializer list argument if the
14934            parameter is std::initializer_list; otherwise this is a
14935            non-deduced context. */
14936         return 0;
14937
14938       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
14939
14940       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
14941         {
14942           int elt_strict = strict;
14943
14944           if (elt == error_mark_node)
14945             return 1;
14946
14947           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
14948             {
14949               tree type = TREE_TYPE (elt);
14950               /* It should only be possible to get here for a call.  */
14951               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
14952               elt_strict |= maybe_adjust_types_for_deduction
14953                 (DEDUCE_CALL, &elttype, &type, elt);
14954               elt = type;
14955             }
14956
14957           if (unify (tparms, targs, elttype, elt, elt_strict))
14958             return 1;
14959         }
14960
14961       /* If the std::initializer_list<T> deduction worked, replace the
14962          deduced A with std::initializer_list<A>.  */
14963       if (orig_parm != parm)
14964         {
14965           idx = TEMPLATE_TYPE_IDX (orig_parm);
14966           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
14967           targ = listify (targ);
14968           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
14969         }
14970       return 0;
14971     }
14972
14973   /* Immediately reject some pairs that won't unify because of
14974      cv-qualification mismatches.  */
14975   if (TREE_CODE (arg) == TREE_CODE (parm)
14976       && TYPE_P (arg)
14977       /* It is the elements of the array which hold the cv quals of an array
14978          type, and the elements might be template type parms. We'll check
14979          when we recurse.  */
14980       && TREE_CODE (arg) != ARRAY_TYPE
14981       /* We check the cv-qualifiers when unifying with template type
14982          parameters below.  We want to allow ARG `const T' to unify with
14983          PARM `T' for example, when computing which of two templates
14984          is more specialized, for example.  */
14985       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
14986       && !check_cv_quals_for_unify (strict_in, arg, parm))
14987     return 1;
14988
14989   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
14990       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
14991     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
14992   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
14993   strict &= ~UNIFY_ALLOW_DERIVED;
14994   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
14995   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
14996
14997   switch (TREE_CODE (parm))
14998     {
14999     case TYPENAME_TYPE:
15000     case SCOPE_REF:
15001     case UNBOUND_CLASS_TEMPLATE:
15002       /* In a type which contains a nested-name-specifier, template
15003          argument values cannot be deduced for template parameters used
15004          within the nested-name-specifier.  */
15005       return 0;
15006
15007     case TEMPLATE_TYPE_PARM:
15008     case TEMPLATE_TEMPLATE_PARM:
15009     case BOUND_TEMPLATE_TEMPLATE_PARM:
15010       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
15011       if (tparm == error_mark_node)
15012         return 1;
15013
15014       if (TEMPLATE_TYPE_LEVEL (parm)
15015           != template_decl_level (tparm))
15016         /* The PARM is not one we're trying to unify.  Just check
15017            to see if it matches ARG.  */
15018         return (TREE_CODE (arg) == TREE_CODE (parm)
15019                 && same_type_p (parm, arg)) ? 0 : 1;
15020       idx = TEMPLATE_TYPE_IDX (parm);
15021       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15022       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
15023
15024       /* Check for mixed types and values.  */
15025       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15026            && TREE_CODE (tparm) != TYPE_DECL)
15027           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15028               && TREE_CODE (tparm) != TEMPLATE_DECL))
15029         return 1;
15030
15031       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15032         {
15033           /* ARG must be constructed from a template class or a template
15034              template parameter.  */
15035           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
15036               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
15037             return 1;
15038
15039           {
15040             tree parmvec = TYPE_TI_ARGS (parm);
15041             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
15042             tree full_argvec = add_to_template_args (targs, argvec);
15043             tree parm_parms 
15044               = DECL_INNERMOST_TEMPLATE_PARMS
15045                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
15046             int i, len;
15047             int parm_variadic_p = 0;
15048
15049             /* The resolution to DR150 makes clear that default
15050                arguments for an N-argument may not be used to bind T
15051                to a template template parameter with fewer than N
15052                parameters.  It is not safe to permit the binding of
15053                default arguments as an extension, as that may change
15054                the meaning of a conforming program.  Consider:
15055
15056                   struct Dense { static const unsigned int dim = 1; };
15057
15058                   template <template <typename> class View,
15059                             typename Block>
15060                   void operator+(float, View<Block> const&);
15061
15062                   template <typename Block,
15063                             unsigned int Dim = Block::dim>
15064                   struct Lvalue_proxy { operator float() const; };
15065
15066                   void
15067                   test_1d (void) {
15068                     Lvalue_proxy<Dense> p;
15069                     float b;
15070                     b + p;
15071                   }
15072
15073               Here, if Lvalue_proxy is permitted to bind to View, then
15074               the global operator+ will be used; if they are not, the
15075               Lvalue_proxy will be converted to float.  */
15076             if (coerce_template_parms (parm_parms,
15077                                        full_argvec,
15078                                        TYPE_TI_TEMPLATE (parm),
15079                                        tf_none,
15080                                        /*require_all_args=*/true,
15081                                        /*use_default_args=*/false)
15082                 == error_mark_node)
15083               return 1;
15084
15085             /* Deduce arguments T, i from TT<T> or TT<i>.
15086                We check each element of PARMVEC and ARGVEC individually
15087                rather than the whole TREE_VEC since they can have
15088                different number of elements.  */
15089
15090             parmvec = expand_template_argument_pack (parmvec);
15091             argvec = expand_template_argument_pack (argvec);
15092
15093             len = TREE_VEC_LENGTH (parmvec);
15094
15095             /* Check if the parameters end in a pack, making them
15096                variadic.  */
15097             if (len > 0
15098                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
15099               parm_variadic_p = 1;
15100             
15101             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
15102               return 1;
15103
15104              for (i = 0; i < len - parm_variadic_p; ++i)
15105               {
15106                 if (unify (tparms, targs,
15107                            TREE_VEC_ELT (parmvec, i),
15108                            TREE_VEC_ELT (argvec, i),
15109                            UNIFY_ALLOW_NONE))
15110                   return 1;
15111               }
15112
15113             if (parm_variadic_p
15114                 && unify_pack_expansion (tparms, targs,
15115                                          parmvec, argvec,
15116                                          UNIFY_ALLOW_NONE,
15117                                          /*call_args_p=*/false,
15118                                          /*subr=*/false))
15119               return 1;
15120           }
15121           arg = TYPE_TI_TEMPLATE (arg);
15122
15123           /* Fall through to deduce template name.  */
15124         }
15125
15126       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15127           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15128         {
15129           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
15130
15131           /* Simple cases: Value already set, does match or doesn't.  */
15132           if (targ != NULL_TREE && template_args_equal (targ, arg))
15133             return 0;
15134           else if (targ)
15135             return 1;
15136         }
15137       else
15138         {
15139           /* If PARM is `const T' and ARG is only `int', we don't have
15140              a match unless we are allowing additional qualification.
15141              If ARG is `const int' and PARM is just `T' that's OK;
15142              that binds `const int' to `T'.  */
15143           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
15144                                          arg, parm))
15145             return 1;
15146
15147           /* Consider the case where ARG is `const volatile int' and
15148              PARM is `const T'.  Then, T should be `volatile int'.  */
15149           arg = cp_build_qualified_type_real
15150             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
15151           if (arg == error_mark_node)
15152             return 1;
15153
15154           /* Simple cases: Value already set, does match or doesn't.  */
15155           if (targ != NULL_TREE && same_type_p (targ, arg))
15156             return 0;
15157           else if (targ)
15158             return 1;
15159
15160           /* Make sure that ARG is not a variable-sized array.  (Note
15161              that were talking about variable-sized arrays (like
15162              `int[n]'), rather than arrays of unknown size (like
15163              `int[]').)  We'll get very confused by such a type since
15164              the bound of the array will not be computable in an
15165              instantiation.  Besides, such types are not allowed in
15166              ISO C++, so we can do as we please here.  */
15167           if (variably_modified_type_p (arg, NULL_TREE))
15168             return 1;
15169
15170           /* Strip typedefs as in convert_template_argument.  */
15171           arg = strip_typedefs (arg);
15172         }
15173
15174       /* If ARG is a parameter pack or an expansion, we cannot unify
15175          against it unless PARM is also a parameter pack.  */
15176       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
15177           && !template_parameter_pack_p (parm))
15178         return 1;
15179
15180       /* If the argument deduction results is a METHOD_TYPE,
15181          then there is a problem.
15182          METHOD_TYPE doesn't map to any real C++ type the result of
15183          the deduction can not be of that type.  */
15184       if (TREE_CODE (arg) == METHOD_TYPE)
15185         return 1;
15186
15187       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
15188       return 0;
15189
15190     case TEMPLATE_PARM_INDEX:
15191       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
15192       if (tparm == error_mark_node)
15193         return 1;
15194
15195       if (TEMPLATE_PARM_LEVEL (parm)
15196           != template_decl_level (tparm))
15197         /* The PARM is not one we're trying to unify.  Just check
15198            to see if it matches ARG.  */
15199         return !(TREE_CODE (arg) == TREE_CODE (parm)
15200                  && cp_tree_equal (parm, arg));
15201
15202       idx = TEMPLATE_PARM_IDX (parm);
15203       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15204
15205       if (targ)
15206         return !cp_tree_equal (targ, arg);
15207
15208       /* [temp.deduct.type] If, in the declaration of a function template
15209          with a non-type template-parameter, the non-type
15210          template-parameter is used in an expression in the function
15211          parameter-list and, if the corresponding template-argument is
15212          deduced, the template-argument type shall match the type of the
15213          template-parameter exactly, except that a template-argument
15214          deduced from an array bound may be of any integral type.
15215          The non-type parameter might use already deduced type parameters.  */
15216       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
15217       if (!TREE_TYPE (arg))
15218         /* Template-parameter dependent expression.  Just accept it for now.
15219            It will later be processed in convert_template_argument.  */
15220         ;
15221       else if (same_type_p (TREE_TYPE (arg), tparm))
15222         /* OK */;
15223       else if ((strict & UNIFY_ALLOW_INTEGER)
15224                && (TREE_CODE (tparm) == INTEGER_TYPE
15225                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
15226         /* Convert the ARG to the type of PARM; the deduced non-type
15227            template argument must exactly match the types of the
15228            corresponding parameter.  */
15229         arg = fold (build_nop (tparm, arg));
15230       else if (uses_template_parms (tparm))
15231         /* We haven't deduced the type of this parameter yet.  Try again
15232            later.  */
15233         return 0;
15234       else
15235         return 1;
15236
15237       /* If ARG is a parameter pack or an expansion, we cannot unify
15238          against it unless PARM is also a parameter pack.  */
15239       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
15240           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
15241         return 1;
15242
15243       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
15244       return 0;
15245
15246     case PTRMEM_CST:
15247      {
15248         /* A pointer-to-member constant can be unified only with
15249          another constant.  */
15250       if (TREE_CODE (arg) != PTRMEM_CST)
15251         return 1;
15252
15253       /* Just unify the class member. It would be useless (and possibly
15254          wrong, depending on the strict flags) to unify also
15255          PTRMEM_CST_CLASS, because we want to be sure that both parm and
15256          arg refer to the same variable, even if through different
15257          classes. For instance:
15258
15259          struct A { int x; };
15260          struct B : A { };
15261
15262          Unification of &A::x and &B::x must succeed.  */
15263       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
15264                     PTRMEM_CST_MEMBER (arg), strict);
15265      }
15266
15267     case POINTER_TYPE:
15268       {
15269         if (TREE_CODE (arg) != POINTER_TYPE)
15270           return 1;
15271
15272         /* [temp.deduct.call]
15273
15274            A can be another pointer or pointer to member type that can
15275            be converted to the deduced A via a qualification
15276            conversion (_conv.qual_).
15277
15278            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
15279            This will allow for additional cv-qualification of the
15280            pointed-to types if appropriate.  */
15281
15282         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
15283           /* The derived-to-base conversion only persists through one
15284              level of pointers.  */
15285           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
15286
15287         return unify (tparms, targs, TREE_TYPE (parm),
15288                       TREE_TYPE (arg), strict);
15289       }
15290
15291     case REFERENCE_TYPE:
15292       if (TREE_CODE (arg) != REFERENCE_TYPE)
15293         return 1;
15294       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15295                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
15296
15297     case ARRAY_TYPE:
15298       if (TREE_CODE (arg) != ARRAY_TYPE)
15299         return 1;
15300       if ((TYPE_DOMAIN (parm) == NULL_TREE)
15301           != (TYPE_DOMAIN (arg) == NULL_TREE))
15302         return 1;
15303       if (TYPE_DOMAIN (parm) != NULL_TREE)
15304         {
15305           tree parm_max;
15306           tree arg_max;
15307           bool parm_cst;
15308           bool arg_cst;
15309
15310           /* Our representation of array types uses "N - 1" as the
15311              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
15312              not an integer constant.  We cannot unify arbitrarily
15313              complex expressions, so we eliminate the MINUS_EXPRs
15314              here.  */
15315           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
15316           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
15317           if (!parm_cst)
15318             {
15319               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
15320               parm_max = TREE_OPERAND (parm_max, 0);
15321             }
15322           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
15323           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
15324           if (!arg_cst)
15325             {
15326               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
15327                  trying to unify the type of a variable with the type
15328                  of a template parameter.  For example:
15329
15330                    template <unsigned int N>
15331                    void f (char (&) [N]);
15332                    int g(); 
15333                    void h(int i) {
15334                      char a[g(i)];
15335                      f(a); 
15336                    }
15337
15338                 Here, the type of the ARG will be "int [g(i)]", and
15339                 may be a SAVE_EXPR, etc.  */
15340               if (TREE_CODE (arg_max) != MINUS_EXPR)
15341                 return 1;
15342               arg_max = TREE_OPERAND (arg_max, 0);
15343             }
15344
15345           /* If only one of the bounds used a MINUS_EXPR, compensate
15346              by adding one to the other bound.  */
15347           if (parm_cst && !arg_cst)
15348             parm_max = fold_build2_loc (input_location, PLUS_EXPR,
15349                                     integer_type_node,
15350                                     parm_max,
15351                                     integer_one_node);
15352           else if (arg_cst && !parm_cst)
15353             arg_max = fold_build2_loc (input_location, PLUS_EXPR,
15354                                    integer_type_node,
15355                                    arg_max,
15356                                    integer_one_node);
15357
15358           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
15359             return 1;
15360         }
15361       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15362                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
15363
15364     case REAL_TYPE:
15365     case COMPLEX_TYPE:
15366     case VECTOR_TYPE:
15367     case INTEGER_TYPE:
15368     case BOOLEAN_TYPE:
15369     case ENUMERAL_TYPE:
15370     case VOID_TYPE:
15371       if (TREE_CODE (arg) != TREE_CODE (parm))
15372         return 1;
15373
15374       /* We have already checked cv-qualification at the top of the
15375          function.  */
15376       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
15377         return 1;
15378
15379       /* As far as unification is concerned, this wins.  Later checks
15380          will invalidate it if necessary.  */
15381       return 0;
15382
15383       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
15384       /* Type INTEGER_CST can come from ordinary constant template args.  */
15385     case INTEGER_CST:
15386       while (TREE_CODE (arg) == NOP_EXPR)
15387         arg = TREE_OPERAND (arg, 0);
15388
15389       if (TREE_CODE (arg) != INTEGER_CST)
15390         return 1;
15391       return !tree_int_cst_equal (parm, arg);
15392
15393     case TREE_VEC:
15394       {
15395         int i;
15396         if (TREE_CODE (arg) != TREE_VEC)
15397           return 1;
15398         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
15399           return 1;
15400         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
15401           if (unify (tparms, targs,
15402                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
15403                      UNIFY_ALLOW_NONE))
15404             return 1;
15405         return 0;
15406       }
15407
15408     case RECORD_TYPE:
15409     case UNION_TYPE:
15410       if (TREE_CODE (arg) != TREE_CODE (parm))
15411         return 1;
15412
15413       if (TYPE_PTRMEMFUNC_P (parm))
15414         {
15415           if (!TYPE_PTRMEMFUNC_P (arg))
15416             return 1;
15417
15418           return unify (tparms, targs,
15419                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
15420                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
15421                         strict);
15422         }
15423
15424       if (CLASSTYPE_TEMPLATE_INFO (parm))
15425         {
15426           tree t = NULL_TREE;
15427
15428           if (strict_in & UNIFY_ALLOW_DERIVED)
15429             {
15430               /* First, we try to unify the PARM and ARG directly.  */
15431               t = try_class_unification (tparms, targs,
15432                                          parm, arg);
15433
15434               if (!t)
15435                 {
15436                   /* Fallback to the special case allowed in
15437                      [temp.deduct.call]:
15438
15439                        If P is a class, and P has the form
15440                        template-id, then A can be a derived class of
15441                        the deduced A.  Likewise, if P is a pointer to
15442                        a class of the form template-id, A can be a
15443                        pointer to a derived class pointed to by the
15444                        deduced A.  */
15445                   t = get_template_base (tparms, targs, parm, arg);
15446
15447                   if (!t)
15448                     return 1;
15449                 }
15450             }
15451           else if (CLASSTYPE_TEMPLATE_INFO (arg)
15452                    && (CLASSTYPE_TI_TEMPLATE (parm)
15453                        == CLASSTYPE_TI_TEMPLATE (arg)))
15454             /* Perhaps PARM is something like S<U> and ARG is S<int>.
15455                Then, we should unify `int' and `U'.  */
15456             t = arg;
15457           else
15458             /* There's no chance of unification succeeding.  */
15459             return 1;
15460
15461           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
15462                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
15463         }
15464       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
15465         return 1;
15466       return 0;
15467
15468     case METHOD_TYPE:
15469     case FUNCTION_TYPE:
15470       {
15471         unsigned int nargs;
15472         tree *args;
15473         tree a;
15474         unsigned int i;
15475
15476         if (TREE_CODE (arg) != TREE_CODE (parm))
15477           return 1;
15478
15479         /* CV qualifications for methods can never be deduced, they must
15480            match exactly.  We need to check them explicitly here,
15481            because type_unification_real treats them as any other
15482            cv-qualified parameter.  */
15483         if (TREE_CODE (parm) == METHOD_TYPE
15484             && (!check_cv_quals_for_unify
15485                 (UNIFY_ALLOW_NONE,
15486                  TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
15487                  TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
15488           return 1;
15489
15490         if (unify (tparms, targs, TREE_TYPE (parm),
15491                    TREE_TYPE (arg), UNIFY_ALLOW_NONE))
15492           return 1;
15493
15494         nargs = list_length (TYPE_ARG_TYPES (arg));
15495         args = XALLOCAVEC (tree, nargs);
15496         for (a = TYPE_ARG_TYPES (arg), i = 0;
15497              a != NULL_TREE && a != void_list_node;
15498              a = TREE_CHAIN (a), ++i)
15499           args[i] = TREE_VALUE (a);
15500         nargs = i;
15501
15502         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
15503                                       args, nargs, 1, DEDUCE_EXACT,
15504                                       LOOKUP_NORMAL);
15505       }
15506
15507     case OFFSET_TYPE:
15508       /* Unify a pointer to member with a pointer to member function, which
15509          deduces the type of the member as a function type. */
15510       if (TYPE_PTRMEMFUNC_P (arg))
15511         {
15512           tree method_type;
15513           tree fntype;
15514
15515           /* Check top-level cv qualifiers */
15516           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
15517             return 1;
15518
15519           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
15520                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
15521             return 1;
15522
15523           /* Determine the type of the function we are unifying against. */
15524           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
15525           fntype =
15526             build_function_type (TREE_TYPE (method_type),
15527                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
15528
15529           /* Extract the cv-qualifiers of the member function from the
15530              implicit object parameter and place them on the function
15531              type to be restored later. */
15532           fntype = apply_memfn_quals (fntype, type_memfn_quals (method_type));
15533           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
15534         }
15535
15536       if (TREE_CODE (arg) != OFFSET_TYPE)
15537         return 1;
15538       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
15539                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
15540         return 1;
15541       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15542                     strict);
15543
15544     case CONST_DECL:
15545       if (DECL_TEMPLATE_PARM_P (parm))
15546         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
15547       if (arg != integral_constant_value (parm))
15548         return 1;
15549       return 0;
15550
15551     case FIELD_DECL:
15552     case TEMPLATE_DECL:
15553       /* Matched cases are handled by the ARG == PARM test above.  */
15554       return 1;
15555
15556     case VAR_DECL:
15557       /* A non-type template parameter that is a variable should be a
15558          an integral constant, in which case, it whould have been
15559          folded into its (constant) value. So we should not be getting
15560          a variable here.  */
15561       gcc_unreachable ();
15562
15563     case TYPE_ARGUMENT_PACK:
15564     case NONTYPE_ARGUMENT_PACK:
15565       {
15566         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
15567         tree packed_args = ARGUMENT_PACK_ARGS (arg);
15568         int i, len = TREE_VEC_LENGTH (packed_parms);
15569         int argslen = TREE_VEC_LENGTH (packed_args);
15570         int parm_variadic_p = 0;
15571
15572         for (i = 0; i < len; ++i)
15573           {
15574             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
15575               {
15576                 if (i == len - 1)
15577                   /* We can unify against something with a trailing
15578                      parameter pack.  */
15579                   parm_variadic_p = 1;
15580                 else
15581                   /* Since there is something following the pack
15582                      expansion, we cannot unify this template argument
15583                      list.  */
15584                   return 0;
15585               }
15586           }
15587           
15588
15589         /* If we don't have enough arguments to satisfy the parameters
15590            (not counting the pack expression at the end), or we have
15591            too many arguments for a parameter list that doesn't end in
15592            a pack expression, we can't unify.  */
15593         if (argslen < (len - parm_variadic_p)
15594             || (argslen > len && !parm_variadic_p))
15595           return 1;
15596
15597         /* Unify all of the parameters that precede the (optional)
15598            pack expression.  */
15599         for (i = 0; i < len - parm_variadic_p; ++i)
15600           {
15601             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
15602                        TREE_VEC_ELT (packed_args, i), strict))
15603               return 1;
15604           }
15605
15606         if (parm_variadic_p)
15607           return unify_pack_expansion (tparms, targs, 
15608                                        packed_parms, packed_args,
15609                                        strict, /*call_args_p=*/false,
15610                                        /*subr=*/false);
15611         return 0;
15612       }
15613
15614       break;
15615
15616     case TYPEOF_TYPE:
15617     case DECLTYPE_TYPE:
15618       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
15619          nodes.  */
15620       return 0;
15621
15622     case ERROR_MARK:
15623       /* Unification fails if we hit an error node.  */
15624       return 1;
15625
15626     default:
15627       gcc_assert (EXPR_P (parm));
15628
15629       /* We must be looking at an expression.  This can happen with
15630          something like:
15631
15632            template <int I>
15633            void foo(S<I>, S<I + 2>);
15634
15635          This is a "nondeduced context":
15636
15637            [deduct.type]
15638
15639            The nondeduced contexts are:
15640
15641            --A type that is a template-id in which one or more of
15642              the template-arguments is an expression that references
15643              a template-parameter.
15644
15645          In these cases, we assume deduction succeeded, but don't
15646          actually infer any unifications.  */
15647
15648       if (!uses_template_parms (parm)
15649           && !template_args_equal (parm, arg))
15650         return 1;
15651       else
15652         return 0;
15653     }
15654 }
15655 \f
15656 /* Note that DECL can be defined in this translation unit, if
15657    required.  */
15658
15659 static void
15660 mark_definable (tree decl)
15661 {
15662   tree clone;
15663   DECL_NOT_REALLY_EXTERN (decl) = 1;
15664   FOR_EACH_CLONE (clone, decl)
15665     DECL_NOT_REALLY_EXTERN (clone) = 1;
15666 }
15667
15668 /* Called if RESULT is explicitly instantiated, or is a member of an
15669    explicitly instantiated class.  */
15670
15671 void
15672 mark_decl_instantiated (tree result, int extern_p)
15673 {
15674   SET_DECL_EXPLICIT_INSTANTIATION (result);
15675
15676   /* If this entity has already been written out, it's too late to
15677      make any modifications.  */
15678   if (TREE_ASM_WRITTEN (result))
15679     return;
15680
15681   if (TREE_CODE (result) != FUNCTION_DECL)
15682     /* The TREE_PUBLIC flag for function declarations will have been
15683        set correctly by tsubst.  */
15684     TREE_PUBLIC (result) = 1;
15685
15686   /* This might have been set by an earlier implicit instantiation.  */
15687   DECL_COMDAT (result) = 0;
15688
15689   if (extern_p)
15690     DECL_NOT_REALLY_EXTERN (result) = 0;
15691   else
15692     {
15693       mark_definable (result);
15694       /* Always make artificials weak.  */
15695       if (DECL_ARTIFICIAL (result) && flag_weak)
15696         comdat_linkage (result);
15697       /* For WIN32 we also want to put explicit instantiations in
15698          linkonce sections.  */
15699       else if (TREE_PUBLIC (result))
15700         maybe_make_one_only (result);
15701     }
15702
15703   /* If EXTERN_P, then this function will not be emitted -- unless
15704      followed by an explicit instantiation, at which point its linkage
15705      will be adjusted.  If !EXTERN_P, then this function will be
15706      emitted here.  In neither circumstance do we want
15707      import_export_decl to adjust the linkage.  */
15708   DECL_INTERFACE_KNOWN (result) = 1;
15709 }
15710
15711 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
15712    important template arguments.  If any are missing, we check whether
15713    they're important by using error_mark_node for substituting into any
15714    args that were used for partial ordering (the ones between ARGS and END)
15715    and seeing if it bubbles up.  */
15716
15717 static bool
15718 check_undeduced_parms (tree targs, tree args, tree end)
15719 {
15720   bool found = false;
15721   int i;
15722   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
15723     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
15724       {
15725         found = true;
15726         TREE_VEC_ELT (targs, i) = error_mark_node;
15727       }
15728   if (found)
15729     {
15730       for (; args != end; args = TREE_CHAIN (args))
15731         {
15732           tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
15733           if (substed == error_mark_node)
15734             return true;
15735         }
15736     }
15737   return false;
15738 }
15739
15740 /* Given two function templates PAT1 and PAT2, return:
15741
15742    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
15743    -1 if PAT2 is more specialized than PAT1.
15744    0 if neither is more specialized.
15745
15746    LEN indicates the number of parameters we should consider
15747    (defaulted parameters should not be considered).
15748
15749    The 1998 std underspecified function template partial ordering, and
15750    DR214 addresses the issue.  We take pairs of arguments, one from
15751    each of the templates, and deduce them against each other.  One of
15752    the templates will be more specialized if all the *other*
15753    template's arguments deduce against its arguments and at least one
15754    of its arguments *does* *not* deduce against the other template's
15755    corresponding argument.  Deduction is done as for class templates.
15756    The arguments used in deduction have reference and top level cv
15757    qualifiers removed.  Iff both arguments were originally reference
15758    types *and* deduction succeeds in both directions, the template
15759    with the more cv-qualified argument wins for that pairing (if
15760    neither is more cv-qualified, they both are equal).  Unlike regular
15761    deduction, after all the arguments have been deduced in this way,
15762    we do *not* verify the deduced template argument values can be
15763    substituted into non-deduced contexts.
15764
15765    The logic can be a bit confusing here, because we look at deduce1 and
15766    targs1 to see if pat2 is at least as specialized, and vice versa; if we
15767    can find template arguments for pat1 to make arg1 look like arg2, that
15768    means that arg2 is at least as specialized as arg1.  */
15769
15770 int
15771 more_specialized_fn (tree pat1, tree pat2, int len)
15772 {
15773   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
15774   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
15775   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
15776   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
15777   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
15778   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
15779   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
15780   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
15781   tree origs1, origs2;
15782   bool lose1 = false;
15783   bool lose2 = false;
15784
15785   /* Remove the this parameter from non-static member functions.  If
15786      one is a non-static member function and the other is not a static
15787      member function, remove the first parameter from that function
15788      also.  This situation occurs for operator functions where we
15789      locate both a member function (with this pointer) and non-member
15790      operator (with explicit first operand).  */
15791   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
15792     {
15793       len--; /* LEN is the number of significant arguments for DECL1 */
15794       args1 = TREE_CHAIN (args1);
15795       if (!DECL_STATIC_FUNCTION_P (decl2))
15796         args2 = TREE_CHAIN (args2);
15797     }
15798   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
15799     {
15800       args2 = TREE_CHAIN (args2);
15801       if (!DECL_STATIC_FUNCTION_P (decl1))
15802         {
15803           len--;
15804           args1 = TREE_CHAIN (args1);
15805         }
15806     }
15807
15808   /* If only one is a conversion operator, they are unordered.  */
15809   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
15810     return 0;
15811
15812   /* Consider the return type for a conversion function */
15813   if (DECL_CONV_FN_P (decl1))
15814     {
15815       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
15816       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
15817       len++;
15818     }
15819
15820   processing_template_decl++;
15821
15822   origs1 = args1;
15823   origs2 = args2;
15824
15825   while (len--
15826          /* Stop when an ellipsis is seen.  */
15827          && args1 != NULL_TREE && args2 != NULL_TREE)
15828     {
15829       tree arg1 = TREE_VALUE (args1);
15830       tree arg2 = TREE_VALUE (args2);
15831       int deduce1, deduce2;
15832       int quals1 = -1;
15833       int quals2 = -1;
15834
15835       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
15836           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15837         {
15838           /* When both arguments are pack expansions, we need only
15839              unify the patterns themselves.  */
15840           arg1 = PACK_EXPANSION_PATTERN (arg1);
15841           arg2 = PACK_EXPANSION_PATTERN (arg2);
15842
15843           /* This is the last comparison we need to do.  */
15844           len = 0;
15845         }
15846
15847       if (TREE_CODE (arg1) == REFERENCE_TYPE)
15848         {
15849           arg1 = TREE_TYPE (arg1);
15850           quals1 = cp_type_quals (arg1);
15851         }
15852
15853       if (TREE_CODE (arg2) == REFERENCE_TYPE)
15854         {
15855           arg2 = TREE_TYPE (arg2);
15856           quals2 = cp_type_quals (arg2);
15857         }
15858
15859       if ((quals1 < 0) != (quals2 < 0))
15860         {
15861           /* Only of the args is a reference, see if we should apply
15862              array/function pointer decay to it.  This is not part of
15863              DR214, but is, IMHO, consistent with the deduction rules
15864              for the function call itself, and with our earlier
15865              implementation of the underspecified partial ordering
15866              rules.  (nathan).  */
15867           if (quals1 >= 0)
15868             {
15869               switch (TREE_CODE (arg1))
15870                 {
15871                 case ARRAY_TYPE:
15872                   arg1 = TREE_TYPE (arg1);
15873                   /* FALLTHROUGH. */
15874                 case FUNCTION_TYPE:
15875                   arg1 = build_pointer_type (arg1);
15876                   break;
15877
15878                 default:
15879                   break;
15880                 }
15881             }
15882           else
15883             {
15884               switch (TREE_CODE (arg2))
15885                 {
15886                 case ARRAY_TYPE:
15887                   arg2 = TREE_TYPE (arg2);
15888                   /* FALLTHROUGH. */
15889                 case FUNCTION_TYPE:
15890                   arg2 = build_pointer_type (arg2);
15891                   break;
15892
15893                 default:
15894                   break;
15895                 }
15896             }
15897         }
15898
15899       arg1 = TYPE_MAIN_VARIANT (arg1);
15900       arg2 = TYPE_MAIN_VARIANT (arg2);
15901
15902       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
15903         {
15904           int i, len2 = list_length (args2);
15905           tree parmvec = make_tree_vec (1);
15906           tree argvec = make_tree_vec (len2);
15907           tree ta = args2;
15908
15909           /* Setup the parameter vector, which contains only ARG1.  */
15910           TREE_VEC_ELT (parmvec, 0) = arg1;
15911
15912           /* Setup the argument vector, which contains the remaining
15913              arguments.  */
15914           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
15915             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
15916
15917           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
15918                                            argvec, UNIFY_ALLOW_NONE, 
15919                                            /*call_args_p=*/false, 
15920                                            /*subr=*/0);
15921
15922           /* We cannot deduce in the other direction, because ARG1 is
15923              a pack expansion but ARG2 is not.  */
15924           deduce2 = 0;
15925         }
15926       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15927         {
15928           int i, len1 = list_length (args1);
15929           tree parmvec = make_tree_vec (1);
15930           tree argvec = make_tree_vec (len1);
15931           tree ta = args1;
15932
15933           /* Setup the parameter vector, which contains only ARG1.  */
15934           TREE_VEC_ELT (parmvec, 0) = arg2;
15935
15936           /* Setup the argument vector, which contains the remaining
15937              arguments.  */
15938           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
15939             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
15940
15941           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
15942                                            argvec, UNIFY_ALLOW_NONE, 
15943                                            /*call_args_p=*/false, 
15944                                            /*subr=*/0);
15945
15946           /* We cannot deduce in the other direction, because ARG2 is
15947              a pack expansion but ARG1 is not.*/
15948           deduce1 = 0;
15949         }
15950
15951       else
15952         {
15953           /* The normal case, where neither argument is a pack
15954              expansion.  */
15955           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
15956           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
15957         }
15958
15959       /* If we couldn't deduce arguments for tparms1 to make arg1 match
15960          arg2, then arg2 is not as specialized as arg1.  */
15961       if (!deduce1)
15962         lose2 = true;
15963       if (!deduce2)
15964         lose1 = true;
15965
15966       /* "If, for a given type, deduction succeeds in both directions
15967          (i.e., the types are identical after the transformations above)
15968          and if the type from the argument template is more cv-qualified
15969          than the type from the parameter template (as described above)
15970          that type is considered to be more specialized than the other. If
15971          neither type is more cv-qualified than the other then neither type
15972          is more specialized than the other."  */
15973
15974       if (deduce1 && deduce2
15975           && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
15976         {
15977           if ((quals1 & quals2) == quals2)
15978             lose2 = true;
15979           if ((quals1 & quals2) == quals1)
15980             lose1 = true;
15981         }
15982
15983       if (lose1 && lose2)
15984         /* We've failed to deduce something in either direction.
15985            These must be unordered.  */
15986         break;
15987
15988       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
15989           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15990         /* We have already processed all of the arguments in our
15991            handing of the pack expansion type.  */
15992         len = 0;
15993
15994       args1 = TREE_CHAIN (args1);
15995       args2 = TREE_CHAIN (args2);
15996     }
15997
15998   /* "In most cases, all template parameters must have values in order for
15999      deduction to succeed, but for partial ordering purposes a template
16000      parameter may remain without a value provided it is not used in the
16001      types being used for partial ordering."
16002
16003      Thus, if we are missing any of the targs1 we need to substitute into
16004      origs1, then pat2 is not as specialized as pat1.  This can happen when
16005      there is a nondeduced context.  */
16006   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
16007     lose2 = true;
16008   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
16009     lose1 = true;
16010
16011   processing_template_decl--;
16012
16013   /* All things being equal, if the next argument is a pack expansion
16014      for one function but not for the other, prefer the
16015      non-variadic function.  FIXME this is bogus; see c++/41958.  */
16016   if (lose1 == lose2
16017       && args1 && TREE_VALUE (args1)
16018       && args2 && TREE_VALUE (args2))
16019     {
16020       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
16021       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
16022     }
16023
16024   if (lose1 == lose2)
16025     return 0;
16026   else if (!lose1)
16027     return 1;
16028   else
16029     return -1;
16030 }
16031
16032 /* Determine which of two partial specializations is more specialized.
16033
16034    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
16035    to the first partial specialization.  The TREE_VALUE is the
16036    innermost set of template parameters for the partial
16037    specialization.  PAT2 is similar, but for the second template.
16038
16039    Return 1 if the first partial specialization is more specialized;
16040    -1 if the second is more specialized; 0 if neither is more
16041    specialized.
16042
16043    See [temp.class.order] for information about determining which of
16044    two templates is more specialized.  */
16045
16046 static int
16047 more_specialized_class (tree pat1, tree pat2)
16048 {
16049   tree targs;
16050   tree tmpl1, tmpl2;
16051   int winner = 0;
16052   bool any_deductions = false;
16053
16054   tmpl1 = TREE_TYPE (pat1);
16055   tmpl2 = TREE_TYPE (pat2);
16056
16057   /* Just like what happens for functions, if we are ordering between
16058      different class template specializations, we may encounter dependent
16059      types in the arguments, and we need our dependency check functions
16060      to behave correctly.  */
16061   ++processing_template_decl;
16062   targs = get_class_bindings (TREE_VALUE (pat1),
16063                               CLASSTYPE_TI_ARGS (tmpl1),
16064                               CLASSTYPE_TI_ARGS (tmpl2));
16065   if (targs)
16066     {
16067       --winner;
16068       any_deductions = true;
16069     }
16070
16071   targs = get_class_bindings (TREE_VALUE (pat2),
16072                               CLASSTYPE_TI_ARGS (tmpl2),
16073                               CLASSTYPE_TI_ARGS (tmpl1));
16074   if (targs)
16075     {
16076       ++winner;
16077       any_deductions = true;
16078     }
16079   --processing_template_decl;
16080
16081   /* In the case of a tie where at least one of the class templates
16082      has a parameter pack at the end, the template with the most
16083      non-packed parameters wins.  */
16084   if (winner == 0
16085       && any_deductions
16086       && (template_args_variadic_p (TREE_PURPOSE (pat1))
16087           || template_args_variadic_p (TREE_PURPOSE (pat2))))
16088     {
16089       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
16090       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
16091       int len1 = TREE_VEC_LENGTH (args1);
16092       int len2 = TREE_VEC_LENGTH (args2);
16093
16094       /* We don't count the pack expansion at the end.  */
16095       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
16096         --len1;
16097       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
16098         --len2;
16099
16100       if (len1 > len2)
16101         return 1;
16102       else if (len1 < len2)
16103         return -1;
16104     }
16105
16106   return winner;
16107 }
16108
16109 /* Return the template arguments that will produce the function signature
16110    DECL from the function template FN, with the explicit template
16111    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
16112    also match.  Return NULL_TREE if no satisfactory arguments could be
16113    found.  */
16114
16115 static tree
16116 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
16117 {
16118   int ntparms = DECL_NTPARMS (fn);
16119   tree targs = make_tree_vec (ntparms);
16120   tree decl_type;
16121   tree decl_arg_types;
16122   tree *args;
16123   unsigned int nargs, ix;
16124   tree arg;
16125
16126   /* Substitute the explicit template arguments into the type of DECL.
16127      The call to fn_type_unification will handle substitution into the
16128      FN.  */
16129   decl_type = TREE_TYPE (decl);
16130   if (explicit_args && uses_template_parms (decl_type))
16131     {
16132       tree tmpl;
16133       tree converted_args;
16134
16135       if (DECL_TEMPLATE_INFO (decl))
16136         tmpl = DECL_TI_TEMPLATE (decl);
16137       else
16138         /* We can get here for some invalid specializations.  */
16139         return NULL_TREE;
16140
16141       converted_args
16142         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
16143                                  explicit_args, NULL_TREE,
16144                                  tf_none,
16145                                  /*require_all_args=*/false,
16146                                  /*use_default_args=*/false);
16147       if (converted_args == error_mark_node)
16148         return NULL_TREE;
16149
16150       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
16151       if (decl_type == error_mark_node)
16152         return NULL_TREE;
16153     }
16154
16155   /* Never do unification on the 'this' parameter.  */
16156   decl_arg_types = skip_artificial_parms_for (decl, 
16157                                               TYPE_ARG_TYPES (decl_type));
16158
16159   nargs = list_length (decl_arg_types);
16160   args = XALLOCAVEC (tree, nargs);
16161   for (arg = decl_arg_types, ix = 0;
16162        arg != NULL_TREE && arg != void_list_node;
16163        arg = TREE_CHAIN (arg), ++ix)
16164     args[ix] = TREE_VALUE (arg);
16165
16166   if (fn_type_unification (fn, explicit_args, targs,
16167                            args, ix,
16168                            (check_rettype || DECL_CONV_FN_P (fn)
16169                             ? TREE_TYPE (decl_type) : NULL_TREE),
16170                            DEDUCE_EXACT, LOOKUP_NORMAL))
16171     return NULL_TREE;
16172
16173   return targs;
16174 }
16175
16176 /* Return the innermost template arguments that, when applied to a
16177    template specialization whose innermost template parameters are
16178    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
16179    ARGS.
16180
16181    For example, suppose we have:
16182
16183      template <class T, class U> struct S {};
16184      template <class T> struct S<T*, int> {};
16185
16186    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
16187    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
16188    int}.  The resulting vector will be {double}, indicating that `T'
16189    is bound to `double'.  */
16190
16191 static tree
16192 get_class_bindings (tree tparms, tree spec_args, tree args)
16193 {
16194   int i, ntparms = TREE_VEC_LENGTH (tparms);
16195   tree deduced_args;
16196   tree innermost_deduced_args;
16197
16198   innermost_deduced_args = make_tree_vec (ntparms);
16199   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
16200     {
16201       deduced_args = copy_node (args);
16202       SET_TMPL_ARGS_LEVEL (deduced_args,
16203                            TMPL_ARGS_DEPTH (deduced_args),
16204                            innermost_deduced_args);
16205     }
16206   else
16207     deduced_args = innermost_deduced_args;
16208
16209   if (unify (tparms, deduced_args,
16210              INNERMOST_TEMPLATE_ARGS (spec_args),
16211              INNERMOST_TEMPLATE_ARGS (args),
16212              UNIFY_ALLOW_NONE))
16213     return NULL_TREE;
16214
16215   for (i =  0; i < ntparms; ++i)
16216     if (! TREE_VEC_ELT (innermost_deduced_args, i))
16217       return NULL_TREE;
16218
16219   /* Verify that nondeduced template arguments agree with the type
16220      obtained from argument deduction.
16221
16222      For example:
16223
16224        struct A { typedef int X; };
16225        template <class T, class U> struct C {};
16226        template <class T> struct C<T, typename T::X> {};
16227
16228      Then with the instantiation `C<A, int>', we can deduce that
16229      `T' is `A' but unify () does not check whether `typename T::X'
16230      is `int'.  */
16231   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
16232   if (spec_args == error_mark_node
16233       /* We only need to check the innermost arguments; the other
16234          arguments will always agree.  */
16235       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
16236                               INNERMOST_TEMPLATE_ARGS (args)))
16237     return NULL_TREE;
16238
16239   /* Now that we have bindings for all of the template arguments,
16240      ensure that the arguments deduced for the template template
16241      parameters have compatible template parameter lists.  See the use
16242      of template_template_parm_bindings_ok_p in fn_type_unification
16243      for more information.  */
16244   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
16245     return NULL_TREE;
16246
16247   return deduced_args;
16248 }
16249
16250 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
16251    Return the TREE_LIST node with the most specialized template, if
16252    any.  If there is no most specialized template, the error_mark_node
16253    is returned.
16254
16255    Note that this function does not look at, or modify, the
16256    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
16257    returned is one of the elements of INSTANTIATIONS, callers may
16258    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
16259    and retrieve it from the value returned.  */
16260
16261 tree
16262 most_specialized_instantiation (tree templates)
16263 {
16264   tree fn, champ;
16265
16266   ++processing_template_decl;
16267
16268   champ = templates;
16269   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
16270     {
16271       int fate = 0;
16272
16273       if (get_bindings (TREE_VALUE (champ),
16274                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
16275                         NULL_TREE, /*check_ret=*/false))
16276         fate--;
16277
16278       if (get_bindings (TREE_VALUE (fn),
16279                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
16280                         NULL_TREE, /*check_ret=*/false))
16281         fate++;
16282
16283       if (fate == -1)
16284         champ = fn;
16285       else if (!fate)
16286         {
16287           /* Equally specialized, move to next function.  If there
16288              is no next function, nothing's most specialized.  */
16289           fn = TREE_CHAIN (fn);
16290           champ = fn;
16291           if (!fn)
16292             break;
16293         }
16294     }
16295
16296   if (champ)
16297     /* Now verify that champ is better than everything earlier in the
16298        instantiation list.  */
16299     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
16300       if (get_bindings (TREE_VALUE (champ),
16301                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
16302                         NULL_TREE, /*check_ret=*/false)
16303           || !get_bindings (TREE_VALUE (fn),
16304                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
16305                             NULL_TREE, /*check_ret=*/false))
16306         {
16307           champ = NULL_TREE;
16308           break;
16309         }
16310
16311   processing_template_decl--;
16312
16313   if (!champ)
16314     return error_mark_node;
16315
16316   return champ;
16317 }
16318
16319 /* If DECL is a specialization of some template, return the most
16320    general such template.  Otherwise, returns NULL_TREE.
16321
16322    For example, given:
16323
16324      template <class T> struct S { template <class U> void f(U); };
16325
16326    if TMPL is `template <class U> void S<int>::f(U)' this will return
16327    the full template.  This function will not trace past partial
16328    specializations, however.  For example, given in addition:
16329
16330      template <class T> struct S<T*> { template <class U> void f(U); };
16331
16332    if TMPL is `template <class U> void S<int*>::f(U)' this will return
16333    `template <class T> template <class U> S<T*>::f(U)'.  */
16334
16335 tree
16336 most_general_template (tree decl)
16337 {
16338   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
16339      an immediate specialization.  */
16340   if (TREE_CODE (decl) == FUNCTION_DECL)
16341     {
16342       if (DECL_TEMPLATE_INFO (decl)) {
16343         decl = DECL_TI_TEMPLATE (decl);
16344
16345         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
16346            template friend.  */
16347         if (TREE_CODE (decl) != TEMPLATE_DECL)
16348           return NULL_TREE;
16349       } else
16350         return NULL_TREE;
16351     }
16352
16353   /* Look for more and more general templates.  */
16354   while (DECL_TEMPLATE_INFO (decl))
16355     {
16356       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
16357          (See cp-tree.h for details.)  */
16358       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
16359         break;
16360
16361       if (CLASS_TYPE_P (TREE_TYPE (decl))
16362           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
16363         break;
16364
16365       /* Stop if we run into an explicitly specialized class template.  */
16366       if (!DECL_NAMESPACE_SCOPE_P (decl)
16367           && DECL_CONTEXT (decl)
16368           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
16369         break;
16370
16371       decl = DECL_TI_TEMPLATE (decl);
16372     }
16373
16374   return decl;
16375 }
16376
16377 /* Return the most specialized of the class template partial
16378    specializations of TMPL which can produce TYPE, a specialization of
16379    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
16380    a _TYPE node corresponding to the partial specialization, while the
16381    TREE_PURPOSE is the set of template arguments that must be
16382    substituted into the TREE_TYPE in order to generate TYPE.
16383
16384    If the choice of partial specialization is ambiguous, a diagnostic
16385    is issued, and the error_mark_node is returned.  If there are no
16386    partial specializations of TMPL matching TYPE, then NULL_TREE is
16387    returned.  */
16388
16389 static tree
16390 most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
16391 {
16392   tree list = NULL_TREE;
16393   tree t;
16394   tree champ;
16395   int fate;
16396   bool ambiguous_p;
16397   tree args;
16398   tree outer_args = NULL_TREE;
16399
16400   tmpl = most_general_template (tmpl);
16401   args = CLASSTYPE_TI_ARGS (type);
16402
16403   /* For determining which partial specialization to use, only the
16404      innermost args are interesting.  */
16405   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
16406     {
16407       outer_args = strip_innermost_template_args (args, 1);
16408       args = INNERMOST_TEMPLATE_ARGS (args);
16409     }
16410
16411   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
16412     {
16413       tree partial_spec_args;
16414       tree spec_args;
16415       tree parms = TREE_VALUE (t);
16416
16417       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
16418
16419       ++processing_template_decl;
16420
16421       if (outer_args)
16422         {
16423           int i;
16424
16425           /* Discard the outer levels of args, and then substitute in the
16426              template args from the enclosing class.  */
16427           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
16428           partial_spec_args = tsubst_template_args
16429             (partial_spec_args, outer_args, tf_none, NULL_TREE);
16430
16431           /* PARMS already refers to just the innermost parms, but the
16432              template parms in partial_spec_args had their levels lowered
16433              by tsubst, so we need to do the same for the parm list.  We
16434              can't just tsubst the TREE_VEC itself, as tsubst wants to
16435              treat a TREE_VEC as an argument vector.  */
16436           parms = copy_node (parms);
16437           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
16438             TREE_VEC_ELT (parms, i) =
16439               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
16440
16441         }
16442
16443       partial_spec_args =
16444           coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
16445                                  add_to_template_args (outer_args,
16446                                                        partial_spec_args),
16447                                  tmpl, tf_none,
16448                                  /*require_all_args=*/true,
16449                                  /*use_default_args=*/true);
16450
16451       --processing_template_decl;
16452
16453       if (partial_spec_args == error_mark_node)
16454         return error_mark_node;
16455
16456       spec_args = get_class_bindings (parms,
16457                                       partial_spec_args,
16458                                       args);
16459       if (spec_args)
16460         {
16461           if (outer_args)
16462             spec_args = add_to_template_args (outer_args, spec_args);
16463           list = tree_cons (spec_args, TREE_VALUE (t), list);
16464           TREE_TYPE (list) = TREE_TYPE (t);
16465         }
16466     }
16467
16468   if (! list)
16469     return NULL_TREE;
16470
16471   ambiguous_p = false;
16472   t = list;
16473   champ = t;
16474   t = TREE_CHAIN (t);
16475   for (; t; t = TREE_CHAIN (t))
16476     {
16477       fate = more_specialized_class (champ, t);
16478       if (fate == 1)
16479         ;
16480       else
16481         {
16482           if (fate == 0)
16483             {
16484               t = TREE_CHAIN (t);
16485               if (! t)
16486                 {
16487                   ambiguous_p = true;
16488                   break;
16489                 }
16490             }
16491           champ = t;
16492         }
16493     }
16494
16495   if (!ambiguous_p)
16496     for (t = list; t && t != champ; t = TREE_CHAIN (t))
16497       {
16498         fate = more_specialized_class (champ, t);
16499         if (fate != 1)
16500           {
16501             ambiguous_p = true;
16502             break;
16503           }
16504       }
16505
16506   if (ambiguous_p)
16507     {
16508       const char *str;
16509       char *spaces = NULL;
16510       if (!(complain & tf_error))
16511         return error_mark_node;
16512       error ("ambiguous class template instantiation for %q#T", type);
16513       str = ngettext ("candidate is:", "candidates are:", list_length (list));
16514       for (t = list; t; t = TREE_CHAIN (t))
16515         {
16516           error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
16517           spaces = spaces ? spaces : get_spaces (str);
16518         }
16519       free (spaces);
16520       return error_mark_node;
16521     }
16522
16523   return champ;
16524 }
16525
16526 /* Explicitly instantiate DECL.  */
16527
16528 void
16529 do_decl_instantiation (tree decl, tree storage)
16530 {
16531   tree result = NULL_TREE;
16532   int extern_p = 0;
16533
16534   if (!decl || decl == error_mark_node)
16535     /* An error occurred, for which grokdeclarator has already issued
16536        an appropriate message.  */
16537     return;
16538   else if (! DECL_LANG_SPECIFIC (decl))
16539     {
16540       error ("explicit instantiation of non-template %q#D", decl);
16541       return;
16542     }
16543   else if (TREE_CODE (decl) == VAR_DECL)
16544     {
16545       /* There is an asymmetry here in the way VAR_DECLs and
16546          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
16547          the latter, the DECL we get back will be marked as a
16548          template instantiation, and the appropriate
16549          DECL_TEMPLATE_INFO will be set up.  This does not happen for
16550          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
16551          should handle VAR_DECLs as it currently handles
16552          FUNCTION_DECLs.  */
16553       if (!DECL_CLASS_SCOPE_P (decl))
16554         {
16555           error ("%qD is not a static data member of a class template", decl);
16556           return;
16557         }
16558       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
16559       if (!result || TREE_CODE (result) != VAR_DECL)
16560         {
16561           error ("no matching template for %qD found", decl);
16562           return;
16563         }
16564       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
16565         {
16566           error ("type %qT for explicit instantiation %qD does not match "
16567                  "declared type %qT", TREE_TYPE (result), decl,
16568                  TREE_TYPE (decl));
16569           return;
16570         }
16571     }
16572   else if (TREE_CODE (decl) != FUNCTION_DECL)
16573     {
16574       error ("explicit instantiation of %q#D", decl);
16575       return;
16576     }
16577   else
16578     result = decl;
16579
16580   /* Check for various error cases.  Note that if the explicit
16581      instantiation is valid the RESULT will currently be marked as an
16582      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
16583      until we get here.  */
16584
16585   if (DECL_TEMPLATE_SPECIALIZATION (result))
16586     {
16587       /* DR 259 [temp.spec].
16588
16589          Both an explicit instantiation and a declaration of an explicit
16590          specialization shall not appear in a program unless the explicit
16591          instantiation follows a declaration of the explicit specialization.
16592
16593          For a given set of template parameters, if an explicit
16594          instantiation of a template appears after a declaration of an
16595          explicit specialization for that template, the explicit
16596          instantiation has no effect.  */
16597       return;
16598     }
16599   else if (DECL_EXPLICIT_INSTANTIATION (result))
16600     {
16601       /* [temp.spec]
16602
16603          No program shall explicitly instantiate any template more
16604          than once.
16605
16606          We check DECL_NOT_REALLY_EXTERN so as not to complain when
16607          the first instantiation was `extern' and the second is not,
16608          and EXTERN_P for the opposite case.  */
16609       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
16610         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
16611       /* If an "extern" explicit instantiation follows an ordinary
16612          explicit instantiation, the template is instantiated.  */
16613       if (extern_p)
16614         return;
16615     }
16616   else if (!DECL_IMPLICIT_INSTANTIATION (result))
16617     {
16618       error ("no matching template for %qD found", result);
16619       return;
16620     }
16621   else if (!DECL_TEMPLATE_INFO (result))
16622     {
16623       permerror (input_location, "explicit instantiation of non-template %q#D", result);
16624       return;
16625     }
16626
16627   if (storage == NULL_TREE)
16628     ;
16629   else if (storage == ridpointers[(int) RID_EXTERN])
16630     {
16631       if (!in_system_header && (cxx_dialect == cxx98))
16632         pedwarn (input_location, OPT_pedantic, 
16633                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
16634                  "instantiations");
16635       extern_p = 1;
16636     }
16637   else
16638     error ("storage class %qD applied to template instantiation", storage);
16639
16640   check_explicit_instantiation_namespace (result);
16641   mark_decl_instantiated (result, extern_p);
16642   if (! extern_p)
16643     instantiate_decl (result, /*defer_ok=*/1,
16644                       /*expl_inst_class_mem_p=*/false);
16645 }
16646
16647 static void
16648 mark_class_instantiated (tree t, int extern_p)
16649 {
16650   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
16651   SET_CLASSTYPE_INTERFACE_KNOWN (t);
16652   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
16653   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
16654   if (! extern_p)
16655     {
16656       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
16657       rest_of_type_compilation (t, 1);
16658     }
16659 }
16660
16661 /* Called from do_type_instantiation through binding_table_foreach to
16662    do recursive instantiation for the type bound in ENTRY.  */
16663 static void
16664 bt_instantiate_type_proc (binding_entry entry, void *data)
16665 {
16666   tree storage = *(tree *) data;
16667
16668   if (MAYBE_CLASS_TYPE_P (entry->type)
16669       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
16670     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
16671 }
16672
16673 /* Called from do_type_instantiation to instantiate a member
16674    (a member function or a static member variable) of an
16675    explicitly instantiated class template.  */
16676 static void
16677 instantiate_class_member (tree decl, int extern_p)
16678 {
16679   mark_decl_instantiated (decl, extern_p);
16680   if (! extern_p)
16681     instantiate_decl (decl, /*defer_ok=*/1,
16682                       /*expl_inst_class_mem_p=*/true);
16683 }
16684
16685 /* Perform an explicit instantiation of template class T.  STORAGE, if
16686    non-null, is the RID for extern, inline or static.  COMPLAIN is
16687    nonzero if this is called from the parser, zero if called recursively,
16688    since the standard is unclear (as detailed below).  */
16689
16690 void
16691 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
16692 {
16693   int extern_p = 0;
16694   int nomem_p = 0;
16695   int static_p = 0;
16696   int previous_instantiation_extern_p = 0;
16697
16698   if (TREE_CODE (t) == TYPE_DECL)
16699     t = TREE_TYPE (t);
16700
16701   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
16702     {
16703       error ("explicit instantiation of non-template type %qT", t);
16704       return;
16705     }
16706
16707   complete_type (t);
16708
16709   if (!COMPLETE_TYPE_P (t))
16710     {
16711       if (complain & tf_error)
16712         error ("explicit instantiation of %q#T before definition of template",
16713                t);
16714       return;
16715     }
16716
16717   if (storage != NULL_TREE)
16718     {
16719       if (!in_system_header)
16720         {
16721           if (storage == ridpointers[(int) RID_EXTERN])
16722             {
16723               if (cxx_dialect == cxx98)
16724                 pedwarn (input_location, OPT_pedantic, 
16725                          "ISO C++ 1998 forbids the use of %<extern%> on "
16726                          "explicit instantiations");
16727             }
16728           else
16729             pedwarn (input_location, OPT_pedantic, 
16730                      "ISO C++ forbids the use of %qE"
16731                      " on explicit instantiations", storage);
16732         }
16733
16734       if (storage == ridpointers[(int) RID_INLINE])
16735         nomem_p = 1;
16736       else if (storage == ridpointers[(int) RID_EXTERN])
16737         extern_p = 1;
16738       else if (storage == ridpointers[(int) RID_STATIC])
16739         static_p = 1;
16740       else
16741         {
16742           error ("storage class %qD applied to template instantiation",
16743                  storage);
16744           extern_p = 0;
16745         }
16746     }
16747
16748   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
16749     {
16750       /* DR 259 [temp.spec].
16751
16752          Both an explicit instantiation and a declaration of an explicit
16753          specialization shall not appear in a program unless the explicit
16754          instantiation follows a declaration of the explicit specialization.
16755
16756          For a given set of template parameters, if an explicit
16757          instantiation of a template appears after a declaration of an
16758          explicit specialization for that template, the explicit
16759          instantiation has no effect.  */
16760       return;
16761     }
16762   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
16763     {
16764       /* [temp.spec]
16765
16766          No program shall explicitly instantiate any template more
16767          than once.
16768
16769          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
16770          instantiation was `extern'.  If EXTERN_P then the second is.
16771          These cases are OK.  */
16772       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
16773
16774       if (!previous_instantiation_extern_p && !extern_p
16775           && (complain & tf_error))
16776         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
16777
16778       /* If we've already instantiated the template, just return now.  */
16779       if (!CLASSTYPE_INTERFACE_ONLY (t))
16780         return;
16781     }
16782
16783   check_explicit_instantiation_namespace (TYPE_NAME (t));
16784   mark_class_instantiated (t, extern_p);
16785
16786   if (nomem_p)
16787     return;
16788
16789   {
16790     tree tmp;
16791
16792     /* In contrast to implicit instantiation, where only the
16793        declarations, and not the definitions, of members are
16794        instantiated, we have here:
16795
16796          [temp.explicit]
16797
16798          The explicit instantiation of a class template specialization
16799          implies the instantiation of all of its members not
16800          previously explicitly specialized in the translation unit
16801          containing the explicit instantiation.
16802
16803        Of course, we can't instantiate member template classes, since
16804        we don't have any arguments for them.  Note that the standard
16805        is unclear on whether the instantiation of the members are
16806        *explicit* instantiations or not.  However, the most natural
16807        interpretation is that it should be an explicit instantiation.  */
16808
16809     if (! static_p)
16810       for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
16811         if (TREE_CODE (tmp) == FUNCTION_DECL
16812             && DECL_TEMPLATE_INSTANTIATION (tmp))
16813           instantiate_class_member (tmp, extern_p);
16814
16815     for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
16816       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
16817         instantiate_class_member (tmp, extern_p);
16818
16819     if (CLASSTYPE_NESTED_UTDS (t))
16820       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
16821                              bt_instantiate_type_proc, &storage);
16822   }
16823 }
16824
16825 /* Given a function DECL, which is a specialization of TMPL, modify
16826    DECL to be a re-instantiation of TMPL with the same template
16827    arguments.  TMPL should be the template into which tsubst'ing
16828    should occur for DECL, not the most general template.
16829
16830    One reason for doing this is a scenario like this:
16831
16832      template <class T>
16833      void f(const T&, int i);
16834
16835      void g() { f(3, 7); }
16836
16837      template <class T>
16838      void f(const T& t, const int i) { }
16839
16840    Note that when the template is first instantiated, with
16841    instantiate_template, the resulting DECL will have no name for the
16842    first parameter, and the wrong type for the second.  So, when we go
16843    to instantiate the DECL, we regenerate it.  */
16844
16845 static void
16846 regenerate_decl_from_template (tree decl, tree tmpl)
16847 {
16848   /* The arguments used to instantiate DECL, from the most general
16849      template.  */
16850   tree args;
16851   tree code_pattern;
16852
16853   args = DECL_TI_ARGS (decl);
16854   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
16855
16856   /* Make sure that we can see identifiers, and compute access
16857      correctly.  */
16858   push_access_scope (decl);
16859
16860   if (TREE_CODE (decl) == FUNCTION_DECL)
16861     {
16862       tree decl_parm;
16863       tree pattern_parm;
16864       tree specs;
16865       int args_depth;
16866       int parms_depth;
16867
16868       args_depth = TMPL_ARGS_DEPTH (args);
16869       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
16870       if (args_depth > parms_depth)
16871         args = get_innermost_template_args (args, parms_depth);
16872
16873       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
16874                                               args, tf_error, NULL_TREE);
16875       if (specs)
16876         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
16877                                                     specs);
16878
16879       /* Merge parameter declarations.  */
16880       decl_parm = skip_artificial_parms_for (decl,
16881                                              DECL_ARGUMENTS (decl));
16882       pattern_parm
16883         = skip_artificial_parms_for (code_pattern,
16884                                      DECL_ARGUMENTS (code_pattern));
16885       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
16886         {
16887           tree parm_type;
16888           tree attributes;
16889           
16890           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
16891             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
16892           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
16893                               NULL_TREE);
16894           parm_type = type_decays_to (parm_type);
16895           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
16896             TREE_TYPE (decl_parm) = parm_type;
16897           attributes = DECL_ATTRIBUTES (pattern_parm);
16898           if (DECL_ATTRIBUTES (decl_parm) != attributes)
16899             {
16900               DECL_ATTRIBUTES (decl_parm) = attributes;
16901               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
16902             }
16903           decl_parm = DECL_CHAIN (decl_parm);
16904           pattern_parm = DECL_CHAIN (pattern_parm);
16905         }
16906       /* Merge any parameters that match with the function parameter
16907          pack.  */
16908       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
16909         {
16910           int i, len;
16911           tree expanded_types;
16912           /* Expand the TYPE_PACK_EXPANSION that provides the types for
16913              the parameters in this function parameter pack.  */
16914           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
16915                                                  args, tf_error, NULL_TREE);
16916           len = TREE_VEC_LENGTH (expanded_types);
16917           for (i = 0; i < len; i++)
16918             {
16919               tree parm_type;
16920               tree attributes;
16921           
16922               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
16923                 /* Rename the parameter to include the index.  */
16924                 DECL_NAME (decl_parm) = 
16925                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
16926               parm_type = TREE_VEC_ELT (expanded_types, i);
16927               parm_type = type_decays_to (parm_type);
16928               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
16929                 TREE_TYPE (decl_parm) = parm_type;
16930               attributes = DECL_ATTRIBUTES (pattern_parm);
16931               if (DECL_ATTRIBUTES (decl_parm) != attributes)
16932                 {
16933                   DECL_ATTRIBUTES (decl_parm) = attributes;
16934                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
16935                 }
16936               decl_parm = DECL_CHAIN (decl_parm);
16937             }
16938         }
16939       /* Merge additional specifiers from the CODE_PATTERN.  */
16940       if (DECL_DECLARED_INLINE_P (code_pattern)
16941           && !DECL_DECLARED_INLINE_P (decl))
16942         DECL_DECLARED_INLINE_P (decl) = 1;
16943     }
16944   else if (TREE_CODE (decl) == VAR_DECL)
16945     {
16946       DECL_INITIAL (decl) =
16947         tsubst_expr (DECL_INITIAL (code_pattern), args,
16948                      tf_error, DECL_TI_TEMPLATE (decl),
16949                      /*integral_constant_expression_p=*/false);
16950       if (VAR_HAD_UNKNOWN_BOUND (decl))
16951         TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
16952                                    tf_error, DECL_TI_TEMPLATE (decl));
16953     }
16954   else
16955     gcc_unreachable ();
16956
16957   pop_access_scope (decl);
16958 }
16959
16960 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
16961    substituted to get DECL.  */
16962
16963 tree
16964 template_for_substitution (tree decl)
16965 {
16966   tree tmpl = DECL_TI_TEMPLATE (decl);
16967
16968   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
16969      for the instantiation.  This is not always the most general
16970      template.  Consider, for example:
16971
16972         template <class T>
16973         struct S { template <class U> void f();
16974                    template <> void f<int>(); };
16975
16976      and an instantiation of S<double>::f<int>.  We want TD to be the
16977      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
16978   while (/* An instantiation cannot have a definition, so we need a
16979             more general template.  */
16980          DECL_TEMPLATE_INSTANTIATION (tmpl)
16981            /* We must also deal with friend templates.  Given:
16982
16983                 template <class T> struct S {
16984                   template <class U> friend void f() {};
16985                 };
16986
16987               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
16988               so far as the language is concerned, but that's still
16989               where we get the pattern for the instantiation from.  On
16990               other hand, if the definition comes outside the class, say:
16991
16992                 template <class T> struct S {
16993                   template <class U> friend void f();
16994                 };
16995                 template <class U> friend void f() {}
16996
16997               we don't need to look any further.  That's what the check for
16998               DECL_INITIAL is for.  */
16999           || (TREE_CODE (decl) == FUNCTION_DECL
17000               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
17001               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
17002     {
17003       /* The present template, TD, should not be a definition.  If it
17004          were a definition, we should be using it!  Note that we
17005          cannot restructure the loop to just keep going until we find
17006          a template with a definition, since that might go too far if
17007          a specialization was declared, but not defined.  */
17008       gcc_assert (TREE_CODE (decl) != VAR_DECL
17009                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
17010
17011       /* Fetch the more general template.  */
17012       tmpl = DECL_TI_TEMPLATE (tmpl);
17013     }
17014
17015   return tmpl;
17016 }
17017
17018 /* Returns true if we need to instantiate this template instance even if we
17019    know we aren't going to emit it..  */
17020
17021 bool
17022 always_instantiate_p (tree decl)
17023 {
17024   /* We always instantiate inline functions so that we can inline them.  An
17025      explicit instantiation declaration prohibits implicit instantiation of
17026      non-inline functions.  With high levels of optimization, we would
17027      normally inline non-inline functions -- but we're not allowed to do
17028      that for "extern template" functions.  Therefore, we check
17029      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
17030   return ((TREE_CODE (decl) == FUNCTION_DECL
17031            && DECL_DECLARED_INLINE_P (decl))
17032           /* And we need to instantiate static data members so that
17033              their initializers are available in integral constant
17034              expressions.  */
17035           || (TREE_CODE (decl) == VAR_DECL
17036               && decl_maybe_constant_var_p (decl)));
17037 }
17038
17039 /* Produce the definition of D, a _DECL generated from a template.  If
17040    DEFER_OK is nonzero, then we don't have to actually do the
17041    instantiation now; we just have to do it sometime.  Normally it is
17042    an error if this is an explicit instantiation but D is undefined.
17043    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
17044    explicitly instantiated class template.  */
17045
17046 tree
17047 instantiate_decl (tree d, int defer_ok,
17048                   bool expl_inst_class_mem_p)
17049 {
17050   tree tmpl = DECL_TI_TEMPLATE (d);
17051   tree gen_args;
17052   tree args;
17053   tree td;
17054   tree code_pattern;
17055   tree spec;
17056   tree gen_tmpl;
17057   bool pattern_defined;
17058   int need_push;
17059   location_t saved_loc = input_location;
17060   bool external_p;
17061
17062   /* This function should only be used to instantiate templates for
17063      functions and static member variables.  */
17064   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
17065               || TREE_CODE (d) == VAR_DECL);
17066
17067   /* Variables are never deferred; if instantiation is required, they
17068      are instantiated right away.  That allows for better code in the
17069      case that an expression refers to the value of the variable --
17070      if the variable has a constant value the referring expression can
17071      take advantage of that fact.  */
17072   if (TREE_CODE (d) == VAR_DECL
17073       || DECL_DECLARED_CONSTEXPR_P (d))
17074     defer_ok = 0;
17075
17076   /* Don't instantiate cloned functions.  Instead, instantiate the
17077      functions they cloned.  */
17078   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
17079     d = DECL_CLONED_FUNCTION (d);
17080
17081   if (DECL_TEMPLATE_INSTANTIATED (d)
17082       || DECL_TEMPLATE_SPECIALIZATION (d))
17083     /* D has already been instantiated or explicitly specialized, so
17084        there's nothing for us to do here.
17085
17086        It might seem reasonable to check whether or not D is an explicit
17087        instantiation, and, if so, stop here.  But when an explicit
17088        instantiation is deferred until the end of the compilation,
17089        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
17090        the instantiation.  */
17091     return d;
17092
17093   /* Check to see whether we know that this template will be
17094      instantiated in some other file, as with "extern template"
17095      extension.  */
17096   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
17097
17098   /* In general, we do not instantiate such templates.  */
17099   if (external_p && !always_instantiate_p (d))
17100     return d;
17101
17102   gen_tmpl = most_general_template (tmpl);
17103   gen_args = DECL_TI_ARGS (d);
17104
17105   if (tmpl != gen_tmpl)
17106     /* We should already have the extra args.  */
17107     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
17108                 == TMPL_ARGS_DEPTH (gen_args));
17109   /* And what's in the hash table should match D.  */
17110   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
17111               || spec == NULL_TREE);
17112
17113   /* This needs to happen before any tsubsting.  */
17114   if (! push_tinst_level (d))
17115     return d;
17116
17117   timevar_push (TV_PARSE);
17118
17119   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
17120      for the instantiation.  */
17121   td = template_for_substitution (d);
17122   code_pattern = DECL_TEMPLATE_RESULT (td);
17123
17124   /* We should never be trying to instantiate a member of a class
17125      template or partial specialization.  */
17126   gcc_assert (d != code_pattern);
17127
17128   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
17129       || DECL_TEMPLATE_SPECIALIZATION (td))
17130     /* In the case of a friend template whose definition is provided
17131        outside the class, we may have too many arguments.  Drop the
17132        ones we don't need.  The same is true for specializations.  */
17133     args = get_innermost_template_args
17134       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
17135   else
17136     args = gen_args;
17137
17138   if (TREE_CODE (d) == FUNCTION_DECL)
17139     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
17140   else
17141     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
17142
17143   /* We may be in the middle of deferred access check.  Disable it now.  */
17144   push_deferring_access_checks (dk_no_deferred);
17145
17146   /* Unless an explicit instantiation directive has already determined
17147      the linkage of D, remember that a definition is available for
17148      this entity.  */
17149   if (pattern_defined
17150       && !DECL_INTERFACE_KNOWN (d)
17151       && !DECL_NOT_REALLY_EXTERN (d))
17152     mark_definable (d);
17153
17154   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
17155   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
17156   input_location = DECL_SOURCE_LOCATION (d);
17157
17158   /* If D is a member of an explicitly instantiated class template,
17159      and no definition is available, treat it like an implicit
17160      instantiation.  */
17161   if (!pattern_defined && expl_inst_class_mem_p
17162       && DECL_EXPLICIT_INSTANTIATION (d))
17163     {
17164       DECL_NOT_REALLY_EXTERN (d) = 0;
17165       DECL_INTERFACE_KNOWN (d) = 0;
17166       SET_DECL_IMPLICIT_INSTANTIATION (d);
17167     }
17168
17169   /* Recheck the substitutions to obtain any warning messages
17170      about ignoring cv qualifiers.  Don't do this for artificial decls,
17171      as it breaks the context-sensitive substitution for lambda op(). */
17172   if (!defer_ok && !DECL_ARTIFICIAL (d))
17173     {
17174       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
17175       tree type = TREE_TYPE (gen);
17176
17177       /* Make sure that we can see identifiers, and compute access
17178          correctly.  D is already the target FUNCTION_DECL with the
17179          right context.  */
17180       push_access_scope (d);
17181
17182       if (TREE_CODE (gen) == FUNCTION_DECL)
17183         {
17184           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
17185           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
17186                                           d);
17187           /* Don't simply tsubst the function type, as that will give
17188              duplicate warnings about poor parameter qualifications.
17189              The function arguments are the same as the decl_arguments
17190              without the top level cv qualifiers.  */
17191           type = TREE_TYPE (type);
17192         }
17193       tsubst (type, gen_args, tf_warning_or_error, d);
17194
17195       pop_access_scope (d);
17196     }
17197
17198   /* Defer all other templates, unless we have been explicitly
17199      forbidden from doing so.  */
17200   if (/* If there is no definition, we cannot instantiate the
17201          template.  */
17202       ! pattern_defined
17203       /* If it's OK to postpone instantiation, do so.  */
17204       || defer_ok
17205       /* If this is a static data member that will be defined
17206          elsewhere, we don't want to instantiate the entire data
17207          member, but we do want to instantiate the initializer so that
17208          we can substitute that elsewhere.  */
17209       || (external_p && TREE_CODE (d) == VAR_DECL))
17210     {
17211       /* The definition of the static data member is now required so
17212          we must substitute the initializer.  */
17213       if (TREE_CODE (d) == VAR_DECL
17214           && !DECL_INITIAL (d)
17215           && DECL_INITIAL (code_pattern))
17216         {
17217           tree ns;
17218           tree init;
17219           bool const_init = false;
17220
17221           ns = decl_namespace_context (d);
17222           push_nested_namespace (ns);
17223           push_nested_class (DECL_CONTEXT (d));
17224           init = tsubst_expr (DECL_INITIAL (code_pattern),
17225                               args,
17226                               tf_warning_or_error, NULL_TREE,
17227                               /*integral_constant_expression_p=*/false);
17228           /* Make sure the initializer is still constant, in case of
17229              circular dependency (template/instantiate6.C). */
17230           const_init
17231             = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
17232           cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
17233                           /*asmspec_tree=*/NULL_TREE,
17234                           LOOKUP_ONLYCONVERTING);
17235           pop_nested_class ();
17236           pop_nested_namespace (ns);
17237         }
17238
17239       /* We restore the source position here because it's used by
17240          add_pending_template.  */
17241       input_location = saved_loc;
17242
17243       if (at_eof && !pattern_defined
17244           && DECL_EXPLICIT_INSTANTIATION (d)
17245           && DECL_NOT_REALLY_EXTERN (d))
17246         /* [temp.explicit]
17247
17248            The definition of a non-exported function template, a
17249            non-exported member function template, or a non-exported
17250            member function or static data member of a class template
17251            shall be present in every translation unit in which it is
17252            explicitly instantiated.  */
17253         permerror (input_location,  "explicit instantiation of %qD "
17254                    "but no definition available", d);
17255
17256       /* If we're in unevaluated context, we just wanted to get the
17257          constant value; this isn't an odr use, so don't queue
17258          a full instantiation.  */
17259       if (cp_unevaluated_operand != 0)
17260         goto out;
17261       /* ??? Historically, we have instantiated inline functions, even
17262          when marked as "extern template".  */
17263       if (!(external_p && TREE_CODE (d) == VAR_DECL))
17264         add_pending_template (d);
17265       goto out;
17266     }
17267   /* Tell the repository that D is available in this translation unit
17268      -- and see if it is supposed to be instantiated here.  */
17269   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
17270     {
17271       /* In a PCH file, despite the fact that the repository hasn't
17272          requested instantiation in the PCH it is still possible that
17273          an instantiation will be required in a file that includes the
17274          PCH.  */
17275       if (pch_file)
17276         add_pending_template (d);
17277       /* Instantiate inline functions so that the inliner can do its
17278          job, even though we'll not be emitting a copy of this
17279          function.  */
17280       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
17281         goto out;
17282     }
17283
17284   need_push = !cfun || !global_bindings_p ();
17285   if (need_push)
17286     push_to_top_level ();
17287
17288   /* Mark D as instantiated so that recursive calls to
17289      instantiate_decl do not try to instantiate it again.  */
17290   DECL_TEMPLATE_INSTANTIATED (d) = 1;
17291
17292   /* Regenerate the declaration in case the template has been modified
17293      by a subsequent redeclaration.  */
17294   regenerate_decl_from_template (d, td);
17295
17296   /* We already set the file and line above.  Reset them now in case
17297      they changed as a result of calling regenerate_decl_from_template.  */
17298   input_location = DECL_SOURCE_LOCATION (d);
17299
17300   if (TREE_CODE (d) == VAR_DECL)
17301     {
17302       tree init;
17303       bool const_init = false;
17304
17305       /* Clear out DECL_RTL; whatever was there before may not be right
17306          since we've reset the type of the declaration.  */
17307       SET_DECL_RTL (d, NULL);
17308       DECL_IN_AGGR_P (d) = 0;
17309
17310       /* The initializer is placed in DECL_INITIAL by
17311          regenerate_decl_from_template so we don't need to
17312          push/pop_access_scope again here.  Pull it out so that
17313          cp_finish_decl can process it.  */
17314       init = DECL_INITIAL (d);
17315       DECL_INITIAL (d) = NULL_TREE;
17316       DECL_INITIALIZED_P (d) = 0;
17317
17318       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
17319          initializer.  That function will defer actual emission until
17320          we have a chance to determine linkage.  */
17321       DECL_EXTERNAL (d) = 0;
17322
17323       /* Enter the scope of D so that access-checking works correctly.  */
17324       push_nested_class (DECL_CONTEXT (d));
17325       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
17326       cp_finish_decl (d, init, const_init, NULL_TREE, 0);
17327       pop_nested_class ();
17328     }
17329   else if (TREE_CODE (d) == FUNCTION_DECL)
17330     {
17331       htab_t saved_local_specializations;
17332       tree subst_decl;
17333       tree tmpl_parm;
17334       tree spec_parm;
17335
17336       /* Save away the current list, in case we are instantiating one
17337          template from within the body of another.  */
17338       saved_local_specializations = local_specializations;
17339
17340       /* Set up the list of local specializations.  */
17341       local_specializations = htab_create (37,
17342                                            hash_local_specialization,
17343                                            eq_local_specializations,
17344                                            NULL);
17345
17346       /* Set up context.  */
17347       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
17348
17349       /* Create substitution entries for the parameters.  */
17350       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
17351       tmpl_parm = DECL_ARGUMENTS (subst_decl);
17352       spec_parm = DECL_ARGUMENTS (d);
17353       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
17354         {
17355           register_local_specialization (spec_parm, tmpl_parm);
17356           spec_parm = skip_artificial_parms_for (d, spec_parm);
17357           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
17358         }
17359       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
17360         {
17361           register_local_specialization (spec_parm, tmpl_parm);
17362           tmpl_parm = DECL_CHAIN (tmpl_parm);
17363           spec_parm = DECL_CHAIN (spec_parm);
17364         }
17365       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
17366         {
17367           /* Register the (value) argument pack as a specialization of
17368              TMPL_PARM, then move on.  */
17369           tree argpack = make_fnparm_pack (spec_parm);
17370           register_local_specialization (argpack, tmpl_parm);
17371           tmpl_parm = DECL_CHAIN (tmpl_parm);
17372           spec_parm = NULL_TREE;
17373         }
17374       gcc_assert (!spec_parm);
17375
17376       /* Substitute into the body of the function.  */
17377       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
17378                    tf_warning_or_error, tmpl,
17379                    /*integral_constant_expression_p=*/false);
17380
17381       /* Set the current input_location to the end of the function
17382          so that finish_function knows where we are.  */
17383       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
17384
17385       /* We don't need the local specializations any more.  */
17386       htab_delete (local_specializations);
17387       local_specializations = saved_local_specializations;
17388
17389       /* Finish the function.  */
17390       d = finish_function (0);
17391       expand_or_defer_fn (d);
17392     }
17393
17394   /* We're not deferring instantiation any more.  */
17395   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
17396
17397   if (need_push)
17398     pop_from_top_level ();
17399
17400 out:
17401   input_location = saved_loc;
17402   pop_deferring_access_checks ();
17403   pop_tinst_level ();
17404
17405   timevar_pop (TV_PARSE);
17406
17407   return d;
17408 }
17409
17410 /* Run through the list of templates that we wish we could
17411    instantiate, and instantiate any we can.  RETRIES is the
17412    number of times we retry pending template instantiation.  */
17413
17414 void
17415 instantiate_pending_templates (int retries)
17416 {
17417   int reconsider;
17418   location_t saved_loc = input_location;
17419
17420   /* Instantiating templates may trigger vtable generation.  This in turn
17421      may require further template instantiations.  We place a limit here
17422      to avoid infinite loop.  */
17423   if (pending_templates && retries >= max_tinst_depth)
17424     {
17425       tree decl = pending_templates->tinst->decl;
17426
17427       error ("template instantiation depth exceeds maximum of %d"
17428              " instantiating %q+D, possibly from virtual table generation"
17429              " (use -ftemplate-depth= to increase the maximum)",
17430              max_tinst_depth, decl);
17431       if (TREE_CODE (decl) == FUNCTION_DECL)
17432         /* Pretend that we defined it.  */
17433         DECL_INITIAL (decl) = error_mark_node;
17434       return;
17435     }
17436
17437   do
17438     {
17439       struct pending_template **t = &pending_templates;
17440       struct pending_template *last = NULL;
17441       reconsider = 0;
17442       while (*t)
17443         {
17444           tree instantiation = reopen_tinst_level ((*t)->tinst);
17445           bool complete = false;
17446
17447           if (TYPE_P (instantiation))
17448             {
17449               tree fn;
17450
17451               if (!COMPLETE_TYPE_P (instantiation))
17452                 {
17453                   instantiate_class_template (instantiation);
17454                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
17455                     for (fn = TYPE_METHODS (instantiation);
17456                          fn;
17457                          fn = TREE_CHAIN (fn))
17458                       if (! DECL_ARTIFICIAL (fn))
17459                         instantiate_decl (fn,
17460                                           /*defer_ok=*/0,
17461                                           /*expl_inst_class_mem_p=*/false);
17462                   if (COMPLETE_TYPE_P (instantiation))
17463                     reconsider = 1;
17464                 }
17465
17466               complete = COMPLETE_TYPE_P (instantiation);
17467             }
17468           else
17469             {
17470               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
17471                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
17472                 {
17473                   instantiation
17474                     = instantiate_decl (instantiation,
17475                                         /*defer_ok=*/0,
17476                                         /*expl_inst_class_mem_p=*/false);
17477                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
17478                     reconsider = 1;
17479                 }
17480
17481               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
17482                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
17483             }
17484
17485           if (complete)
17486             /* If INSTANTIATION has been instantiated, then we don't
17487                need to consider it again in the future.  */
17488             *t = (*t)->next;
17489           else
17490             {
17491               last = *t;
17492               t = &(*t)->next;
17493             }
17494           tinst_depth = 0;
17495           current_tinst_level = NULL;
17496         }
17497       last_pending_template = last;
17498     }
17499   while (reconsider);
17500
17501   input_location = saved_loc;
17502 }
17503
17504 /* Substitute ARGVEC into T, which is a list of initializers for
17505    either base class or a non-static data member.  The TREE_PURPOSEs
17506    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
17507    instantiate_decl.  */
17508
17509 static tree
17510 tsubst_initializer_list (tree t, tree argvec)
17511 {
17512   tree inits = NULL_TREE;
17513
17514   for (; t; t = TREE_CHAIN (t))
17515     {
17516       tree decl;
17517       tree init;
17518       tree expanded_bases = NULL_TREE;
17519       tree expanded_arguments = NULL_TREE;
17520       int i, len = 1;
17521
17522       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
17523         {
17524           tree expr;
17525           tree arg;
17526
17527           /* Expand the base class expansion type into separate base
17528              classes.  */
17529           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
17530                                                  tf_warning_or_error,
17531                                                  NULL_TREE);
17532           if (expanded_bases == error_mark_node)
17533             continue;
17534           
17535           /* We'll be building separate TREE_LISTs of arguments for
17536              each base.  */
17537           len = TREE_VEC_LENGTH (expanded_bases);
17538           expanded_arguments = make_tree_vec (len);
17539           for (i = 0; i < len; i++)
17540             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
17541
17542           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
17543              expand each argument in the TREE_VALUE of t.  */
17544           expr = make_node (EXPR_PACK_EXPANSION);
17545           PACK_EXPANSION_PARAMETER_PACKS (expr) =
17546             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
17547
17548           if (TREE_VALUE (t) == void_type_node)
17549             /* VOID_TYPE_NODE is used to indicate
17550                value-initialization.  */
17551             {
17552               for (i = 0; i < len; i++)
17553                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
17554             }
17555           else
17556             {
17557               /* Substitute parameter packs into each argument in the
17558                  TREE_LIST.  */
17559               in_base_initializer = 1;
17560               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
17561                 {
17562                   tree expanded_exprs;
17563
17564                   /* Expand the argument.  */
17565                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
17566                   expanded_exprs 
17567                     = tsubst_pack_expansion (expr, argvec,
17568                                              tf_warning_or_error,
17569                                              NULL_TREE);
17570                   if (expanded_exprs == error_mark_node)
17571                     continue;
17572
17573                   /* Prepend each of the expanded expressions to the
17574                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
17575                   for (i = 0; i < len; i++)
17576                     {
17577                       TREE_VEC_ELT (expanded_arguments, i) = 
17578                         tree_cons (NULL_TREE, 
17579                                    TREE_VEC_ELT (expanded_exprs, i),
17580                                    TREE_VEC_ELT (expanded_arguments, i));
17581                     }
17582                 }
17583               in_base_initializer = 0;
17584
17585               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
17586                  since we built them backwards.  */
17587               for (i = 0; i < len; i++)
17588                 {
17589                   TREE_VEC_ELT (expanded_arguments, i) = 
17590                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
17591                 }
17592             }
17593         }
17594
17595       for (i = 0; i < len; ++i)
17596         {
17597           if (expanded_bases)
17598             {
17599               decl = TREE_VEC_ELT (expanded_bases, i);
17600               decl = expand_member_init (decl);
17601               init = TREE_VEC_ELT (expanded_arguments, i);
17602             }
17603           else
17604             {
17605               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
17606                                   tf_warning_or_error, NULL_TREE);
17607
17608               decl = expand_member_init (decl);
17609               if (decl && !DECL_P (decl))
17610                 in_base_initializer = 1;
17611
17612               init = TREE_VALUE (t);
17613               if (init != void_type_node)
17614                 init = tsubst_expr (init, argvec,
17615                                     tf_warning_or_error, NULL_TREE,
17616                                     /*integral_constant_expression_p=*/false);
17617               in_base_initializer = 0;
17618             }
17619
17620           if (decl)
17621             {
17622               init = build_tree_list (decl, init);
17623               TREE_CHAIN (init) = inits;
17624               inits = init;
17625             }
17626         }
17627     }
17628   return inits;
17629 }
17630
17631 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
17632
17633 static void
17634 set_current_access_from_decl (tree decl)
17635 {
17636   if (TREE_PRIVATE (decl))
17637     current_access_specifier = access_private_node;
17638   else if (TREE_PROTECTED (decl))
17639     current_access_specifier = access_protected_node;
17640   else
17641     current_access_specifier = access_public_node;
17642 }
17643
17644 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
17645    is the instantiation (which should have been created with
17646    start_enum) and ARGS are the template arguments to use.  */
17647
17648 static void
17649 tsubst_enum (tree tag, tree newtag, tree args)
17650 {
17651   tree e;
17652
17653   if (SCOPED_ENUM_P (newtag))
17654     begin_scope (sk_scoped_enum, newtag);
17655
17656   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
17657     {
17658       tree value;
17659       tree decl;
17660
17661       decl = TREE_VALUE (e);
17662       /* Note that in a template enum, the TREE_VALUE is the
17663          CONST_DECL, not the corresponding INTEGER_CST.  */
17664       value = tsubst_expr (DECL_INITIAL (decl),
17665                            args, tf_warning_or_error, NULL_TREE,
17666                            /*integral_constant_expression_p=*/true);
17667
17668       /* Give this enumeration constant the correct access.  */
17669       set_current_access_from_decl (decl);
17670
17671       /* Actually build the enumerator itself.  */
17672       build_enumerator
17673         (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
17674     }
17675
17676   if (SCOPED_ENUM_P (newtag))
17677     finish_scope ();
17678
17679   finish_enum_value_list (newtag);
17680   finish_enum (newtag);
17681
17682   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
17683     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
17684 }
17685
17686 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
17687    its type -- but without substituting the innermost set of template
17688    arguments.  So, innermost set of template parameters will appear in
17689    the type.  */
17690
17691 tree
17692 get_mostly_instantiated_function_type (tree decl)
17693 {
17694   tree fn_type;
17695   tree tmpl;
17696   tree targs;
17697   tree tparms;
17698   int parm_depth;
17699
17700   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
17701   targs = DECL_TI_ARGS (decl);
17702   tparms = DECL_TEMPLATE_PARMS (tmpl);
17703   parm_depth = TMPL_PARMS_DEPTH (tparms);
17704
17705   /* There should be as many levels of arguments as there are levels
17706      of parameters.  */
17707   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
17708
17709   fn_type = TREE_TYPE (tmpl);
17710
17711   if (parm_depth == 1)
17712     /* No substitution is necessary.  */
17713     ;
17714   else
17715     {
17716       int i, save_access_control;
17717       tree partial_args;
17718
17719       /* Replace the innermost level of the TARGS with NULL_TREEs to
17720          let tsubst know not to substitute for those parameters.  */
17721       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
17722       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
17723         SET_TMPL_ARGS_LEVEL (partial_args, i,
17724                              TMPL_ARGS_LEVEL (targs, i));
17725       SET_TMPL_ARGS_LEVEL (partial_args,
17726                            TMPL_ARGS_DEPTH (targs),
17727                            make_tree_vec (DECL_NTPARMS (tmpl)));
17728
17729       /* Disable access control as this function is used only during
17730          name-mangling.  */
17731       save_access_control = flag_access_control;
17732       flag_access_control = 0;
17733
17734       ++processing_template_decl;
17735       /* Now, do the (partial) substitution to figure out the
17736          appropriate function type.  */
17737       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
17738       --processing_template_decl;
17739
17740       /* Substitute into the template parameters to obtain the real
17741          innermost set of parameters.  This step is important if the
17742          innermost set of template parameters contains value
17743          parameters whose types depend on outer template parameters.  */
17744       TREE_VEC_LENGTH (partial_args)--;
17745       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
17746
17747       flag_access_control = save_access_control;
17748     }
17749
17750   return fn_type;
17751 }
17752
17753 /* Return truthvalue if we're processing a template different from
17754    the last one involved in diagnostics.  */
17755 int
17756 problematic_instantiation_changed (void)
17757 {
17758   return last_template_error_tick != tinst_level_tick;
17759 }
17760
17761 /* Remember current template involved in diagnostics.  */
17762 void
17763 record_last_problematic_instantiation (void)
17764 {
17765   last_template_error_tick = tinst_level_tick;
17766 }
17767
17768 struct tinst_level *
17769 current_instantiation (void)
17770 {
17771   return current_tinst_level;
17772 }
17773
17774 /* [temp.param] Check that template non-type parm TYPE is of an allowable
17775    type. Return zero for ok, nonzero for disallowed. Issue error and
17776    warning messages under control of COMPLAIN.  */
17777
17778 static int
17779 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
17780 {
17781   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
17782     return 0;
17783   else if (POINTER_TYPE_P (type))
17784     return 0;
17785   else if (TYPE_PTR_TO_MEMBER_P (type))
17786     return 0;
17787   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
17788     return 0;
17789   else if (TREE_CODE (type) == TYPENAME_TYPE)
17790     return 0;
17791
17792   if (complain & tf_error)
17793     error ("%q#T is not a valid type for a template constant parameter", type);
17794   return 1;
17795 }
17796
17797 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
17798    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
17799
17800 static bool
17801 dependent_type_p_r (tree type)
17802 {
17803   tree scope;
17804
17805   /* [temp.dep.type]
17806
17807      A type is dependent if it is:
17808
17809      -- a template parameter. Template template parameters are types
17810         for us (since TYPE_P holds true for them) so we handle
17811         them here.  */
17812   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
17813       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
17814     return true;
17815   /* -- a qualified-id with a nested-name-specifier which contains a
17816         class-name that names a dependent type or whose unqualified-id
17817         names a dependent type.  */
17818   if (TREE_CODE (type) == TYPENAME_TYPE)
17819     return true;
17820   /* -- a cv-qualified type where the cv-unqualified type is
17821         dependent.  */
17822   type = TYPE_MAIN_VARIANT (type);
17823   /* -- a compound type constructed from any dependent type.  */
17824   if (TYPE_PTR_TO_MEMBER_P (type))
17825     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
17826             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
17827                                            (type)));
17828   else if (TREE_CODE (type) == POINTER_TYPE
17829            || TREE_CODE (type) == REFERENCE_TYPE)
17830     return dependent_type_p (TREE_TYPE (type));
17831   else if (TREE_CODE (type) == FUNCTION_TYPE
17832            || TREE_CODE (type) == METHOD_TYPE)
17833     {
17834       tree arg_type;
17835
17836       if (dependent_type_p (TREE_TYPE (type)))
17837         return true;
17838       for (arg_type = TYPE_ARG_TYPES (type);
17839            arg_type;
17840            arg_type = TREE_CHAIN (arg_type))
17841         if (dependent_type_p (TREE_VALUE (arg_type)))
17842           return true;
17843       return false;
17844     }
17845   /* -- an array type constructed from any dependent type or whose
17846         size is specified by a constant expression that is
17847         value-dependent.
17848
17849         We checked for type- and value-dependence of the bounds in
17850         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
17851   if (TREE_CODE (type) == ARRAY_TYPE)
17852     {
17853       if (TYPE_DOMAIN (type)
17854           && dependent_type_p (TYPE_DOMAIN (type)))
17855         return true;
17856       return dependent_type_p (TREE_TYPE (type));
17857     }
17858
17859   /* -- a template-id in which either the template name is a template
17860      parameter ...  */
17861   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
17862     return true;
17863   /* ... or any of the template arguments is a dependent type or
17864         an expression that is type-dependent or value-dependent.  */
17865   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
17866            && (any_dependent_template_arguments_p
17867                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
17868     return true;
17869
17870   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
17871      argument of the `typeof' expression is not type-dependent, then
17872      it should already been have resolved.  */
17873   if (TREE_CODE (type) == TYPEOF_TYPE
17874       || TREE_CODE (type) == DECLTYPE_TYPE)
17875     return true;
17876
17877   /* A template argument pack is dependent if any of its packed
17878      arguments are.  */
17879   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
17880     {
17881       tree args = ARGUMENT_PACK_ARGS (type);
17882       int i, len = TREE_VEC_LENGTH (args);
17883       for (i = 0; i < len; ++i)
17884         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
17885           return true;
17886     }
17887
17888   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
17889      be template parameters.  */
17890   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
17891     return true;
17892
17893   /* The standard does not specifically mention types that are local
17894      to template functions or local classes, but they should be
17895      considered dependent too.  For example:
17896
17897        template <int I> void f() {
17898          enum E { a = I };
17899          S<sizeof (E)> s;
17900        }
17901
17902      The size of `E' cannot be known until the value of `I' has been
17903      determined.  Therefore, `E' must be considered dependent.  */
17904   scope = TYPE_CONTEXT (type);
17905   if (scope && TYPE_P (scope))
17906     return dependent_type_p (scope);
17907   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
17908     return type_dependent_expression_p (scope);
17909
17910   /* Other types are non-dependent.  */
17911   return false;
17912 }
17913
17914 /* Returns TRUE if TYPE is dependent, in the sense of
17915    [temp.dep.type].  */
17916
17917 bool
17918 dependent_type_p (tree type)
17919 {
17920   /* If there are no template parameters in scope, then there can't be
17921      any dependent types.  */
17922   if (!processing_template_decl)
17923     {
17924       /* If we are not processing a template, then nobody should be
17925          providing us with a dependent type.  */
17926       gcc_assert (type);
17927       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
17928       return false;
17929     }
17930
17931   /* If the type is NULL, we have not computed a type for the entity
17932      in question; in that case, the type is dependent.  */
17933   if (!type)
17934     return true;
17935
17936   /* Erroneous types can be considered non-dependent.  */
17937   if (type == error_mark_node)
17938     return false;
17939
17940   /* If we have not already computed the appropriate value for TYPE,
17941      do so now.  */
17942   if (!TYPE_DEPENDENT_P_VALID (type))
17943     {
17944       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
17945       TYPE_DEPENDENT_P_VALID (type) = 1;
17946     }
17947
17948   return TYPE_DEPENDENT_P (type);
17949 }
17950
17951 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
17952    lookup.  In other words, a dependent type that is not the current
17953    instantiation.  */
17954
17955 bool
17956 dependent_scope_p (tree scope)
17957 {
17958   return (scope && TYPE_P (scope) && dependent_type_p (scope)
17959           && !currently_open_class (scope));
17960 }
17961
17962 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
17963    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
17964    expression.  */
17965
17966 /* Note that this predicate is not appropriate for general expressions;
17967    only constant expressions (that satisfy potential_constant_expression)
17968    can be tested for value dependence.
17969
17970    We should really also have a predicate for "instantiation-dependent".
17971
17972    fold_non_dependent_expr: fold if constant and not type-dependent and not value-dependent.
17973      (what about instantiation-dependent constant-expressions?)
17974    is_late_template_attribute: defer if instantiation-dependent.
17975    compute_array_index_type: proceed if constant and not t- or v-dependent
17976      if instantiation-dependent, need to remember full expression
17977    uses_template_parms: FIXME - need to audit callers
17978    tsubst_decl [function_decl]: Why is this using value_dependent_expression_p?
17979    dependent_type_p [array_type]: dependent if index type is dependent
17980      (or non-constant?)
17981    static_assert - instantiation-dependent */
17982
17983 bool
17984 value_dependent_expression_p (tree expression)
17985 {
17986   if (!processing_template_decl)
17987     return false;
17988
17989   /* A name declared with a dependent type.  */
17990   if (DECL_P (expression) && type_dependent_expression_p (expression))
17991     return true;
17992
17993   switch (TREE_CODE (expression))
17994     {
17995     case IDENTIFIER_NODE:
17996       /* A name that has not been looked up -- must be dependent.  */
17997       return true;
17998
17999     case TEMPLATE_PARM_INDEX:
18000       /* A non-type template parm.  */
18001       return true;
18002
18003     case CONST_DECL:
18004       /* A non-type template parm.  */
18005       if (DECL_TEMPLATE_PARM_P (expression))
18006         return true;
18007       return value_dependent_expression_p (DECL_INITIAL (expression));
18008
18009     case VAR_DECL:
18010        /* A constant with integral or enumeration type and is initialized
18011           with an expression that is value-dependent.  */
18012       if (DECL_INITIAL (expression)
18013           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
18014           && value_dependent_expression_p (DECL_INITIAL (expression)))
18015         return true;
18016       return false;
18017
18018     case DYNAMIC_CAST_EXPR:
18019     case STATIC_CAST_EXPR:
18020     case CONST_CAST_EXPR:
18021     case REINTERPRET_CAST_EXPR:
18022     case CAST_EXPR:
18023       /* These expressions are value-dependent if the type to which
18024          the cast occurs is dependent or the expression being casted
18025          is value-dependent.  */
18026       {
18027         tree type = TREE_TYPE (expression);
18028
18029         if (dependent_type_p (type))
18030           return true;
18031
18032         /* A functional cast has a list of operands.  */
18033         expression = TREE_OPERAND (expression, 0);
18034         if (!expression)
18035           {
18036             /* If there are no operands, it must be an expression such
18037                as "int()". This should not happen for aggregate types
18038                because it would form non-constant expressions.  */
18039             gcc_assert (cxx_dialect >= cxx0x
18040                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
18041
18042             return false;
18043           }
18044
18045         if (TREE_CODE (expression) == TREE_LIST)
18046           return any_value_dependent_elements_p (expression);
18047
18048         return value_dependent_expression_p (expression);
18049       }
18050
18051     case SIZEOF_EXPR:
18052     case ALIGNOF_EXPR:
18053       /* A `sizeof' expression is value-dependent if the operand is
18054          type-dependent or is a pack expansion.  */
18055       expression = TREE_OPERAND (expression, 0);
18056       if (PACK_EXPANSION_P (expression))
18057         return true;
18058       else if (TYPE_P (expression))
18059         return dependent_type_p (expression);
18060       return type_dependent_expression_p (expression);
18061
18062     case AT_ENCODE_EXPR:
18063       /* An 'encode' expression is value-dependent if the operand is
18064          type-dependent.  */
18065       expression = TREE_OPERAND (expression, 0);
18066       return dependent_type_p (expression);
18067
18068     case NOEXCEPT_EXPR:
18069       expression = TREE_OPERAND (expression, 0);
18070       /* FIXME why check value-dependency?  */
18071       return (type_dependent_expression_p (expression)
18072               || value_dependent_expression_p (expression));
18073
18074     case SCOPE_REF:
18075       {
18076         tree name = TREE_OPERAND (expression, 1);
18077         return value_dependent_expression_p (name);
18078       }
18079
18080     case COMPONENT_REF:
18081       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
18082               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
18083
18084     case NONTYPE_ARGUMENT_PACK:
18085       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
18086          is value-dependent.  */
18087       {
18088         tree values = ARGUMENT_PACK_ARGS (expression);
18089         int i, len = TREE_VEC_LENGTH (values);
18090         
18091         for (i = 0; i < len; ++i)
18092           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
18093             return true;
18094         
18095         return false;
18096       }
18097
18098     case TRAIT_EXPR:
18099       {
18100         tree type2 = TRAIT_EXPR_TYPE2 (expression);
18101         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
18102                 || (type2 ? dependent_type_p (type2) : false));
18103       }
18104
18105     case MODOP_EXPR:
18106       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
18107               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
18108
18109     case ARRAY_REF:
18110       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
18111               || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
18112
18113     case ADDR_EXPR:
18114       {
18115         tree op = TREE_OPERAND (expression, 0);
18116         return (value_dependent_expression_p (op)
18117                 || has_value_dependent_address (op));
18118       }
18119
18120     case CALL_EXPR:
18121       {
18122         tree fn = get_callee_fndecl (expression);
18123         int i, nargs;
18124         if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
18125           return true;
18126         nargs = call_expr_nargs (expression);
18127         for (i = 0; i < nargs; ++i)
18128           {
18129             tree op = CALL_EXPR_ARG (expression, i);
18130             /* In a call to a constexpr member function, look through the
18131                implicit ADDR_EXPR on the object argument so that it doesn't
18132                cause the call to be considered value-dependent.  We also
18133                look through it in potential_constant_expression.  */
18134             if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
18135                 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
18136                 && TREE_CODE (op) == ADDR_EXPR)
18137               op = TREE_OPERAND (op, 0);
18138             if (value_dependent_expression_p (op))
18139               return true;
18140           }
18141         return false;
18142       }
18143
18144     default:
18145       /* A constant expression is value-dependent if any subexpression is
18146          value-dependent.  */
18147       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
18148         {
18149         case tcc_reference:
18150         case tcc_unary:
18151           return (value_dependent_expression_p
18152                   (TREE_OPERAND (expression, 0)));
18153
18154         case tcc_comparison:
18155         case tcc_binary:
18156           return ((value_dependent_expression_p
18157                    (TREE_OPERAND (expression, 0)))
18158                   || (value_dependent_expression_p
18159                       (TREE_OPERAND (expression, 1))));
18160
18161         case tcc_expression:
18162         case tcc_vl_exp:
18163           {
18164             int i;
18165             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
18166               /* In some cases, some of the operands may be missing.
18167                  (For example, in the case of PREDECREMENT_EXPR, the
18168                  amount to increment by may be missing.)  That doesn't
18169                  make the expression dependent.  */
18170               if (TREE_OPERAND (expression, i)
18171                   && (value_dependent_expression_p
18172                       (TREE_OPERAND (expression, i))))
18173                 return true;
18174             return false;
18175           }
18176
18177         default:
18178           break;
18179         }
18180     }
18181
18182   /* The expression is not value-dependent.  */
18183   return false;
18184 }
18185
18186 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
18187    [temp.dep.expr].  */
18188
18189 bool
18190 type_dependent_expression_p (tree expression)
18191 {
18192   if (!processing_template_decl)
18193     return false;
18194
18195   if (expression == error_mark_node)
18196     return false;
18197
18198   /* An unresolved name is always dependent.  */
18199   if (TREE_CODE (expression) == IDENTIFIER_NODE
18200       || TREE_CODE (expression) == USING_DECL)
18201     return true;
18202
18203   /* Some expression forms are never type-dependent.  */
18204   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
18205       || TREE_CODE (expression) == SIZEOF_EXPR
18206       || TREE_CODE (expression) == ALIGNOF_EXPR
18207       || TREE_CODE (expression) == AT_ENCODE_EXPR
18208       || TREE_CODE (expression) == NOEXCEPT_EXPR
18209       || TREE_CODE (expression) == TRAIT_EXPR
18210       || TREE_CODE (expression) == TYPEID_EXPR
18211       || TREE_CODE (expression) == DELETE_EXPR
18212       || TREE_CODE (expression) == VEC_DELETE_EXPR
18213       || TREE_CODE (expression) == THROW_EXPR)
18214     return false;
18215
18216   /* The types of these expressions depends only on the type to which
18217      the cast occurs.  */
18218   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
18219       || TREE_CODE (expression) == STATIC_CAST_EXPR
18220       || TREE_CODE (expression) == CONST_CAST_EXPR
18221       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
18222       || TREE_CODE (expression) == CAST_EXPR)
18223     return dependent_type_p (TREE_TYPE (expression));
18224
18225   /* The types of these expressions depends only on the type created
18226      by the expression.  */
18227   if (TREE_CODE (expression) == NEW_EXPR
18228       || TREE_CODE (expression) == VEC_NEW_EXPR)
18229     {
18230       /* For NEW_EXPR tree nodes created inside a template, either
18231          the object type itself or a TREE_LIST may appear as the
18232          operand 1.  */
18233       tree type = TREE_OPERAND (expression, 1);
18234       if (TREE_CODE (type) == TREE_LIST)
18235         /* This is an array type.  We need to check array dimensions
18236            as well.  */
18237         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
18238                || value_dependent_expression_p
18239                     (TREE_OPERAND (TREE_VALUE (type), 1));
18240       else
18241         return dependent_type_p (type);
18242     }
18243
18244   if (TREE_CODE (expression) == SCOPE_REF)
18245     {
18246       tree scope = TREE_OPERAND (expression, 0);
18247       tree name = TREE_OPERAND (expression, 1);
18248
18249       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
18250          contains an identifier associated by name lookup with one or more
18251          declarations declared with a dependent type, or...a
18252          nested-name-specifier or qualified-id that names a member of an
18253          unknown specialization.  */
18254       return (type_dependent_expression_p (name)
18255               || dependent_scope_p (scope));
18256     }
18257
18258   if (TREE_CODE (expression) == FUNCTION_DECL
18259       && DECL_LANG_SPECIFIC (expression)
18260       && DECL_TEMPLATE_INFO (expression)
18261       && (any_dependent_template_arguments_p
18262           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
18263     return true;
18264
18265   if (TREE_CODE (expression) == TEMPLATE_DECL
18266       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
18267     return false;
18268
18269   if (TREE_CODE (expression) == STMT_EXPR)
18270     expression = stmt_expr_value_expr (expression);
18271
18272   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
18273     {
18274       tree elt;
18275       unsigned i;
18276
18277       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
18278         {
18279           if (type_dependent_expression_p (elt))
18280             return true;
18281         }
18282       return false;
18283     }
18284
18285   /* A static data member of the current instantiation with incomplete
18286      array type is type-dependent, as the definition and specializations
18287      can have different bounds.  */
18288   if (TREE_CODE (expression) == VAR_DECL
18289       && DECL_CLASS_SCOPE_P (expression)
18290       && dependent_type_p (DECL_CONTEXT (expression))
18291       && VAR_HAD_UNKNOWN_BOUND (expression))
18292     return true;
18293
18294   if (TREE_TYPE (expression) == unknown_type_node)
18295     {
18296       if (TREE_CODE (expression) == ADDR_EXPR)
18297         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
18298       if (TREE_CODE (expression) == COMPONENT_REF
18299           || TREE_CODE (expression) == OFFSET_REF)
18300         {
18301           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
18302             return true;
18303           expression = TREE_OPERAND (expression, 1);
18304           if (TREE_CODE (expression) == IDENTIFIER_NODE)
18305             return false;
18306         }
18307       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
18308       if (TREE_CODE (expression) == SCOPE_REF)
18309         return false;
18310
18311       if (TREE_CODE (expression) == BASELINK)
18312         expression = BASELINK_FUNCTIONS (expression);
18313
18314       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
18315         {
18316           if (any_dependent_template_arguments_p
18317               (TREE_OPERAND (expression, 1)))
18318             return true;
18319           expression = TREE_OPERAND (expression, 0);
18320         }
18321       gcc_assert (TREE_CODE (expression) == OVERLOAD
18322                   || TREE_CODE (expression) == FUNCTION_DECL);
18323
18324       while (expression)
18325         {
18326           if (type_dependent_expression_p (OVL_CURRENT (expression)))
18327             return true;
18328           expression = OVL_NEXT (expression);
18329         }
18330       return false;
18331     }
18332
18333   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
18334
18335   return (dependent_type_p (TREE_TYPE (expression)));
18336 }
18337
18338 /* Like type_dependent_expression_p, but it also works while not processing
18339    a template definition, i.e. during substitution or mangling.  */
18340
18341 bool
18342 type_dependent_expression_p_push (tree expr)
18343 {
18344   bool b;
18345   ++processing_template_decl;
18346   b = type_dependent_expression_p (expr);
18347   --processing_template_decl;
18348   return b;
18349 }
18350
18351 /* Returns TRUE if ARGS contains a type-dependent expression.  */
18352
18353 bool
18354 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
18355 {
18356   unsigned int i;
18357   tree arg;
18358
18359   FOR_EACH_VEC_ELT (tree, args, i, arg)
18360     {
18361       if (type_dependent_expression_p (arg))
18362         return true;
18363     }
18364   return false;
18365 }
18366
18367 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
18368    expressions) contains any value-dependent expressions.  */
18369
18370 bool
18371 any_value_dependent_elements_p (const_tree list)
18372 {
18373   for (; list; list = TREE_CHAIN (list))
18374     if (value_dependent_expression_p (TREE_VALUE (list)))
18375       return true;
18376
18377   return false;
18378 }
18379
18380 /* Returns TRUE if the ARG (a template argument) is dependent.  */
18381
18382 bool
18383 dependent_template_arg_p (tree arg)
18384 {
18385   if (!processing_template_decl)
18386     return false;
18387
18388   /* Assume a template argument that was wrongly written by the user
18389      is dependent. This is consistent with what
18390      any_dependent_template_arguments_p [that calls this function]
18391      does.  */
18392   if (arg == error_mark_node)
18393     return true;
18394
18395   if (TREE_CODE (arg) == TEMPLATE_DECL
18396       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
18397     return dependent_template_p (arg);
18398   else if (ARGUMENT_PACK_P (arg))
18399     {
18400       tree args = ARGUMENT_PACK_ARGS (arg);
18401       int i, len = TREE_VEC_LENGTH (args);
18402       for (i = 0; i < len; ++i)
18403         {
18404           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
18405             return true;
18406         }
18407
18408       return false;
18409     }
18410   else if (TYPE_P (arg))
18411     return dependent_type_p (arg);
18412   else
18413     return (type_dependent_expression_p (arg)
18414             || value_dependent_expression_p (arg));
18415 }
18416
18417 /* Returns true if ARGS (a collection of template arguments) contains
18418    any types that require structural equality testing.  */
18419
18420 bool
18421 any_template_arguments_need_structural_equality_p (tree args)
18422 {
18423   int i;
18424   int j;
18425
18426   if (!args)
18427     return false;
18428   if (args == error_mark_node)
18429     return true;
18430
18431   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
18432     {
18433       tree level = TMPL_ARGS_LEVEL (args, i + 1);
18434       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
18435         {
18436           tree arg = TREE_VEC_ELT (level, j);
18437           tree packed_args = NULL_TREE;
18438           int k, len = 1;
18439
18440           if (ARGUMENT_PACK_P (arg))
18441             {
18442               /* Look inside the argument pack.  */
18443               packed_args = ARGUMENT_PACK_ARGS (arg);
18444               len = TREE_VEC_LENGTH (packed_args);
18445             }
18446
18447           for (k = 0; k < len; ++k)
18448             {
18449               if (packed_args)
18450                 arg = TREE_VEC_ELT (packed_args, k);
18451
18452               if (error_operand_p (arg))
18453                 return true;
18454               else if (TREE_CODE (arg) == TEMPLATE_DECL
18455                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
18456                 continue;
18457               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
18458                 return true;
18459               else if (!TYPE_P (arg) && TREE_TYPE (arg)
18460                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
18461                 return true;
18462             }
18463         }
18464     }
18465
18466   return false;
18467 }
18468
18469 /* Returns true if ARGS (a collection of template arguments) contains
18470    any dependent arguments.  */
18471
18472 bool
18473 any_dependent_template_arguments_p (const_tree args)
18474 {
18475   int i;
18476   int j;
18477
18478   if (!args)
18479     return false;
18480   if (args == error_mark_node)
18481     return true;
18482
18483   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
18484     {
18485       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
18486       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
18487         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
18488           return true;
18489     }
18490
18491   return false;
18492 }
18493
18494 /* Returns TRUE if the template TMPL is dependent.  */
18495
18496 bool
18497 dependent_template_p (tree tmpl)
18498 {
18499   if (TREE_CODE (tmpl) == OVERLOAD)
18500     {
18501       while (tmpl)
18502         {
18503           if (dependent_template_p (OVL_FUNCTION (tmpl)))
18504             return true;
18505           tmpl = OVL_CHAIN (tmpl);
18506         }
18507       return false;
18508     }
18509
18510   /* Template template parameters are dependent.  */
18511   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
18512       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
18513     return true;
18514   /* So are names that have not been looked up.  */
18515   if (TREE_CODE (tmpl) == SCOPE_REF
18516       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
18517     return true;
18518   /* So are member templates of dependent classes.  */
18519   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
18520     return dependent_type_p (DECL_CONTEXT (tmpl));
18521   return false;
18522 }
18523
18524 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
18525
18526 bool
18527 dependent_template_id_p (tree tmpl, tree args)
18528 {
18529   return (dependent_template_p (tmpl)
18530           || any_dependent_template_arguments_p (args));
18531 }
18532
18533 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
18534    is dependent.  */
18535
18536 bool
18537 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
18538 {
18539   int i;
18540
18541   if (!processing_template_decl)
18542     return false;
18543
18544   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
18545     {
18546       tree decl = TREE_VEC_ELT (declv, i);
18547       tree init = TREE_VEC_ELT (initv, i);
18548       tree cond = TREE_VEC_ELT (condv, i);
18549       tree incr = TREE_VEC_ELT (incrv, i);
18550
18551       if (type_dependent_expression_p (decl))
18552         return true;
18553
18554       if (init && type_dependent_expression_p (init))
18555         return true;
18556
18557       if (type_dependent_expression_p (cond))
18558         return true;
18559
18560       if (COMPARISON_CLASS_P (cond)
18561           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
18562               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
18563         return true;
18564
18565       if (TREE_CODE (incr) == MODOP_EXPR)
18566         {
18567           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
18568               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
18569             return true;
18570         }
18571       else if (type_dependent_expression_p (incr))
18572         return true;
18573       else if (TREE_CODE (incr) == MODIFY_EXPR)
18574         {
18575           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
18576             return true;
18577           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
18578             {
18579               tree t = TREE_OPERAND (incr, 1);
18580               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
18581                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
18582                 return true;
18583             }
18584         }
18585     }
18586
18587   return false;
18588 }
18589
18590 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
18591    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
18592    no such TYPE can be found.  Note that this function peers inside
18593    uninstantiated templates and therefore should be used only in
18594    extremely limited situations.  ONLY_CURRENT_P restricts this
18595    peering to the currently open classes hierarchy (which is required
18596    when comparing types).  */
18597
18598 tree
18599 resolve_typename_type (tree type, bool only_current_p)
18600 {
18601   tree scope;
18602   tree name;
18603   tree decl;
18604   int quals;
18605   tree pushed_scope;
18606   tree result;
18607
18608   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
18609
18610   scope = TYPE_CONTEXT (type);
18611   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
18612      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
18613      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
18614      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
18615      identifier  of the TYPENAME_TYPE anymore.
18616      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
18617      TYPENAME_TYPE instead, we avoid messing up with a possible
18618      typedef variant case.  */
18619   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
18620
18621   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
18622      it first before we can figure out what NAME refers to.  */
18623   if (TREE_CODE (scope) == TYPENAME_TYPE)
18624     scope = resolve_typename_type (scope, only_current_p);
18625   /* If we don't know what SCOPE refers to, then we cannot resolve the
18626      TYPENAME_TYPE.  */
18627   if (TREE_CODE (scope) == TYPENAME_TYPE)
18628     return type;
18629   /* If the SCOPE is a template type parameter, we have no way of
18630      resolving the name.  */
18631   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
18632     return type;
18633   /* If the SCOPE is not the current instantiation, there's no reason
18634      to look inside it.  */
18635   if (only_current_p && !currently_open_class (scope))
18636     return type;
18637   /* If this is a typedef, we don't want to look inside (c++/11987).  */
18638   if (typedef_variant_p (type))
18639     return type;
18640   /* If SCOPE isn't the template itself, it will not have a valid
18641      TYPE_FIELDS list.  */
18642   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
18643     /* scope is either the template itself or a compatible instantiation
18644        like X<T>, so look up the name in the original template.  */
18645     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
18646   else
18647     /* scope is a partial instantiation, so we can't do the lookup or we
18648        will lose the template arguments.  */
18649     return type;
18650   /* Enter the SCOPE so that name lookup will be resolved as if we
18651      were in the class definition.  In particular, SCOPE will no
18652      longer be considered a dependent type.  */
18653   pushed_scope = push_scope (scope);
18654   /* Look up the declaration.  */
18655   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
18656
18657   result = NULL_TREE;
18658   
18659   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
18660      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
18661   if (!decl)
18662     /*nop*/;
18663   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
18664            && TREE_CODE (decl) == TYPE_DECL)
18665     {
18666       result = TREE_TYPE (decl);
18667       if (result == error_mark_node)
18668         result = NULL_TREE;
18669     }
18670   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
18671            && DECL_CLASS_TEMPLATE_P (decl))
18672     {
18673       tree tmpl;
18674       tree args;
18675       /* Obtain the template and the arguments.  */
18676       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
18677       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
18678       /* Instantiate the template.  */
18679       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
18680                                       /*entering_scope=*/0,
18681                                       tf_error | tf_user);
18682       if (result == error_mark_node)
18683         result = NULL_TREE;
18684     }
18685   
18686   /* Leave the SCOPE.  */
18687   if (pushed_scope)
18688     pop_scope (pushed_scope);
18689
18690   /* If we failed to resolve it, return the original typename.  */
18691   if (!result)
18692     return type;
18693   
18694   /* If lookup found a typename type, resolve that too.  */
18695   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
18696     {
18697       /* Ill-formed programs can cause infinite recursion here, so we
18698          must catch that.  */
18699       TYPENAME_IS_RESOLVING_P (type) = 1;
18700       result = resolve_typename_type (result, only_current_p);
18701       TYPENAME_IS_RESOLVING_P (type) = 0;
18702     }
18703   
18704   /* Qualify the resulting type.  */
18705   quals = cp_type_quals (type);
18706   if (quals)
18707     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
18708
18709   return result;
18710 }
18711
18712 /* EXPR is an expression which is not type-dependent.  Return a proxy
18713    for EXPR that can be used to compute the types of larger
18714    expressions containing EXPR.  */
18715
18716 tree
18717 build_non_dependent_expr (tree expr)
18718 {
18719   tree inner_expr;
18720
18721   /* Preserve null pointer constants so that the type of things like
18722      "p == 0" where "p" is a pointer can be determined.  */
18723   if (null_ptr_cst_p (expr))
18724     return expr;
18725   /* Preserve OVERLOADs; the functions must be available to resolve
18726      types.  */
18727   inner_expr = expr;
18728   if (TREE_CODE (inner_expr) == STMT_EXPR)
18729     inner_expr = stmt_expr_value_expr (inner_expr);
18730   if (TREE_CODE (inner_expr) == ADDR_EXPR)
18731     inner_expr = TREE_OPERAND (inner_expr, 0);
18732   if (TREE_CODE (inner_expr) == COMPONENT_REF)
18733     inner_expr = TREE_OPERAND (inner_expr, 1);
18734   if (is_overloaded_fn (inner_expr)
18735       || TREE_CODE (inner_expr) == OFFSET_REF)
18736     return expr;
18737   /* There is no need to return a proxy for a variable.  */
18738   if (TREE_CODE (expr) == VAR_DECL)
18739     return expr;
18740   /* Preserve string constants; conversions from string constants to
18741      "char *" are allowed, even though normally a "const char *"
18742      cannot be used to initialize a "char *".  */
18743   if (TREE_CODE (expr) == STRING_CST)
18744     return expr;
18745   /* Preserve arithmetic constants, as an optimization -- there is no
18746      reason to create a new node.  */
18747   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
18748     return expr;
18749   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
18750      There is at least one place where we want to know that a
18751      particular expression is a throw-expression: when checking a ?:
18752      expression, there are special rules if the second or third
18753      argument is a throw-expression.  */
18754   if (TREE_CODE (expr) == THROW_EXPR)
18755     return expr;
18756
18757   if (TREE_CODE (expr) == COND_EXPR)
18758     return build3 (COND_EXPR,
18759                    TREE_TYPE (expr),
18760                    TREE_OPERAND (expr, 0),
18761                    (TREE_OPERAND (expr, 1)
18762                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
18763                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
18764                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
18765   if (TREE_CODE (expr) == COMPOUND_EXPR
18766       && !COMPOUND_EXPR_OVERLOADED (expr))
18767     return build2 (COMPOUND_EXPR,
18768                    TREE_TYPE (expr),
18769                    TREE_OPERAND (expr, 0),
18770                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
18771
18772   /* If the type is unknown, it can't really be non-dependent */
18773   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
18774
18775   /* Otherwise, build a NON_DEPENDENT_EXPR.
18776
18777      REFERENCE_TYPEs are not stripped for expressions in templates
18778      because doing so would play havoc with mangling.  Consider, for
18779      example:
18780
18781        template <typename T> void f<T& g>() { g(); }
18782
18783      In the body of "f", the expression for "g" will have
18784      REFERENCE_TYPE, even though the standard says that it should
18785      not.  The reason is that we must preserve the syntactic form of
18786      the expression so that mangling (say) "f<g>" inside the body of
18787      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
18788      stripped here.  */
18789   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
18790 }
18791
18792 /* ARGS is a vector of expressions as arguments to a function call.
18793    Replace the arguments with equivalent non-dependent expressions.
18794    This modifies ARGS in place.  */
18795
18796 void
18797 make_args_non_dependent (VEC(tree,gc) *args)
18798 {
18799   unsigned int ix;
18800   tree arg;
18801
18802   FOR_EACH_VEC_ELT (tree, args, ix, arg)
18803     {
18804       tree newarg = build_non_dependent_expr (arg);
18805       if (newarg != arg)
18806         VEC_replace (tree, args, ix, newarg);
18807     }
18808 }
18809
18810 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
18811    with a level one deeper than the actual template parms.  */
18812
18813 tree
18814 make_auto (void)
18815 {
18816   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
18817   TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
18818                                TYPE_DECL, get_identifier ("auto"), au);
18819   TYPE_STUB_DECL (au) = TYPE_NAME (au);
18820   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
18821     (0, processing_template_decl + 1, processing_template_decl + 1,
18822      0, TYPE_NAME (au), NULL_TREE);
18823   TYPE_CANONICAL (au) = canonical_type_parameter (au);
18824   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
18825   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
18826
18827   return au;
18828 }
18829
18830 /* Given type ARG, return std::initializer_list<ARG>.  */
18831
18832 static tree
18833 listify (tree arg)
18834 {
18835   tree std_init_list = namespace_binding
18836     (get_identifier ("initializer_list"), std_node);
18837   tree argvec;
18838   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
18839     {    
18840       error ("deducing from brace-enclosed initializer list requires "
18841              "#include <initializer_list>");
18842       return error_mark_node;
18843     }
18844   argvec = make_tree_vec (1);
18845   TREE_VEC_ELT (argvec, 0) = arg;
18846   return lookup_template_class (std_init_list, argvec, NULL_TREE,
18847                                 NULL_TREE, 0, tf_warning_or_error);
18848 }
18849
18850 /* Replace auto in TYPE with std::initializer_list<auto>.  */
18851
18852 static tree
18853 listify_autos (tree type, tree auto_node)
18854 {
18855   tree init_auto = listify (auto_node);
18856   tree argvec = make_tree_vec (1);
18857   TREE_VEC_ELT (argvec, 0) = init_auto;
18858   if (processing_template_decl)
18859     argvec = add_to_template_args (current_template_args (), argvec);
18860   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
18861 }
18862
18863 /* walk_tree helper for do_auto_deduction.  */
18864
18865 static tree
18866 contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
18867                  void *type)
18868 {
18869   /* Is this a variable with the type we're looking for?  */
18870   if (DECL_P (*tp)
18871       && TREE_TYPE (*tp) == type)
18872     return *tp;
18873   else
18874     return NULL_TREE;
18875 }
18876
18877 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
18878    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
18879
18880 tree
18881 do_auto_deduction (tree type, tree init, tree auto_node)
18882 {
18883   tree parms, tparms, targs;
18884   tree args[1];
18885   tree decl;
18886   int val;
18887
18888   /* The name of the object being declared shall not appear in the
18889      initializer expression.  */
18890   decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
18891   if (decl)
18892     {
18893       error ("variable %q#D with %<auto%> type used in its own "
18894              "initializer", decl);
18895       return error_mark_node;
18896     }
18897
18898   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
18899      with either a new invented type template parameter U or, if the
18900      initializer is a braced-init-list (8.5.4), with
18901      std::initializer_list<U>.  */
18902   if (BRACE_ENCLOSED_INITIALIZER_P (init))
18903     type = listify_autos (type, auto_node);
18904
18905   init = resolve_nondeduced_context (init);
18906
18907   parms = build_tree_list (NULL_TREE, type);
18908   args[0] = init;
18909   tparms = make_tree_vec (1);
18910   targs = make_tree_vec (1);
18911   TREE_VEC_ELT (tparms, 0)
18912     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
18913   val = type_unification_real (tparms, targs, parms, args, 1, 0,
18914                                DEDUCE_CALL, LOOKUP_NORMAL);
18915   if (val > 0)
18916     {
18917       error ("unable to deduce %qT from %qE", type, init);
18918       return error_mark_node;
18919     }
18920
18921   /* If the list of declarators contains more than one declarator, the type
18922      of each declared variable is determined as described above. If the
18923      type deduced for the template parameter U is not the same in each
18924      deduction, the program is ill-formed.  */
18925   if (TREE_TYPE (auto_node)
18926       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
18927     {
18928       error ("inconsistent deduction for %qT: %qT and then %qT",
18929              auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
18930       return error_mark_node;
18931     }
18932   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
18933
18934   if (processing_template_decl)
18935     targs = add_to_template_args (current_template_args (), targs);
18936   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
18937 }
18938
18939 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
18940    result.  */
18941
18942 tree
18943 splice_late_return_type (tree type, tree late_return_type)
18944 {
18945   tree argvec;
18946
18947   if (late_return_type == NULL_TREE)
18948     return type;
18949   argvec = make_tree_vec (1);
18950   TREE_VEC_ELT (argvec, 0) = late_return_type;
18951   if (processing_template_decl)
18952     argvec = add_to_template_args (current_template_args (), argvec);
18953   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
18954 }
18955
18956 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
18957
18958 bool
18959 is_auto (const_tree type)
18960 {
18961   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
18962       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
18963     return true;
18964   else
18965     return false;
18966 }
18967
18968 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
18969    appear as a type-specifier for the declaration in question, we don't
18970    have to look through the whole type.  */
18971
18972 tree
18973 type_uses_auto (tree type)
18974 {
18975   enum tree_code code;
18976   if (is_auto (type))
18977     return type;
18978
18979   code = TREE_CODE (type);
18980
18981   if (code == POINTER_TYPE || code == REFERENCE_TYPE
18982       || code == OFFSET_TYPE || code == FUNCTION_TYPE
18983       || code == METHOD_TYPE || code == ARRAY_TYPE)
18984     return type_uses_auto (TREE_TYPE (type));
18985
18986   if (TYPE_PTRMEMFUNC_P (type))
18987     return type_uses_auto (TREE_TYPE (TREE_TYPE
18988                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
18989
18990   return NULL_TREE;
18991 }
18992
18993 /* For a given template T, return the vector of typedefs referenced
18994    in T for which access check is needed at T instantiation time.
18995    T is either  a FUNCTION_DECL or a RECORD_TYPE.
18996    Those typedefs were added to T by the function
18997    append_type_to_template_for_access_check.  */
18998
18999 VEC(qualified_typedef_usage_t,gc)*
19000 get_types_needing_access_check (tree t)
19001 {
19002   tree ti;
19003   VEC(qualified_typedef_usage_t,gc) *result = NULL;
19004
19005   if (!t || t == error_mark_node)
19006     return NULL;
19007
19008   if (!(ti = get_template_info (t)))
19009     return NULL;
19010
19011   if (CLASS_TYPE_P (t)
19012       || TREE_CODE (t) == FUNCTION_DECL)
19013     {
19014       if (!TI_TEMPLATE (ti))
19015         return NULL;
19016
19017       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
19018     }
19019
19020   return result;
19021 }
19022
19023 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
19024    tied to T. That list of typedefs will be access checked at
19025    T instantiation time.
19026    T is either a FUNCTION_DECL or a RECORD_TYPE.
19027    TYPE_DECL is a TYPE_DECL node representing a typedef.
19028    SCOPE is the scope through which TYPE_DECL is accessed.
19029    LOCATION is the location of the usage point of TYPE_DECL.
19030
19031    This function is a subroutine of
19032    append_type_to_template_for_access_check.  */
19033
19034 static void
19035 append_type_to_template_for_access_check_1 (tree t,
19036                                             tree type_decl,
19037                                             tree scope,
19038                                             location_t location)
19039 {
19040   qualified_typedef_usage_t typedef_usage;
19041   tree ti;
19042
19043   if (!t || t == error_mark_node)
19044     return;
19045
19046   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
19047                || CLASS_TYPE_P (t))
19048               && type_decl
19049               && TREE_CODE (type_decl) == TYPE_DECL
19050               && scope);
19051
19052   if (!(ti = get_template_info (t)))
19053     return;
19054
19055   gcc_assert (TI_TEMPLATE (ti));
19056
19057   typedef_usage.typedef_decl = type_decl;
19058   typedef_usage.context = scope;
19059   typedef_usage.locus = location;
19060
19061   VEC_safe_push (qualified_typedef_usage_t, gc,
19062                  TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
19063                  &typedef_usage);
19064 }
19065
19066 /* Append TYPE_DECL to the template TEMPL.
19067    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
19068    At TEMPL instanciation time, TYPE_DECL will be checked to see
19069    if it can be accessed through SCOPE.
19070    LOCATION is the location of the usage point of TYPE_DECL.
19071
19072    e.g. consider the following code snippet:
19073
19074      class C
19075      {
19076        typedef int myint;
19077      };
19078
19079      template<class U> struct S
19080      {
19081        C::myint mi; // <-- usage point of the typedef C::myint
19082      };
19083
19084      S<char> s;
19085
19086    At S<char> instantiation time, we need to check the access of C::myint
19087    In other words, we need to check the access of the myint typedef through
19088    the C scope. For that purpose, this function will add the myint typedef
19089    and the scope C through which its being accessed to a list of typedefs
19090    tied to the template S. That list will be walked at template instantiation
19091    time and access check performed on each typedefs it contains.
19092    Note that this particular code snippet should yield an error because
19093    myint is private to C.  */
19094
19095 void
19096 append_type_to_template_for_access_check (tree templ,
19097                                           tree type_decl,
19098                                           tree scope,
19099                                           location_t location)
19100 {
19101   qualified_typedef_usage_t *iter;
19102   int i;
19103
19104   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
19105
19106   /* Make sure we don't append the type to the template twice.  */
19107   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
19108                     get_types_needing_access_check (templ),
19109                     i, iter)
19110     if (iter->typedef_decl == type_decl && scope == iter->context)
19111       return;
19112
19113   append_type_to_template_for_access_check_1 (templ, type_decl,
19114                                               scope, location);
19115 }
19116
19117 /* Set up the hash tables for template instantiations.  */
19118
19119 void
19120 init_template_processing (void)
19121 {
19122   decl_specializations = htab_create_ggc (37,
19123                                           hash_specialization,
19124                                           eq_specializations,
19125                                           ggc_free);
19126   type_specializations = htab_create_ggc (37,
19127                                           hash_specialization,
19128                                           eq_specializations,
19129                                           ggc_free);
19130 }
19131
19132 /* Print stats about the template hash tables for -fstats.  */
19133
19134 void
19135 print_template_statistics (void)
19136 {
19137   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
19138            "%f collisions\n", (long) htab_size (decl_specializations),
19139            (long) htab_elements (decl_specializations),
19140            htab_collisions (decl_specializations));
19141   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
19142            "%f collisions\n", (long) htab_size (type_specializations),
19143            (long) htab_elements (type_specializations),
19144            htab_collisions (type_specializations));
19145 }
19146
19147 #include "gt-cp-pt.h"