OSDN Git Service

* gnatvsn.adb (Gnat_Version_String): Don't overrun Ver_Len_Max.
[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
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 "cp-objcp-common.h"
40 #include "tree-inline.h"
41 #include "decl.h"
42 #include "output.h"
43 #include "toplev.h"
44 #include "timevar.h"
45 #include "tree-iterator.h"
46 #include "vecprim.h"
47
48 /* The type of functions taking a tree, and some additional data, and
49    returning an int.  */
50 typedef int (*tree_fn_t) (tree, void*);
51
52 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
53    instantiations have been deferred, either because their definitions
54    were not yet available, or because we were putting off doing the work.  */
55 struct GTY (()) pending_template {
56   struct pending_template *next;
57   struct tinst_level *tinst;
58 };
59
60 static GTY(()) struct pending_template *pending_templates;
61 static GTY(()) struct pending_template *last_pending_template;
62
63 int processing_template_parmlist;
64 static int template_header_count;
65
66 static GTY(()) tree saved_trees;
67 static VEC(int,heap) *inline_parm_levels;
68
69 static GTY(()) struct tinst_level *current_tinst_level;
70
71 static GTY(()) tree saved_access_scope;
72
73 /* Live only within one (recursive) call to tsubst_expr.  We use
74    this to pass the statement expression node from the STMT_EXPR
75    to the EXPR_STMT that is its result.  */
76 static tree cur_stmt_expr;
77
78 /* A map from local variable declarations in the body of the template
79    presently being instantiated to the corresponding instantiated
80    local variables.  */
81 static htab_t local_specializations;
82
83 typedef struct GTY(()) spec_entry
84 {
85   tree tmpl;
86   tree args;
87   tree spec;
88 } spec_entry;
89
90 static GTY ((param_is (spec_entry)))
91   htab_t decl_specializations;
92
93 static GTY ((param_is (spec_entry)))
94   htab_t type_specializations;
95
96 /* Contains canonical template parameter types. The vector is indexed by
97    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
98    TREE_LIST, whose TREE_VALUEs contain the canonical template
99    parameters of various types and levels.  */
100 static GTY(()) VEC(tree,gc) *canonical_template_parms;
101
102 #define UNIFY_ALLOW_NONE 0
103 #define UNIFY_ALLOW_MORE_CV_QUAL 1
104 #define UNIFY_ALLOW_LESS_CV_QUAL 2
105 #define UNIFY_ALLOW_DERIVED 4
106 #define UNIFY_ALLOW_INTEGER 8
107 #define UNIFY_ALLOW_OUTER_LEVEL 16
108 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
109 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
110
111 static void push_access_scope (tree);
112 static void pop_access_scope (tree);
113 static bool resolve_overloaded_unification (tree, tree, tree, tree,
114                                             unification_kind_t, int);
115 static int try_one_overload (tree, tree, tree, tree, tree,
116                              unification_kind_t, int, bool);
117 static int unify (tree, tree, tree, tree, int);
118 static void add_pending_template (tree);
119 static tree reopen_tinst_level (struct tinst_level *);
120 static tree tsubst_initializer_list (tree, tree);
121 static tree get_class_bindings (tree, tree, tree);
122 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
123                                    bool, bool);
124 static void tsubst_enum (tree, tree, tree);
125 static tree add_to_template_args (tree, tree);
126 static tree add_outermost_template_args (tree, tree);
127 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
128 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
129                                              tree);
130 static int type_unification_real (tree, tree, tree, const tree *,
131                                   unsigned int, int, unification_kind_t, int);
132 static void note_template_header (int);
133 static tree convert_nontype_argument_function (tree, tree);
134 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
135 static tree convert_template_argument (tree, tree, tree,
136                                        tsubst_flags_t, int, tree);
137 static int for_each_template_parm (tree, tree_fn_t, void*,
138                                    struct pointer_set_t*, bool);
139 static tree expand_template_argument_pack (tree);
140 static tree build_template_parm_index (int, int, int, int, tree, tree);
141 static bool inline_needs_template_parms (tree);
142 static void push_inline_template_parms_recursive (tree, int);
143 static tree retrieve_local_specialization (tree);
144 static void register_local_specialization (tree, tree);
145 static hashval_t hash_specialization (const void *p);
146 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
147 static int mark_template_parm (tree, void *);
148 static int template_parm_this_level_p (tree, void *);
149 static tree tsubst_friend_function (tree, tree);
150 static tree tsubst_friend_class (tree, tree);
151 static int can_complete_type_without_circularity (tree);
152 static tree get_bindings (tree, tree, tree, bool);
153 static int template_decl_level (tree);
154 static int check_cv_quals_for_unify (int, tree, tree);
155 static void template_parm_level_and_index (tree, int*, int*);
156 static int unify_pack_expansion (tree, tree, tree, tree, int, bool, bool);
157 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
158 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
159 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
160 static void regenerate_decl_from_template (tree, tree);
161 static tree most_specialized_class (tree, tree, tsubst_flags_t);
162 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
163 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
164 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
165 static bool check_specialization_scope (void);
166 static tree process_partial_specialization (tree);
167 static void set_current_access_from_decl (tree);
168 static tree get_template_base (tree, tree, tree, tree);
169 static tree try_class_unification (tree, tree, tree, tree);
170 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
171                                            tree, tree);
172 static bool template_template_parm_bindings_ok_p (tree, tree);
173 static int template_args_equal (tree, tree);
174 static void tsubst_default_arguments (tree);
175 static tree for_each_template_parm_r (tree *, int *, void *);
176 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
177 static void copy_default_args_to_explicit_spec (tree);
178 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
179 static int eq_local_specializations (const void *, const void *);
180 static bool dependent_template_arg_p (tree);
181 static bool any_template_arguments_need_structural_equality_p (tree);
182 static bool dependent_type_p_r (tree);
183 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
184 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
185 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
186 static tree tsubst_decl (tree, tree, tsubst_flags_t);
187 static void perform_typedefs_access_check (tree tmpl, tree targs);
188 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
189                                                         location_t);
190 static tree listify (tree);
191 static tree listify_autos (tree, tree);
192 static tree template_parm_to_arg (tree t);
193 static tree current_template_args (void);
194 static tree fixup_template_type_parm_type (tree, int);
195 static tree fixup_template_parm_index (tree, tree, int);
196 static void fixup_template_parms (void);
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   fixup_template_parms ();
3617
3618   --processing_template_parmlist;
3619
3620   return saved_parmlist;
3621 }
3622
3623 /* Create a new type almost identical to TYPE but which has the
3624    following differences:
3625
3626      1/ T has a new TEMPLATE_PARM_INDEX that carries the new number of
3627      template sibling parameters of T.
3628
3629      2/ T has a new canonical type that matches the new number
3630      of sibling parms.
3631
3632      3/ From now on, T is going to be what lookups referring to the
3633      name of TYPE will return. No lookup should return TYPE anymore.
3634
3635    NUM_PARMS is the new number of sibling parms TYPE belongs to.
3636
3637    This is a subroutine of fixup_template_parms.  */
3638
3639 static tree
3640 fixup_template_type_parm_type (tree type, int num_parms)
3641 {
3642   tree orig_idx = TEMPLATE_TYPE_PARM_INDEX (type), idx;
3643   tree t;
3644   /* This is the decl which name is inserted into the symbol table for
3645      the template parm type. So whenever we lookup the type name, this
3646      is the DECL we get.  */
3647   tree decl;
3648
3649   /* Do not fix up the type twice.  */
3650   if (orig_idx && TEMPLATE_PARM_NUM_SIBLINGS (orig_idx) != 0)
3651     return type;
3652
3653   t = copy_type (type);
3654   decl = TYPE_NAME (t);
3655
3656   TYPE_MAIN_VARIANT (t) = t;
3657   TYPE_NEXT_VARIANT (t)= NULL_TREE;
3658   TYPE_POINTER_TO (t) = 0;
3659   TYPE_REFERENCE_TO (t) = 0;
3660
3661   idx = build_template_parm_index (TEMPLATE_PARM_IDX (orig_idx),
3662                                    TEMPLATE_PARM_LEVEL (orig_idx),
3663                                    TEMPLATE_PARM_ORIG_LEVEL (orig_idx),
3664                                    num_parms,
3665                                    decl, t);
3666   TEMPLATE_PARM_DESCENDANTS (idx) = TEMPLATE_PARM_DESCENDANTS (orig_idx);
3667   TEMPLATE_PARM_PARAMETER_PACK (idx) = TEMPLATE_PARM_PARAMETER_PACK (orig_idx);
3668   TEMPLATE_TYPE_PARM_INDEX (t) = idx;
3669
3670   TYPE_STUB_DECL (t) = decl;
3671   TEMPLATE_TYPE_DECL (t) = decl;
3672   if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
3673     TREE_TYPE (DECL_TEMPLATE_RESULT  (decl)) = t;
3674
3675   /* Update the type associated to the type name stored in the symbol
3676      table. Now, whenever the type name is looked up, the resulting
3677      type is properly fixed up.  */
3678   TREE_TYPE (decl) = t;
3679
3680   TYPE_CANONICAL (t) = canonical_type_parameter (t);
3681
3682   return t;
3683 }
3684
3685 /* Create and return a new TEMPLATE_PARM_INDEX that is almost
3686    identical to I, but that is fixed up as to:
3687
3688    1/ carry the number of sibling parms (NUM_PARMS) of the template
3689    parm represented by I.
3690
3691    2/ replace all references to template parm types declared before I
3692    (in the same template parm list as I) by references to template
3693    parm types contained in ARGS. ARGS should contain the list of
3694    template parms that have been fixed up so far, in a form suitable
3695    to be passed to tsubst.
3696
3697    This is a subroutine of fixup_template_parms.  */
3698
3699 static tree
3700 fixup_template_parm_index (tree i, tree args, int num_parms)
3701 {
3702   tree index, decl, type;
3703
3704   if (i == NULL_TREE
3705       || TREE_CODE (i) != TEMPLATE_PARM_INDEX
3706       /* Do not fix up the index twice.  */
3707       || (TEMPLATE_PARM_NUM_SIBLINGS (i) != 0))
3708     return i;
3709
3710   decl = TEMPLATE_PARM_DECL (i);
3711   type = TREE_TYPE (decl);
3712
3713   index = build_template_parm_index (TEMPLATE_PARM_IDX (i),
3714                                      TEMPLATE_PARM_LEVEL (i),
3715                                      TEMPLATE_PARM_ORIG_LEVEL (i),
3716                                      num_parms,
3717                                      decl, type);
3718
3719   TEMPLATE_PARM_DESCENDANTS (index) = TEMPLATE_PARM_DESCENDANTS (i);
3720   TEMPLATE_PARM_PARAMETER_PACK (index) = TEMPLATE_PARM_PARAMETER_PACK (i);
3721
3722   type = tsubst (type, args, tf_none, NULL_TREE);
3723   
3724   TREE_TYPE (decl) = type;
3725   TREE_TYPE (index) = type;
3726
3727   return index;
3728 }
3729
3730 /* 
3731    This is a subroutine of fixup_template_parms.
3732
3733    It computes the canonical type of the type of the template
3734    parameter PARM_DESC and update all references to that type so that
3735    they use the newly computed canonical type. No access check is
3736    performed during the fixup. PARM_DESC is a TREE_LIST which
3737    TREE_VALUE is the template parameter and its TREE_PURPOSE is the
3738    default argument of the template parm if any. IDX is the index of
3739    the template parameter, starting at 0. NUM_PARMS is the number of
3740    template parameters in the set PARM_DESC belongs to. ARGLIST is a
3741    TREE_VEC containing the full set of template parameters in a form
3742    suitable to be passed to substs functions as their ARGS
3743    argument. This is what current_template_args returns for a given
3744    template. The innermost vector of args in ARGLIST is the set of
3745    template parms that have been fixed up so far. This function adds
3746    the fixed up parameter into that vector.  */
3747
3748 static void
3749 fixup_template_parm (tree parm_desc,
3750                      int idx,
3751                      int num_parms,
3752                      tree arglist)
3753 {
3754   tree parm = TREE_VALUE (parm_desc);
3755   tree fixedup_args = INNERMOST_TEMPLATE_ARGS (arglist);
3756
3757   push_deferring_access_checks (dk_no_check);
3758
3759   if (TREE_CODE (parm) == TYPE_DECL)
3760     {
3761       /* PARM is a template type parameter. Fix up its type, add
3762          the fixed-up template parm to the vector of fixed-up
3763          template parms so far, and substitute the fixed-up
3764          template parms into the default argument of this
3765          parameter.  */
3766       tree t =
3767         fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3768       TREE_TYPE (parm) = t;
3769
3770       TREE_VEC_ELT (fixedup_args, idx) = template_parm_to_arg (parm_desc);
3771     }
3772   else if (TREE_CODE (parm) == TEMPLATE_DECL)
3773     {
3774       /* PARM is a template template parameter. This is going to
3775          be interesting.  */
3776       tree tparms, targs, innermost_args;
3777       int j;
3778
3779       /* First, fix up the type of the parm.  */
3780
3781       tree t =
3782         fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3783       TREE_TYPE (parm) = t;
3784
3785       TREE_VEC_ELT (fixedup_args, idx) =
3786         template_parm_to_arg (parm_desc);
3787
3788       /* Now we need to substitute the template parm types that
3789          have been fixed up so far into the non-type template
3790          parms of this template template parm. E.g, consider this:
3791
3792          template<class T, template<T u> class TT> class S;
3793
3794          In this case we want to substitute T into the
3795          template parameters of TT.
3796
3797          So let's walk the template parms of PARM here, and
3798          tsubst ARGLIST into into each of the template
3799          parms.   */
3800
3801       /* For this substitution we need to build the full set of
3802          template parameters and use that as arguments for the
3803          tsubsting function.  */
3804       tparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
3805
3806       /* This will contain the innermost parms of PARM into which
3807          we have substituted so far.  */
3808       innermost_args = make_tree_vec (TREE_VEC_LENGTH (tparms));
3809       targs = add_to_template_args (arglist, innermost_args);
3810       for (j = 0; j < TREE_VEC_LENGTH (tparms); ++j)
3811         {
3812           tree parameter;
3813
3814           parameter = TREE_VEC_ELT (tparms, j);
3815
3816           /* INNERMOST_ARGS needs to have at least the same number
3817              of elements as the index PARAMETER, ortherwise
3818              tsubsting into PARAMETER will result in partially
3819              instantiating it, reducing its tempate parm
3820              level. Let's tactically fill INNERMOST_ARGS for that
3821              purpose.  */
3822           TREE_VEC_ELT (innermost_args, j) =
3823             template_parm_to_arg (parameter);
3824
3825           fixup_template_parm (parameter, j,
3826                                TREE_VEC_LENGTH (tparms),
3827                                targs);
3828         }
3829     }
3830   else if (TREE_CODE (parm) == PARM_DECL)
3831     {
3832       /* PARM is a non-type template parameter. We need to:
3833
3834        * Fix up its TEMPLATE_PARM_INDEX to make it carry the
3835        proper number of sibling parameters.
3836
3837        * Make lookups of the template parameter return a reference
3838        to the fixed-up index. No lookup should return references
3839        to the former index anymore.
3840
3841        * Substitute the template parms that got fixed up so far
3842
3843        * into the type of PARM.  */
3844
3845       tree index = DECL_INITIAL (parm);
3846
3847       /* PUSHED_DECL is the decl added to the symbol table with
3848          the name of the parameter. E,g:
3849              
3850          template<class T, T u> //#0
3851          auto my_function(T t) -> decltype(u); //#1
3852
3853          Here, when looking up u at //#1, we get the decl of u
3854          resulting from the declaration in #0. This is what
3855          PUSHED_DECL is. We need to replace the reference to the
3856          old TEMPLATE_PARM_INDEX carried by PUSHED_DECL by the
3857          fixed-up TEMPLATE_PARM_INDEX.  */
3858       tree pushed_decl = TEMPLATE_PARM_DECL (index);
3859
3860       /* Let's fix up the TEMPLATE_PARM_INDEX then. Note that we must
3861          fixup the type of PUSHED_DECL as well and luckily
3862          fixup_template_parm_index does it for us too.  */
3863       tree fixed_up_index =
3864         fixup_template_parm_index (index, arglist, num_parms);
3865
3866       DECL_INITIAL (pushed_decl) = DECL_INITIAL (parm) = fixed_up_index;
3867
3868       /* Add this fixed up PARM to the template parms we've fixed
3869          up so far and use that to substitute the fixed-up
3870          template parms into the type of PARM.  */
3871       TREE_VEC_ELT (fixedup_args, idx) =
3872         template_parm_to_arg (parm_desc);
3873       TREE_TYPE (parm) = tsubst (TREE_TYPE (parm), arglist,
3874                                  tf_none, NULL_TREE);
3875     }
3876
3877   TREE_PURPOSE (parm_desc) =
3878     tsubst_template_arg (TREE_PURPOSE (parm_desc),
3879                          arglist, tf_none, parm);
3880
3881   pop_deferring_access_checks ();
3882 }
3883
3884 /* Walk current the template parms and properly compute the canonical
3885    types of the dependent types created during
3886    cp_parser_template_parameter_list.  */
3887
3888 static void
3889 fixup_template_parms (void)
3890 {
3891   tree arglist;
3892   tree parameter_vec;
3893   tree fixedup_args;
3894   int i, num_parms;
3895
3896   parameter_vec = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3897   if (parameter_vec == NULL_TREE)
3898     return;
3899
3900   num_parms = TREE_VEC_LENGTH (parameter_vec);
3901
3902   /* This vector contains the current innermost template parms that
3903      have been fixed up so far.  The form of FIXEDUP_ARGS is suitable
3904      to be passed to tsubst* functions as their ARGS argument.  */
3905   fixedup_args = make_tree_vec (num_parms);
3906
3907   /* This vector contains the full set of template parms in a form
3908      suitable to be passed to substs functions as their ARGS
3909      argument.  */
3910   arglist = current_template_args ();
3911   arglist = add_outermost_template_args (arglist, fixedup_args);
3912
3913   fixedup_args = INNERMOST_TEMPLATE_ARGS (arglist);
3914
3915   /* Let's do the proper fixup now.  */
3916   for (i = 0; i < num_parms; ++i)
3917     fixup_template_parm (TREE_VEC_ELT (parameter_vec, i),
3918                          i, num_parms, arglist);
3919 }
3920
3921 /* end_template_decl is called after a template declaration is seen.  */
3922
3923 void
3924 end_template_decl (void)
3925 {
3926   reset_specialization ();
3927
3928   if (! processing_template_decl)
3929     return;
3930
3931   /* This matches the pushlevel in begin_template_parm_list.  */
3932   finish_scope ();
3933
3934   --processing_template_decl;
3935   current_template_parms = TREE_CHAIN (current_template_parms);
3936 }
3937
3938 /* Takes a TREE_LIST representing a template parameter and convert it
3939    into an argument suitable to be passed to the type substitution
3940    functions.  Note that If the TREE_LIST contains an error_mark
3941    node, the returned argument is error_mark_node.  */
3942
3943 static tree
3944 template_parm_to_arg (tree t)
3945 {
3946
3947   if (t == NULL_TREE
3948       || TREE_CODE (t) != TREE_LIST)
3949     return t;
3950
3951   if (error_operand_p (TREE_VALUE (t)))
3952     return error_mark_node;
3953
3954   t = TREE_VALUE (t);
3955
3956   if (TREE_CODE (t) == TYPE_DECL
3957       || TREE_CODE (t) == TEMPLATE_DECL)
3958     {
3959       t = TREE_TYPE (t);
3960
3961       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3962         {
3963           /* Turn this argument into a TYPE_ARGUMENT_PACK
3964              with a single element, which expands T.  */
3965           tree vec = make_tree_vec (1);
3966 #ifdef ENABLE_CHECKING
3967           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3968             (vec, TREE_VEC_LENGTH (vec));
3969 #endif
3970           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3971
3972           t = cxx_make_type (TYPE_ARGUMENT_PACK);
3973           SET_ARGUMENT_PACK_ARGS (t, vec);
3974         }
3975     }
3976   else
3977     {
3978       t = DECL_INITIAL (t);
3979
3980       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3981         {
3982           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3983              with a single element, which expands T.  */
3984           tree vec = make_tree_vec (1);
3985           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3986 #ifdef ENABLE_CHECKING
3987           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3988             (vec, TREE_VEC_LENGTH (vec));
3989 #endif
3990           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3991
3992           t  = make_node (NONTYPE_ARGUMENT_PACK);
3993           SET_ARGUMENT_PACK_ARGS (t, vec);
3994           TREE_TYPE (t) = type;
3995         }
3996     }
3997   return t;
3998 }
3999
4000 /* Within the declaration of a template, return all levels of template
4001    parameters that apply.  The template parameters are represented as
4002    a TREE_VEC, in the form documented in cp-tree.h for template
4003    arguments.  */
4004
4005 static tree
4006 current_template_args (void)
4007 {
4008   tree header;
4009   tree args = NULL_TREE;
4010   int length = TMPL_PARMS_DEPTH (current_template_parms);
4011   int l = length;
4012
4013   /* If there is only one level of template parameters, we do not
4014      create a TREE_VEC of TREE_VECs.  Instead, we return a single
4015      TREE_VEC containing the arguments.  */
4016   if (length > 1)
4017     args = make_tree_vec (length);
4018
4019   for (header = current_template_parms; header; header = TREE_CHAIN (header))
4020     {
4021       tree a = copy_node (TREE_VALUE (header));
4022       int i;
4023
4024       TREE_TYPE (a) = NULL_TREE;
4025       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
4026         TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
4027
4028 #ifdef ENABLE_CHECKING
4029       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
4030 #endif
4031
4032       if (length > 1)
4033         TREE_VEC_ELT (args, --l) = a;
4034       else
4035         args = a;
4036     }
4037
4038     if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
4039       /* This can happen for template parms of a template template
4040          parameter, e.g:
4041
4042          template<template<class T, class U> class TT> struct S;
4043
4044          Consider the level of the parms of TT; T and U both have
4045          level 2; TT has no template parm of level 1. So in this case
4046          the first element of full_template_args is NULL_TREE. If we
4047          leave it like this TMPL_ARG_DEPTH on args returns 1 instead
4048          of 2. This will make tsubst wrongly consider that T and U
4049          have level 1. Instead, let's create a dummy vector as the
4050          first element of full_template_args so that TMPL_ARG_DEPTH
4051          returns the correct depth for args.  */
4052       TREE_VEC_ELT (args, 0) = make_tree_vec (1);
4053   return args;
4054 }
4055
4056 /* Update the declared TYPE by doing any lookups which were thought to be
4057    dependent, but are not now that we know the SCOPE of the declarator.  */
4058
4059 tree
4060 maybe_update_decl_type (tree orig_type, tree scope)
4061 {
4062   tree type = orig_type;
4063
4064   if (type == NULL_TREE)
4065     return type;
4066
4067   if (TREE_CODE (orig_type) == TYPE_DECL)
4068     type = TREE_TYPE (type);
4069
4070   if (scope && TYPE_P (scope) && dependent_type_p (scope)
4071       && dependent_type_p (type)
4072       /* Don't bother building up the args in this case.  */
4073       && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4074     {
4075       /* tsubst in the args corresponding to the template parameters,
4076          including auto if present.  Most things will be unchanged, but
4077          make_typename_type and tsubst_qualified_id will resolve
4078          TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
4079       tree args = current_template_args ();
4080       tree auto_node = type_uses_auto (type);
4081       tree pushed;
4082       if (auto_node)
4083         {
4084           tree auto_vec = make_tree_vec (1);
4085           TREE_VEC_ELT (auto_vec, 0) = auto_node;
4086           args = add_to_template_args (args, auto_vec);
4087         }
4088       pushed = push_scope (scope);
4089       type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4090       if (pushed)
4091         pop_scope (scope);
4092     }
4093
4094   if (type == error_mark_node)
4095     return orig_type;
4096
4097   if (TREE_CODE (orig_type) == TYPE_DECL)
4098     {
4099       if (same_type_p (type, TREE_TYPE (orig_type)))
4100         type = orig_type;
4101       else
4102         type = TYPE_NAME (type);
4103     }
4104   return type;
4105 }
4106
4107 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4108    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
4109    a member template.  Used by push_template_decl below.  */
4110
4111 static tree
4112 build_template_decl (tree decl, tree parms, bool member_template_p)
4113 {
4114   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4115   DECL_TEMPLATE_PARMS (tmpl) = parms;
4116   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4117   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4118
4119   return tmpl;
4120 }
4121
4122 struct template_parm_data
4123 {
4124   /* The level of the template parameters we are currently
4125      processing.  */
4126   int level;
4127
4128   /* The index of the specialization argument we are currently
4129      processing.  */
4130   int current_arg;
4131
4132   /* An array whose size is the number of template parameters.  The
4133      elements are nonzero if the parameter has been used in any one
4134      of the arguments processed so far.  */
4135   int* parms;
4136
4137   /* An array whose size is the number of template arguments.  The
4138      elements are nonzero if the argument makes use of template
4139      parameters of this level.  */
4140   int* arg_uses_template_parms;
4141 };
4142
4143 /* Subroutine of push_template_decl used to see if each template
4144    parameter in a partial specialization is used in the explicit
4145    argument list.  If T is of the LEVEL given in DATA (which is
4146    treated as a template_parm_data*), then DATA->PARMS is marked
4147    appropriately.  */
4148
4149 static int
4150 mark_template_parm (tree t, void* data)
4151 {
4152   int level;
4153   int idx;
4154   struct template_parm_data* tpd = (struct template_parm_data*) data;
4155
4156   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4157     {
4158       level = TEMPLATE_PARM_LEVEL (t);
4159       idx = TEMPLATE_PARM_IDX (t);
4160     }
4161   else
4162     {
4163       level = TEMPLATE_TYPE_LEVEL (t);
4164       idx = TEMPLATE_TYPE_IDX (t);
4165     }
4166
4167   if (level == tpd->level)
4168     {
4169       tpd->parms[idx] = 1;
4170       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4171     }
4172
4173   /* Return zero so that for_each_template_parm will continue the
4174      traversal of the tree; we want to mark *every* template parm.  */
4175   return 0;
4176 }
4177
4178 /* Process the partial specialization DECL.  */
4179
4180 static tree
4181 process_partial_specialization (tree decl)
4182 {
4183   tree type = TREE_TYPE (decl);
4184   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
4185   tree specargs = CLASSTYPE_TI_ARGS (type);
4186   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4187   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4188   tree inner_parms;
4189   tree inst;
4190   int nargs = TREE_VEC_LENGTH (inner_args);
4191   int ntparms;
4192   int  i;
4193   bool did_error_intro = false;
4194   struct template_parm_data tpd;
4195   struct template_parm_data tpd2;
4196
4197   gcc_assert (current_template_parms);
4198
4199   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4200   ntparms = TREE_VEC_LENGTH (inner_parms);
4201
4202   /* We check that each of the template parameters given in the
4203      partial specialization is used in the argument list to the
4204      specialization.  For example:
4205
4206        template <class T> struct S;
4207        template <class T> struct S<T*>;
4208
4209      The second declaration is OK because `T*' uses the template
4210      parameter T, whereas
4211
4212        template <class T> struct S<int>;
4213
4214      is no good.  Even trickier is:
4215
4216        template <class T>
4217        struct S1
4218        {
4219           template <class U>
4220           struct S2;
4221           template <class U>
4222           struct S2<T>;
4223        };
4224
4225      The S2<T> declaration is actually invalid; it is a
4226      full-specialization.  Of course,
4227
4228           template <class U>
4229           struct S2<T (*)(U)>;
4230
4231      or some such would have been OK.  */
4232   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4233   tpd.parms = XALLOCAVEC (int, ntparms);
4234   memset (tpd.parms, 0, sizeof (int) * ntparms);
4235
4236   tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4237   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4238   for (i = 0; i < nargs; ++i)
4239     {
4240       tpd.current_arg = i;
4241       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4242                               &mark_template_parm,
4243                               &tpd,
4244                               NULL,
4245                               /*include_nondeduced_p=*/false);
4246     }
4247   for (i = 0; i < ntparms; ++i)
4248     if (tpd.parms[i] == 0)
4249       {
4250         /* One of the template parms was not used in the
4251            specialization.  */
4252         if (!did_error_intro)
4253           {
4254             error ("template parameters not used in partial specialization:");
4255             did_error_intro = true;
4256           }
4257
4258         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4259       }
4260
4261   if (did_error_intro)
4262     return error_mark_node;
4263
4264   /* [temp.class.spec]
4265
4266      The argument list of the specialization shall not be identical to
4267      the implicit argument list of the primary template.  */
4268   if (comp_template_args
4269       (inner_args,
4270        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
4271                                                    (maintmpl)))))
4272     error ("partial specialization %qT does not specialize any template arguments", type);
4273
4274   /* [temp.class.spec]
4275
4276      A partially specialized non-type argument expression shall not
4277      involve template parameters of the partial specialization except
4278      when the argument expression is a simple identifier.
4279
4280      The type of a template parameter corresponding to a specialized
4281      non-type argument shall not be dependent on a parameter of the
4282      specialization. 
4283
4284      Also, we verify that pack expansions only occur at the
4285      end of the argument list.  */
4286   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4287   tpd2.parms = 0;
4288   for (i = 0; i < nargs; ++i)
4289     {
4290       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4291       tree arg = TREE_VEC_ELT (inner_args, i);
4292       tree packed_args = NULL_TREE;
4293       int j, len = 1;
4294
4295       if (ARGUMENT_PACK_P (arg))
4296         {
4297           /* Extract the arguments from the argument pack. We'll be
4298              iterating over these in the following loop.  */
4299           packed_args = ARGUMENT_PACK_ARGS (arg);
4300           len = TREE_VEC_LENGTH (packed_args);
4301         }
4302
4303       for (j = 0; j < len; j++)
4304         {
4305           if (packed_args)
4306             /* Get the Jth argument in the parameter pack.  */
4307             arg = TREE_VEC_ELT (packed_args, j);
4308
4309           if (PACK_EXPANSION_P (arg))
4310             {
4311               /* Pack expansions must come at the end of the
4312                  argument list.  */
4313               if ((packed_args && j < len - 1)
4314                   || (!packed_args && i < nargs - 1))
4315                 {
4316                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4317                     error ("parameter pack argument %qE must be at the "
4318                            "end of the template argument list", arg);
4319                   else
4320                     error ("parameter pack argument %qT must be at the "
4321                            "end of the template argument list", arg);
4322                 }
4323             }
4324
4325           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4326             /* We only care about the pattern.  */
4327             arg = PACK_EXPANSION_PATTERN (arg);
4328
4329           if (/* These first two lines are the `non-type' bit.  */
4330               !TYPE_P (arg)
4331               && TREE_CODE (arg) != TEMPLATE_DECL
4332               /* This next line is the `argument expression is not just a
4333                  simple identifier' condition and also the `specialized
4334                  non-type argument' bit.  */
4335               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
4336             {
4337               if ((!packed_args && tpd.arg_uses_template_parms[i])
4338                   || (packed_args && uses_template_parms (arg)))
4339                 error ("template argument %qE involves template parameter(s)",
4340                        arg);
4341               else 
4342                 {
4343                   /* Look at the corresponding template parameter,
4344                      marking which template parameters its type depends
4345                      upon.  */
4346                   tree type = TREE_TYPE (parm);
4347
4348                   if (!tpd2.parms)
4349                     {
4350                       /* We haven't yet initialized TPD2.  Do so now.  */
4351                       tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4352                       /* The number of parameters here is the number in the
4353                          main template, which, as checked in the assertion
4354                          above, is NARGS.  */
4355                       tpd2.parms = XALLOCAVEC (int, nargs);
4356                       tpd2.level = 
4357                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4358                     }
4359
4360                   /* Mark the template parameters.  But this time, we're
4361                      looking for the template parameters of the main
4362                      template, not in the specialization.  */
4363                   tpd2.current_arg = i;
4364                   tpd2.arg_uses_template_parms[i] = 0;
4365                   memset (tpd2.parms, 0, sizeof (int) * nargs);
4366                   for_each_template_parm (type,
4367                                           &mark_template_parm,
4368                                           &tpd2,
4369                                           NULL,
4370                                           /*include_nondeduced_p=*/false);
4371
4372                   if (tpd2.arg_uses_template_parms [i])
4373                     {
4374                       /* The type depended on some template parameters.
4375                          If they are fully specialized in the
4376                          specialization, that's OK.  */
4377                       int j;
4378                       int count = 0;
4379                       for (j = 0; j < nargs; ++j)
4380                         if (tpd2.parms[j] != 0
4381                             && tpd.arg_uses_template_parms [j])
4382                           ++count;
4383                       if (count != 0)
4384                         error_n (input_location, count,
4385                                  "type %qT of template argument %qE depends "
4386                                  "on a template parameter",
4387                                  "type %qT of template argument %qE depends "
4388                                  "on template parameters",
4389                                  type,
4390                                  arg);
4391                     }
4392                 }
4393             }
4394         }
4395     }
4396
4397   /* We should only get here once.  */
4398   gcc_assert (!COMPLETE_TYPE_P (type));
4399
4400   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4401     = tree_cons (specargs, inner_parms,
4402                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4403   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4404
4405   for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4406        inst = TREE_CHAIN (inst))
4407     {
4408       tree inst_type = TREE_VALUE (inst);
4409       if (COMPLETE_TYPE_P (inst_type)
4410           && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4411         {
4412           tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
4413           if (spec && TREE_TYPE (spec) == type)
4414             permerror (input_location,
4415                        "partial specialization of %qT after instantiation "
4416                        "of %qT", type, inst_type);
4417         }
4418     }
4419
4420   return decl;
4421 }
4422
4423 /* Check that a template declaration's use of default arguments and
4424    parameter packs is not invalid.  Here, PARMS are the template
4425    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
4426    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
4427    specialization.
4428    
4429
4430    IS_FRIEND_DECL is nonzero if DECL is a friend function template
4431    declaration (but not a definition); 1 indicates a declaration, 2
4432    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4433    emitted for extraneous default arguments.
4434
4435    Returns TRUE if there were no errors found, FALSE otherwise. */
4436
4437 bool
4438 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
4439                          int is_partial, int is_friend_decl)
4440 {
4441   const char *msg;
4442   int last_level_to_check;
4443   tree parm_level;
4444   bool no_errors = true;
4445
4446   /* [temp.param]
4447
4448      A default template-argument shall not be specified in a
4449      function template declaration or a function template definition, nor
4450      in the template-parameter-list of the definition of a member of a
4451      class template.  */
4452
4453   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
4454     /* You can't have a function template declaration in a local
4455        scope, nor you can you define a member of a class template in a
4456        local scope.  */
4457     return true;
4458
4459   if (current_class_type
4460       && !TYPE_BEING_DEFINED (current_class_type)
4461       && DECL_LANG_SPECIFIC (decl)
4462       && DECL_DECLARES_FUNCTION_P (decl)
4463       /* If this is either a friend defined in the scope of the class
4464          or a member function.  */
4465       && (DECL_FUNCTION_MEMBER_P (decl)
4466           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4467           : DECL_FRIEND_CONTEXT (decl)
4468           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4469           : false)
4470       /* And, if it was a member function, it really was defined in
4471          the scope of the class.  */
4472       && (!DECL_FUNCTION_MEMBER_P (decl)
4473           || DECL_INITIALIZED_IN_CLASS_P (decl)))
4474     /* We already checked these parameters when the template was
4475        declared, so there's no need to do it again now.  This function
4476        was defined in class scope, but we're processing it's body now
4477        that the class is complete.  */
4478     return true;
4479
4480   /* Core issue 226 (C++0x only): the following only applies to class
4481      templates.  */
4482   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
4483     {
4484       /* [temp.param]
4485
4486          If a template-parameter has a default template-argument, all
4487          subsequent template-parameters shall have a default
4488          template-argument supplied.  */
4489       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4490         {
4491           tree inner_parms = TREE_VALUE (parm_level);
4492           int ntparms = TREE_VEC_LENGTH (inner_parms);
4493           int seen_def_arg_p = 0;
4494           int i;
4495
4496           for (i = 0; i < ntparms; ++i)
4497             {
4498               tree parm = TREE_VEC_ELT (inner_parms, i);
4499
4500               if (parm == error_mark_node)
4501                 continue;
4502
4503               if (TREE_PURPOSE (parm))
4504                 seen_def_arg_p = 1;
4505               else if (seen_def_arg_p
4506                        && !template_parameter_pack_p (TREE_VALUE (parm)))
4507                 {
4508                   error ("no default argument for %qD", TREE_VALUE (parm));
4509                   /* For better subsequent error-recovery, we indicate that
4510                      there should have been a default argument.  */
4511                   TREE_PURPOSE (parm) = error_mark_node;
4512                   no_errors = false;
4513                 }
4514               else if (is_primary
4515                        && !is_partial
4516                        && !is_friend_decl
4517                        /* Don't complain about an enclosing partial
4518                           specialization.  */
4519                        && parm_level == parms
4520                        && TREE_CODE (decl) == TYPE_DECL
4521                        && i < ntparms - 1
4522                        && template_parameter_pack_p (TREE_VALUE (parm)))
4523                 {
4524                   /* A primary class template can only have one
4525                      parameter pack, at the end of the template
4526                      parameter list.  */
4527
4528                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4529                     error ("parameter pack %qE must be at the end of the"
4530                            " template parameter list", TREE_VALUE (parm));
4531                   else
4532                     error ("parameter pack %qT must be at the end of the"
4533                            " template parameter list", 
4534                            TREE_TYPE (TREE_VALUE (parm)));
4535
4536                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
4537                     = error_mark_node;
4538                   no_errors = false;
4539                 }
4540             }
4541         }
4542     }
4543
4544   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4545       || is_partial 
4546       || !is_primary
4547       || is_friend_decl)
4548     /* For an ordinary class template, default template arguments are
4549        allowed at the innermost level, e.g.:
4550          template <class T = int>
4551          struct S {};
4552        but, in a partial specialization, they're not allowed even
4553        there, as we have in [temp.class.spec]:
4554
4555          The template parameter list of a specialization shall not
4556          contain default template argument values.
4557
4558        So, for a partial specialization, or for a function template
4559        (in C++98/C++03), we look at all of them.  */
4560     ;
4561   else
4562     /* But, for a primary class template that is not a partial
4563        specialization we look at all template parameters except the
4564        innermost ones.  */
4565     parms = TREE_CHAIN (parms);
4566
4567   /* Figure out what error message to issue.  */
4568   if (is_friend_decl == 2)
4569     msg = G_("default template arguments may not be used in function template "
4570              "friend re-declaration");
4571   else if (is_friend_decl)
4572     msg = G_("default template arguments may not be used in function template "
4573              "friend declarations");
4574   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4575     msg = G_("default template arguments may not be used in function templates "
4576              "without -std=c++0x or -std=gnu++0x");
4577   else if (is_partial)
4578     msg = G_("default template arguments may not be used in "
4579              "partial specializations");
4580   else
4581     msg = G_("default argument for template parameter for class enclosing %qD");
4582
4583   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4584     /* If we're inside a class definition, there's no need to
4585        examine the parameters to the class itself.  On the one
4586        hand, they will be checked when the class is defined, and,
4587        on the other, default arguments are valid in things like:
4588          template <class T = double>
4589          struct S { template <class U> void f(U); };
4590        Here the default argument for `S' has no bearing on the
4591        declaration of `f'.  */
4592     last_level_to_check = template_class_depth (current_class_type) + 1;
4593   else
4594     /* Check everything.  */
4595     last_level_to_check = 0;
4596
4597   for (parm_level = parms;
4598        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4599        parm_level = TREE_CHAIN (parm_level))
4600     {
4601       tree inner_parms = TREE_VALUE (parm_level);
4602       int i;
4603       int ntparms;
4604
4605       ntparms = TREE_VEC_LENGTH (inner_parms);
4606       for (i = 0; i < ntparms; ++i)
4607         {
4608           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4609             continue;
4610
4611           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4612             {
4613               if (msg)
4614                 {
4615                   no_errors = false;
4616                   if (is_friend_decl == 2)
4617                     return no_errors;
4618
4619                   error (msg, decl);
4620                   msg = 0;
4621                 }
4622
4623               /* Clear out the default argument so that we are not
4624                  confused later.  */
4625               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4626             }
4627         }
4628
4629       /* At this point, if we're still interested in issuing messages,
4630          they must apply to classes surrounding the object declared.  */
4631       if (msg)
4632         msg = G_("default argument for template parameter for class "
4633                  "enclosing %qD");
4634     }
4635
4636   return no_errors;
4637 }
4638
4639 /* Worker for push_template_decl_real, called via
4640    for_each_template_parm.  DATA is really an int, indicating the
4641    level of the parameters we are interested in.  If T is a template
4642    parameter of that level, return nonzero.  */
4643
4644 static int
4645 template_parm_this_level_p (tree t, void* data)
4646 {
4647   int this_level = *(int *)data;
4648   int level;
4649
4650   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4651     level = TEMPLATE_PARM_LEVEL (t);
4652   else
4653     level = TEMPLATE_TYPE_LEVEL (t);
4654   return level == this_level;
4655 }
4656
4657 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4658    parameters given by current_template_args, or reuses a
4659    previously existing one, if appropriate.  Returns the DECL, or an
4660    equivalent one, if it is replaced via a call to duplicate_decls.
4661
4662    If IS_FRIEND is true, DECL is a friend declaration.  */
4663
4664 tree
4665 push_template_decl_real (tree decl, bool is_friend)
4666 {
4667   tree tmpl;
4668   tree args;
4669   tree info;
4670   tree ctx;
4671   int primary;
4672   int is_partial;
4673   int new_template_p = 0;
4674   /* True if the template is a member template, in the sense of
4675      [temp.mem].  */
4676   bool member_template_p = false;
4677
4678   if (decl == error_mark_node || !current_template_parms)
4679     return error_mark_node;
4680
4681   /* See if this is a partial specialization.  */
4682   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4683                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4684                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4685
4686   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4687     is_friend = true;
4688
4689   if (is_friend)
4690     /* For a friend, we want the context of the friend function, not
4691        the type of which it is a friend.  */
4692     ctx = CP_DECL_CONTEXT (decl);
4693   else if (CP_DECL_CONTEXT (decl)
4694            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4695     /* In the case of a virtual function, we want the class in which
4696        it is defined.  */
4697     ctx = CP_DECL_CONTEXT (decl);
4698   else
4699     /* Otherwise, if we're currently defining some class, the DECL
4700        is assumed to be a member of the class.  */
4701     ctx = current_scope ();
4702
4703   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4704     ctx = NULL_TREE;
4705
4706   if (!DECL_CONTEXT (decl))
4707     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4708
4709   /* See if this is a primary template.  */
4710   if (is_friend && ctx)
4711     /* A friend template that specifies a class context, i.e.
4712          template <typename T> friend void A<T>::f();
4713        is not primary.  */
4714     primary = 0;
4715   else
4716     primary = template_parm_scope_p ();
4717
4718   if (primary)
4719     {
4720       if (DECL_CLASS_SCOPE_P (decl))
4721         member_template_p = true;
4722       if (TREE_CODE (decl) == TYPE_DECL
4723           && ANON_AGGRNAME_P (DECL_NAME (decl)))
4724         {
4725           error ("template class without a name");
4726           return error_mark_node;
4727         }
4728       else if (TREE_CODE (decl) == FUNCTION_DECL)
4729         {
4730           if (DECL_DESTRUCTOR_P (decl))
4731             {
4732               /* [temp.mem]
4733
4734                  A destructor shall not be a member template.  */
4735               error ("destructor %qD declared as member template", decl);
4736               return error_mark_node;
4737             }
4738           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4739               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
4740                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4741                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4742                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4743                       == void_list_node)))
4744             {
4745               /* [basic.stc.dynamic.allocation]
4746
4747                  An allocation function can be a function
4748                  template. ... Template allocation functions shall
4749                  have two or more parameters.  */
4750               error ("invalid template declaration of %qD", decl);
4751               return error_mark_node;
4752             }
4753         }
4754       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4755                && CLASS_TYPE_P (TREE_TYPE (decl)))
4756         /* OK */;
4757       else
4758         {
4759           error ("template declaration of %q#D", decl);
4760           return error_mark_node;
4761         }
4762     }
4763
4764   /* Check to see that the rules regarding the use of default
4765      arguments are not being violated.  */
4766   check_default_tmpl_args (decl, current_template_parms,
4767                            primary, is_partial, /*is_friend_decl=*/0);
4768
4769   /* Ensure that there are no parameter packs in the type of this
4770      declaration that have not been expanded.  */
4771   if (TREE_CODE (decl) == FUNCTION_DECL)
4772     {
4773       /* Check each of the arguments individually to see if there are
4774          any bare parameter packs.  */
4775       tree type = TREE_TYPE (decl);
4776       tree arg = DECL_ARGUMENTS (decl);
4777       tree argtype = TYPE_ARG_TYPES (type);
4778
4779       while (arg && argtype)
4780         {
4781           if (!FUNCTION_PARAMETER_PACK_P (arg)
4782               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4783             {
4784             /* This is a PARM_DECL that contains unexpanded parameter
4785                packs. We have already complained about this in the
4786                check_for_bare_parameter_packs call, so just replace
4787                these types with ERROR_MARK_NODE.  */
4788               TREE_TYPE (arg) = error_mark_node;
4789               TREE_VALUE (argtype) = error_mark_node;
4790             }
4791
4792           arg = DECL_CHAIN (arg);
4793           argtype = TREE_CHAIN (argtype);
4794         }
4795
4796       /* Check for bare parameter packs in the return type and the
4797          exception specifiers.  */
4798       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4799         /* Errors were already issued, set return type to int
4800            as the frontend doesn't expect error_mark_node as
4801            the return type.  */
4802         TREE_TYPE (type) = integer_type_node;
4803       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4804         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4805     }
4806   else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
4807     {
4808       TREE_TYPE (decl) = error_mark_node;
4809       return error_mark_node;
4810     }
4811
4812   if (is_partial)
4813     return process_partial_specialization (decl);
4814
4815   args = current_template_args ();
4816
4817   if (!ctx
4818       || TREE_CODE (ctx) == FUNCTION_DECL
4819       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4820       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4821     {
4822       if (DECL_LANG_SPECIFIC (decl)
4823           && DECL_TEMPLATE_INFO (decl)
4824           && DECL_TI_TEMPLATE (decl))
4825         tmpl = DECL_TI_TEMPLATE (decl);
4826       /* If DECL is a TYPE_DECL for a class-template, then there won't
4827          be DECL_LANG_SPECIFIC.  The information equivalent to
4828          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4829       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4830                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4831                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4832         {
4833           /* Since a template declaration already existed for this
4834              class-type, we must be redeclaring it here.  Make sure
4835              that the redeclaration is valid.  */
4836           redeclare_class_template (TREE_TYPE (decl),
4837                                     current_template_parms);
4838           /* We don't need to create a new TEMPLATE_DECL; just use the
4839              one we already had.  */
4840           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4841         }
4842       else
4843         {
4844           tmpl = build_template_decl (decl, current_template_parms,
4845                                       member_template_p);
4846           new_template_p = 1;
4847
4848           if (DECL_LANG_SPECIFIC (decl)
4849               && DECL_TEMPLATE_SPECIALIZATION (decl))
4850             {
4851               /* A specialization of a member template of a template
4852                  class.  */
4853               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4854               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4855               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4856             }
4857         }
4858     }
4859   else
4860     {
4861       tree a, t, current, parms;
4862       int i;
4863       tree tinfo = get_template_info (decl);
4864
4865       if (!tinfo)
4866         {
4867           error ("template definition of non-template %q#D", decl);
4868           return error_mark_node;
4869         }
4870
4871       tmpl = TI_TEMPLATE (tinfo);
4872
4873       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4874           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4875           && DECL_TEMPLATE_SPECIALIZATION (decl)
4876           && DECL_MEMBER_TEMPLATE_P (tmpl))
4877         {
4878           tree new_tmpl;
4879
4880           /* The declaration is a specialization of a member
4881              template, declared outside the class.  Therefore, the
4882              innermost template arguments will be NULL, so we
4883              replace them with the arguments determined by the
4884              earlier call to check_explicit_specialization.  */
4885           args = DECL_TI_ARGS (decl);
4886
4887           new_tmpl
4888             = build_template_decl (decl, current_template_parms,
4889                                    member_template_p);
4890           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4891           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4892           DECL_TI_TEMPLATE (decl) = new_tmpl;
4893           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4894           DECL_TEMPLATE_INFO (new_tmpl)
4895             = build_template_info (tmpl, args);
4896
4897           register_specialization (new_tmpl,
4898                                    most_general_template (tmpl),
4899                                    args,
4900                                    is_friend, 0);
4901           return decl;
4902         }
4903
4904       /* Make sure the template headers we got make sense.  */
4905
4906       parms = DECL_TEMPLATE_PARMS (tmpl);
4907       i = TMPL_PARMS_DEPTH (parms);
4908       if (TMPL_ARGS_DEPTH (args) != i)
4909         {
4910           error ("expected %d levels of template parms for %q#D, got %d",
4911                  i, decl, TMPL_ARGS_DEPTH (args));
4912         }
4913       else
4914         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
4915           {
4916             a = TMPL_ARGS_LEVEL (args, i);
4917             t = INNERMOST_TEMPLATE_PARMS (parms);
4918
4919             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
4920               {
4921                 if (current == decl)
4922                   error ("got %d template parameters for %q#D",
4923                          TREE_VEC_LENGTH (a), decl);
4924                 else
4925                   error ("got %d template parameters for %q#T",
4926                          TREE_VEC_LENGTH (a), current);
4927                 error ("  but %d required", TREE_VEC_LENGTH (t));
4928                 return error_mark_node;
4929               }
4930
4931             if (current == decl)
4932               current = ctx;
4933             else if (current == NULL_TREE)
4934               /* Can happen in erroneous input.  */
4935               break;
4936             else
4937               current = (TYPE_P (current)
4938                          ? TYPE_CONTEXT (current)
4939                          : DECL_CONTEXT (current));
4940           }
4941
4942       /* Check that the parms are used in the appropriate qualifying scopes
4943          in the declarator.  */
4944       if (!comp_template_args
4945           (TI_ARGS (tinfo),
4946            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4947         {
4948           error ("\
4949 template arguments to %qD do not match original template %qD",
4950                  decl, DECL_TEMPLATE_RESULT (tmpl));
4951           if (!uses_template_parms (TI_ARGS (tinfo)))
4952             inform (input_location, "use template<> for an explicit specialization");
4953           /* Avoid crash in import_export_decl.  */
4954           DECL_INTERFACE_KNOWN (decl) = 1;
4955           return error_mark_node;
4956         }
4957     }
4958
4959   DECL_TEMPLATE_RESULT (tmpl) = decl;
4960   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4961
4962   /* Push template declarations for global functions and types.  Note
4963      that we do not try to push a global template friend declared in a
4964      template class; such a thing may well depend on the template
4965      parameters of the class.  */
4966   if (new_template_p && !ctx
4967       && !(is_friend && template_class_depth (current_class_type) > 0))
4968     {
4969       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4970       if (tmpl == error_mark_node)
4971         return error_mark_node;
4972
4973       /* Hide template friend classes that haven't been declared yet.  */
4974       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4975         {
4976           DECL_ANTICIPATED (tmpl) = 1;
4977           DECL_FRIEND_P (tmpl) = 1;
4978         }
4979     }
4980
4981   if (primary)
4982     {
4983       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4984       int i;
4985
4986       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4987       if (DECL_CONV_FN_P (tmpl))
4988         {
4989           int depth = TMPL_PARMS_DEPTH (parms);
4990
4991           /* It is a conversion operator. See if the type converted to
4992              depends on innermost template operands.  */
4993
4994           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4995                                          depth))
4996             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4997         }
4998
4999       /* Give template template parms a DECL_CONTEXT of the template
5000          for which they are a parameter.  */
5001       parms = INNERMOST_TEMPLATE_PARMS (parms);
5002       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5003         {
5004           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5005           if (TREE_CODE (parm) == TEMPLATE_DECL)
5006             DECL_CONTEXT (parm) = tmpl;
5007         }
5008     }
5009
5010   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5011      back to its most general template.  If TMPL is a specialization,
5012      ARGS may only have the innermost set of arguments.  Add the missing
5013      argument levels if necessary.  */
5014   if (DECL_TEMPLATE_INFO (tmpl))
5015     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5016
5017   info = build_template_info (tmpl, args);
5018
5019   if (DECL_IMPLICIT_TYPEDEF_P (decl))
5020     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5021   else if (DECL_LANG_SPECIFIC (decl))
5022     DECL_TEMPLATE_INFO (decl) = info;
5023
5024   return DECL_TEMPLATE_RESULT (tmpl);
5025 }
5026
5027 tree
5028 push_template_decl (tree decl)
5029 {
5030   return push_template_decl_real (decl, false);
5031 }
5032
5033 /* Called when a class template TYPE is redeclared with the indicated
5034    template PARMS, e.g.:
5035
5036      template <class T> struct S;
5037      template <class T> struct S {};  */
5038
5039 bool
5040 redeclare_class_template (tree type, tree parms)
5041 {
5042   tree tmpl;
5043   tree tmpl_parms;
5044   int i;
5045
5046   if (!TYPE_TEMPLATE_INFO (type))
5047     {
5048       error ("%qT is not a template type", type);
5049       return false;
5050     }
5051
5052   tmpl = TYPE_TI_TEMPLATE (type);
5053   if (!PRIMARY_TEMPLATE_P (tmpl))
5054     /* The type is nested in some template class.  Nothing to worry
5055        about here; there are no new template parameters for the nested
5056        type.  */
5057     return true;
5058
5059   if (!parms)
5060     {
5061       error ("template specifiers not specified in declaration of %qD",
5062              tmpl);
5063       return false;
5064     }
5065
5066   parms = INNERMOST_TEMPLATE_PARMS (parms);
5067   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5068
5069   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5070     {
5071       error_n (input_location, TREE_VEC_LENGTH (parms),
5072                "redeclared with %d template parameter",
5073                "redeclared with %d template parameters",
5074                TREE_VEC_LENGTH (parms));
5075       inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5076                 "previous declaration %q+D used %d template parameter",
5077                 "previous declaration %q+D used %d template parameters",
5078                 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5079       return false;
5080     }
5081
5082   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5083     {
5084       tree tmpl_parm;
5085       tree parm;
5086       tree tmpl_default;
5087       tree parm_default;
5088
5089       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5090           || TREE_VEC_ELT (parms, i) == error_mark_node)
5091         continue;
5092
5093       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5094       if (tmpl_parm == error_mark_node)
5095         return false;
5096
5097       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5098       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5099       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5100
5101       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5102          TEMPLATE_DECL.  */
5103       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5104           || (TREE_CODE (tmpl_parm) != TYPE_DECL
5105               && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5106           || (TREE_CODE (tmpl_parm) != PARM_DECL
5107               && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5108                   != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5109           || (TREE_CODE (tmpl_parm) == PARM_DECL
5110               && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5111                   != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5112         {
5113           error ("template parameter %q+#D", tmpl_parm);
5114           error ("redeclared here as %q#D", parm);
5115           return false;
5116         }
5117
5118       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5119         {
5120           /* We have in [temp.param]:
5121
5122              A template-parameter may not be given default arguments
5123              by two different declarations in the same scope.  */
5124           error_at (input_location, "redefinition of default argument for %q#D", parm);
5125           inform (DECL_SOURCE_LOCATION (tmpl_parm),
5126                   "original definition appeared here");
5127           return false;
5128         }
5129
5130       if (parm_default != NULL_TREE)
5131         /* Update the previous template parameters (which are the ones
5132            that will really count) with the new default value.  */
5133         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5134       else if (tmpl_default != NULL_TREE)
5135         /* Update the new parameters, too; they'll be used as the
5136            parameters for any members.  */
5137         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5138     }
5139
5140     return true;
5141 }
5142
5143 /* Simplify EXPR if it is a non-dependent expression.  Returns the
5144    (possibly simplified) expression.  */
5145
5146 static tree
5147 fold_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5148 {
5149   if (expr == NULL_TREE)
5150     return NULL_TREE;
5151
5152   /* If we're in a template, but EXPR isn't value dependent, simplify
5153      it.  We're supposed to treat:
5154
5155        template <typename T> void f(T[1 + 1]);
5156        template <typename T> void f(T[2]);
5157
5158      as two declarations of the same function, for example.  */
5159   if (processing_template_decl
5160       && !type_dependent_expression_p (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               return error_mark_node;
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         return error_mark_node;
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 ();
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 ();
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_copy (TREE_TYPE (t), args, complain,
13242                                           in_decl));
13243
13244     case OFFSETOF_EXPR:
13245       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
13246
13247     case TRAIT_EXPR:
13248       {
13249         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
13250                                   complain, in_decl);
13251
13252         tree type2 = TRAIT_EXPR_TYPE2 (t);
13253         if (type2)
13254           type2 = tsubst_copy (type2, args, complain, in_decl);
13255         
13256         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
13257       }
13258
13259     case STMT_EXPR:
13260       {
13261         tree old_stmt_expr = cur_stmt_expr;
13262         tree stmt_expr = begin_stmt_expr ();
13263
13264         cur_stmt_expr = stmt_expr;
13265         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
13266                      integral_constant_expression_p);
13267         stmt_expr = finish_stmt_expr (stmt_expr, false);
13268         cur_stmt_expr = old_stmt_expr;
13269
13270         /* If the resulting list of expression statement is empty,
13271            fold it further into void_zero_node.  */
13272         if (empty_expr_stmt_p (stmt_expr))
13273           stmt_expr = void_zero_node;
13274
13275         return stmt_expr;
13276       }
13277
13278     case CONST_DECL:
13279       t = tsubst_copy (t, args, complain, in_decl);
13280       /* As in finish_id_expression, we resolve enumeration constants
13281          to their underlying values.  */
13282       if (TREE_CODE (t) == CONST_DECL)
13283         {
13284           used_types_insert (TREE_TYPE (t));
13285           return DECL_INITIAL (t);
13286         }
13287       return t;
13288
13289     case LAMBDA_EXPR:
13290       {
13291         tree r = build_lambda_expr ();
13292
13293         tree type = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
13294         TREE_TYPE (r) = type;
13295         CLASSTYPE_LAMBDA_EXPR (type) = r;
13296
13297         LAMBDA_EXPR_LOCATION (r)
13298           = LAMBDA_EXPR_LOCATION (t);
13299         LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
13300           = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
13301         LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
13302         LAMBDA_EXPR_DISCRIMINATOR (r)
13303           = (LAMBDA_EXPR_DISCRIMINATOR (t));
13304         LAMBDA_EXPR_CAPTURE_LIST (r)
13305           = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
13306         LAMBDA_EXPR_THIS_CAPTURE (r)
13307           = RECUR (LAMBDA_EXPR_THIS_CAPTURE (t));
13308         LAMBDA_EXPR_EXTRA_SCOPE (r)
13309           = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
13310
13311         /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
13312         determine_visibility (TYPE_NAME (type));
13313         /* Now that we know visibility, instantiate the type so we have a
13314            declaration of the op() for later calls to lambda_function.  */
13315         complete_type (type);
13316
13317         type = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
13318         if (type)
13319           apply_lambda_return_type (r, type);
13320
13321         return build_lambda_object (r);
13322       }
13323
13324     case TARGET_EXPR:
13325       /* We can get here for a constant initializer of non-dependent type.
13326          FIXME stop folding in cp_parser_initializer_clause.  */
13327       gcc_assert (TREE_CONSTANT (t));
13328       return get_target_expr (RECUR (TARGET_EXPR_INITIAL (t)));
13329
13330     default:
13331       /* Handle Objective-C++ constructs, if appropriate.  */
13332       {
13333         tree subst
13334           = objcp_tsubst_copy_and_build (t, args, complain,
13335                                          in_decl, /*function_p=*/false);
13336         if (subst)
13337           return subst;
13338       }
13339       return tsubst_copy (t, args, complain, in_decl);
13340     }
13341
13342 #undef RECUR
13343 }
13344
13345 /* Verify that the instantiated ARGS are valid. For type arguments,
13346    make sure that the type's linkage is ok. For non-type arguments,
13347    make sure they are constants if they are integral or enumerations.
13348    Emit an error under control of COMPLAIN, and return TRUE on error.  */
13349
13350 static bool
13351 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
13352 {
13353   if (ARGUMENT_PACK_P (t))
13354     {
13355       tree vec = ARGUMENT_PACK_ARGS (t);
13356       int len = TREE_VEC_LENGTH (vec);
13357       bool result = false;
13358       int i;
13359
13360       for (i = 0; i < len; ++i)
13361         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
13362           result = true;
13363       return result;
13364     }
13365   else if (TYPE_P (t))
13366     {
13367       /* [basic.link]: A name with no linkage (notably, the name
13368          of a class or enumeration declared in a local scope)
13369          shall not be used to declare an entity with linkage.
13370          This implies that names with no linkage cannot be used as
13371          template arguments
13372
13373          DR 757 relaxes this restriction for C++0x.  */
13374       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
13375                  : no_linkage_check (t, /*relaxed_p=*/false));
13376
13377       if (nt)
13378         {
13379           /* DR 488 makes use of a type with no linkage cause
13380              type deduction to fail.  */
13381           if (complain & tf_error)
13382             {
13383               if (TYPE_ANONYMOUS_P (nt))
13384                 error ("%qT is/uses anonymous type", t);
13385               else
13386                 error ("template argument for %qD uses local type %qT",
13387                        tmpl, t);
13388             }
13389           return true;
13390         }
13391       /* In order to avoid all sorts of complications, we do not
13392          allow variably-modified types as template arguments.  */
13393       else if (variably_modified_type_p (t, NULL_TREE))
13394         {
13395           if (complain & tf_error)
13396             error ("%qT is a variably modified type", t);
13397           return true;
13398         }
13399     }
13400   /* A non-type argument of integral or enumerated type must be a
13401      constant.  */
13402   else if (TREE_TYPE (t)
13403            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
13404            && !TREE_CONSTANT (t))
13405     {
13406       if (complain & tf_error)
13407         error ("integral expression %qE is not constant", t);
13408       return true;
13409     }
13410   return false;
13411 }
13412
13413 static bool
13414 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
13415 {
13416   int ix, len = DECL_NTPARMS (tmpl);
13417   bool result = false;
13418
13419   for (ix = 0; ix != len; ix++)
13420     {
13421       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
13422         result = true;
13423     }
13424   if (result && (complain & tf_error))
13425     error ("  trying to instantiate %qD", tmpl);
13426   return result;
13427 }
13428
13429 /* Instantiate the indicated variable or function template TMPL with
13430    the template arguments in TARG_PTR.  */
13431
13432 tree
13433 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
13434 {
13435   tree targ_ptr = orig_args;
13436   tree fndecl;
13437   tree gen_tmpl;
13438   tree spec;
13439   HOST_WIDE_INT saved_processing_template_decl;
13440
13441   if (tmpl == error_mark_node)
13442     return error_mark_node;
13443
13444   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
13445
13446   /* If this function is a clone, handle it specially.  */
13447   if (DECL_CLONED_FUNCTION_P (tmpl))
13448     {
13449       tree spec;
13450       tree clone;
13451
13452       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
13453          DECL_CLONED_FUNCTION.  */
13454       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
13455                                    targ_ptr, complain);
13456       if (spec == error_mark_node)
13457         return error_mark_node;
13458
13459       /* Look for the clone.  */
13460       FOR_EACH_CLONE (clone, spec)
13461         if (DECL_NAME (clone) == DECL_NAME (tmpl))
13462           return clone;
13463       /* We should always have found the clone by now.  */
13464       gcc_unreachable ();
13465       return NULL_TREE;
13466     }
13467
13468   /* Check to see if we already have this specialization.  */
13469   gen_tmpl = most_general_template (tmpl);
13470   if (tmpl != gen_tmpl)
13471     /* The TMPL is a partial instantiation.  To get a full set of
13472        arguments we must add the arguments used to perform the
13473        partial instantiation.  */
13474     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
13475                                             targ_ptr);
13476
13477   /* It would be nice to avoid hashing here and then again in tsubst_decl,
13478      but it doesn't seem to be on the hot path.  */
13479   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
13480
13481   gcc_assert (tmpl == gen_tmpl
13482               || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
13483                   == spec)
13484               || fndecl == NULL_TREE);
13485
13486   if (spec != NULL_TREE)
13487     return spec;
13488
13489   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
13490                                complain))
13491     return error_mark_node;
13492
13493   /* We are building a FUNCTION_DECL, during which the access of its
13494      parameters and return types have to be checked.  However this
13495      FUNCTION_DECL which is the desired context for access checking
13496      is not built yet.  We solve this chicken-and-egg problem by
13497      deferring all checks until we have the FUNCTION_DECL.  */
13498   push_deferring_access_checks (dk_deferred);
13499
13500   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
13501      (because, for example, we have encountered a non-dependent
13502      function call in the body of a template function and must now
13503      determine which of several overloaded functions will be called),
13504      within the instantiation itself we are not processing a
13505      template.  */  
13506   saved_processing_template_decl = processing_template_decl;
13507   processing_template_decl = 0;
13508   /* Substitute template parameters to obtain the specialization.  */
13509   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
13510                    targ_ptr, complain, gen_tmpl);
13511   processing_template_decl = saved_processing_template_decl;
13512   if (fndecl == error_mark_node)
13513     return error_mark_node;
13514
13515   /* Now we know the specialization, compute access previously
13516      deferred.  */
13517   push_access_scope (fndecl);
13518
13519   /* Some typedefs referenced from within the template code need to be access
13520      checked at template instantiation time, i.e now. These types were
13521      added to the template at parsing time. Let's get those and perfom
13522      the acces checks then.  */
13523   perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
13524   perform_deferred_access_checks ();
13525   pop_access_scope (fndecl);
13526   pop_deferring_access_checks ();
13527
13528   /* The DECL_TI_TEMPLATE should always be the immediate parent
13529      template, not the most general template.  */
13530   DECL_TI_TEMPLATE (fndecl) = tmpl;
13531
13532   /* If we've just instantiated the main entry point for a function,
13533      instantiate all the alternate entry points as well.  We do this
13534      by cloning the instantiation of the main entry point, not by
13535      instantiating the template clones.  */
13536   if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
13537     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
13538
13539   return fndecl;
13540 }
13541
13542 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
13543    NARGS elements of the arguments that are being used when calling
13544    it.  TARGS is a vector into which the deduced template arguments
13545    are placed.
13546
13547    Return zero for success, 2 for an incomplete match that doesn't resolve
13548    all the types, and 1 for complete failure.  An error message will be
13549    printed only for an incomplete match.
13550
13551    If FN is a conversion operator, or we are trying to produce a specific
13552    specialization, RETURN_TYPE is the return type desired.
13553
13554    The EXPLICIT_TARGS are explicit template arguments provided via a
13555    template-id.
13556
13557    The parameter STRICT is one of:
13558
13559    DEDUCE_CALL:
13560      We are deducing arguments for a function call, as in
13561      [temp.deduct.call].
13562
13563    DEDUCE_CONV:
13564      We are deducing arguments for a conversion function, as in
13565      [temp.deduct.conv].
13566
13567    DEDUCE_EXACT:
13568      We are deducing arguments when doing an explicit instantiation
13569      as in [temp.explicit], when determining an explicit specialization
13570      as in [temp.expl.spec], or when taking the address of a function
13571      template, as in [temp.deduct.funcaddr].  */
13572
13573 int
13574 fn_type_unification (tree fn,
13575                      tree explicit_targs,
13576                      tree targs,
13577                      const tree *args,
13578                      unsigned int nargs,
13579                      tree return_type,
13580                      unification_kind_t strict,
13581                      int flags)
13582 {
13583   tree parms;
13584   tree fntype;
13585   int result;
13586   bool incomplete_argument_packs_p = false;
13587
13588   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
13589
13590   fntype = TREE_TYPE (fn);
13591   if (explicit_targs)
13592     {
13593       /* [temp.deduct]
13594
13595          The specified template arguments must match the template
13596          parameters in kind (i.e., type, nontype, template), and there
13597          must not be more arguments than there are parameters;
13598          otherwise type deduction fails.
13599
13600          Nontype arguments must match the types of the corresponding
13601          nontype template parameters, or must be convertible to the
13602          types of the corresponding nontype parameters as specified in
13603          _temp.arg.nontype_, otherwise type deduction fails.
13604
13605          All references in the function type of the function template
13606          to the corresponding template parameters are replaced by the
13607          specified template argument values.  If a substitution in a
13608          template parameter or in the function type of the function
13609          template results in an invalid type, type deduction fails.  */
13610       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
13611       int i, len = TREE_VEC_LENGTH (tparms);
13612       tree converted_args;
13613       bool incomplete = false;
13614
13615       if (explicit_targs == error_mark_node)
13616         return 1;
13617
13618       converted_args
13619         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
13620                                   /*require_all_args=*/false,
13621                                   /*use_default_args=*/false));
13622       if (converted_args == error_mark_node)
13623         return 1;
13624
13625       /* Substitute the explicit args into the function type.  This is
13626          necessary so that, for instance, explicitly declared function
13627          arguments can match null pointed constants.  If we were given
13628          an incomplete set of explicit args, we must not do semantic
13629          processing during substitution as we could create partial
13630          instantiations.  */
13631       for (i = 0; i < len; i++)
13632         {
13633           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
13634           bool parameter_pack = false;
13635
13636           /* Dig out the actual parm.  */
13637           if (TREE_CODE (parm) == TYPE_DECL
13638               || TREE_CODE (parm) == TEMPLATE_DECL)
13639             {
13640               parm = TREE_TYPE (parm);
13641               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
13642             }
13643           else if (TREE_CODE (parm) == PARM_DECL)
13644             {
13645               parm = DECL_INITIAL (parm);
13646               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
13647             }
13648
13649           if (parameter_pack)
13650             {
13651               int level, idx;
13652               tree targ;
13653               template_parm_level_and_index (parm, &level, &idx);
13654
13655               /* Mark the argument pack as "incomplete". We could
13656                  still deduce more arguments during unification.  */
13657               targ = TMPL_ARG (converted_args, level, idx);
13658               if (targ)
13659                 {
13660                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
13661                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
13662                     = ARGUMENT_PACK_ARGS (targ);
13663                 }
13664
13665               /* We have some incomplete argument packs.  */
13666               incomplete_argument_packs_p = true;
13667             }
13668         }
13669
13670       if (incomplete_argument_packs_p)
13671         /* Any substitution is guaranteed to be incomplete if there
13672            are incomplete argument packs, because we can still deduce
13673            more arguments.  */
13674         incomplete = 1;
13675       else
13676         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
13677
13678       processing_template_decl += incomplete;
13679       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
13680       processing_template_decl -= incomplete;
13681
13682       if (fntype == error_mark_node)
13683         return 1;
13684
13685       /* Place the explicitly specified arguments in TARGS.  */
13686       for (i = NUM_TMPL_ARGS (converted_args); i--;)
13687         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
13688     }
13689
13690   /* Never do unification on the 'this' parameter.  */
13691   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
13692
13693   if (return_type)
13694     {
13695       tree *new_args;
13696
13697       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
13698       new_args = XALLOCAVEC (tree, nargs + 1);
13699       new_args[0] = return_type;
13700       memcpy (new_args + 1, args, nargs * sizeof (tree));
13701       args = new_args;
13702       ++nargs;
13703     }
13704
13705   /* We allow incomplete unification without an error message here
13706      because the standard doesn't seem to explicitly prohibit it.  Our
13707      callers must be ready to deal with unification failures in any
13708      event.  */
13709   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
13710                                   targs, parms, args, nargs, /*subr=*/0,
13711                                   strict, flags);
13712
13713   if (result == 0 && incomplete_argument_packs_p)
13714     {
13715       int i, len = NUM_TMPL_ARGS (targs);
13716
13717       /* Clear the "incomplete" flags on all argument packs.  */
13718       for (i = 0; i < len; i++)
13719         {
13720           tree arg = TREE_VEC_ELT (targs, i);
13721           if (ARGUMENT_PACK_P (arg))
13722             {
13723               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
13724               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
13725             }
13726         }
13727     }
13728
13729   /* Now that we have bindings for all of the template arguments,
13730      ensure that the arguments deduced for the template template
13731      parameters have compatible template parameter lists.  We cannot
13732      check this property before we have deduced all template
13733      arguments, because the template parameter types of a template
13734      template parameter might depend on prior template parameters
13735      deduced after the template template parameter.  The following
13736      ill-formed example illustrates this issue:
13737
13738        template<typename T, template<T> class C> void f(C<5>, T);
13739
13740        template<int N> struct X {};
13741
13742        void g() {
13743          f(X<5>(), 5l); // error: template argument deduction fails
13744        }
13745
13746      The template parameter list of 'C' depends on the template type
13747      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
13748      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
13749      time that we deduce 'C'.  */
13750   if (result == 0
13751       && !template_template_parm_bindings_ok_p 
13752            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
13753     return 1;
13754
13755   if (result == 0)
13756     /* All is well so far.  Now, check:
13757
13758        [temp.deduct]
13759
13760        When all template arguments have been deduced, all uses of
13761        template parameters in nondeduced contexts are replaced with
13762        the corresponding deduced argument values.  If the
13763        substitution results in an invalid type, as described above,
13764        type deduction fails.  */
13765     {
13766       tree substed = tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE);
13767       if (substed == error_mark_node)
13768         return 1;
13769
13770       /* If we're looking for an exact match, check that what we got
13771          is indeed an exact match.  It might not be if some template
13772          parameters are used in non-deduced contexts.  */
13773       if (strict == DEDUCE_EXACT)
13774         {
13775           unsigned int i;
13776
13777           tree sarg
13778             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
13779           if (return_type)
13780             sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
13781           for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
13782             if (!same_type_p (args[i], TREE_VALUE (sarg)))
13783               return 1;
13784         }
13785     }
13786
13787   return result;
13788 }
13789
13790 /* Adjust types before performing type deduction, as described in
13791    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
13792    sections are symmetric.  PARM is the type of a function parameter
13793    or the return type of the conversion function.  ARG is the type of
13794    the argument passed to the call, or the type of the value
13795    initialized with the result of the conversion function.
13796    ARG_EXPR is the original argument expression, which may be null.  */
13797
13798 static int
13799 maybe_adjust_types_for_deduction (unification_kind_t strict,
13800                                   tree* parm,
13801                                   tree* arg,
13802                                   tree arg_expr)
13803 {
13804   int result = 0;
13805
13806   switch (strict)
13807     {
13808     case DEDUCE_CALL:
13809       break;
13810
13811     case DEDUCE_CONV:
13812       {
13813         /* Swap PARM and ARG throughout the remainder of this
13814            function; the handling is precisely symmetric since PARM
13815            will initialize ARG rather than vice versa.  */
13816         tree* temp = parm;
13817         parm = arg;
13818         arg = temp;
13819         break;
13820       }
13821
13822     case DEDUCE_EXACT:
13823       /* Core issue #873: Do the DR606 thing (see below) for these cases,
13824          too, but here handle it by stripping the reference from PARM
13825          rather than by adding it to ARG.  */
13826       if (TREE_CODE (*parm) == REFERENCE_TYPE
13827           && TYPE_REF_IS_RVALUE (*parm)
13828           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
13829           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
13830           && TREE_CODE (*arg) == REFERENCE_TYPE
13831           && !TYPE_REF_IS_RVALUE (*arg))
13832         *parm = TREE_TYPE (*parm);
13833       /* Nothing else to do in this case.  */
13834       return 0;
13835
13836     default:
13837       gcc_unreachable ();
13838     }
13839
13840   if (TREE_CODE (*parm) != REFERENCE_TYPE)
13841     {
13842       /* [temp.deduct.call]
13843
13844          If P is not a reference type:
13845
13846          --If A is an array type, the pointer type produced by the
13847          array-to-pointer standard conversion (_conv.array_) is
13848          used in place of A for type deduction; otherwise,
13849
13850          --If A is a function type, the pointer type produced by
13851          the function-to-pointer standard conversion
13852          (_conv.func_) is used in place of A for type deduction;
13853          otherwise,
13854
13855          --If A is a cv-qualified type, the top level
13856          cv-qualifiers of A's type are ignored for type
13857          deduction.  */
13858       if (TREE_CODE (*arg) == ARRAY_TYPE)
13859         *arg = build_pointer_type (TREE_TYPE (*arg));
13860       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
13861         *arg = build_pointer_type (*arg);
13862       else
13863         *arg = TYPE_MAIN_VARIANT (*arg);
13864     }
13865
13866   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
13867      of the form T&&, where T is a template parameter, and the argument
13868      is an lvalue, T is deduced as A& */
13869   if (TREE_CODE (*parm) == REFERENCE_TYPE
13870       && TYPE_REF_IS_RVALUE (*parm)
13871       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
13872       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
13873       && arg_expr && real_lvalue_p (arg_expr))
13874     *arg = build_reference_type (*arg);
13875
13876   /* [temp.deduct.call]
13877
13878      If P is a cv-qualified type, the top level cv-qualifiers
13879      of P's type are ignored for type deduction.  If P is a
13880      reference type, the type referred to by P is used for
13881      type deduction.  */
13882   *parm = TYPE_MAIN_VARIANT (*parm);
13883   if (TREE_CODE (*parm) == REFERENCE_TYPE)
13884     {
13885       *parm = TREE_TYPE (*parm);
13886       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
13887     }
13888
13889   /* DR 322. For conversion deduction, remove a reference type on parm
13890      too (which has been swapped into ARG).  */
13891   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
13892     *arg = TREE_TYPE (*arg);
13893
13894   return result;
13895 }
13896
13897 /* Most parms like fn_type_unification.
13898
13899    If SUBR is 1, we're being called recursively (to unify the
13900    arguments of a function or method parameter of a function
13901    template). */
13902
13903 static int
13904 type_unification_real (tree tparms,
13905                        tree targs,
13906                        tree xparms,
13907                        const tree *xargs,
13908                        unsigned int xnargs,
13909                        int subr,
13910                        unification_kind_t strict,
13911                        int flags)
13912 {
13913   tree parm, arg, arg_expr;
13914   int i;
13915   int ntparms = TREE_VEC_LENGTH (tparms);
13916   int sub_strict;
13917   int saw_undeduced = 0;
13918   tree parms;
13919   const tree *args;
13920   unsigned int nargs;
13921   unsigned int ia;
13922
13923   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
13924   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
13925   gcc_assert (ntparms > 0);
13926
13927   /* Reset the number of non-defaulted template arguments contained
13928      in in TARGS.  */
13929   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
13930
13931   switch (strict)
13932     {
13933     case DEDUCE_CALL:
13934       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
13935                     | UNIFY_ALLOW_DERIVED);
13936       break;
13937
13938     case DEDUCE_CONV:
13939       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
13940       break;
13941
13942     case DEDUCE_EXACT:
13943       sub_strict = UNIFY_ALLOW_NONE;
13944       break;
13945
13946     default:
13947       gcc_unreachable ();
13948     }
13949
13950  again:
13951   parms = xparms;
13952   args = xargs;
13953   nargs = xnargs;
13954
13955   ia = 0;
13956   while (parms && parms != void_list_node
13957          && ia < nargs)
13958     {
13959       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
13960         break;
13961
13962       parm = TREE_VALUE (parms);
13963       parms = TREE_CHAIN (parms);
13964       arg = args[ia];
13965       ++ia;
13966       arg_expr = NULL;
13967
13968       if (arg == error_mark_node)
13969         return 1;
13970       if (arg == unknown_type_node)
13971         /* We can't deduce anything from this, but we might get all the
13972            template args from other function args.  */
13973         continue;
13974
13975       /* Conversions will be performed on a function argument that
13976          corresponds with a function parameter that contains only
13977          non-deducible template parameters and explicitly specified
13978          template parameters.  */
13979       if (!uses_template_parms (parm))
13980         {
13981           tree type;
13982
13983           if (!TYPE_P (arg))
13984             type = TREE_TYPE (arg);
13985           else
13986             type = arg;
13987
13988           if (same_type_p (parm, type))
13989             continue;
13990           if (strict != DEDUCE_EXACT
13991               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
13992                                   flags))
13993             continue;
13994
13995           return 1;
13996         }
13997
13998       if (!TYPE_P (arg))
13999         {
14000           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
14001           if (type_unknown_p (arg))
14002             {
14003               /* [temp.deduct.type] 
14004
14005                  A template-argument can be deduced from a pointer to
14006                  function or pointer to member function argument if
14007                  the set of overloaded functions does not contain
14008                  function templates and at most one of a set of
14009                  overloaded functions provides a unique match.  */
14010               if (resolve_overloaded_unification
14011                   (tparms, targs, parm, arg, strict, sub_strict))
14012                 continue;
14013
14014               return 1;
14015             }
14016           arg_expr = arg;
14017           arg = unlowered_expr_type (arg);
14018           if (arg == error_mark_node)
14019             return 1;
14020         }
14021
14022       {
14023         int arg_strict = sub_strict;
14024
14025         if (!subr)
14026           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
14027                                                           arg_expr);
14028
14029         if (arg == init_list_type_node && arg_expr)
14030           arg = arg_expr;
14031         if (unify (tparms, targs, parm, arg, arg_strict))
14032           return 1;
14033       }
14034     }
14035
14036
14037   if (parms 
14038       && parms != void_list_node
14039       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
14040     {
14041       /* Unify the remaining arguments with the pack expansion type.  */
14042       tree argvec;
14043       tree parmvec = make_tree_vec (1);
14044
14045       /* Allocate a TREE_VEC and copy in all of the arguments */ 
14046       argvec = make_tree_vec (nargs - ia);
14047       for (i = 0; ia < nargs; ++ia, ++i)
14048         TREE_VEC_ELT (argvec, i) = args[ia];
14049
14050       /* Copy the parameter into parmvec.  */
14051       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
14052       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
14053                                 /*call_args_p=*/true, /*subr=*/subr))
14054         return 1;
14055
14056       /* Advance to the end of the list of parameters.  */
14057       parms = TREE_CHAIN (parms);
14058     }
14059
14060   /* Fail if we've reached the end of the parm list, and more args
14061      are present, and the parm list isn't variadic.  */
14062   if (ia < nargs && parms == void_list_node)
14063     return 1;
14064   /* Fail if parms are left and they don't have default values.  */
14065   if (parms && parms != void_list_node
14066       && TREE_PURPOSE (parms) == NULL_TREE)
14067     return 1;
14068
14069   if (!subr)
14070     for (i = 0; i < ntparms; i++)
14071       if (!TREE_VEC_ELT (targs, i))
14072         {
14073           tree tparm;
14074
14075           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
14076             continue;
14077
14078           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14079
14080           /* If this is an undeduced nontype parameter that depends on
14081              a type parameter, try another pass; its type may have been
14082              deduced from a later argument than the one from which
14083              this parameter can be deduced.  */
14084           if (TREE_CODE (tparm) == PARM_DECL
14085               && uses_template_parms (TREE_TYPE (tparm))
14086               && !saw_undeduced++)
14087             goto again;
14088
14089           /* Core issue #226 (C++0x) [temp.deduct]:
14090
14091                If a template argument has not been deduced, its
14092                default template argument, if any, is used. 
14093
14094              When we are in C++98 mode, TREE_PURPOSE will either
14095              be NULL_TREE or ERROR_MARK_NODE, so we do not need
14096              to explicitly check cxx_dialect here.  */
14097           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
14098             {
14099               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14100               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
14101               arg = tsubst_template_arg (arg, targs, tf_none, NULL_TREE);
14102               arg = convert_template_argument (parm, arg, targs, tf_none,
14103                                                i, NULL_TREE);
14104               if (arg == error_mark_node)
14105                 return 1;
14106               else
14107                 {
14108                   TREE_VEC_ELT (targs, i) = arg;
14109                   /* The position of the first default template argument,
14110                      is also the number of non-defaulted arguments in TARGS.
14111                      Record that.  */
14112                   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
14113                     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
14114                   continue;
14115                 }
14116             }
14117
14118           /* If the type parameter is a parameter pack, then it will
14119              be deduced to an empty parameter pack.  */
14120           if (template_parameter_pack_p (tparm))
14121             {
14122               tree arg;
14123
14124               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
14125                 {
14126                   arg = make_node (NONTYPE_ARGUMENT_PACK);
14127                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
14128                   TREE_CONSTANT (arg) = 1;
14129                 }
14130               else
14131                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
14132
14133               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
14134
14135               TREE_VEC_ELT (targs, i) = arg;
14136               continue;
14137             }
14138
14139           return 2;
14140         }
14141 #ifdef ENABLE_CHECKING
14142   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
14143     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
14144 #endif
14145
14146   return 0;
14147 }
14148
14149 /* Subroutine of type_unification_real.  Args are like the variables
14150    at the call site.  ARG is an overloaded function (or template-id);
14151    we try deducing template args from each of the overloads, and if
14152    only one succeeds, we go with that.  Modifies TARGS and returns
14153    true on success.  */
14154
14155 static bool
14156 resolve_overloaded_unification (tree tparms,
14157                                 tree targs,
14158                                 tree parm,
14159                                 tree arg,
14160                                 unification_kind_t strict,
14161                                 int sub_strict)
14162 {
14163   tree tempargs = copy_node (targs);
14164   int good = 0;
14165   tree goodfn = NULL_TREE;
14166   bool addr_p;
14167
14168   if (TREE_CODE (arg) == ADDR_EXPR)
14169     {
14170       arg = TREE_OPERAND (arg, 0);
14171       addr_p = true;
14172     }
14173   else
14174     addr_p = false;
14175
14176   if (TREE_CODE (arg) == COMPONENT_REF)
14177     /* Handle `&x' where `x' is some static or non-static member
14178        function name.  */
14179     arg = TREE_OPERAND (arg, 1);
14180
14181   if (TREE_CODE (arg) == OFFSET_REF)
14182     arg = TREE_OPERAND (arg, 1);
14183
14184   /* Strip baselink information.  */
14185   if (BASELINK_P (arg))
14186     arg = BASELINK_FUNCTIONS (arg);
14187
14188   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
14189     {
14190       /* If we got some explicit template args, we need to plug them into
14191          the affected templates before we try to unify, in case the
14192          explicit args will completely resolve the templates in question.  */
14193
14194       tree expl_subargs = TREE_OPERAND (arg, 1);
14195       arg = TREE_OPERAND (arg, 0);
14196
14197       for (; arg; arg = OVL_NEXT (arg))
14198         {
14199           tree fn = OVL_CURRENT (arg);
14200           tree subargs, elem;
14201
14202           if (TREE_CODE (fn) != TEMPLATE_DECL)
14203             continue;
14204
14205           ++processing_template_decl;
14206           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
14207                                   expl_subargs, /*check_ret=*/false);
14208           if (subargs)
14209             {
14210               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
14211               if (try_one_overload (tparms, targs, tempargs, parm,
14212                                     elem, strict, sub_strict, addr_p)
14213                   && (!goodfn || !decls_match (goodfn, elem)))
14214                 {
14215                   goodfn = elem;
14216                   ++good;
14217                 }
14218             }
14219           --processing_template_decl;
14220         }
14221     }
14222   else if (TREE_CODE (arg) != OVERLOAD
14223            && TREE_CODE (arg) != FUNCTION_DECL)
14224     /* If ARG is, for example, "(0, &f)" then its type will be unknown
14225        -- but the deduction does not succeed because the expression is
14226        not just the function on its own.  */
14227     return false;
14228   else
14229     for (; arg; arg = OVL_NEXT (arg))
14230       if (try_one_overload (tparms, targs, tempargs, parm,
14231                             TREE_TYPE (OVL_CURRENT (arg)),
14232                             strict, sub_strict, addr_p)
14233           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
14234         {
14235           goodfn = OVL_CURRENT (arg);
14236           ++good;
14237         }
14238
14239   /* [temp.deduct.type] A template-argument can be deduced from a pointer
14240      to function or pointer to member function argument if the set of
14241      overloaded functions does not contain function templates and at most
14242      one of a set of overloaded functions provides a unique match.
14243
14244      So if we found multiple possibilities, we return success but don't
14245      deduce anything.  */
14246
14247   if (good == 1)
14248     {
14249       int i = TREE_VEC_LENGTH (targs);
14250       for (; i--; )
14251         if (TREE_VEC_ELT (tempargs, i))
14252           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
14253     }
14254   if (good)
14255     return true;
14256
14257   return false;
14258 }
14259
14260 /* Core DR 115: In contexts where deduction is done and fails, or in
14261    contexts where deduction is not done, if a template argument list is
14262    specified and it, along with any default template arguments, identifies
14263    a single function template specialization, then the template-id is an
14264    lvalue for the function template specialization.  */
14265
14266 tree
14267 resolve_nondeduced_context (tree orig_expr)
14268 {
14269   tree expr, offset, baselink;
14270   bool addr;
14271
14272   if (!type_unknown_p (orig_expr))
14273     return orig_expr;
14274
14275   expr = orig_expr;
14276   addr = false;
14277   offset = NULL_TREE;
14278   baselink = NULL_TREE;
14279
14280   if (TREE_CODE (expr) == ADDR_EXPR)
14281     {
14282       expr = TREE_OPERAND (expr, 0);
14283       addr = true;
14284     }
14285   if (TREE_CODE (expr) == OFFSET_REF)
14286     {
14287       offset = expr;
14288       expr = TREE_OPERAND (expr, 1);
14289     }
14290   if (TREE_CODE (expr) == BASELINK)
14291     {
14292       baselink = expr;
14293       expr = BASELINK_FUNCTIONS (expr);
14294     }
14295
14296   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
14297     {
14298       int good = 0;
14299       tree goodfn = NULL_TREE;
14300
14301       /* If we got some explicit template args, we need to plug them into
14302          the affected templates before we try to unify, in case the
14303          explicit args will completely resolve the templates in question.  */
14304
14305       tree expl_subargs = TREE_OPERAND (expr, 1);
14306       tree arg = TREE_OPERAND (expr, 0);
14307       tree badfn = NULL_TREE;
14308       tree badargs = NULL_TREE;
14309
14310       for (; arg; arg = OVL_NEXT (arg))
14311         {
14312           tree fn = OVL_CURRENT (arg);
14313           tree subargs, elem;
14314
14315           if (TREE_CODE (fn) != TEMPLATE_DECL)
14316             continue;
14317
14318           ++processing_template_decl;
14319           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
14320                                   expl_subargs, /*check_ret=*/false);
14321           if (subargs && !any_dependent_template_arguments_p (subargs))
14322             {
14323               elem = instantiate_template (fn, subargs, tf_none);
14324               if (elem == error_mark_node)
14325                 {
14326                   badfn = fn;
14327                   badargs = subargs;
14328                 }
14329               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
14330                 {
14331                   goodfn = elem;
14332                   ++good;
14333                 }
14334             }
14335           --processing_template_decl;
14336         }
14337       if (good == 1)
14338         {
14339           expr = goodfn;
14340           if (baselink)
14341             expr = build_baselink (BASELINK_BINFO (baselink),
14342                                    BASELINK_ACCESS_BINFO (baselink),
14343                                    expr, BASELINK_OPTYPE (baselink));
14344           if (offset)
14345             {
14346               tree base
14347                 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
14348               expr = build_offset_ref (base, expr, addr);
14349             }
14350           if (addr)
14351             expr = cp_build_addr_expr (expr, tf_warning_or_error);
14352           return expr;
14353         }
14354       else if (good == 0 && badargs)
14355         /* There were no good options and at least one bad one, so let the
14356            user know what the problem is.  */
14357         instantiate_template (badfn, badargs, tf_warning_or_error);
14358     }
14359   return orig_expr;
14360 }
14361
14362 /* Subroutine of resolve_overloaded_unification; does deduction for a single
14363    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
14364    different overloads deduce different arguments for a given parm.
14365    ADDR_P is true if the expression for which deduction is being
14366    performed was of the form "& fn" rather than simply "fn".
14367
14368    Returns 1 on success.  */
14369
14370 static int
14371 try_one_overload (tree tparms,
14372                   tree orig_targs,
14373                   tree targs,
14374                   tree parm,
14375                   tree arg,
14376                   unification_kind_t strict,
14377                   int sub_strict,
14378                   bool addr_p)
14379 {
14380   int nargs;
14381   tree tempargs;
14382   int i;
14383
14384   /* [temp.deduct.type] A template-argument can be deduced from a pointer
14385      to function or pointer to member function argument if the set of
14386      overloaded functions does not contain function templates and at most
14387      one of a set of overloaded functions provides a unique match.
14388
14389      So if this is a template, just return success.  */
14390
14391   if (uses_template_parms (arg))
14392     return 1;
14393
14394   if (TREE_CODE (arg) == METHOD_TYPE)
14395     arg = build_ptrmemfunc_type (build_pointer_type (arg));
14396   else if (addr_p)
14397     arg = build_pointer_type (arg);
14398
14399   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
14400
14401   /* We don't copy orig_targs for this because if we have already deduced
14402      some template args from previous args, unify would complain when we
14403      try to deduce a template parameter for the same argument, even though
14404      there isn't really a conflict.  */
14405   nargs = TREE_VEC_LENGTH (targs);
14406   tempargs = make_tree_vec (nargs);
14407
14408   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
14409     return 0;
14410
14411   /* First make sure we didn't deduce anything that conflicts with
14412      explicitly specified args.  */
14413   for (i = nargs; i--; )
14414     {
14415       tree elt = TREE_VEC_ELT (tempargs, i);
14416       tree oldelt = TREE_VEC_ELT (orig_targs, i);
14417
14418       if (!elt)
14419         /*NOP*/;
14420       else if (uses_template_parms (elt))
14421         /* Since we're unifying against ourselves, we will fill in
14422            template args used in the function parm list with our own
14423            template parms.  Discard them.  */
14424         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
14425       else if (oldelt && !template_args_equal (oldelt, elt))
14426         return 0;
14427     }
14428
14429   for (i = nargs; i--; )
14430     {
14431       tree elt = TREE_VEC_ELT (tempargs, i);
14432
14433       if (elt)
14434         TREE_VEC_ELT (targs, i) = elt;
14435     }
14436
14437   return 1;
14438 }
14439
14440 /* PARM is a template class (perhaps with unbound template
14441    parameters).  ARG is a fully instantiated type.  If ARG can be
14442    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
14443    TARGS are as for unify.  */
14444
14445 static tree
14446 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
14447 {
14448   tree copy_of_targs;
14449
14450   if (!CLASSTYPE_TEMPLATE_INFO (arg)
14451       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
14452           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
14453     return NULL_TREE;
14454
14455   /* We need to make a new template argument vector for the call to
14456      unify.  If we used TARGS, we'd clutter it up with the result of
14457      the attempted unification, even if this class didn't work out.
14458      We also don't want to commit ourselves to all the unifications
14459      we've already done, since unification is supposed to be done on
14460      an argument-by-argument basis.  In other words, consider the
14461      following pathological case:
14462
14463        template <int I, int J, int K>
14464        struct S {};
14465
14466        template <int I, int J>
14467        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
14468
14469        template <int I, int J, int K>
14470        void f(S<I, J, K>, S<I, I, I>);
14471
14472        void g() {
14473          S<0, 0, 0> s0;
14474          S<0, 1, 2> s2;
14475
14476          f(s0, s2);
14477        }
14478
14479      Now, by the time we consider the unification involving `s2', we
14480      already know that we must have `f<0, 0, 0>'.  But, even though
14481      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
14482      because there are two ways to unify base classes of S<0, 1, 2>
14483      with S<I, I, I>.  If we kept the already deduced knowledge, we
14484      would reject the possibility I=1.  */
14485   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
14486
14487   /* If unification failed, we're done.  */
14488   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
14489              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
14490     return NULL_TREE;
14491
14492   return arg;
14493 }
14494
14495 /* Given a template type PARM and a class type ARG, find the unique
14496    base type in ARG that is an instance of PARM.  We do not examine
14497    ARG itself; only its base-classes.  If there is not exactly one
14498    appropriate base class, return NULL_TREE.  PARM may be the type of
14499    a partial specialization, as well as a plain template type.  Used
14500    by unify.  */
14501
14502 static tree
14503 get_template_base (tree tparms, tree targs, tree parm, tree arg)
14504 {
14505   tree rval = NULL_TREE;
14506   tree binfo;
14507
14508   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
14509
14510   binfo = TYPE_BINFO (complete_type (arg));
14511   if (!binfo)
14512     /* The type could not be completed.  */
14513     return NULL_TREE;
14514
14515   /* Walk in inheritance graph order.  The search order is not
14516      important, and this avoids multiple walks of virtual bases.  */
14517   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
14518     {
14519       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
14520
14521       if (r)
14522         {
14523           /* If there is more than one satisfactory baseclass, then:
14524
14525                [temp.deduct.call]
14526
14527               If they yield more than one possible deduced A, the type
14528               deduction fails.
14529
14530              applies.  */
14531           if (rval && !same_type_p (r, rval))
14532             return NULL_TREE;
14533
14534           rval = r;
14535         }
14536     }
14537
14538   return rval;
14539 }
14540
14541 /* Returns the level of DECL, which declares a template parameter.  */
14542
14543 static int
14544 template_decl_level (tree decl)
14545 {
14546   switch (TREE_CODE (decl))
14547     {
14548     case TYPE_DECL:
14549     case TEMPLATE_DECL:
14550       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
14551
14552     case PARM_DECL:
14553       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
14554
14555     default:
14556       gcc_unreachable ();
14557     }
14558   return 0;
14559 }
14560
14561 /* Decide whether ARG can be unified with PARM, considering only the
14562    cv-qualifiers of each type, given STRICT as documented for unify.
14563    Returns nonzero iff the unification is OK on that basis.  */
14564
14565 static int
14566 check_cv_quals_for_unify (int strict, tree arg, tree parm)
14567 {
14568   int arg_quals = cp_type_quals (arg);
14569   int parm_quals = cp_type_quals (parm);
14570
14571   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14572       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
14573     {
14574       /*  Although a CVR qualifier is ignored when being applied to a
14575           substituted template parameter ([8.3.2]/1 for example), that
14576           does not allow us to unify "const T" with "int&" because both
14577           types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
14578           It is ok when we're allowing additional CV qualifiers
14579           at the outer level [14.8.2.1]/3,1st bullet.  */
14580       if ((TREE_CODE (arg) == REFERENCE_TYPE
14581            || TREE_CODE (arg) == FUNCTION_TYPE
14582            || TREE_CODE (arg) == METHOD_TYPE)
14583           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
14584         return 0;
14585
14586       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
14587           && (parm_quals & TYPE_QUAL_RESTRICT))
14588         return 0;
14589     }
14590
14591   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
14592       && (arg_quals & parm_quals) != parm_quals)
14593     return 0;
14594
14595   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
14596       && (parm_quals & arg_quals) != arg_quals)
14597     return 0;
14598
14599   return 1;
14600 }
14601
14602 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
14603 void 
14604 template_parm_level_and_index (tree parm, int* level, int* index)
14605 {
14606   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14607       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
14608       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
14609     {
14610       *index = TEMPLATE_TYPE_IDX (parm);
14611       *level = TEMPLATE_TYPE_LEVEL (parm);
14612     }
14613   else
14614     {
14615       *index = TEMPLATE_PARM_IDX (parm);
14616       *level = TEMPLATE_PARM_LEVEL (parm);
14617     }
14618 }
14619
14620 /* Unifies the remaining arguments in PACKED_ARGS with the pack
14621    expansion at the end of PACKED_PARMS. Returns 0 if the type
14622    deduction succeeds, 1 otherwise. STRICT is the same as in
14623    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
14624    call argument list. We'll need to adjust the arguments to make them
14625    types. SUBR tells us if this is from a recursive call to
14626    type_unification_real.  */
14627 int
14628 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
14629                       tree packed_args, int strict, bool call_args_p,
14630                       bool subr)
14631 {
14632   tree parm 
14633     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
14634   tree pattern = PACK_EXPANSION_PATTERN (parm);
14635   tree pack, packs = NULL_TREE;
14636   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
14637   int len = TREE_VEC_LENGTH (packed_args);
14638
14639   /* Determine the parameter packs we will be deducing from the
14640      pattern, and record their current deductions.  */
14641   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
14642        pack; pack = TREE_CHAIN (pack))
14643     {
14644       tree parm_pack = TREE_VALUE (pack);
14645       int idx, level;
14646
14647       /* Determine the index and level of this parameter pack.  */
14648       template_parm_level_and_index (parm_pack, &level, &idx);
14649
14650       /* Keep track of the parameter packs and their corresponding
14651          argument packs.  */
14652       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
14653       TREE_TYPE (packs) = make_tree_vec (len - start);
14654     }
14655   
14656   /* Loop through all of the arguments that have not yet been
14657      unified and unify each with the pattern.  */
14658   for (i = start; i < len; i++)
14659     {
14660       tree parm = pattern;
14661
14662       /* For each parameter pack, clear out the deduced value so that
14663          we can deduce it again.  */
14664       for (pack = packs; pack; pack = TREE_CHAIN (pack))
14665         {
14666           int idx, level;
14667           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14668
14669           TMPL_ARG (targs, level, idx) = NULL_TREE;
14670         }
14671
14672       /* Unify the pattern with the current argument.  */
14673       {
14674         tree arg = TREE_VEC_ELT (packed_args, i);
14675         tree arg_expr = NULL_TREE;
14676         int arg_strict = strict;
14677         bool skip_arg_p = false;
14678
14679         if (call_args_p)
14680           {
14681             int sub_strict;
14682
14683             /* This mirrors what we do in type_unification_real.  */
14684             switch (strict)
14685               {
14686               case DEDUCE_CALL:
14687                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
14688                               | UNIFY_ALLOW_MORE_CV_QUAL
14689                               | UNIFY_ALLOW_DERIVED);
14690                 break;
14691                 
14692               case DEDUCE_CONV:
14693                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
14694                 break;
14695                 
14696               case DEDUCE_EXACT:
14697                 sub_strict = UNIFY_ALLOW_NONE;
14698                 break;
14699                 
14700               default:
14701                 gcc_unreachable ();
14702               }
14703
14704             if (!TYPE_P (arg))
14705               {
14706                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
14707                 if (type_unknown_p (arg))
14708                   {
14709                     /* [temp.deduct.type] A template-argument can be
14710                        deduced from a pointer to function or pointer
14711                        to member function argument if the set of
14712                        overloaded functions does not contain function
14713                        templates and at most one of a set of
14714                        overloaded functions provides a unique
14715                        match.  */
14716
14717                     if (resolve_overloaded_unification
14718                         (tparms, targs, parm, arg,
14719                          (unification_kind_t) strict,
14720                          sub_strict)
14721                         != 0)
14722                       return 1;
14723                     skip_arg_p = true;
14724                   }
14725
14726                 if (!skip_arg_p)
14727                   {
14728                     arg_expr = arg;
14729                     arg = unlowered_expr_type (arg);
14730                     if (arg == error_mark_node)
14731                       return 1;
14732                   }
14733               }
14734       
14735             arg_strict = sub_strict;
14736
14737             if (!subr)
14738               arg_strict |= 
14739                 maybe_adjust_types_for_deduction ((unification_kind_t) strict,
14740                                                   &parm, &arg, arg_expr);
14741           }
14742
14743         if (!skip_arg_p)
14744           {
14745             /* For deduction from an init-list we need the actual list.  */
14746             if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
14747               arg = arg_expr;
14748             if (unify (tparms, targs, parm, arg, arg_strict))
14749               return 1;
14750           }
14751       }
14752
14753       /* For each parameter pack, collect the deduced value.  */
14754       for (pack = packs; pack; pack = TREE_CHAIN (pack))
14755         {
14756           int idx, level;
14757           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14758
14759           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
14760             TMPL_ARG (targs, level, idx);
14761         }
14762     }
14763
14764   /* Verify that the results of unification with the parameter packs
14765      produce results consistent with what we've seen before, and make
14766      the deduced argument packs available.  */
14767   for (pack = packs; pack; pack = TREE_CHAIN (pack))
14768     {
14769       tree old_pack = TREE_VALUE (pack);
14770       tree new_args = TREE_TYPE (pack);
14771       int i, len = TREE_VEC_LENGTH (new_args);
14772       int idx, level;
14773       bool nondeduced_p = false;
14774
14775       /* By default keep the original deduced argument pack.
14776          If necessary, more specific code is going to update the
14777          resulting deduced argument later down in this function.  */
14778       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14779       TMPL_ARG (targs, level, idx) = old_pack;
14780
14781       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
14782          actually deduce anything.  */
14783       for (i = 0; i < len && !nondeduced_p; ++i)
14784         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
14785           nondeduced_p = true;
14786       if (nondeduced_p)
14787         continue;
14788
14789       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
14790         {
14791           /* Prepend the explicit arguments onto NEW_ARGS.  */
14792           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
14793           tree old_args = new_args;
14794           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
14795           int len = explicit_len + TREE_VEC_LENGTH (old_args);
14796
14797           /* Copy the explicit arguments.  */
14798           new_args = make_tree_vec (len);
14799           for (i = 0; i < explicit_len; i++)
14800             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
14801
14802           /* Copy the deduced arguments.  */
14803           for (; i < len; i++)
14804             TREE_VEC_ELT (new_args, i) =
14805               TREE_VEC_ELT (old_args, i - explicit_len);
14806         }
14807
14808       if (!old_pack)
14809         {
14810           tree result;
14811           /* Build the deduced *_ARGUMENT_PACK.  */
14812           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
14813             {
14814               result = make_node (NONTYPE_ARGUMENT_PACK);
14815               TREE_TYPE (result) = 
14816                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
14817               TREE_CONSTANT (result) = 1;
14818             }
14819           else
14820             result = cxx_make_type (TYPE_ARGUMENT_PACK);
14821
14822           SET_ARGUMENT_PACK_ARGS (result, new_args);
14823
14824           /* Note the deduced argument packs for this parameter
14825              pack.  */
14826           TMPL_ARG (targs, level, idx) = result;
14827         }
14828       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
14829                && (ARGUMENT_PACK_ARGS (old_pack) 
14830                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
14831         {
14832           /* We only had the explicitly-provided arguments before, but
14833              now we have a complete set of arguments.  */
14834           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
14835
14836           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
14837           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
14838           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
14839         }
14840       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
14841                                     new_args))
14842         /* Inconsistent unification of this parameter pack.  */
14843         return 1;
14844     }
14845
14846   return 0;
14847 }
14848
14849 /* Deduce the value of template parameters.  TPARMS is the (innermost)
14850    set of template parameters to a template.  TARGS is the bindings
14851    for those template parameters, as determined thus far; TARGS may
14852    include template arguments for outer levels of template parameters
14853    as well.  PARM is a parameter to a template function, or a
14854    subcomponent of that parameter; ARG is the corresponding argument.
14855    This function attempts to match PARM with ARG in a manner
14856    consistent with the existing assignments in TARGS.  If more values
14857    are deduced, then TARGS is updated.
14858
14859    Returns 0 if the type deduction succeeds, 1 otherwise.  The
14860    parameter STRICT is a bitwise or of the following flags:
14861
14862      UNIFY_ALLOW_NONE:
14863        Require an exact match between PARM and ARG.
14864      UNIFY_ALLOW_MORE_CV_QUAL:
14865        Allow the deduced ARG to be more cv-qualified (by qualification
14866        conversion) than ARG.
14867      UNIFY_ALLOW_LESS_CV_QUAL:
14868        Allow the deduced ARG to be less cv-qualified than ARG.
14869      UNIFY_ALLOW_DERIVED:
14870        Allow the deduced ARG to be a template base class of ARG,
14871        or a pointer to a template base class of the type pointed to by
14872        ARG.
14873      UNIFY_ALLOW_INTEGER:
14874        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
14875        case for more information.
14876      UNIFY_ALLOW_OUTER_LEVEL:
14877        This is the outermost level of a deduction. Used to determine validity
14878        of qualification conversions. A valid qualification conversion must
14879        have const qualified pointers leading up to the inner type which
14880        requires additional CV quals, except at the outer level, where const
14881        is not required [conv.qual]. It would be normal to set this flag in
14882        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
14883      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
14884        This is the outermost level of a deduction, and PARM can be more CV
14885        qualified at this point.
14886      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
14887        This is the outermost level of a deduction, and PARM can be less CV
14888        qualified at this point.  */
14889
14890 static int
14891 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
14892 {
14893   int idx;
14894   tree targ;
14895   tree tparm;
14896   int strict_in = strict;
14897
14898   /* I don't think this will do the right thing with respect to types.
14899      But the only case I've seen it in so far has been array bounds, where
14900      signedness is the only information lost, and I think that will be
14901      okay.  */
14902   while (TREE_CODE (parm) == NOP_EXPR)
14903     parm = TREE_OPERAND (parm, 0);
14904
14905   if (arg == error_mark_node)
14906     return 1;
14907   if (arg == unknown_type_node
14908       || arg == init_list_type_node)
14909     /* We can't deduce anything from this, but we might get all the
14910        template args from other function args.  */
14911     return 0;
14912
14913   /* If PARM uses template parameters, then we can't bail out here,
14914      even if ARG == PARM, since we won't record unifications for the
14915      template parameters.  We might need them if we're trying to
14916      figure out which of two things is more specialized.  */
14917   if (arg == parm && !uses_template_parms (parm))
14918     return 0;
14919
14920   /* Handle init lists early, so the rest of the function can assume
14921      we're dealing with a type. */
14922   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
14923     {
14924       tree elt, elttype;
14925       unsigned i;
14926       tree orig_parm = parm;
14927
14928       /* Replace T with std::initializer_list<T> for deduction.  */
14929       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14930           && flag_deduce_init_list)
14931         parm = listify (parm);
14932
14933       if (!is_std_init_list (parm))
14934         /* We can only deduce from an initializer list argument if the
14935            parameter is std::initializer_list; otherwise this is a
14936            non-deduced context. */
14937         return 0;
14938
14939       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
14940
14941       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
14942         {
14943           int elt_strict = strict;
14944
14945           if (elt == error_mark_node)
14946             return 1;
14947
14948           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
14949             {
14950               tree type = TREE_TYPE (elt);
14951               /* It should only be possible to get here for a call.  */
14952               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
14953               elt_strict |= maybe_adjust_types_for_deduction
14954                 (DEDUCE_CALL, &elttype, &type, elt);
14955               elt = type;
14956             }
14957
14958           if (unify (tparms, targs, elttype, elt, elt_strict))
14959             return 1;
14960         }
14961
14962       /* If the std::initializer_list<T> deduction worked, replace the
14963          deduced A with std::initializer_list<A>.  */
14964       if (orig_parm != parm)
14965         {
14966           idx = TEMPLATE_TYPE_IDX (orig_parm);
14967           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
14968           targ = listify (targ);
14969           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
14970         }
14971       return 0;
14972     }
14973
14974   /* Immediately reject some pairs that won't unify because of
14975      cv-qualification mismatches.  */
14976   if (TREE_CODE (arg) == TREE_CODE (parm)
14977       && TYPE_P (arg)
14978       /* It is the elements of the array which hold the cv quals of an array
14979          type, and the elements might be template type parms. We'll check
14980          when we recurse.  */
14981       && TREE_CODE (arg) != ARRAY_TYPE
14982       /* We check the cv-qualifiers when unifying with template type
14983          parameters below.  We want to allow ARG `const T' to unify with
14984          PARM `T' for example, when computing which of two templates
14985          is more specialized, for example.  */
14986       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
14987       && !check_cv_quals_for_unify (strict_in, arg, parm))
14988     return 1;
14989
14990   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
14991       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
14992     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
14993   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
14994   strict &= ~UNIFY_ALLOW_DERIVED;
14995   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
14996   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
14997
14998   switch (TREE_CODE (parm))
14999     {
15000     case TYPENAME_TYPE:
15001     case SCOPE_REF:
15002     case UNBOUND_CLASS_TEMPLATE:
15003       /* In a type which contains a nested-name-specifier, template
15004          argument values cannot be deduced for template parameters used
15005          within the nested-name-specifier.  */
15006       return 0;
15007
15008     case TEMPLATE_TYPE_PARM:
15009     case TEMPLATE_TEMPLATE_PARM:
15010     case BOUND_TEMPLATE_TEMPLATE_PARM:
15011       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
15012       if (tparm == error_mark_node)
15013         return 1;
15014
15015       if (TEMPLATE_TYPE_LEVEL (parm)
15016           != template_decl_level (tparm))
15017         /* The PARM is not one we're trying to unify.  Just check
15018            to see if it matches ARG.  */
15019         return (TREE_CODE (arg) == TREE_CODE (parm)
15020                 && same_type_p (parm, arg)) ? 0 : 1;
15021       idx = TEMPLATE_TYPE_IDX (parm);
15022       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15023       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
15024
15025       /* Check for mixed types and values.  */
15026       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15027            && TREE_CODE (tparm) != TYPE_DECL)
15028           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15029               && TREE_CODE (tparm) != TEMPLATE_DECL))
15030         return 1;
15031
15032       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15033         {
15034           /* ARG must be constructed from a template class or a template
15035              template parameter.  */
15036           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
15037               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
15038             return 1;
15039
15040           {
15041             tree parmvec = TYPE_TI_ARGS (parm);
15042             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
15043             tree full_argvec = add_to_template_args (targs, argvec);
15044             tree parm_parms 
15045               = DECL_INNERMOST_TEMPLATE_PARMS
15046                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
15047             int i, len;
15048             int parm_variadic_p = 0;
15049
15050             /* The resolution to DR150 makes clear that default
15051                arguments for an N-argument may not be used to bind T
15052                to a template template parameter with fewer than N
15053                parameters.  It is not safe to permit the binding of
15054                default arguments as an extension, as that may change
15055                the meaning of a conforming program.  Consider:
15056
15057                   struct Dense { static const unsigned int dim = 1; };
15058
15059                   template <template <typename> class View,
15060                             typename Block>
15061                   void operator+(float, View<Block> const&);
15062
15063                   template <typename Block,
15064                             unsigned int Dim = Block::dim>
15065                   struct Lvalue_proxy { operator float() const; };
15066
15067                   void
15068                   test_1d (void) {
15069                     Lvalue_proxy<Dense> p;
15070                     float b;
15071                     b + p;
15072                   }
15073
15074               Here, if Lvalue_proxy is permitted to bind to View, then
15075               the global operator+ will be used; if they are not, the
15076               Lvalue_proxy will be converted to float.  */
15077             if (coerce_template_parms (parm_parms,
15078                                        full_argvec,
15079                                        TYPE_TI_TEMPLATE (parm),
15080                                        tf_none,
15081                                        /*require_all_args=*/true,
15082                                        /*use_default_args=*/false)
15083                 == error_mark_node)
15084               return 1;
15085
15086             /* Deduce arguments T, i from TT<T> or TT<i>.
15087                We check each element of PARMVEC and ARGVEC individually
15088                rather than the whole TREE_VEC since they can have
15089                different number of elements.  */
15090
15091             parmvec = expand_template_argument_pack (parmvec);
15092             argvec = expand_template_argument_pack (argvec);
15093
15094             len = TREE_VEC_LENGTH (parmvec);
15095
15096             /* Check if the parameters end in a pack, making them
15097                variadic.  */
15098             if (len > 0
15099                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
15100               parm_variadic_p = 1;
15101             
15102             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
15103               return 1;
15104
15105              for (i = 0; i < len - parm_variadic_p; ++i)
15106               {
15107                 if (unify (tparms, targs,
15108                            TREE_VEC_ELT (parmvec, i),
15109                            TREE_VEC_ELT (argvec, i),
15110                            UNIFY_ALLOW_NONE))
15111                   return 1;
15112               }
15113
15114             if (parm_variadic_p
15115                 && unify_pack_expansion (tparms, targs,
15116                                          parmvec, argvec,
15117                                          UNIFY_ALLOW_NONE,
15118                                          /*call_args_p=*/false,
15119                                          /*subr=*/false))
15120               return 1;
15121           }
15122           arg = TYPE_TI_TEMPLATE (arg);
15123
15124           /* Fall through to deduce template name.  */
15125         }
15126
15127       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15128           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15129         {
15130           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
15131
15132           /* Simple cases: Value already set, does match or doesn't.  */
15133           if (targ != NULL_TREE && template_args_equal (targ, arg))
15134             return 0;
15135           else if (targ)
15136             return 1;
15137         }
15138       else
15139         {
15140           /* If PARM is `const T' and ARG is only `int', we don't have
15141              a match unless we are allowing additional qualification.
15142              If ARG is `const int' and PARM is just `T' that's OK;
15143              that binds `const int' to `T'.  */
15144           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
15145                                          arg, parm))
15146             return 1;
15147
15148           /* Consider the case where ARG is `const volatile int' and
15149              PARM is `const T'.  Then, T should be `volatile int'.  */
15150           arg = cp_build_qualified_type_real
15151             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
15152           if (arg == error_mark_node)
15153             return 1;
15154
15155           /* Simple cases: Value already set, does match or doesn't.  */
15156           if (targ != NULL_TREE && same_type_p (targ, arg))
15157             return 0;
15158           else if (targ)
15159             return 1;
15160
15161           /* Make sure that ARG is not a variable-sized array.  (Note
15162              that were talking about variable-sized arrays (like
15163              `int[n]'), rather than arrays of unknown size (like
15164              `int[]').)  We'll get very confused by such a type since
15165              the bound of the array will not be computable in an
15166              instantiation.  Besides, such types are not allowed in
15167              ISO C++, so we can do as we please here.  */
15168           if (variably_modified_type_p (arg, NULL_TREE))
15169             return 1;
15170
15171           /* Strip typedefs as in convert_template_argument.  */
15172           arg = strip_typedefs (arg);
15173         }
15174
15175       /* If ARG is a parameter pack or an expansion, we cannot unify
15176          against it unless PARM is also a parameter pack.  */
15177       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
15178           && !template_parameter_pack_p (parm))
15179         return 1;
15180
15181       /* If the argument deduction results is a METHOD_TYPE,
15182          then there is a problem.
15183          METHOD_TYPE doesn't map to any real C++ type the result of
15184          the deduction can not be of that type.  */
15185       if (TREE_CODE (arg) == METHOD_TYPE)
15186         return 1;
15187
15188       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
15189       return 0;
15190
15191     case TEMPLATE_PARM_INDEX:
15192       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
15193       if (tparm == error_mark_node)
15194         return 1;
15195
15196       if (TEMPLATE_PARM_LEVEL (parm)
15197           != template_decl_level (tparm))
15198         /* The PARM is not one we're trying to unify.  Just check
15199            to see if it matches ARG.  */
15200         return !(TREE_CODE (arg) == TREE_CODE (parm)
15201                  && cp_tree_equal (parm, arg));
15202
15203       idx = TEMPLATE_PARM_IDX (parm);
15204       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15205
15206       if (targ)
15207         return !cp_tree_equal (targ, arg);
15208
15209       /* [temp.deduct.type] If, in the declaration of a function template
15210          with a non-type template-parameter, the non-type
15211          template-parameter is used in an expression in the function
15212          parameter-list and, if the corresponding template-argument is
15213          deduced, the template-argument type shall match the type of the
15214          template-parameter exactly, except that a template-argument
15215          deduced from an array bound may be of any integral type.
15216          The non-type parameter might use already deduced type parameters.  */
15217       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
15218       if (!TREE_TYPE (arg))
15219         /* Template-parameter dependent expression.  Just accept it for now.
15220            It will later be processed in convert_template_argument.  */
15221         ;
15222       else if (same_type_p (TREE_TYPE (arg), tparm))
15223         /* OK */;
15224       else if ((strict & UNIFY_ALLOW_INTEGER)
15225                && (TREE_CODE (tparm) == INTEGER_TYPE
15226                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
15227         /* Convert the ARG to the type of PARM; the deduced non-type
15228            template argument must exactly match the types of the
15229            corresponding parameter.  */
15230         arg = fold (build_nop (tparm, arg));
15231       else if (uses_template_parms (tparm))
15232         /* We haven't deduced the type of this parameter yet.  Try again
15233            later.  */
15234         return 0;
15235       else
15236         return 1;
15237
15238       /* If ARG is a parameter pack or an expansion, we cannot unify
15239          against it unless PARM is also a parameter pack.  */
15240       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
15241           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
15242         return 1;
15243
15244       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
15245       return 0;
15246
15247     case PTRMEM_CST:
15248      {
15249         /* A pointer-to-member constant can be unified only with
15250          another constant.  */
15251       if (TREE_CODE (arg) != PTRMEM_CST)
15252         return 1;
15253
15254       /* Just unify the class member. It would be useless (and possibly
15255          wrong, depending on the strict flags) to unify also
15256          PTRMEM_CST_CLASS, because we want to be sure that both parm and
15257          arg refer to the same variable, even if through different
15258          classes. For instance:
15259
15260          struct A { int x; };
15261          struct B : A { };
15262
15263          Unification of &A::x and &B::x must succeed.  */
15264       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
15265                     PTRMEM_CST_MEMBER (arg), strict);
15266      }
15267
15268     case POINTER_TYPE:
15269       {
15270         if (TREE_CODE (arg) != POINTER_TYPE)
15271           return 1;
15272
15273         /* [temp.deduct.call]
15274
15275            A can be another pointer or pointer to member type that can
15276            be converted to the deduced A via a qualification
15277            conversion (_conv.qual_).
15278
15279            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
15280            This will allow for additional cv-qualification of the
15281            pointed-to types if appropriate.  */
15282
15283         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
15284           /* The derived-to-base conversion only persists through one
15285              level of pointers.  */
15286           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
15287
15288         return unify (tparms, targs, TREE_TYPE (parm),
15289                       TREE_TYPE (arg), strict);
15290       }
15291
15292     case REFERENCE_TYPE:
15293       if (TREE_CODE (arg) != REFERENCE_TYPE)
15294         return 1;
15295       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15296                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
15297
15298     case ARRAY_TYPE:
15299       if (TREE_CODE (arg) != ARRAY_TYPE)
15300         return 1;
15301       if ((TYPE_DOMAIN (parm) == NULL_TREE)
15302           != (TYPE_DOMAIN (arg) == NULL_TREE))
15303         return 1;
15304       if (TYPE_DOMAIN (parm) != NULL_TREE)
15305         {
15306           tree parm_max;
15307           tree arg_max;
15308           bool parm_cst;
15309           bool arg_cst;
15310
15311           /* Our representation of array types uses "N - 1" as the
15312              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
15313              not an integer constant.  We cannot unify arbitrarily
15314              complex expressions, so we eliminate the MINUS_EXPRs
15315              here.  */
15316           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
15317           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
15318           if (!parm_cst)
15319             {
15320               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
15321               parm_max = TREE_OPERAND (parm_max, 0);
15322             }
15323           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
15324           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
15325           if (!arg_cst)
15326             {
15327               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
15328                  trying to unify the type of a variable with the type
15329                  of a template parameter.  For example:
15330
15331                    template <unsigned int N>
15332                    void f (char (&) [N]);
15333                    int g(); 
15334                    void h(int i) {
15335                      char a[g(i)];
15336                      f(a); 
15337                    }
15338
15339                 Here, the type of the ARG will be "int [g(i)]", and
15340                 may be a SAVE_EXPR, etc.  */
15341               if (TREE_CODE (arg_max) != MINUS_EXPR)
15342                 return 1;
15343               arg_max = TREE_OPERAND (arg_max, 0);
15344             }
15345
15346           /* If only one of the bounds used a MINUS_EXPR, compensate
15347              by adding one to the other bound.  */
15348           if (parm_cst && !arg_cst)
15349             parm_max = fold_build2_loc (input_location, PLUS_EXPR,
15350                                     integer_type_node,
15351                                     parm_max,
15352                                     integer_one_node);
15353           else if (arg_cst && !parm_cst)
15354             arg_max = fold_build2_loc (input_location, PLUS_EXPR,
15355                                    integer_type_node,
15356                                    arg_max,
15357                                    integer_one_node);
15358
15359           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
15360             return 1;
15361         }
15362       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15363                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
15364
15365     case REAL_TYPE:
15366     case COMPLEX_TYPE:
15367     case VECTOR_TYPE:
15368     case INTEGER_TYPE:
15369     case BOOLEAN_TYPE:
15370     case ENUMERAL_TYPE:
15371     case VOID_TYPE:
15372       if (TREE_CODE (arg) != TREE_CODE (parm))
15373         return 1;
15374
15375       /* We have already checked cv-qualification at the top of the
15376          function.  */
15377       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
15378         return 1;
15379
15380       /* As far as unification is concerned, this wins.  Later checks
15381          will invalidate it if necessary.  */
15382       return 0;
15383
15384       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
15385       /* Type INTEGER_CST can come from ordinary constant template args.  */
15386     case INTEGER_CST:
15387       while (TREE_CODE (arg) == NOP_EXPR)
15388         arg = TREE_OPERAND (arg, 0);
15389
15390       if (TREE_CODE (arg) != INTEGER_CST)
15391         return 1;
15392       return !tree_int_cst_equal (parm, arg);
15393
15394     case TREE_VEC:
15395       {
15396         int i;
15397         if (TREE_CODE (arg) != TREE_VEC)
15398           return 1;
15399         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
15400           return 1;
15401         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
15402           if (unify (tparms, targs,
15403                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
15404                      UNIFY_ALLOW_NONE))
15405             return 1;
15406         return 0;
15407       }
15408
15409     case RECORD_TYPE:
15410     case UNION_TYPE:
15411       if (TREE_CODE (arg) != TREE_CODE (parm))
15412         return 1;
15413
15414       if (TYPE_PTRMEMFUNC_P (parm))
15415         {
15416           if (!TYPE_PTRMEMFUNC_P (arg))
15417             return 1;
15418
15419           return unify (tparms, targs,
15420                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
15421                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
15422                         strict);
15423         }
15424
15425       if (CLASSTYPE_TEMPLATE_INFO (parm))
15426         {
15427           tree t = NULL_TREE;
15428
15429           if (strict_in & UNIFY_ALLOW_DERIVED)
15430             {
15431               /* First, we try to unify the PARM and ARG directly.  */
15432               t = try_class_unification (tparms, targs,
15433                                          parm, arg);
15434
15435               if (!t)
15436                 {
15437                   /* Fallback to the special case allowed in
15438                      [temp.deduct.call]:
15439
15440                        If P is a class, and P has the form
15441                        template-id, then A can be a derived class of
15442                        the deduced A.  Likewise, if P is a pointer to
15443                        a class of the form template-id, A can be a
15444                        pointer to a derived class pointed to by the
15445                        deduced A.  */
15446                   t = get_template_base (tparms, targs, parm, arg);
15447
15448                   if (!t)
15449                     return 1;
15450                 }
15451             }
15452           else if (CLASSTYPE_TEMPLATE_INFO (arg)
15453                    && (CLASSTYPE_TI_TEMPLATE (parm)
15454                        == CLASSTYPE_TI_TEMPLATE (arg)))
15455             /* Perhaps PARM is something like S<U> and ARG is S<int>.
15456                Then, we should unify `int' and `U'.  */
15457             t = arg;
15458           else
15459             /* There's no chance of unification succeeding.  */
15460             return 1;
15461
15462           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
15463                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
15464         }
15465       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
15466         return 1;
15467       return 0;
15468
15469     case METHOD_TYPE:
15470     case FUNCTION_TYPE:
15471       {
15472         unsigned int nargs;
15473         tree *args;
15474         tree a;
15475         unsigned int i;
15476
15477         if (TREE_CODE (arg) != TREE_CODE (parm))
15478           return 1;
15479
15480         /* CV qualifications for methods can never be deduced, they must
15481            match exactly.  We need to check them explicitly here,
15482            because type_unification_real treats them as any other
15483            cv-qualified parameter.  */
15484         if (TREE_CODE (parm) == METHOD_TYPE
15485             && (!check_cv_quals_for_unify
15486                 (UNIFY_ALLOW_NONE,
15487                  TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
15488                  TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
15489           return 1;
15490
15491         if (unify (tparms, targs, TREE_TYPE (parm),
15492                    TREE_TYPE (arg), UNIFY_ALLOW_NONE))
15493           return 1;
15494
15495         nargs = list_length (TYPE_ARG_TYPES (arg));
15496         args = XALLOCAVEC (tree, nargs);
15497         for (a = TYPE_ARG_TYPES (arg), i = 0;
15498              a != NULL_TREE && a != void_list_node;
15499              a = TREE_CHAIN (a), ++i)
15500           args[i] = TREE_VALUE (a);
15501         nargs = i;
15502
15503         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
15504                                       args, nargs, 1, DEDUCE_EXACT,
15505                                       LOOKUP_NORMAL);
15506       }
15507
15508     case OFFSET_TYPE:
15509       /* Unify a pointer to member with a pointer to member function, which
15510          deduces the type of the member as a function type. */
15511       if (TYPE_PTRMEMFUNC_P (arg))
15512         {
15513           tree method_type;
15514           tree fntype;
15515
15516           /* Check top-level cv qualifiers */
15517           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
15518             return 1;
15519
15520           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
15521                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
15522             return 1;
15523
15524           /* Determine the type of the function we are unifying against. */
15525           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
15526           fntype =
15527             build_function_type (TREE_TYPE (method_type),
15528                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
15529
15530           /* Extract the cv-qualifiers of the member function from the
15531              implicit object parameter and place them on the function
15532              type to be restored later. */
15533           fntype = apply_memfn_quals (fntype, type_memfn_quals (method_type));
15534           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
15535         }
15536
15537       if (TREE_CODE (arg) != OFFSET_TYPE)
15538         return 1;
15539       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
15540                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
15541         return 1;
15542       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15543                     strict);
15544
15545     case CONST_DECL:
15546       if (DECL_TEMPLATE_PARM_P (parm))
15547         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
15548       if (arg != integral_constant_value (parm))
15549         return 1;
15550       return 0;
15551
15552     case FIELD_DECL:
15553     case TEMPLATE_DECL:
15554       /* Matched cases are handled by the ARG == PARM test above.  */
15555       return 1;
15556
15557     case VAR_DECL:
15558       /* A non-type template parameter that is a variable should be a
15559          an integral constant, in which case, it whould have been
15560          folded into its (constant) value. So we should not be getting
15561          a variable here.  */
15562       gcc_unreachable ();
15563
15564     case TYPE_ARGUMENT_PACK:
15565     case NONTYPE_ARGUMENT_PACK:
15566       {
15567         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
15568         tree packed_args = ARGUMENT_PACK_ARGS (arg);
15569         int i, len = TREE_VEC_LENGTH (packed_parms);
15570         int argslen = TREE_VEC_LENGTH (packed_args);
15571         int parm_variadic_p = 0;
15572
15573         for (i = 0; i < len; ++i)
15574           {
15575             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
15576               {
15577                 if (i == len - 1)
15578                   /* We can unify against something with a trailing
15579                      parameter pack.  */
15580                   parm_variadic_p = 1;
15581                 else
15582                   /* Since there is something following the pack
15583                      expansion, we cannot unify this template argument
15584                      list.  */
15585                   return 0;
15586               }
15587           }
15588           
15589
15590         /* If we don't have enough arguments to satisfy the parameters
15591            (not counting the pack expression at the end), or we have
15592            too many arguments for a parameter list that doesn't end in
15593            a pack expression, we can't unify.  */
15594         if (argslen < (len - parm_variadic_p)
15595             || (argslen > len && !parm_variadic_p))
15596           return 1;
15597
15598         /* Unify all of the parameters that precede the (optional)
15599            pack expression.  */
15600         for (i = 0; i < len - parm_variadic_p; ++i)
15601           {
15602             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
15603                        TREE_VEC_ELT (packed_args, i), strict))
15604               return 1;
15605           }
15606
15607         if (parm_variadic_p)
15608           return unify_pack_expansion (tparms, targs, 
15609                                        packed_parms, packed_args,
15610                                        strict, /*call_args_p=*/false,
15611                                        /*subr=*/false);
15612         return 0;
15613       }
15614
15615       break;
15616
15617     case TYPEOF_TYPE:
15618     case DECLTYPE_TYPE:
15619       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
15620          nodes.  */
15621       return 0;
15622
15623     case ERROR_MARK:
15624       /* Unification fails if we hit an error node.  */
15625       return 1;
15626
15627     default:
15628       gcc_assert (EXPR_P (parm));
15629
15630       /* We must be looking at an expression.  This can happen with
15631          something like:
15632
15633            template <int I>
15634            void foo(S<I>, S<I + 2>);
15635
15636          This is a "nondeduced context":
15637
15638            [deduct.type]
15639
15640            The nondeduced contexts are:
15641
15642            --A type that is a template-id in which one or more of
15643              the template-arguments is an expression that references
15644              a template-parameter.
15645
15646          In these cases, we assume deduction succeeded, but don't
15647          actually infer any unifications.  */
15648
15649       if (!uses_template_parms (parm)
15650           && !template_args_equal (parm, arg))
15651         return 1;
15652       else
15653         return 0;
15654     }
15655 }
15656 \f
15657 /* Note that DECL can be defined in this translation unit, if
15658    required.  */
15659
15660 static void
15661 mark_definable (tree decl)
15662 {
15663   tree clone;
15664   DECL_NOT_REALLY_EXTERN (decl) = 1;
15665   FOR_EACH_CLONE (clone, decl)
15666     DECL_NOT_REALLY_EXTERN (clone) = 1;
15667 }
15668
15669 /* Called if RESULT is explicitly instantiated, or is a member of an
15670    explicitly instantiated class.  */
15671
15672 void
15673 mark_decl_instantiated (tree result, int extern_p)
15674 {
15675   SET_DECL_EXPLICIT_INSTANTIATION (result);
15676
15677   /* If this entity has already been written out, it's too late to
15678      make any modifications.  */
15679   if (TREE_ASM_WRITTEN (result))
15680     return;
15681
15682   if (TREE_CODE (result) != FUNCTION_DECL)
15683     /* The TREE_PUBLIC flag for function declarations will have been
15684        set correctly by tsubst.  */
15685     TREE_PUBLIC (result) = 1;
15686
15687   /* This might have been set by an earlier implicit instantiation.  */
15688   DECL_COMDAT (result) = 0;
15689
15690   if (extern_p)
15691     DECL_NOT_REALLY_EXTERN (result) = 0;
15692   else
15693     {
15694       mark_definable (result);
15695       /* Always make artificials weak.  */
15696       if (DECL_ARTIFICIAL (result) && flag_weak)
15697         comdat_linkage (result);
15698       /* For WIN32 we also want to put explicit instantiations in
15699          linkonce sections.  */
15700       else if (TREE_PUBLIC (result))
15701         maybe_make_one_only (result);
15702     }
15703
15704   /* If EXTERN_P, then this function will not be emitted -- unless
15705      followed by an explicit instantiation, at which point its linkage
15706      will be adjusted.  If !EXTERN_P, then this function will be
15707      emitted here.  In neither circumstance do we want
15708      import_export_decl to adjust the linkage.  */
15709   DECL_INTERFACE_KNOWN (result) = 1;
15710 }
15711
15712 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
15713    important template arguments.  If any are missing, we check whether
15714    they're important by using error_mark_node for substituting into any
15715    args that were used for partial ordering (the ones between ARGS and END)
15716    and seeing if it bubbles up.  */
15717
15718 static bool
15719 check_undeduced_parms (tree targs, tree args, tree end)
15720 {
15721   bool found = false;
15722   int i;
15723   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
15724     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
15725       {
15726         found = true;
15727         TREE_VEC_ELT (targs, i) = error_mark_node;
15728       }
15729   if (found)
15730     {
15731       for (; args != end; args = TREE_CHAIN (args))
15732         {
15733           tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
15734           if (substed == error_mark_node)
15735             return true;
15736         }
15737     }
15738   return false;
15739 }
15740
15741 /* Given two function templates PAT1 and PAT2, return:
15742
15743    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
15744    -1 if PAT2 is more specialized than PAT1.
15745    0 if neither is more specialized.
15746
15747    LEN indicates the number of parameters we should consider
15748    (defaulted parameters should not be considered).
15749
15750    The 1998 std underspecified function template partial ordering, and
15751    DR214 addresses the issue.  We take pairs of arguments, one from
15752    each of the templates, and deduce them against each other.  One of
15753    the templates will be more specialized if all the *other*
15754    template's arguments deduce against its arguments and at least one
15755    of its arguments *does* *not* deduce against the other template's
15756    corresponding argument.  Deduction is done as for class templates.
15757    The arguments used in deduction have reference and top level cv
15758    qualifiers removed.  Iff both arguments were originally reference
15759    types *and* deduction succeeds in both directions, the template
15760    with the more cv-qualified argument wins for that pairing (if
15761    neither is more cv-qualified, they both are equal).  Unlike regular
15762    deduction, after all the arguments have been deduced in this way,
15763    we do *not* verify the deduced template argument values can be
15764    substituted into non-deduced contexts.
15765
15766    The logic can be a bit confusing here, because we look at deduce1 and
15767    targs1 to see if pat2 is at least as specialized, and vice versa; if we
15768    can find template arguments for pat1 to make arg1 look like arg2, that
15769    means that arg2 is at least as specialized as arg1.  */
15770
15771 int
15772 more_specialized_fn (tree pat1, tree pat2, int len)
15773 {
15774   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
15775   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
15776   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
15777   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
15778   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
15779   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
15780   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
15781   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
15782   tree origs1, origs2;
15783   bool lose1 = false;
15784   bool lose2 = false;
15785
15786   /* Remove the this parameter from non-static member functions.  If
15787      one is a non-static member function and the other is not a static
15788      member function, remove the first parameter from that function
15789      also.  This situation occurs for operator functions where we
15790      locate both a member function (with this pointer) and non-member
15791      operator (with explicit first operand).  */
15792   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
15793     {
15794       len--; /* LEN is the number of significant arguments for DECL1 */
15795       args1 = TREE_CHAIN (args1);
15796       if (!DECL_STATIC_FUNCTION_P (decl2))
15797         args2 = TREE_CHAIN (args2);
15798     }
15799   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
15800     {
15801       args2 = TREE_CHAIN (args2);
15802       if (!DECL_STATIC_FUNCTION_P (decl1))
15803         {
15804           len--;
15805           args1 = TREE_CHAIN (args1);
15806         }
15807     }
15808
15809   /* If only one is a conversion operator, they are unordered.  */
15810   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
15811     return 0;
15812
15813   /* Consider the return type for a conversion function */
15814   if (DECL_CONV_FN_P (decl1))
15815     {
15816       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
15817       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
15818       len++;
15819     }
15820
15821   processing_template_decl++;
15822
15823   origs1 = args1;
15824   origs2 = args2;
15825
15826   while (len--
15827          /* Stop when an ellipsis is seen.  */
15828          && args1 != NULL_TREE && args2 != NULL_TREE)
15829     {
15830       tree arg1 = TREE_VALUE (args1);
15831       tree arg2 = TREE_VALUE (args2);
15832       int deduce1, deduce2;
15833       int quals1 = -1;
15834       int quals2 = -1;
15835
15836       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
15837           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15838         {
15839           /* When both arguments are pack expansions, we need only
15840              unify the patterns themselves.  */
15841           arg1 = PACK_EXPANSION_PATTERN (arg1);
15842           arg2 = PACK_EXPANSION_PATTERN (arg2);
15843
15844           /* This is the last comparison we need to do.  */
15845           len = 0;
15846         }
15847
15848       if (TREE_CODE (arg1) == REFERENCE_TYPE)
15849         {
15850           arg1 = TREE_TYPE (arg1);
15851           quals1 = cp_type_quals (arg1);
15852         }
15853
15854       if (TREE_CODE (arg2) == REFERENCE_TYPE)
15855         {
15856           arg2 = TREE_TYPE (arg2);
15857           quals2 = cp_type_quals (arg2);
15858         }
15859
15860       if ((quals1 < 0) != (quals2 < 0))
15861         {
15862           /* Only of the args is a reference, see if we should apply
15863              array/function pointer decay to it.  This is not part of
15864              DR214, but is, IMHO, consistent with the deduction rules
15865              for the function call itself, and with our earlier
15866              implementation of the underspecified partial ordering
15867              rules.  (nathan).  */
15868           if (quals1 >= 0)
15869             {
15870               switch (TREE_CODE (arg1))
15871                 {
15872                 case ARRAY_TYPE:
15873                   arg1 = TREE_TYPE (arg1);
15874                   /* FALLTHROUGH. */
15875                 case FUNCTION_TYPE:
15876                   arg1 = build_pointer_type (arg1);
15877                   break;
15878
15879                 default:
15880                   break;
15881                 }
15882             }
15883           else
15884             {
15885               switch (TREE_CODE (arg2))
15886                 {
15887                 case ARRAY_TYPE:
15888                   arg2 = TREE_TYPE (arg2);
15889                   /* FALLTHROUGH. */
15890                 case FUNCTION_TYPE:
15891                   arg2 = build_pointer_type (arg2);
15892                   break;
15893
15894                 default:
15895                   break;
15896                 }
15897             }
15898         }
15899
15900       arg1 = TYPE_MAIN_VARIANT (arg1);
15901       arg2 = TYPE_MAIN_VARIANT (arg2);
15902
15903       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
15904         {
15905           int i, len2 = list_length (args2);
15906           tree parmvec = make_tree_vec (1);
15907           tree argvec = make_tree_vec (len2);
15908           tree ta = args2;
15909
15910           /* Setup the parameter vector, which contains only ARG1.  */
15911           TREE_VEC_ELT (parmvec, 0) = arg1;
15912
15913           /* Setup the argument vector, which contains the remaining
15914              arguments.  */
15915           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
15916             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
15917
15918           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
15919                                            argvec, UNIFY_ALLOW_NONE, 
15920                                            /*call_args_p=*/false, 
15921                                            /*subr=*/0);
15922
15923           /* We cannot deduce in the other direction, because ARG1 is
15924              a pack expansion but ARG2 is not.  */
15925           deduce2 = 0;
15926         }
15927       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15928         {
15929           int i, len1 = list_length (args1);
15930           tree parmvec = make_tree_vec (1);
15931           tree argvec = make_tree_vec (len1);
15932           tree ta = args1;
15933
15934           /* Setup the parameter vector, which contains only ARG1.  */
15935           TREE_VEC_ELT (parmvec, 0) = arg2;
15936
15937           /* Setup the argument vector, which contains the remaining
15938              arguments.  */
15939           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
15940             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
15941
15942           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
15943                                            argvec, UNIFY_ALLOW_NONE, 
15944                                            /*call_args_p=*/false, 
15945                                            /*subr=*/0);
15946
15947           /* We cannot deduce in the other direction, because ARG2 is
15948              a pack expansion but ARG1 is not.*/
15949           deduce1 = 0;
15950         }
15951
15952       else
15953         {
15954           /* The normal case, where neither argument is a pack
15955              expansion.  */
15956           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
15957           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
15958         }
15959
15960       /* If we couldn't deduce arguments for tparms1 to make arg1 match
15961          arg2, then arg2 is not as specialized as arg1.  */
15962       if (!deduce1)
15963         lose2 = true;
15964       if (!deduce2)
15965         lose1 = true;
15966
15967       /* "If, for a given type, deduction succeeds in both directions
15968          (i.e., the types are identical after the transformations above)
15969          and if the type from the argument template is more cv-qualified
15970          than the type from the parameter template (as described above)
15971          that type is considered to be more specialized than the other. If
15972          neither type is more cv-qualified than the other then neither type
15973          is more specialized than the other."  */
15974
15975       if (deduce1 && deduce2
15976           && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
15977         {
15978           if ((quals1 & quals2) == quals2)
15979             lose2 = true;
15980           if ((quals1 & quals2) == quals1)
15981             lose1 = true;
15982         }
15983
15984       if (lose1 && lose2)
15985         /* We've failed to deduce something in either direction.
15986            These must be unordered.  */
15987         break;
15988
15989       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
15990           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15991         /* We have already processed all of the arguments in our
15992            handing of the pack expansion type.  */
15993         len = 0;
15994
15995       args1 = TREE_CHAIN (args1);
15996       args2 = TREE_CHAIN (args2);
15997     }
15998
15999   /* "In most cases, all template parameters must have values in order for
16000      deduction to succeed, but for partial ordering purposes a template
16001      parameter may remain without a value provided it is not used in the
16002      types being used for partial ordering."
16003
16004      Thus, if we are missing any of the targs1 we need to substitute into
16005      origs1, then pat2 is not as specialized as pat1.  This can happen when
16006      there is a nondeduced context.  */
16007   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
16008     lose2 = true;
16009   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
16010     lose1 = true;
16011
16012   processing_template_decl--;
16013
16014   /* All things being equal, if the next argument is a pack expansion
16015      for one function but not for the other, prefer the
16016      non-variadic function.  FIXME this is bogus; see c++/41958.  */
16017   if (lose1 == lose2
16018       && args1 && TREE_VALUE (args1)
16019       && args2 && TREE_VALUE (args2))
16020     {
16021       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
16022       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
16023     }
16024
16025   if (lose1 == lose2)
16026     return 0;
16027   else if (!lose1)
16028     return 1;
16029   else
16030     return -1;
16031 }
16032
16033 /* Determine which of two partial specializations is more specialized.
16034
16035    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
16036    to the first partial specialization.  The TREE_VALUE is the
16037    innermost set of template parameters for the partial
16038    specialization.  PAT2 is similar, but for the second template.
16039
16040    Return 1 if the first partial specialization is more specialized;
16041    -1 if the second is more specialized; 0 if neither is more
16042    specialized.
16043
16044    See [temp.class.order] for information about determining which of
16045    two templates is more specialized.  */
16046
16047 static int
16048 more_specialized_class (tree pat1, tree pat2)
16049 {
16050   tree targs;
16051   tree tmpl1, tmpl2;
16052   int winner = 0;
16053   bool any_deductions = false;
16054
16055   tmpl1 = TREE_TYPE (pat1);
16056   tmpl2 = TREE_TYPE (pat2);
16057
16058   /* Just like what happens for functions, if we are ordering between
16059      different class template specializations, we may encounter dependent
16060      types in the arguments, and we need our dependency check functions
16061      to behave correctly.  */
16062   ++processing_template_decl;
16063   targs = get_class_bindings (TREE_VALUE (pat1),
16064                               CLASSTYPE_TI_ARGS (tmpl1),
16065                               CLASSTYPE_TI_ARGS (tmpl2));
16066   if (targs)
16067     {
16068       --winner;
16069       any_deductions = true;
16070     }
16071
16072   targs = get_class_bindings (TREE_VALUE (pat2),
16073                               CLASSTYPE_TI_ARGS (tmpl2),
16074                               CLASSTYPE_TI_ARGS (tmpl1));
16075   if (targs)
16076     {
16077       ++winner;
16078       any_deductions = true;
16079     }
16080   --processing_template_decl;
16081
16082   /* In the case of a tie where at least one of the class templates
16083      has a parameter pack at the end, the template with the most
16084      non-packed parameters wins.  */
16085   if (winner == 0
16086       && any_deductions
16087       && (template_args_variadic_p (TREE_PURPOSE (pat1))
16088           || template_args_variadic_p (TREE_PURPOSE (pat2))))
16089     {
16090       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
16091       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
16092       int len1 = TREE_VEC_LENGTH (args1);
16093       int len2 = TREE_VEC_LENGTH (args2);
16094
16095       /* We don't count the pack expansion at the end.  */
16096       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
16097         --len1;
16098       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
16099         --len2;
16100
16101       if (len1 > len2)
16102         return 1;
16103       else if (len1 < len2)
16104         return -1;
16105     }
16106
16107   return winner;
16108 }
16109
16110 /* Return the template arguments that will produce the function signature
16111    DECL from the function template FN, with the explicit template
16112    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
16113    also match.  Return NULL_TREE if no satisfactory arguments could be
16114    found.  */
16115
16116 static tree
16117 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
16118 {
16119   int ntparms = DECL_NTPARMS (fn);
16120   tree targs = make_tree_vec (ntparms);
16121   tree decl_type;
16122   tree decl_arg_types;
16123   tree *args;
16124   unsigned int nargs, ix;
16125   tree arg;
16126
16127   /* Substitute the explicit template arguments into the type of DECL.
16128      The call to fn_type_unification will handle substitution into the
16129      FN.  */
16130   decl_type = TREE_TYPE (decl);
16131   if (explicit_args && uses_template_parms (decl_type))
16132     {
16133       tree tmpl;
16134       tree converted_args;
16135
16136       if (DECL_TEMPLATE_INFO (decl))
16137         tmpl = DECL_TI_TEMPLATE (decl);
16138       else
16139         /* We can get here for some invalid specializations.  */
16140         return NULL_TREE;
16141
16142       converted_args
16143         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
16144                                  explicit_args, NULL_TREE,
16145                                  tf_none,
16146                                  /*require_all_args=*/false,
16147                                  /*use_default_args=*/false);
16148       if (converted_args == error_mark_node)
16149         return NULL_TREE;
16150
16151       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
16152       if (decl_type == error_mark_node)
16153         return NULL_TREE;
16154     }
16155
16156   /* Never do unification on the 'this' parameter.  */
16157   decl_arg_types = skip_artificial_parms_for (decl, 
16158                                               TYPE_ARG_TYPES (decl_type));
16159
16160   nargs = list_length (decl_arg_types);
16161   args = XALLOCAVEC (tree, nargs);
16162   for (arg = decl_arg_types, ix = 0;
16163        arg != NULL_TREE && arg != void_list_node;
16164        arg = TREE_CHAIN (arg), ++ix)
16165     args[ix] = TREE_VALUE (arg);
16166
16167   if (fn_type_unification (fn, explicit_args, targs,
16168                            args, ix,
16169                            (check_rettype || DECL_CONV_FN_P (fn)
16170                             ? TREE_TYPE (decl_type) : NULL_TREE),
16171                            DEDUCE_EXACT, LOOKUP_NORMAL))
16172     return NULL_TREE;
16173
16174   return targs;
16175 }
16176
16177 /* Return the innermost template arguments that, when applied to a
16178    template specialization whose innermost template parameters are
16179    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
16180    ARGS.
16181
16182    For example, suppose we have:
16183
16184      template <class T, class U> struct S {};
16185      template <class T> struct S<T*, int> {};
16186
16187    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
16188    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
16189    int}.  The resulting vector will be {double}, indicating that `T'
16190    is bound to `double'.  */
16191
16192 static tree
16193 get_class_bindings (tree tparms, tree spec_args, tree args)
16194 {
16195   int i, ntparms = TREE_VEC_LENGTH (tparms);
16196   tree deduced_args;
16197   tree innermost_deduced_args;
16198
16199   innermost_deduced_args = make_tree_vec (ntparms);
16200   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
16201     {
16202       deduced_args = copy_node (args);
16203       SET_TMPL_ARGS_LEVEL (deduced_args,
16204                            TMPL_ARGS_DEPTH (deduced_args),
16205                            innermost_deduced_args);
16206     }
16207   else
16208     deduced_args = innermost_deduced_args;
16209
16210   if (unify (tparms, deduced_args,
16211              INNERMOST_TEMPLATE_ARGS (spec_args),
16212              INNERMOST_TEMPLATE_ARGS (args),
16213              UNIFY_ALLOW_NONE))
16214     return NULL_TREE;
16215
16216   for (i =  0; i < ntparms; ++i)
16217     if (! TREE_VEC_ELT (innermost_deduced_args, i))
16218       return NULL_TREE;
16219
16220   /* Verify that nondeduced template arguments agree with the type
16221      obtained from argument deduction.
16222
16223      For example:
16224
16225        struct A { typedef int X; };
16226        template <class T, class U> struct C {};
16227        template <class T> struct C<T, typename T::X> {};
16228
16229      Then with the instantiation `C<A, int>', we can deduce that
16230      `T' is `A' but unify () does not check whether `typename T::X'
16231      is `int'.  */
16232   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
16233   if (spec_args == error_mark_node
16234       /* We only need to check the innermost arguments; the other
16235          arguments will always agree.  */
16236       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
16237                               INNERMOST_TEMPLATE_ARGS (args)))
16238     return NULL_TREE;
16239
16240   /* Now that we have bindings for all of the template arguments,
16241      ensure that the arguments deduced for the template template
16242      parameters have compatible template parameter lists.  See the use
16243      of template_template_parm_bindings_ok_p in fn_type_unification
16244      for more information.  */
16245   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
16246     return NULL_TREE;
16247
16248   return deduced_args;
16249 }
16250
16251 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
16252    Return the TREE_LIST node with the most specialized template, if
16253    any.  If there is no most specialized template, the error_mark_node
16254    is returned.
16255
16256    Note that this function does not look at, or modify, the
16257    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
16258    returned is one of the elements of INSTANTIATIONS, callers may
16259    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
16260    and retrieve it from the value returned.  */
16261
16262 tree
16263 most_specialized_instantiation (tree templates)
16264 {
16265   tree fn, champ;
16266
16267   ++processing_template_decl;
16268
16269   champ = templates;
16270   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
16271     {
16272       int fate = 0;
16273
16274       if (get_bindings (TREE_VALUE (champ),
16275                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
16276                         NULL_TREE, /*check_ret=*/false))
16277         fate--;
16278
16279       if (get_bindings (TREE_VALUE (fn),
16280                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
16281                         NULL_TREE, /*check_ret=*/false))
16282         fate++;
16283
16284       if (fate == -1)
16285         champ = fn;
16286       else if (!fate)
16287         {
16288           /* Equally specialized, move to next function.  If there
16289              is no next function, nothing's most specialized.  */
16290           fn = TREE_CHAIN (fn);
16291           champ = fn;
16292           if (!fn)
16293             break;
16294         }
16295     }
16296
16297   if (champ)
16298     /* Now verify that champ is better than everything earlier in the
16299        instantiation list.  */
16300     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
16301       if (get_bindings (TREE_VALUE (champ),
16302                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
16303                         NULL_TREE, /*check_ret=*/false)
16304           || !get_bindings (TREE_VALUE (fn),
16305                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
16306                             NULL_TREE, /*check_ret=*/false))
16307         {
16308           champ = NULL_TREE;
16309           break;
16310         }
16311
16312   processing_template_decl--;
16313
16314   if (!champ)
16315     return error_mark_node;
16316
16317   return champ;
16318 }
16319
16320 /* If DECL is a specialization of some template, return the most
16321    general such template.  Otherwise, returns NULL_TREE.
16322
16323    For example, given:
16324
16325      template <class T> struct S { template <class U> void f(U); };
16326
16327    if TMPL is `template <class U> void S<int>::f(U)' this will return
16328    the full template.  This function will not trace past partial
16329    specializations, however.  For example, given in addition:
16330
16331      template <class T> struct S<T*> { template <class U> void f(U); };
16332
16333    if TMPL is `template <class U> void S<int*>::f(U)' this will return
16334    `template <class T> template <class U> S<T*>::f(U)'.  */
16335
16336 tree
16337 most_general_template (tree decl)
16338 {
16339   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
16340      an immediate specialization.  */
16341   if (TREE_CODE (decl) == FUNCTION_DECL)
16342     {
16343       if (DECL_TEMPLATE_INFO (decl)) {
16344         decl = DECL_TI_TEMPLATE (decl);
16345
16346         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
16347            template friend.  */
16348         if (TREE_CODE (decl) != TEMPLATE_DECL)
16349           return NULL_TREE;
16350       } else
16351         return NULL_TREE;
16352     }
16353
16354   /* Look for more and more general templates.  */
16355   while (DECL_TEMPLATE_INFO (decl))
16356     {
16357       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
16358          (See cp-tree.h for details.)  */
16359       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
16360         break;
16361
16362       if (CLASS_TYPE_P (TREE_TYPE (decl))
16363           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
16364         break;
16365
16366       /* Stop if we run into an explicitly specialized class template.  */
16367       if (!DECL_NAMESPACE_SCOPE_P (decl)
16368           && DECL_CONTEXT (decl)
16369           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
16370         break;
16371
16372       decl = DECL_TI_TEMPLATE (decl);
16373     }
16374
16375   return decl;
16376 }
16377
16378 /* Return the most specialized of the class template partial
16379    specializations of TMPL which can produce TYPE, a specialization of
16380    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
16381    a _TYPE node corresponding to the partial specialization, while the
16382    TREE_PURPOSE is the set of template arguments that must be
16383    substituted into the TREE_TYPE in order to generate TYPE.
16384
16385    If the choice of partial specialization is ambiguous, a diagnostic
16386    is issued, and the error_mark_node is returned.  If there are no
16387    partial specializations of TMPL matching TYPE, then NULL_TREE is
16388    returned.  */
16389
16390 static tree
16391 most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
16392 {
16393   tree list = NULL_TREE;
16394   tree t;
16395   tree champ;
16396   int fate;
16397   bool ambiguous_p;
16398   tree args;
16399   tree outer_args = NULL_TREE;
16400
16401   tmpl = most_general_template (tmpl);
16402   args = CLASSTYPE_TI_ARGS (type);
16403
16404   /* For determining which partial specialization to use, only the
16405      innermost args are interesting.  */
16406   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
16407     {
16408       outer_args = strip_innermost_template_args (args, 1);
16409       args = INNERMOST_TEMPLATE_ARGS (args);
16410     }
16411
16412   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
16413     {
16414       tree partial_spec_args;
16415       tree spec_args;
16416       tree parms = TREE_VALUE (t);
16417
16418       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
16419
16420       ++processing_template_decl;
16421
16422       if (outer_args)
16423         {
16424           int i;
16425
16426           /* Discard the outer levels of args, and then substitute in the
16427              template args from the enclosing class.  */
16428           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
16429           partial_spec_args = tsubst_template_args
16430             (partial_spec_args, outer_args, tf_none, NULL_TREE);
16431
16432           /* PARMS already refers to just the innermost parms, but the
16433              template parms in partial_spec_args had their levels lowered
16434              by tsubst, so we need to do the same for the parm list.  We
16435              can't just tsubst the TREE_VEC itself, as tsubst wants to
16436              treat a TREE_VEC as an argument vector.  */
16437           parms = copy_node (parms);
16438           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
16439             TREE_VEC_ELT (parms, i) =
16440               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
16441
16442         }
16443
16444       partial_spec_args =
16445           coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
16446                                  add_to_template_args (outer_args,
16447                                                        partial_spec_args),
16448                                  tmpl, tf_none,
16449                                  /*require_all_args=*/true,
16450                                  /*use_default_args=*/true);
16451
16452       --processing_template_decl;
16453
16454       if (partial_spec_args == error_mark_node)
16455         return error_mark_node;
16456
16457       spec_args = get_class_bindings (parms,
16458                                       partial_spec_args,
16459                                       args);
16460       if (spec_args)
16461         {
16462           if (outer_args)
16463             spec_args = add_to_template_args (outer_args, spec_args);
16464           list = tree_cons (spec_args, TREE_VALUE (t), list);
16465           TREE_TYPE (list) = TREE_TYPE (t);
16466         }
16467     }
16468
16469   if (! list)
16470     return NULL_TREE;
16471
16472   ambiguous_p = false;
16473   t = list;
16474   champ = t;
16475   t = TREE_CHAIN (t);
16476   for (; t; t = TREE_CHAIN (t))
16477     {
16478       fate = more_specialized_class (champ, t);
16479       if (fate == 1)
16480         ;
16481       else
16482         {
16483           if (fate == 0)
16484             {
16485               t = TREE_CHAIN (t);
16486               if (! t)
16487                 {
16488                   ambiguous_p = true;
16489                   break;
16490                 }
16491             }
16492           champ = t;
16493         }
16494     }
16495
16496   if (!ambiguous_p)
16497     for (t = list; t && t != champ; t = TREE_CHAIN (t))
16498       {
16499         fate = more_specialized_class (champ, t);
16500         if (fate != 1)
16501           {
16502             ambiguous_p = true;
16503             break;
16504           }
16505       }
16506
16507   if (ambiguous_p)
16508     {
16509       const char *str;
16510       char *spaces = NULL;
16511       if (!(complain & tf_error))
16512         return error_mark_node;
16513       error ("ambiguous class template instantiation for %q#T", type);
16514       str = TREE_CHAIN (list) ? _("candidates are:") : _("candidate is:");
16515       for (t = list; t; t = TREE_CHAIN (t))
16516         {
16517           error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
16518           spaces = spaces ? spaces : get_spaces (str);
16519         }
16520       free (spaces);
16521       return error_mark_node;
16522     }
16523
16524   return champ;
16525 }
16526
16527 /* Explicitly instantiate DECL.  */
16528
16529 void
16530 do_decl_instantiation (tree decl, tree storage)
16531 {
16532   tree result = NULL_TREE;
16533   int extern_p = 0;
16534
16535   if (!decl || decl == error_mark_node)
16536     /* An error occurred, for which grokdeclarator has already issued
16537        an appropriate message.  */
16538     return;
16539   else if (! DECL_LANG_SPECIFIC (decl))
16540     {
16541       error ("explicit instantiation of non-template %q#D", decl);
16542       return;
16543     }
16544   else if (TREE_CODE (decl) == VAR_DECL)
16545     {
16546       /* There is an asymmetry here in the way VAR_DECLs and
16547          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
16548          the latter, the DECL we get back will be marked as a
16549          template instantiation, and the appropriate
16550          DECL_TEMPLATE_INFO will be set up.  This does not happen for
16551          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
16552          should handle VAR_DECLs as it currently handles
16553          FUNCTION_DECLs.  */
16554       if (!DECL_CLASS_SCOPE_P (decl))
16555         {
16556           error ("%qD is not a static data member of a class template", decl);
16557           return;
16558         }
16559       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
16560       if (!result || TREE_CODE (result) != VAR_DECL)
16561         {
16562           error ("no matching template for %qD found", decl);
16563           return;
16564         }
16565       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
16566         {
16567           error ("type %qT for explicit instantiation %qD does not match "
16568                  "declared type %qT", TREE_TYPE (result), decl,
16569                  TREE_TYPE (decl));
16570           return;
16571         }
16572     }
16573   else if (TREE_CODE (decl) != FUNCTION_DECL)
16574     {
16575       error ("explicit instantiation of %q#D", decl);
16576       return;
16577     }
16578   else
16579     result = decl;
16580
16581   /* Check for various error cases.  Note that if the explicit
16582      instantiation is valid the RESULT will currently be marked as an
16583      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
16584      until we get here.  */
16585
16586   if (DECL_TEMPLATE_SPECIALIZATION (result))
16587     {
16588       /* DR 259 [temp.spec].
16589
16590          Both an explicit instantiation and a declaration of an explicit
16591          specialization shall not appear in a program unless the explicit
16592          instantiation follows a declaration of the explicit specialization.
16593
16594          For a given set of template parameters, if an explicit
16595          instantiation of a template appears after a declaration of an
16596          explicit specialization for that template, the explicit
16597          instantiation has no effect.  */
16598       return;
16599     }
16600   else if (DECL_EXPLICIT_INSTANTIATION (result))
16601     {
16602       /* [temp.spec]
16603
16604          No program shall explicitly instantiate any template more
16605          than once.
16606
16607          We check DECL_NOT_REALLY_EXTERN so as not to complain when
16608          the first instantiation was `extern' and the second is not,
16609          and EXTERN_P for the opposite case.  */
16610       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
16611         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
16612       /* If an "extern" explicit instantiation follows an ordinary
16613          explicit instantiation, the template is instantiated.  */
16614       if (extern_p)
16615         return;
16616     }
16617   else if (!DECL_IMPLICIT_INSTANTIATION (result))
16618     {
16619       error ("no matching template for %qD found", result);
16620       return;
16621     }
16622   else if (!DECL_TEMPLATE_INFO (result))
16623     {
16624       permerror (input_location, "explicit instantiation of non-template %q#D", result);
16625       return;
16626     }
16627
16628   if (storage == NULL_TREE)
16629     ;
16630   else if (storage == ridpointers[(int) RID_EXTERN])
16631     {
16632       if (!in_system_header && (cxx_dialect == cxx98))
16633         pedwarn (input_location, OPT_pedantic, 
16634                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
16635                  "instantiations");
16636       extern_p = 1;
16637     }
16638   else
16639     error ("storage class %qD applied to template instantiation", storage);
16640
16641   check_explicit_instantiation_namespace (result);
16642   mark_decl_instantiated (result, extern_p);
16643   if (! extern_p)
16644     instantiate_decl (result, /*defer_ok=*/1,
16645                       /*expl_inst_class_mem_p=*/false);
16646 }
16647
16648 static void
16649 mark_class_instantiated (tree t, int extern_p)
16650 {
16651   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
16652   SET_CLASSTYPE_INTERFACE_KNOWN (t);
16653   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
16654   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
16655   if (! extern_p)
16656     {
16657       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
16658       rest_of_type_compilation (t, 1);
16659     }
16660 }
16661
16662 /* Called from do_type_instantiation through binding_table_foreach to
16663    do recursive instantiation for the type bound in ENTRY.  */
16664 static void
16665 bt_instantiate_type_proc (binding_entry entry, void *data)
16666 {
16667   tree storage = *(tree *) data;
16668
16669   if (MAYBE_CLASS_TYPE_P (entry->type)
16670       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
16671     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
16672 }
16673
16674 /* Called from do_type_instantiation to instantiate a member
16675    (a member function or a static member variable) of an
16676    explicitly instantiated class template.  */
16677 static void
16678 instantiate_class_member (tree decl, int extern_p)
16679 {
16680   mark_decl_instantiated (decl, extern_p);
16681   if (! extern_p)
16682     instantiate_decl (decl, /*defer_ok=*/1,
16683                       /*expl_inst_class_mem_p=*/true);
16684 }
16685
16686 /* Perform an explicit instantiation of template class T.  STORAGE, if
16687    non-null, is the RID for extern, inline or static.  COMPLAIN is
16688    nonzero if this is called from the parser, zero if called recursively,
16689    since the standard is unclear (as detailed below).  */
16690
16691 void
16692 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
16693 {
16694   int extern_p = 0;
16695   int nomem_p = 0;
16696   int static_p = 0;
16697   int previous_instantiation_extern_p = 0;
16698
16699   if (TREE_CODE (t) == TYPE_DECL)
16700     t = TREE_TYPE (t);
16701
16702   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
16703     {
16704       error ("explicit instantiation of non-template type %qT", t);
16705       return;
16706     }
16707
16708   complete_type (t);
16709
16710   if (!COMPLETE_TYPE_P (t))
16711     {
16712       if (complain & tf_error)
16713         error ("explicit instantiation of %q#T before definition of template",
16714                t);
16715       return;
16716     }
16717
16718   if (storage != NULL_TREE)
16719     {
16720       if (!in_system_header)
16721         {
16722           if (storage == ridpointers[(int) RID_EXTERN])
16723             {
16724               if (cxx_dialect == cxx98)
16725                 pedwarn (input_location, OPT_pedantic, 
16726                          "ISO C++ 1998 forbids the use of %<extern%> on "
16727                          "explicit instantiations");
16728             }
16729           else
16730             pedwarn (input_location, OPT_pedantic, 
16731                      "ISO C++ forbids the use of %qE"
16732                      " on explicit instantiations", storage);
16733         }
16734
16735       if (storage == ridpointers[(int) RID_INLINE])
16736         nomem_p = 1;
16737       else if (storage == ridpointers[(int) RID_EXTERN])
16738         extern_p = 1;
16739       else if (storage == ridpointers[(int) RID_STATIC])
16740         static_p = 1;
16741       else
16742         {
16743           error ("storage class %qD applied to template instantiation",
16744                  storage);
16745           extern_p = 0;
16746         }
16747     }
16748
16749   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
16750     {
16751       /* DR 259 [temp.spec].
16752
16753          Both an explicit instantiation and a declaration of an explicit
16754          specialization shall not appear in a program unless the explicit
16755          instantiation follows a declaration of the explicit specialization.
16756
16757          For a given set of template parameters, if an explicit
16758          instantiation of a template appears after a declaration of an
16759          explicit specialization for that template, the explicit
16760          instantiation has no effect.  */
16761       return;
16762     }
16763   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
16764     {
16765       /* [temp.spec]
16766
16767          No program shall explicitly instantiate any template more
16768          than once.
16769
16770          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
16771          instantiation was `extern'.  If EXTERN_P then the second is.
16772          These cases are OK.  */
16773       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
16774
16775       if (!previous_instantiation_extern_p && !extern_p
16776           && (complain & tf_error))
16777         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
16778
16779       /* If we've already instantiated the template, just return now.  */
16780       if (!CLASSTYPE_INTERFACE_ONLY (t))
16781         return;
16782     }
16783
16784   check_explicit_instantiation_namespace (TYPE_NAME (t));
16785   mark_class_instantiated (t, extern_p);
16786
16787   if (nomem_p)
16788     return;
16789
16790   {
16791     tree tmp;
16792
16793     /* In contrast to implicit instantiation, where only the
16794        declarations, and not the definitions, of members are
16795        instantiated, we have here:
16796
16797          [temp.explicit]
16798
16799          The explicit instantiation of a class template specialization
16800          implies the instantiation of all of its members not
16801          previously explicitly specialized in the translation unit
16802          containing the explicit instantiation.
16803
16804        Of course, we can't instantiate member template classes, since
16805        we don't have any arguments for them.  Note that the standard
16806        is unclear on whether the instantiation of the members are
16807        *explicit* instantiations or not.  However, the most natural
16808        interpretation is that it should be an explicit instantiation.  */
16809
16810     if (! static_p)
16811       for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
16812         if (TREE_CODE (tmp) == FUNCTION_DECL
16813             && DECL_TEMPLATE_INSTANTIATION (tmp))
16814           instantiate_class_member (tmp, extern_p);
16815
16816     for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
16817       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
16818         instantiate_class_member (tmp, extern_p);
16819
16820     if (CLASSTYPE_NESTED_UTDS (t))
16821       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
16822                              bt_instantiate_type_proc, &storage);
16823   }
16824 }
16825
16826 /* Given a function DECL, which is a specialization of TMPL, modify
16827    DECL to be a re-instantiation of TMPL with the same template
16828    arguments.  TMPL should be the template into which tsubst'ing
16829    should occur for DECL, not the most general template.
16830
16831    One reason for doing this is a scenario like this:
16832
16833      template <class T>
16834      void f(const T&, int i);
16835
16836      void g() { f(3, 7); }
16837
16838      template <class T>
16839      void f(const T& t, const int i) { }
16840
16841    Note that when the template is first instantiated, with
16842    instantiate_template, the resulting DECL will have no name for the
16843    first parameter, and the wrong type for the second.  So, when we go
16844    to instantiate the DECL, we regenerate it.  */
16845
16846 static void
16847 regenerate_decl_from_template (tree decl, tree tmpl)
16848 {
16849   /* The arguments used to instantiate DECL, from the most general
16850      template.  */
16851   tree args;
16852   tree code_pattern;
16853
16854   args = DECL_TI_ARGS (decl);
16855   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
16856
16857   /* Make sure that we can see identifiers, and compute access
16858      correctly.  */
16859   push_access_scope (decl);
16860
16861   if (TREE_CODE (decl) == FUNCTION_DECL)
16862     {
16863       tree decl_parm;
16864       tree pattern_parm;
16865       tree specs;
16866       int args_depth;
16867       int parms_depth;
16868
16869       args_depth = TMPL_ARGS_DEPTH (args);
16870       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
16871       if (args_depth > parms_depth)
16872         args = get_innermost_template_args (args, parms_depth);
16873
16874       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
16875                                               args, tf_error, NULL_TREE);
16876       if (specs)
16877         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
16878                                                     specs);
16879
16880       /* Merge parameter declarations.  */
16881       decl_parm = skip_artificial_parms_for (decl,
16882                                              DECL_ARGUMENTS (decl));
16883       pattern_parm
16884         = skip_artificial_parms_for (code_pattern,
16885                                      DECL_ARGUMENTS (code_pattern));
16886       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
16887         {
16888           tree parm_type;
16889           tree attributes;
16890           
16891           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
16892             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
16893           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
16894                               NULL_TREE);
16895           parm_type = type_decays_to (parm_type);
16896           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
16897             TREE_TYPE (decl_parm) = parm_type;
16898           attributes = DECL_ATTRIBUTES (pattern_parm);
16899           if (DECL_ATTRIBUTES (decl_parm) != attributes)
16900             {
16901               DECL_ATTRIBUTES (decl_parm) = attributes;
16902               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
16903             }
16904           decl_parm = DECL_CHAIN (decl_parm);
16905           pattern_parm = DECL_CHAIN (pattern_parm);
16906         }
16907       /* Merge any parameters that match with the function parameter
16908          pack.  */
16909       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
16910         {
16911           int i, len;
16912           tree expanded_types;
16913           /* Expand the TYPE_PACK_EXPANSION that provides the types for
16914              the parameters in this function parameter pack.  */
16915           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
16916                                                  args, tf_error, NULL_TREE);
16917           len = TREE_VEC_LENGTH (expanded_types);
16918           for (i = 0; i < len; i++)
16919             {
16920               tree parm_type;
16921               tree attributes;
16922           
16923               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
16924                 /* Rename the parameter to include the index.  */
16925                 DECL_NAME (decl_parm) = 
16926                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
16927               parm_type = TREE_VEC_ELT (expanded_types, i);
16928               parm_type = type_decays_to (parm_type);
16929               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
16930                 TREE_TYPE (decl_parm) = parm_type;
16931               attributes = DECL_ATTRIBUTES (pattern_parm);
16932               if (DECL_ATTRIBUTES (decl_parm) != attributes)
16933                 {
16934                   DECL_ATTRIBUTES (decl_parm) = attributes;
16935                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
16936                 }
16937               decl_parm = DECL_CHAIN (decl_parm);
16938             }
16939         }
16940       /* Merge additional specifiers from the CODE_PATTERN.  */
16941       if (DECL_DECLARED_INLINE_P (code_pattern)
16942           && !DECL_DECLARED_INLINE_P (decl))
16943         DECL_DECLARED_INLINE_P (decl) = 1;
16944     }
16945   else if (TREE_CODE (decl) == VAR_DECL)
16946     {
16947       DECL_INITIAL (decl) =
16948         tsubst_expr (DECL_INITIAL (code_pattern), args,
16949                      tf_error, DECL_TI_TEMPLATE (decl),
16950                      /*integral_constant_expression_p=*/false);
16951       if (VAR_HAD_UNKNOWN_BOUND (decl))
16952         TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
16953                                    tf_error, DECL_TI_TEMPLATE (decl));
16954     }
16955   else
16956     gcc_unreachable ();
16957
16958   pop_access_scope (decl);
16959 }
16960
16961 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
16962    substituted to get DECL.  */
16963
16964 tree
16965 template_for_substitution (tree decl)
16966 {
16967   tree tmpl = DECL_TI_TEMPLATE (decl);
16968
16969   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
16970      for the instantiation.  This is not always the most general
16971      template.  Consider, for example:
16972
16973         template <class T>
16974         struct S { template <class U> void f();
16975                    template <> void f<int>(); };
16976
16977      and an instantiation of S<double>::f<int>.  We want TD to be the
16978      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
16979   while (/* An instantiation cannot have a definition, so we need a
16980             more general template.  */
16981          DECL_TEMPLATE_INSTANTIATION (tmpl)
16982            /* We must also deal with friend templates.  Given:
16983
16984                 template <class T> struct S {
16985                   template <class U> friend void f() {};
16986                 };
16987
16988               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
16989               so far as the language is concerned, but that's still
16990               where we get the pattern for the instantiation from.  On
16991               other hand, if the definition comes outside the class, say:
16992
16993                 template <class T> struct S {
16994                   template <class U> friend void f();
16995                 };
16996                 template <class U> friend void f() {}
16997
16998               we don't need to look any further.  That's what the check for
16999               DECL_INITIAL is for.  */
17000           || (TREE_CODE (decl) == FUNCTION_DECL
17001               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
17002               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
17003     {
17004       /* The present template, TD, should not be a definition.  If it
17005          were a definition, we should be using it!  Note that we
17006          cannot restructure the loop to just keep going until we find
17007          a template with a definition, since that might go too far if
17008          a specialization was declared, but not defined.  */
17009       gcc_assert (TREE_CODE (decl) != VAR_DECL
17010                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
17011
17012       /* Fetch the more general template.  */
17013       tmpl = DECL_TI_TEMPLATE (tmpl);
17014     }
17015
17016   return tmpl;
17017 }
17018
17019 /* Returns true if we need to instantiate this template instance even if we
17020    know we aren't going to emit it..  */
17021
17022 bool
17023 always_instantiate_p (tree decl)
17024 {
17025   /* We always instantiate inline functions so that we can inline them.  An
17026      explicit instantiation declaration prohibits implicit instantiation of
17027      non-inline functions.  With high levels of optimization, we would
17028      normally inline non-inline functions -- but we're not allowed to do
17029      that for "extern template" functions.  Therefore, we check
17030      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
17031   return ((TREE_CODE (decl) == FUNCTION_DECL
17032            && DECL_DECLARED_INLINE_P (decl))
17033           /* And we need to instantiate static data members so that
17034              their initializers are available in integral constant
17035              expressions.  */
17036           || (TREE_CODE (decl) == VAR_DECL
17037               && decl_maybe_constant_var_p (decl)));
17038 }
17039
17040 /* Produce the definition of D, a _DECL generated from a template.  If
17041    DEFER_OK is nonzero, then we don't have to actually do the
17042    instantiation now; we just have to do it sometime.  Normally it is
17043    an error if this is an explicit instantiation but D is undefined.
17044    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
17045    explicitly instantiated class template.  */
17046
17047 tree
17048 instantiate_decl (tree d, int defer_ok,
17049                   bool expl_inst_class_mem_p)
17050 {
17051   tree tmpl = DECL_TI_TEMPLATE (d);
17052   tree gen_args;
17053   tree args;
17054   tree td;
17055   tree code_pattern;
17056   tree spec;
17057   tree gen_tmpl;
17058   bool pattern_defined;
17059   int need_push;
17060   location_t saved_loc = input_location;
17061   bool external_p;
17062
17063   /* This function should only be used to instantiate templates for
17064      functions and static member variables.  */
17065   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
17066               || TREE_CODE (d) == VAR_DECL);
17067
17068   /* Variables are never deferred; if instantiation is required, they
17069      are instantiated right away.  That allows for better code in the
17070      case that an expression refers to the value of the variable --
17071      if the variable has a constant value the referring expression can
17072      take advantage of that fact.  */
17073   if (TREE_CODE (d) == VAR_DECL
17074       || DECL_DECLARED_CONSTEXPR_P (d))
17075     defer_ok = 0;
17076
17077   /* Don't instantiate cloned functions.  Instead, instantiate the
17078      functions they cloned.  */
17079   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
17080     d = DECL_CLONED_FUNCTION (d);
17081
17082   if (DECL_TEMPLATE_INSTANTIATED (d)
17083       || DECL_TEMPLATE_SPECIALIZATION (d))
17084     /* D has already been instantiated or explicitly specialized, so
17085        there's nothing for us to do here.
17086
17087        It might seem reasonable to check whether or not D is an explicit
17088        instantiation, and, if so, stop here.  But when an explicit
17089        instantiation is deferred until the end of the compilation,
17090        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
17091        the instantiation.  */
17092     return d;
17093
17094   /* Check to see whether we know that this template will be
17095      instantiated in some other file, as with "extern template"
17096      extension.  */
17097   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
17098
17099   /* In general, we do not instantiate such templates.  */
17100   if (external_p && !always_instantiate_p (d))
17101     return d;
17102
17103   gen_tmpl = most_general_template (tmpl);
17104   gen_args = DECL_TI_ARGS (d);
17105
17106   if (tmpl != gen_tmpl)
17107     /* We should already have the extra args.  */
17108     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
17109                 == TMPL_ARGS_DEPTH (gen_args));
17110   /* And what's in the hash table should match D.  */
17111   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
17112               || spec == NULL_TREE);
17113
17114   /* This needs to happen before any tsubsting.  */
17115   if (! push_tinst_level (d))
17116     return d;
17117
17118   timevar_push (TV_PARSE);
17119
17120   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
17121      for the instantiation.  */
17122   td = template_for_substitution (d);
17123   code_pattern = DECL_TEMPLATE_RESULT (td);
17124
17125   /* We should never be trying to instantiate a member of a class
17126      template or partial specialization.  */
17127   gcc_assert (d != code_pattern);
17128
17129   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
17130       || DECL_TEMPLATE_SPECIALIZATION (td))
17131     /* In the case of a friend template whose definition is provided
17132        outside the class, we may have too many arguments.  Drop the
17133        ones we don't need.  The same is true for specializations.  */
17134     args = get_innermost_template_args
17135       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
17136   else
17137     args = gen_args;
17138
17139   if (TREE_CODE (d) == FUNCTION_DECL)
17140     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
17141   else
17142     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
17143
17144   /* We may be in the middle of deferred access check.  Disable it now.  */
17145   push_deferring_access_checks (dk_no_deferred);
17146
17147   /* Unless an explicit instantiation directive has already determined
17148      the linkage of D, remember that a definition is available for
17149      this entity.  */
17150   if (pattern_defined
17151       && !DECL_INTERFACE_KNOWN (d)
17152       && !DECL_NOT_REALLY_EXTERN (d))
17153     mark_definable (d);
17154
17155   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
17156   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
17157   input_location = DECL_SOURCE_LOCATION (d);
17158
17159   /* If D is a member of an explicitly instantiated class template,
17160      and no definition is available, treat it like an implicit
17161      instantiation.  */
17162   if (!pattern_defined && expl_inst_class_mem_p
17163       && DECL_EXPLICIT_INSTANTIATION (d))
17164     {
17165       DECL_NOT_REALLY_EXTERN (d) = 0;
17166       DECL_INTERFACE_KNOWN (d) = 0;
17167       SET_DECL_IMPLICIT_INSTANTIATION (d);
17168     }
17169
17170   /* Recheck the substitutions to obtain any warning messages
17171      about ignoring cv qualifiers.  Don't do this for artificial decls,
17172      as it breaks the context-sensitive substitution for lambda op(). */
17173   if (!defer_ok && !DECL_ARTIFICIAL (d))
17174     {
17175       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
17176       tree type = TREE_TYPE (gen);
17177
17178       /* Make sure that we can see identifiers, and compute access
17179          correctly.  D is already the target FUNCTION_DECL with the
17180          right context.  */
17181       push_access_scope (d);
17182
17183       if (TREE_CODE (gen) == FUNCTION_DECL)
17184         {
17185           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
17186           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
17187                                           d);
17188           /* Don't simply tsubst the function type, as that will give
17189              duplicate warnings about poor parameter qualifications.
17190              The function arguments are the same as the decl_arguments
17191              without the top level cv qualifiers.  */
17192           type = TREE_TYPE (type);
17193         }
17194       tsubst (type, gen_args, tf_warning_or_error, d);
17195
17196       pop_access_scope (d);
17197     }
17198
17199   /* Defer all other templates, unless we have been explicitly
17200      forbidden from doing so.  */
17201   if (/* If there is no definition, we cannot instantiate the
17202          template.  */
17203       ! pattern_defined
17204       /* If it's OK to postpone instantiation, do so.  */
17205       || defer_ok
17206       /* If this is a static data member that will be defined
17207          elsewhere, we don't want to instantiate the entire data
17208          member, but we do want to instantiate the initializer so that
17209          we can substitute that elsewhere.  */
17210       || (external_p && TREE_CODE (d) == VAR_DECL))
17211     {
17212       /* The definition of the static data member is now required so
17213          we must substitute the initializer.  */
17214       if (TREE_CODE (d) == VAR_DECL
17215           && !DECL_INITIAL (d)
17216           && DECL_INITIAL (code_pattern))
17217         {
17218           tree ns;
17219           tree init;
17220           bool const_init = false;
17221
17222           ns = decl_namespace_context (d);
17223           push_nested_namespace (ns);
17224           push_nested_class (DECL_CONTEXT (d));
17225           init = tsubst_expr (DECL_INITIAL (code_pattern),
17226                               args,
17227                               tf_warning_or_error, NULL_TREE,
17228                               /*integral_constant_expression_p=*/false);
17229           /* Make sure the initializer is still constant, in case of
17230              circular dependency (template/instantiate6.C). */
17231           const_init
17232             = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
17233           cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
17234                           /*asmspec_tree=*/NULL_TREE,
17235                           LOOKUP_ONLYCONVERTING);
17236           pop_nested_class ();
17237           pop_nested_namespace (ns);
17238         }
17239
17240       /* We restore the source position here because it's used by
17241          add_pending_template.  */
17242       input_location = saved_loc;
17243
17244       if (at_eof && !pattern_defined
17245           && DECL_EXPLICIT_INSTANTIATION (d)
17246           && DECL_NOT_REALLY_EXTERN (d))
17247         /* [temp.explicit]
17248
17249            The definition of a non-exported function template, a
17250            non-exported member function template, or a non-exported
17251            member function or static data member of a class template
17252            shall be present in every translation unit in which it is
17253            explicitly instantiated.  */
17254         permerror (input_location,  "explicit instantiation of %qD "
17255                    "but no definition available", d);
17256
17257       /* If we're in unevaluated context, we just wanted to get the
17258          constant value; this isn't an odr use, so don't queue
17259          a full instantiation.  */
17260       if (cp_unevaluated_operand != 0)
17261         goto out;
17262       /* ??? Historically, we have instantiated inline functions, even
17263          when marked as "extern template".  */
17264       if (!(external_p && TREE_CODE (d) == VAR_DECL))
17265         add_pending_template (d);
17266       goto out;
17267     }
17268   /* Tell the repository that D is available in this translation unit
17269      -- and see if it is supposed to be instantiated here.  */
17270   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
17271     {
17272       /* In a PCH file, despite the fact that the repository hasn't
17273          requested instantiation in the PCH it is still possible that
17274          an instantiation will be required in a file that includes the
17275          PCH.  */
17276       if (pch_file)
17277         add_pending_template (d);
17278       /* Instantiate inline functions so that the inliner can do its
17279          job, even though we'll not be emitting a copy of this
17280          function.  */
17281       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
17282         goto out;
17283     }
17284
17285   need_push = !cfun || !global_bindings_p ();
17286   if (need_push)
17287     push_to_top_level ();
17288
17289   /* Mark D as instantiated so that recursive calls to
17290      instantiate_decl do not try to instantiate it again.  */
17291   DECL_TEMPLATE_INSTANTIATED (d) = 1;
17292
17293   /* Regenerate the declaration in case the template has been modified
17294      by a subsequent redeclaration.  */
17295   regenerate_decl_from_template (d, td);
17296
17297   /* We already set the file and line above.  Reset them now in case
17298      they changed as a result of calling regenerate_decl_from_template.  */
17299   input_location = DECL_SOURCE_LOCATION (d);
17300
17301   if (TREE_CODE (d) == VAR_DECL)
17302     {
17303       tree init;
17304       bool const_init = false;
17305
17306       /* Clear out DECL_RTL; whatever was there before may not be right
17307          since we've reset the type of the declaration.  */
17308       SET_DECL_RTL (d, NULL);
17309       DECL_IN_AGGR_P (d) = 0;
17310
17311       /* The initializer is placed in DECL_INITIAL by
17312          regenerate_decl_from_template so we don't need to
17313          push/pop_access_scope again here.  Pull it out so that
17314          cp_finish_decl can process it.  */
17315       init = DECL_INITIAL (d);
17316       DECL_INITIAL (d) = NULL_TREE;
17317       DECL_INITIALIZED_P (d) = 0;
17318
17319       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
17320          initializer.  That function will defer actual emission until
17321          we have a chance to determine linkage.  */
17322       DECL_EXTERNAL (d) = 0;
17323
17324       /* Enter the scope of D so that access-checking works correctly.  */
17325       push_nested_class (DECL_CONTEXT (d));
17326       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
17327       cp_finish_decl (d, init, const_init, NULL_TREE, 0);
17328       pop_nested_class ();
17329     }
17330   else if (TREE_CODE (d) == FUNCTION_DECL)
17331     {
17332       htab_t saved_local_specializations;
17333       tree subst_decl;
17334       tree tmpl_parm;
17335       tree spec_parm;
17336
17337       /* Save away the current list, in case we are instantiating one
17338          template from within the body of another.  */
17339       saved_local_specializations = local_specializations;
17340
17341       /* Set up the list of local specializations.  */
17342       local_specializations = htab_create (37,
17343                                            hash_local_specialization,
17344                                            eq_local_specializations,
17345                                            NULL);
17346
17347       /* Set up context.  */
17348       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
17349
17350       /* Create substitution entries for the parameters.  */
17351       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
17352       tmpl_parm = DECL_ARGUMENTS (subst_decl);
17353       spec_parm = DECL_ARGUMENTS (d);
17354       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
17355         {
17356           register_local_specialization (spec_parm, tmpl_parm);
17357           spec_parm = skip_artificial_parms_for (d, spec_parm);
17358           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
17359         }
17360       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
17361         {
17362           register_local_specialization (spec_parm, tmpl_parm);
17363           tmpl_parm = DECL_CHAIN (tmpl_parm);
17364           spec_parm = DECL_CHAIN (spec_parm);
17365         }
17366       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
17367         {
17368           /* Register the (value) argument pack as a specialization of
17369              TMPL_PARM, then move on.  */
17370           tree argpack = make_fnparm_pack (spec_parm);
17371           register_local_specialization (argpack, tmpl_parm);
17372           tmpl_parm = DECL_CHAIN (tmpl_parm);
17373           spec_parm = NULL_TREE;
17374         }
17375       gcc_assert (!spec_parm);
17376
17377       /* Substitute into the body of the function.  */
17378       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
17379                    tf_warning_or_error, tmpl,
17380                    /*integral_constant_expression_p=*/false);
17381
17382       /* Set the current input_location to the end of the function
17383          so that finish_function knows where we are.  */
17384       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
17385
17386       /* We don't need the local specializations any more.  */
17387       htab_delete (local_specializations);
17388       local_specializations = saved_local_specializations;
17389
17390       /* Finish the function.  */
17391       d = finish_function (0);
17392       expand_or_defer_fn (d);
17393     }
17394
17395   /* We're not deferring instantiation any more.  */
17396   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
17397
17398   if (need_push)
17399     pop_from_top_level ();
17400
17401 out:
17402   input_location = saved_loc;
17403   pop_deferring_access_checks ();
17404   pop_tinst_level ();
17405
17406   timevar_pop (TV_PARSE);
17407
17408   return d;
17409 }
17410
17411 /* Run through the list of templates that we wish we could
17412    instantiate, and instantiate any we can.  RETRIES is the
17413    number of times we retry pending template instantiation.  */
17414
17415 void
17416 instantiate_pending_templates (int retries)
17417 {
17418   int reconsider;
17419   location_t saved_loc = input_location;
17420
17421   /* Instantiating templates may trigger vtable generation.  This in turn
17422      may require further template instantiations.  We place a limit here
17423      to avoid infinite loop.  */
17424   if (pending_templates && retries >= max_tinst_depth)
17425     {
17426       tree decl = pending_templates->tinst->decl;
17427
17428       error ("template instantiation depth exceeds maximum of %d"
17429              " instantiating %q+D, possibly from virtual table generation"
17430              " (use -ftemplate-depth= to increase the maximum)",
17431              max_tinst_depth, decl);
17432       if (TREE_CODE (decl) == FUNCTION_DECL)
17433         /* Pretend that we defined it.  */
17434         DECL_INITIAL (decl) = error_mark_node;
17435       return;
17436     }
17437
17438   do
17439     {
17440       struct pending_template **t = &pending_templates;
17441       struct pending_template *last = NULL;
17442       reconsider = 0;
17443       while (*t)
17444         {
17445           tree instantiation = reopen_tinst_level ((*t)->tinst);
17446           bool complete = false;
17447
17448           if (TYPE_P (instantiation))
17449             {
17450               tree fn;
17451
17452               if (!COMPLETE_TYPE_P (instantiation))
17453                 {
17454                   instantiate_class_template (instantiation);
17455                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
17456                     for (fn = TYPE_METHODS (instantiation);
17457                          fn;
17458                          fn = TREE_CHAIN (fn))
17459                       if (! DECL_ARTIFICIAL (fn))
17460                         instantiate_decl (fn,
17461                                           /*defer_ok=*/0,
17462                                           /*expl_inst_class_mem_p=*/false);
17463                   if (COMPLETE_TYPE_P (instantiation))
17464                     reconsider = 1;
17465                 }
17466
17467               complete = COMPLETE_TYPE_P (instantiation);
17468             }
17469           else
17470             {
17471               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
17472                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
17473                 {
17474                   instantiation
17475                     = instantiate_decl (instantiation,
17476                                         /*defer_ok=*/0,
17477                                         /*expl_inst_class_mem_p=*/false);
17478                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
17479                     reconsider = 1;
17480                 }
17481
17482               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
17483                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
17484             }
17485
17486           if (complete)
17487             /* If INSTANTIATION has been instantiated, then we don't
17488                need to consider it again in the future.  */
17489             *t = (*t)->next;
17490           else
17491             {
17492               last = *t;
17493               t = &(*t)->next;
17494             }
17495           tinst_depth = 0;
17496           current_tinst_level = NULL;
17497         }
17498       last_pending_template = last;
17499     }
17500   while (reconsider);
17501
17502   input_location = saved_loc;
17503 }
17504
17505 /* Substitute ARGVEC into T, which is a list of initializers for
17506    either base class or a non-static data member.  The TREE_PURPOSEs
17507    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
17508    instantiate_decl.  */
17509
17510 static tree
17511 tsubst_initializer_list (tree t, tree argvec)
17512 {
17513   tree inits = NULL_TREE;
17514
17515   for (; t; t = TREE_CHAIN (t))
17516     {
17517       tree decl;
17518       tree init;
17519       tree expanded_bases = NULL_TREE;
17520       tree expanded_arguments = NULL_TREE;
17521       int i, len = 1;
17522
17523       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
17524         {
17525           tree expr;
17526           tree arg;
17527
17528           /* Expand the base class expansion type into separate base
17529              classes.  */
17530           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
17531                                                  tf_warning_or_error,
17532                                                  NULL_TREE);
17533           if (expanded_bases == error_mark_node)
17534             continue;
17535           
17536           /* We'll be building separate TREE_LISTs of arguments for
17537              each base.  */
17538           len = TREE_VEC_LENGTH (expanded_bases);
17539           expanded_arguments = make_tree_vec (len);
17540           for (i = 0; i < len; i++)
17541             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
17542
17543           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
17544              expand each argument in the TREE_VALUE of t.  */
17545           expr = make_node (EXPR_PACK_EXPANSION);
17546           PACK_EXPANSION_PARAMETER_PACKS (expr) =
17547             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
17548
17549           if (TREE_VALUE (t) == void_type_node)
17550             /* VOID_TYPE_NODE is used to indicate
17551                value-initialization.  */
17552             {
17553               for (i = 0; i < len; i++)
17554                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
17555             }
17556           else
17557             {
17558               /* Substitute parameter packs into each argument in the
17559                  TREE_LIST.  */
17560               in_base_initializer = 1;
17561               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
17562                 {
17563                   tree expanded_exprs;
17564
17565                   /* Expand the argument.  */
17566                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
17567                   expanded_exprs 
17568                     = tsubst_pack_expansion (expr, argvec,
17569                                              tf_warning_or_error,
17570                                              NULL_TREE);
17571                   if (expanded_exprs == error_mark_node)
17572                     continue;
17573
17574                   /* Prepend each of the expanded expressions to the
17575                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
17576                   for (i = 0; i < len; i++)
17577                     {
17578                       TREE_VEC_ELT (expanded_arguments, i) = 
17579                         tree_cons (NULL_TREE, 
17580                                    TREE_VEC_ELT (expanded_exprs, i),
17581                                    TREE_VEC_ELT (expanded_arguments, i));
17582                     }
17583                 }
17584               in_base_initializer = 0;
17585
17586               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
17587                  since we built them backwards.  */
17588               for (i = 0; i < len; i++)
17589                 {
17590                   TREE_VEC_ELT (expanded_arguments, i) = 
17591                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
17592                 }
17593             }
17594         }
17595
17596       for (i = 0; i < len; ++i)
17597         {
17598           if (expanded_bases)
17599             {
17600               decl = TREE_VEC_ELT (expanded_bases, i);
17601               decl = expand_member_init (decl);
17602               init = TREE_VEC_ELT (expanded_arguments, i);
17603             }
17604           else
17605             {
17606               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
17607                                   tf_warning_or_error, NULL_TREE);
17608
17609               decl = expand_member_init (decl);
17610               if (decl && !DECL_P (decl))
17611                 in_base_initializer = 1;
17612
17613               init = TREE_VALUE (t);
17614               if (init != void_type_node)
17615                 init = tsubst_expr (init, argvec,
17616                                     tf_warning_or_error, NULL_TREE,
17617                                     /*integral_constant_expression_p=*/false);
17618               in_base_initializer = 0;
17619             }
17620
17621           if (decl)
17622             {
17623               init = build_tree_list (decl, init);
17624               TREE_CHAIN (init) = inits;
17625               inits = init;
17626             }
17627         }
17628     }
17629   return inits;
17630 }
17631
17632 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
17633
17634 static void
17635 set_current_access_from_decl (tree decl)
17636 {
17637   if (TREE_PRIVATE (decl))
17638     current_access_specifier = access_private_node;
17639   else if (TREE_PROTECTED (decl))
17640     current_access_specifier = access_protected_node;
17641   else
17642     current_access_specifier = access_public_node;
17643 }
17644
17645 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
17646    is the instantiation (which should have been created with
17647    start_enum) and ARGS are the template arguments to use.  */
17648
17649 static void
17650 tsubst_enum (tree tag, tree newtag, tree args)
17651 {
17652   tree e;
17653
17654   if (SCOPED_ENUM_P (newtag))
17655     begin_scope (sk_scoped_enum, newtag);
17656
17657   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
17658     {
17659       tree value;
17660       tree decl;
17661
17662       decl = TREE_VALUE (e);
17663       /* Note that in a template enum, the TREE_VALUE is the
17664          CONST_DECL, not the corresponding INTEGER_CST.  */
17665       value = tsubst_expr (DECL_INITIAL (decl),
17666                            args, tf_warning_or_error, NULL_TREE,
17667                            /*integral_constant_expression_p=*/true);
17668
17669       /* Give this enumeration constant the correct access.  */
17670       set_current_access_from_decl (decl);
17671
17672       /* Actually build the enumerator itself.  */
17673       build_enumerator
17674         (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
17675     }
17676
17677   if (SCOPED_ENUM_P (newtag))
17678     finish_scope ();
17679
17680   finish_enum_value_list (newtag);
17681   finish_enum (newtag);
17682
17683   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
17684     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
17685 }
17686
17687 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
17688    its type -- but without substituting the innermost set of template
17689    arguments.  So, innermost set of template parameters will appear in
17690    the type.  */
17691
17692 tree
17693 get_mostly_instantiated_function_type (tree decl)
17694 {
17695   tree fn_type;
17696   tree tmpl;
17697   tree targs;
17698   tree tparms;
17699   int parm_depth;
17700
17701   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
17702   targs = DECL_TI_ARGS (decl);
17703   tparms = DECL_TEMPLATE_PARMS (tmpl);
17704   parm_depth = TMPL_PARMS_DEPTH (tparms);
17705
17706   /* There should be as many levels of arguments as there are levels
17707      of parameters.  */
17708   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
17709
17710   fn_type = TREE_TYPE (tmpl);
17711
17712   if (parm_depth == 1)
17713     /* No substitution is necessary.  */
17714     ;
17715   else
17716     {
17717       int i, save_access_control;
17718       tree partial_args;
17719
17720       /* Replace the innermost level of the TARGS with NULL_TREEs to
17721          let tsubst know not to substitute for those parameters.  */
17722       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
17723       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
17724         SET_TMPL_ARGS_LEVEL (partial_args, i,
17725                              TMPL_ARGS_LEVEL (targs, i));
17726       SET_TMPL_ARGS_LEVEL (partial_args,
17727                            TMPL_ARGS_DEPTH (targs),
17728                            make_tree_vec (DECL_NTPARMS (tmpl)));
17729
17730       /* Disable access control as this function is used only during
17731          name-mangling.  */
17732       save_access_control = flag_access_control;
17733       flag_access_control = 0;
17734
17735       ++processing_template_decl;
17736       /* Now, do the (partial) substitution to figure out the
17737          appropriate function type.  */
17738       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
17739       --processing_template_decl;
17740
17741       /* Substitute into the template parameters to obtain the real
17742          innermost set of parameters.  This step is important if the
17743          innermost set of template parameters contains value
17744          parameters whose types depend on outer template parameters.  */
17745       TREE_VEC_LENGTH (partial_args)--;
17746       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
17747
17748       flag_access_control = save_access_control;
17749     }
17750
17751   return fn_type;
17752 }
17753
17754 /* Return truthvalue if we're processing a template different from
17755    the last one involved in diagnostics.  */
17756 int
17757 problematic_instantiation_changed (void)
17758 {
17759   return last_template_error_tick != tinst_level_tick;
17760 }
17761
17762 /* Remember current template involved in diagnostics.  */
17763 void
17764 record_last_problematic_instantiation (void)
17765 {
17766   last_template_error_tick = tinst_level_tick;
17767 }
17768
17769 struct tinst_level *
17770 current_instantiation (void)
17771 {
17772   return current_tinst_level;
17773 }
17774
17775 /* [temp.param] Check that template non-type parm TYPE is of an allowable
17776    type. Return zero for ok, nonzero for disallowed. Issue error and
17777    warning messages under control of COMPLAIN.  */
17778
17779 static int
17780 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
17781 {
17782   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
17783     return 0;
17784   else if (POINTER_TYPE_P (type))
17785     return 0;
17786   else if (TYPE_PTR_TO_MEMBER_P (type))
17787     return 0;
17788   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
17789     return 0;
17790   else if (TREE_CODE (type) == TYPENAME_TYPE)
17791     return 0;
17792
17793   if (complain & tf_error)
17794     error ("%q#T is not a valid type for a template constant parameter", type);
17795   return 1;
17796 }
17797
17798 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
17799    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
17800
17801 static bool
17802 dependent_type_p_r (tree type)
17803 {
17804   tree scope;
17805
17806   /* [temp.dep.type]
17807
17808      A type is dependent if it is:
17809
17810      -- a template parameter. Template template parameters are types
17811         for us (since TYPE_P holds true for them) so we handle
17812         them here.  */
17813   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
17814       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
17815     return true;
17816   /* -- a qualified-id with a nested-name-specifier which contains a
17817         class-name that names a dependent type or whose unqualified-id
17818         names a dependent type.  */
17819   if (TREE_CODE (type) == TYPENAME_TYPE)
17820     return true;
17821   /* -- a cv-qualified type where the cv-unqualified type is
17822         dependent.  */
17823   type = TYPE_MAIN_VARIANT (type);
17824   /* -- a compound type constructed from any dependent type.  */
17825   if (TYPE_PTR_TO_MEMBER_P (type))
17826     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
17827             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
17828                                            (type)));
17829   else if (TREE_CODE (type) == POINTER_TYPE
17830            || TREE_CODE (type) == REFERENCE_TYPE)
17831     return dependent_type_p (TREE_TYPE (type));
17832   else if (TREE_CODE (type) == FUNCTION_TYPE
17833            || TREE_CODE (type) == METHOD_TYPE)
17834     {
17835       tree arg_type;
17836
17837       if (dependent_type_p (TREE_TYPE (type)))
17838         return true;
17839       for (arg_type = TYPE_ARG_TYPES (type);
17840            arg_type;
17841            arg_type = TREE_CHAIN (arg_type))
17842         if (dependent_type_p (TREE_VALUE (arg_type)))
17843           return true;
17844       return false;
17845     }
17846   /* -- an array type constructed from any dependent type or whose
17847         size is specified by a constant expression that is
17848         value-dependent.
17849
17850         We checked for type- and value-dependence of the bounds in
17851         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
17852   if (TREE_CODE (type) == ARRAY_TYPE)
17853     {
17854       if (TYPE_DOMAIN (type)
17855           && dependent_type_p (TYPE_DOMAIN (type)))
17856         return true;
17857       return dependent_type_p (TREE_TYPE (type));
17858     }
17859
17860   /* -- a template-id in which either the template name is a template
17861      parameter ...  */
17862   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
17863     return true;
17864   /* ... or any of the template arguments is a dependent type or
17865         an expression that is type-dependent or value-dependent.  */
17866   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
17867            && (any_dependent_template_arguments_p
17868                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
17869     return true;
17870
17871   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
17872      argument of the `typeof' expression is not type-dependent, then
17873      it should already been have resolved.  */
17874   if (TREE_CODE (type) == TYPEOF_TYPE
17875       || TREE_CODE (type) == DECLTYPE_TYPE)
17876     return true;
17877
17878   /* A template argument pack is dependent if any of its packed
17879      arguments are.  */
17880   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
17881     {
17882       tree args = ARGUMENT_PACK_ARGS (type);
17883       int i, len = TREE_VEC_LENGTH (args);
17884       for (i = 0; i < len; ++i)
17885         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
17886           return true;
17887     }
17888
17889   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
17890      be template parameters.  */
17891   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
17892     return true;
17893
17894   /* The standard does not specifically mention types that are local
17895      to template functions or local classes, but they should be
17896      considered dependent too.  For example:
17897
17898        template <int I> void f() {
17899          enum E { a = I };
17900          S<sizeof (E)> s;
17901        }
17902
17903      The size of `E' cannot be known until the value of `I' has been
17904      determined.  Therefore, `E' must be considered dependent.  */
17905   scope = TYPE_CONTEXT (type);
17906   if (scope && TYPE_P (scope))
17907     return dependent_type_p (scope);
17908   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
17909     return type_dependent_expression_p (scope);
17910
17911   /* Other types are non-dependent.  */
17912   return false;
17913 }
17914
17915 /* Returns TRUE if TYPE is dependent, in the sense of
17916    [temp.dep.type].  */
17917
17918 bool
17919 dependent_type_p (tree type)
17920 {
17921   /* If there are no template parameters in scope, then there can't be
17922      any dependent types.  */
17923   if (!processing_template_decl)
17924     {
17925       /* If we are not processing a template, then nobody should be
17926          providing us with a dependent type.  */
17927       gcc_assert (type);
17928       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
17929       return false;
17930     }
17931
17932   /* If the type is NULL, we have not computed a type for the entity
17933      in question; in that case, the type is dependent.  */
17934   if (!type)
17935     return true;
17936
17937   /* Erroneous types can be considered non-dependent.  */
17938   if (type == error_mark_node)
17939     return false;
17940
17941   /* If we have not already computed the appropriate value for TYPE,
17942      do so now.  */
17943   if (!TYPE_DEPENDENT_P_VALID (type))
17944     {
17945       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
17946       TYPE_DEPENDENT_P_VALID (type) = 1;
17947     }
17948
17949   return TYPE_DEPENDENT_P (type);
17950 }
17951
17952 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
17953    lookup.  In other words, a dependent type that is not the current
17954    instantiation.  */
17955
17956 bool
17957 dependent_scope_p (tree scope)
17958 {
17959   return (scope && TYPE_P (scope) && dependent_type_p (scope)
17960           && !currently_open_class (scope));
17961 }
17962
17963 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
17964    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
17965    expression.  */
17966
17967 /* FIXME this predicate is not appropriate for general expressions; the
17968    predicates we want instead are "valid constant expression, value
17969    dependent or not?", "really constant expression, not value dependent?"
17970    and "instantiation-dependent?".  Try to integrate with
17971    potential_constant_expression?
17972
17973    fold_non_dependent_expr: fold if constant and not type-dependent and not value-dependent.
17974      (what about instantiation-dependent constant-expressions?)
17975    is_late_template_attribute: defer if instantiation-dependent.
17976    compute_array_index_type: proceed if constant and not t- or v-dependent
17977      if instantiation-dependent, need to remember full expression
17978    uses_template_parms: FIXME - need to audit callers
17979    tsubst_decl [function_decl]: Why is this using value_dependent_expression_p?
17980    dependent_type_p [array_type]: dependent if index type is dependent
17981      (or non-constant?)
17982    static_assert - instantiation-dependent */
17983
17984 bool
17985 value_dependent_expression_p (tree expression)
17986 {
17987   if (!processing_template_decl)
17988     return false;
17989
17990   /* A name declared with a dependent type.  */
17991   if (DECL_P (expression) && type_dependent_expression_p (expression))
17992     return true;
17993
17994   switch (TREE_CODE (expression))
17995     {
17996     case IDENTIFIER_NODE:
17997       /* A name that has not been looked up -- must be dependent.  */
17998       return true;
17999
18000     case TEMPLATE_PARM_INDEX:
18001       /* A non-type template parm.  */
18002       return true;
18003
18004     case CONST_DECL:
18005       /* A non-type template parm.  */
18006       if (DECL_TEMPLATE_PARM_P (expression))
18007         return true;
18008       return value_dependent_expression_p (DECL_INITIAL (expression));
18009
18010     case VAR_DECL:
18011        /* A constant with integral or enumeration type and is initialized
18012           with an expression that is value-dependent.  */
18013       if (DECL_INITIAL (expression)
18014           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
18015           && value_dependent_expression_p (DECL_INITIAL (expression)))
18016         return true;
18017       return false;
18018
18019     case DYNAMIC_CAST_EXPR:
18020     case STATIC_CAST_EXPR:
18021     case CONST_CAST_EXPR:
18022     case REINTERPRET_CAST_EXPR:
18023     case CAST_EXPR:
18024       /* These expressions are value-dependent if the type to which
18025          the cast occurs is dependent or the expression being casted
18026          is value-dependent.  */
18027       {
18028         tree type = TREE_TYPE (expression);
18029
18030         if (dependent_type_p (type))
18031           return true;
18032
18033         /* A functional cast has a list of operands.  */
18034         expression = TREE_OPERAND (expression, 0);
18035         if (!expression)
18036           {
18037             /* If there are no operands, it must be an expression such
18038                as "int()". This should not happen for aggregate types
18039                because it would form non-constant expressions.  */
18040             gcc_assert (cxx_dialect >= cxx0x
18041                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
18042
18043             return false;
18044           }
18045
18046         if (TREE_CODE (expression) == TREE_LIST)
18047           return any_value_dependent_elements_p (expression);
18048
18049         return value_dependent_expression_p (expression);
18050       }
18051
18052     case SIZEOF_EXPR:
18053     case ALIGNOF_EXPR:
18054       /* A `sizeof' expression is value-dependent if the operand is
18055          type-dependent or is a pack expansion.  */
18056       expression = TREE_OPERAND (expression, 0);
18057       if (PACK_EXPANSION_P (expression))
18058         return true;
18059       else if (TYPE_P (expression))
18060         return dependent_type_p (expression);
18061       return type_dependent_expression_p (expression);
18062
18063     case AT_ENCODE_EXPR:
18064       /* An 'encode' expression is value-dependent if the operand is
18065          type-dependent.  */
18066       expression = TREE_OPERAND (expression, 0);
18067       return dependent_type_p (expression);
18068
18069     case NOEXCEPT_EXPR:
18070       expression = TREE_OPERAND (expression, 0);
18071       /* FIXME why check value-dependency?  */
18072       return (type_dependent_expression_p (expression)
18073               || value_dependent_expression_p (expression));
18074
18075     case SCOPE_REF:
18076       {
18077         tree name = TREE_OPERAND (expression, 1);
18078         return value_dependent_expression_p (name);
18079       }
18080
18081     case COMPONENT_REF:
18082       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
18083               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
18084
18085     case NONTYPE_ARGUMENT_PACK:
18086       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
18087          is value-dependent.  */
18088       {
18089         tree values = ARGUMENT_PACK_ARGS (expression);
18090         int i, len = TREE_VEC_LENGTH (values);
18091         
18092         for (i = 0; i < len; ++i)
18093           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
18094             return true;
18095         
18096         return false;
18097       }
18098
18099     case TRAIT_EXPR:
18100       {
18101         tree type2 = TRAIT_EXPR_TYPE2 (expression);
18102         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
18103                 || (type2 ? dependent_type_p (type2) : false));
18104       }
18105
18106     case MODOP_EXPR:
18107       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
18108               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
18109
18110     case ADDR_EXPR:
18111       {
18112         tree op = TREE_OPERAND (expression, 0);
18113         return (value_dependent_expression_p (op)
18114                 || has_value_dependent_address (op));
18115       }
18116
18117     case CALL_EXPR:
18118       {
18119         tree fn = get_callee_fndecl (expression);
18120         int i, nargs;
18121         if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
18122           return true;
18123         nargs = call_expr_nargs (expression);
18124         for (i = 0; i < nargs; ++i)
18125           {
18126             tree op = CALL_EXPR_ARG (expression, i);
18127             /* In a call to a constexpr member function, look through the
18128                implicit ADDR_EXPR on the object argument so that it doesn't
18129                cause the call to be considered value-dependent.  We also
18130                look through it in potential_constant_expression.  */
18131             if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
18132                 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
18133                 && TREE_CODE (op) == ADDR_EXPR)
18134               op = TREE_OPERAND (op, 0);
18135             if (value_dependent_expression_p (op))
18136               return true;
18137           }
18138         return false;
18139       }
18140
18141     default:
18142       /* A constant expression is value-dependent if any subexpression is
18143          value-dependent.  */
18144       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
18145         {
18146         case tcc_reference:
18147         case tcc_unary:
18148           return (value_dependent_expression_p
18149                   (TREE_OPERAND (expression, 0)));
18150
18151         case tcc_comparison:
18152         case tcc_binary:
18153           return ((value_dependent_expression_p
18154                    (TREE_OPERAND (expression, 0)))
18155                   || (value_dependent_expression_p
18156                       (TREE_OPERAND (expression, 1))));
18157
18158         case tcc_expression:
18159         case tcc_vl_exp:
18160           {
18161             int i;
18162             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
18163               /* In some cases, some of the operands may be missing.
18164                  (For example, in the case of PREDECREMENT_EXPR, the
18165                  amount to increment by may be missing.)  That doesn't
18166                  make the expression dependent.  */
18167               if (TREE_OPERAND (expression, i)
18168                   && (value_dependent_expression_p
18169                       (TREE_OPERAND (expression, i))))
18170                 return true;
18171             return false;
18172           }
18173
18174         default:
18175           break;
18176         }
18177     }
18178
18179   /* The expression is not value-dependent.  */
18180   return false;
18181 }
18182
18183 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
18184    [temp.dep.expr].  */
18185
18186 bool
18187 type_dependent_expression_p (tree expression)
18188 {
18189   if (!processing_template_decl)
18190     return false;
18191
18192   if (expression == error_mark_node)
18193     return false;
18194
18195   /* An unresolved name is always dependent.  */
18196   if (TREE_CODE (expression) == IDENTIFIER_NODE
18197       || TREE_CODE (expression) == USING_DECL)
18198     return true;
18199
18200   /* Some expression forms are never type-dependent.  */
18201   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
18202       || TREE_CODE (expression) == SIZEOF_EXPR
18203       || TREE_CODE (expression) == ALIGNOF_EXPR
18204       || TREE_CODE (expression) == AT_ENCODE_EXPR
18205       || TREE_CODE (expression) == NOEXCEPT_EXPR
18206       || TREE_CODE (expression) == TRAIT_EXPR
18207       || TREE_CODE (expression) == TYPEID_EXPR
18208       || TREE_CODE (expression) == DELETE_EXPR
18209       || TREE_CODE (expression) == VEC_DELETE_EXPR
18210       || TREE_CODE (expression) == THROW_EXPR)
18211     return false;
18212
18213   /* The types of these expressions depends only on the type to which
18214      the cast occurs.  */
18215   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
18216       || TREE_CODE (expression) == STATIC_CAST_EXPR
18217       || TREE_CODE (expression) == CONST_CAST_EXPR
18218       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
18219       || TREE_CODE (expression) == CAST_EXPR)
18220     return dependent_type_p (TREE_TYPE (expression));
18221
18222   /* The types of these expressions depends only on the type created
18223      by the expression.  */
18224   if (TREE_CODE (expression) == NEW_EXPR
18225       || TREE_CODE (expression) == VEC_NEW_EXPR)
18226     {
18227       /* For NEW_EXPR tree nodes created inside a template, either
18228          the object type itself or a TREE_LIST may appear as the
18229          operand 1.  */
18230       tree type = TREE_OPERAND (expression, 1);
18231       if (TREE_CODE (type) == TREE_LIST)
18232         /* This is an array type.  We need to check array dimensions
18233            as well.  */
18234         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
18235                || value_dependent_expression_p
18236                     (TREE_OPERAND (TREE_VALUE (type), 1));
18237       else
18238         return dependent_type_p (type);
18239     }
18240
18241   if (TREE_CODE (expression) == SCOPE_REF)
18242     {
18243       tree scope = TREE_OPERAND (expression, 0);
18244       tree name = TREE_OPERAND (expression, 1);
18245
18246       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
18247          contains an identifier associated by name lookup with one or more
18248          declarations declared with a dependent type, or...a
18249          nested-name-specifier or qualified-id that names a member of an
18250          unknown specialization.  */
18251       return (type_dependent_expression_p (name)
18252               || dependent_scope_p (scope));
18253     }
18254
18255   if (TREE_CODE (expression) == FUNCTION_DECL
18256       && DECL_LANG_SPECIFIC (expression)
18257       && DECL_TEMPLATE_INFO (expression)
18258       && (any_dependent_template_arguments_p
18259           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
18260     return true;
18261
18262   if (TREE_CODE (expression) == TEMPLATE_DECL
18263       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
18264     return false;
18265
18266   if (TREE_CODE (expression) == STMT_EXPR)
18267     expression = stmt_expr_value_expr (expression);
18268
18269   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
18270     {
18271       tree elt;
18272       unsigned i;
18273
18274       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
18275         {
18276           if (type_dependent_expression_p (elt))
18277             return true;
18278         }
18279       return false;
18280     }
18281
18282   /* A static data member of the current instantiation with incomplete
18283      array type is type-dependent, as the definition and specializations
18284      can have different bounds.  */
18285   if (TREE_CODE (expression) == VAR_DECL
18286       && DECL_CLASS_SCOPE_P (expression)
18287       && dependent_type_p (DECL_CONTEXT (expression))
18288       && VAR_HAD_UNKNOWN_BOUND (expression))
18289     return true;
18290
18291   if (TREE_TYPE (expression) == unknown_type_node)
18292     {
18293       if (TREE_CODE (expression) == ADDR_EXPR)
18294         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
18295       if (TREE_CODE (expression) == COMPONENT_REF
18296           || TREE_CODE (expression) == OFFSET_REF)
18297         {
18298           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
18299             return true;
18300           expression = TREE_OPERAND (expression, 1);
18301           if (TREE_CODE (expression) == IDENTIFIER_NODE)
18302             return false;
18303         }
18304       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
18305       if (TREE_CODE (expression) == SCOPE_REF)
18306         return false;
18307
18308       if (TREE_CODE (expression) == BASELINK)
18309         expression = BASELINK_FUNCTIONS (expression);
18310
18311       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
18312         {
18313           if (any_dependent_template_arguments_p
18314               (TREE_OPERAND (expression, 1)))
18315             return true;
18316           expression = TREE_OPERAND (expression, 0);
18317         }
18318       gcc_assert (TREE_CODE (expression) == OVERLOAD
18319                   || TREE_CODE (expression) == FUNCTION_DECL);
18320
18321       while (expression)
18322         {
18323           if (type_dependent_expression_p (OVL_CURRENT (expression)))
18324             return true;
18325           expression = OVL_NEXT (expression);
18326         }
18327       return false;
18328     }
18329
18330   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
18331
18332   return (dependent_type_p (TREE_TYPE (expression)));
18333 }
18334
18335 /* Like type_dependent_expression_p, but it also works while not processing
18336    a template definition, i.e. during substitution or mangling.  */
18337
18338 bool
18339 type_dependent_expression_p_push (tree expr)
18340 {
18341   bool b;
18342   ++processing_template_decl;
18343   b = type_dependent_expression_p (expr);
18344   --processing_template_decl;
18345   return b;
18346 }
18347
18348 /* Returns TRUE if ARGS contains a type-dependent expression.  */
18349
18350 bool
18351 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
18352 {
18353   unsigned int i;
18354   tree arg;
18355
18356   FOR_EACH_VEC_ELT (tree, args, i, arg)
18357     {
18358       if (type_dependent_expression_p (arg))
18359         return true;
18360     }
18361   return false;
18362 }
18363
18364 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
18365    expressions) contains any value-dependent expressions.  */
18366
18367 bool
18368 any_value_dependent_elements_p (const_tree list)
18369 {
18370   for (; list; list = TREE_CHAIN (list))
18371     if (value_dependent_expression_p (TREE_VALUE (list)))
18372       return true;
18373
18374   return false;
18375 }
18376
18377 /* Returns TRUE if the ARG (a template argument) is dependent.  */
18378
18379 bool
18380 dependent_template_arg_p (tree arg)
18381 {
18382   if (!processing_template_decl)
18383     return false;
18384
18385   /* Assume a template argument that was wrongly written by the user
18386      is dependent. This is consistent with what
18387      any_dependent_template_arguments_p [that calls this function]
18388      does.  */
18389   if (arg == error_mark_node)
18390     return true;
18391
18392   if (TREE_CODE (arg) == TEMPLATE_DECL
18393       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
18394     return dependent_template_p (arg);
18395   else if (ARGUMENT_PACK_P (arg))
18396     {
18397       tree args = ARGUMENT_PACK_ARGS (arg);
18398       int i, len = TREE_VEC_LENGTH (args);
18399       for (i = 0; i < len; ++i)
18400         {
18401           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
18402             return true;
18403         }
18404
18405       return false;
18406     }
18407   else if (TYPE_P (arg))
18408     return dependent_type_p (arg);
18409   else
18410     return (type_dependent_expression_p (arg)
18411             || value_dependent_expression_p (arg));
18412 }
18413
18414 /* Returns true if ARGS (a collection of template arguments) contains
18415    any types that require structural equality testing.  */
18416
18417 bool
18418 any_template_arguments_need_structural_equality_p (tree args)
18419 {
18420   int i;
18421   int j;
18422
18423   if (!args)
18424     return false;
18425   if (args == error_mark_node)
18426     return true;
18427
18428   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
18429     {
18430       tree level = TMPL_ARGS_LEVEL (args, i + 1);
18431       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
18432         {
18433           tree arg = TREE_VEC_ELT (level, j);
18434           tree packed_args = NULL_TREE;
18435           int k, len = 1;
18436
18437           if (ARGUMENT_PACK_P (arg))
18438             {
18439               /* Look inside the argument pack.  */
18440               packed_args = ARGUMENT_PACK_ARGS (arg);
18441               len = TREE_VEC_LENGTH (packed_args);
18442             }
18443
18444           for (k = 0; k < len; ++k)
18445             {
18446               if (packed_args)
18447                 arg = TREE_VEC_ELT (packed_args, k);
18448
18449               if (error_operand_p (arg))
18450                 return true;
18451               else if (TREE_CODE (arg) == TEMPLATE_DECL
18452                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
18453                 continue;
18454               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
18455                 return true;
18456               else if (!TYPE_P (arg) && TREE_TYPE (arg)
18457                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
18458                 return true;
18459             }
18460         }
18461     }
18462
18463   return false;
18464 }
18465
18466 /* Returns true if ARGS (a collection of template arguments) contains
18467    any dependent arguments.  */
18468
18469 bool
18470 any_dependent_template_arguments_p (const_tree args)
18471 {
18472   int i;
18473   int j;
18474
18475   if (!args)
18476     return false;
18477   if (args == error_mark_node)
18478     return true;
18479
18480   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
18481     {
18482       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
18483       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
18484         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
18485           return true;
18486     }
18487
18488   return false;
18489 }
18490
18491 /* Returns TRUE if the template TMPL is dependent.  */
18492
18493 bool
18494 dependent_template_p (tree tmpl)
18495 {
18496   if (TREE_CODE (tmpl) == OVERLOAD)
18497     {
18498       while (tmpl)
18499         {
18500           if (dependent_template_p (OVL_FUNCTION (tmpl)))
18501             return true;
18502           tmpl = OVL_CHAIN (tmpl);
18503         }
18504       return false;
18505     }
18506
18507   /* Template template parameters are dependent.  */
18508   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
18509       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
18510     return true;
18511   /* So are names that have not been looked up.  */
18512   if (TREE_CODE (tmpl) == SCOPE_REF
18513       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
18514     return true;
18515   /* So are member templates of dependent classes.  */
18516   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
18517     return dependent_type_p (DECL_CONTEXT (tmpl));
18518   return false;
18519 }
18520
18521 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
18522
18523 bool
18524 dependent_template_id_p (tree tmpl, tree args)
18525 {
18526   return (dependent_template_p (tmpl)
18527           || any_dependent_template_arguments_p (args));
18528 }
18529
18530 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
18531    is dependent.  */
18532
18533 bool
18534 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
18535 {
18536   int i;
18537
18538   if (!processing_template_decl)
18539     return false;
18540
18541   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
18542     {
18543       tree decl = TREE_VEC_ELT (declv, i);
18544       tree init = TREE_VEC_ELT (initv, i);
18545       tree cond = TREE_VEC_ELT (condv, i);
18546       tree incr = TREE_VEC_ELT (incrv, i);
18547
18548       if (type_dependent_expression_p (decl))
18549         return true;
18550
18551       if (init && type_dependent_expression_p (init))
18552         return true;
18553
18554       if (type_dependent_expression_p (cond))
18555         return true;
18556
18557       if (COMPARISON_CLASS_P (cond)
18558           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
18559               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
18560         return true;
18561
18562       if (TREE_CODE (incr) == MODOP_EXPR)
18563         {
18564           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
18565               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
18566             return true;
18567         }
18568       else if (type_dependent_expression_p (incr))
18569         return true;
18570       else if (TREE_CODE (incr) == MODIFY_EXPR)
18571         {
18572           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
18573             return true;
18574           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
18575             {
18576               tree t = TREE_OPERAND (incr, 1);
18577               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
18578                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
18579                 return true;
18580             }
18581         }
18582     }
18583
18584   return false;
18585 }
18586
18587 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
18588    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
18589    no such TYPE can be found.  Note that this function peers inside
18590    uninstantiated templates and therefore should be used only in
18591    extremely limited situations.  ONLY_CURRENT_P restricts this
18592    peering to the currently open classes hierarchy (which is required
18593    when comparing types).  */
18594
18595 tree
18596 resolve_typename_type (tree type, bool only_current_p)
18597 {
18598   tree scope;
18599   tree name;
18600   tree decl;
18601   int quals;
18602   tree pushed_scope;
18603   tree result;
18604
18605   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
18606
18607   scope = TYPE_CONTEXT (type);
18608   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
18609      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
18610      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
18611      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
18612      identifier  of the TYPENAME_TYPE anymore.
18613      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
18614      TYPENAME_TYPE instead, we avoid messing up with a possible
18615      typedef variant case.  */
18616   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
18617
18618   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
18619      it first before we can figure out what NAME refers to.  */
18620   if (TREE_CODE (scope) == TYPENAME_TYPE)
18621     scope = resolve_typename_type (scope, only_current_p);
18622   /* If we don't know what SCOPE refers to, then we cannot resolve the
18623      TYPENAME_TYPE.  */
18624   if (TREE_CODE (scope) == TYPENAME_TYPE)
18625     return type;
18626   /* If the SCOPE is a template type parameter, we have no way of
18627      resolving the name.  */
18628   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
18629     return type;
18630   /* If the SCOPE is not the current instantiation, there's no reason
18631      to look inside it.  */
18632   if (only_current_p && !currently_open_class (scope))
18633     return type;
18634   /* If this is a typedef, we don't want to look inside (c++/11987).  */
18635   if (typedef_variant_p (type))
18636     return type;
18637   /* If SCOPE isn't the template itself, it will not have a valid
18638      TYPE_FIELDS list.  */
18639   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
18640     /* scope is either the template itself or a compatible instantiation
18641        like X<T>, so look up the name in the original template.  */
18642     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
18643   else
18644     /* scope is a partial instantiation, so we can't do the lookup or we
18645        will lose the template arguments.  */
18646     return type;
18647   /* Enter the SCOPE so that name lookup will be resolved as if we
18648      were in the class definition.  In particular, SCOPE will no
18649      longer be considered a dependent type.  */
18650   pushed_scope = push_scope (scope);
18651   /* Look up the declaration.  */
18652   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
18653
18654   result = NULL_TREE;
18655   
18656   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
18657      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
18658   if (!decl)
18659     /*nop*/;
18660   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
18661            && TREE_CODE (decl) == TYPE_DECL)
18662     {
18663       result = TREE_TYPE (decl);
18664       if (result == error_mark_node)
18665         result = NULL_TREE;
18666     }
18667   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
18668            && DECL_CLASS_TEMPLATE_P (decl))
18669     {
18670       tree tmpl;
18671       tree args;
18672       /* Obtain the template and the arguments.  */
18673       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
18674       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
18675       /* Instantiate the template.  */
18676       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
18677                                       /*entering_scope=*/0,
18678                                       tf_error | tf_user);
18679       if (result == error_mark_node)
18680         result = NULL_TREE;
18681     }
18682   
18683   /* Leave the SCOPE.  */
18684   if (pushed_scope)
18685     pop_scope (pushed_scope);
18686
18687   /* If we failed to resolve it, return the original typename.  */
18688   if (!result)
18689     return type;
18690   
18691   /* If lookup found a typename type, resolve that too.  */
18692   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
18693     {
18694       /* Ill-formed programs can cause infinite recursion here, so we
18695          must catch that.  */
18696       TYPENAME_IS_RESOLVING_P (type) = 1;
18697       result = resolve_typename_type (result, only_current_p);
18698       TYPENAME_IS_RESOLVING_P (type) = 0;
18699     }
18700   
18701   /* Qualify the resulting type.  */
18702   quals = cp_type_quals (type);
18703   if (quals)
18704     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
18705
18706   return result;
18707 }
18708
18709 /* EXPR is an expression which is not type-dependent.  Return a proxy
18710    for EXPR that can be used to compute the types of larger
18711    expressions containing EXPR.  */
18712
18713 tree
18714 build_non_dependent_expr (tree expr)
18715 {
18716   tree inner_expr;
18717
18718   /* Preserve null pointer constants so that the type of things like
18719      "p == 0" where "p" is a pointer can be determined.  */
18720   if (null_ptr_cst_p (expr))
18721     return expr;
18722   /* Preserve OVERLOADs; the functions must be available to resolve
18723      types.  */
18724   inner_expr = expr;
18725   if (TREE_CODE (inner_expr) == STMT_EXPR)
18726     inner_expr = stmt_expr_value_expr (inner_expr);
18727   if (TREE_CODE (inner_expr) == ADDR_EXPR)
18728     inner_expr = TREE_OPERAND (inner_expr, 0);
18729   if (TREE_CODE (inner_expr) == COMPONENT_REF)
18730     inner_expr = TREE_OPERAND (inner_expr, 1);
18731   if (is_overloaded_fn (inner_expr)
18732       || TREE_CODE (inner_expr) == OFFSET_REF)
18733     return expr;
18734   /* There is no need to return a proxy for a variable.  */
18735   if (TREE_CODE (expr) == VAR_DECL)
18736     return expr;
18737   /* Preserve string constants; conversions from string constants to
18738      "char *" are allowed, even though normally a "const char *"
18739      cannot be used to initialize a "char *".  */
18740   if (TREE_CODE (expr) == STRING_CST)
18741     return expr;
18742   /* Preserve arithmetic constants, as an optimization -- there is no
18743      reason to create a new node.  */
18744   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
18745     return expr;
18746   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
18747      There is at least one place where we want to know that a
18748      particular expression is a throw-expression: when checking a ?:
18749      expression, there are special rules if the second or third
18750      argument is a throw-expression.  */
18751   if (TREE_CODE (expr) == THROW_EXPR)
18752     return expr;
18753
18754   if (TREE_CODE (expr) == COND_EXPR)
18755     return build3 (COND_EXPR,
18756                    TREE_TYPE (expr),
18757                    TREE_OPERAND (expr, 0),
18758                    (TREE_OPERAND (expr, 1)
18759                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
18760                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
18761                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
18762   if (TREE_CODE (expr) == COMPOUND_EXPR
18763       && !COMPOUND_EXPR_OVERLOADED (expr))
18764     return build2 (COMPOUND_EXPR,
18765                    TREE_TYPE (expr),
18766                    TREE_OPERAND (expr, 0),
18767                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
18768
18769   /* If the type is unknown, it can't really be non-dependent */
18770   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
18771
18772   /* Otherwise, build a NON_DEPENDENT_EXPR.
18773
18774      REFERENCE_TYPEs are not stripped for expressions in templates
18775      because doing so would play havoc with mangling.  Consider, for
18776      example:
18777
18778        template <typename T> void f<T& g>() { g(); }
18779
18780      In the body of "f", the expression for "g" will have
18781      REFERENCE_TYPE, even though the standard says that it should
18782      not.  The reason is that we must preserve the syntactic form of
18783      the expression so that mangling (say) "f<g>" inside the body of
18784      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
18785      stripped here.  */
18786   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
18787 }
18788
18789 /* ARGS is a vector of expressions as arguments to a function call.
18790    Replace the arguments with equivalent non-dependent expressions.
18791    This modifies ARGS in place.  */
18792
18793 void
18794 make_args_non_dependent (VEC(tree,gc) *args)
18795 {
18796   unsigned int ix;
18797   tree arg;
18798
18799   FOR_EACH_VEC_ELT (tree, args, ix, arg)
18800     {
18801       tree newarg = build_non_dependent_expr (arg);
18802       if (newarg != arg)
18803         VEC_replace (tree, args, ix, newarg);
18804     }
18805 }
18806
18807 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
18808    with a level one deeper than the actual template parms.  */
18809
18810 tree
18811 make_auto (void)
18812 {
18813   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
18814   TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
18815                                TYPE_DECL, get_identifier ("auto"), au);
18816   TYPE_STUB_DECL (au) = TYPE_NAME (au);
18817   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
18818     (0, processing_template_decl + 1, processing_template_decl + 1,
18819      0, TYPE_NAME (au), NULL_TREE);
18820   TYPE_CANONICAL (au) = canonical_type_parameter (au);
18821   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
18822   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
18823
18824   return au;
18825 }
18826
18827 /* Given type ARG, return std::initializer_list<ARG>.  */
18828
18829 static tree
18830 listify (tree arg)
18831 {
18832   tree std_init_list = namespace_binding
18833     (get_identifier ("initializer_list"), std_node);
18834   tree argvec;
18835   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
18836     {    
18837       error ("deducing from brace-enclosed initializer list requires "
18838              "#include <initializer_list>");
18839       return error_mark_node;
18840     }
18841   argvec = make_tree_vec (1);
18842   TREE_VEC_ELT (argvec, 0) = arg;
18843   return lookup_template_class (std_init_list, argvec, NULL_TREE,
18844                                 NULL_TREE, 0, tf_warning_or_error);
18845 }
18846
18847 /* Replace auto in TYPE with std::initializer_list<auto>.  */
18848
18849 static tree
18850 listify_autos (tree type, tree auto_node)
18851 {
18852   tree init_auto = listify (auto_node);
18853   tree argvec = make_tree_vec (1);
18854   TREE_VEC_ELT (argvec, 0) = init_auto;
18855   if (processing_template_decl)
18856     argvec = add_to_template_args (current_template_args (), argvec);
18857   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
18858 }
18859
18860 /* walk_tree helper for do_auto_deduction.  */
18861
18862 static tree
18863 contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
18864                  void *type)
18865 {
18866   /* Is this a variable with the type we're looking for?  */
18867   if (DECL_P (*tp)
18868       && TREE_TYPE (*tp) == type)
18869     return *tp;
18870   else
18871     return NULL_TREE;
18872 }
18873
18874 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
18875    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
18876
18877 tree
18878 do_auto_deduction (tree type, tree init, tree auto_node)
18879 {
18880   tree parms, tparms, targs;
18881   tree args[1];
18882   tree decl;
18883   int val;
18884
18885   /* The name of the object being declared shall not appear in the
18886      initializer expression.  */
18887   decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
18888   if (decl)
18889     {
18890       error ("variable %q#D with %<auto%> type used in its own "
18891              "initializer", decl);
18892       return error_mark_node;
18893     }
18894
18895   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
18896      with either a new invented type template parameter U or, if the
18897      initializer is a braced-init-list (8.5.4), with
18898      std::initializer_list<U>.  */
18899   if (BRACE_ENCLOSED_INITIALIZER_P (init))
18900     type = listify_autos (type, auto_node);
18901
18902   init = resolve_nondeduced_context (init);
18903
18904   parms = build_tree_list (NULL_TREE, type);
18905   args[0] = init;
18906   tparms = make_tree_vec (1);
18907   targs = make_tree_vec (1);
18908   TREE_VEC_ELT (tparms, 0)
18909     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
18910   val = type_unification_real (tparms, targs, parms, args, 1, 0,
18911                                DEDUCE_CALL, LOOKUP_NORMAL);
18912   if (val > 0)
18913     {
18914       error ("unable to deduce %qT from %qE", type, init);
18915       return error_mark_node;
18916     }
18917
18918   /* If the list of declarators contains more than one declarator, the type
18919      of each declared variable is determined as described above. If the
18920      type deduced for the template parameter U is not the same in each
18921      deduction, the program is ill-formed.  */
18922   if (TREE_TYPE (auto_node)
18923       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
18924     {
18925       error ("inconsistent deduction for %qT: %qT and then %qT",
18926              auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
18927       return error_mark_node;
18928     }
18929   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
18930
18931   if (processing_template_decl)
18932     targs = add_to_template_args (current_template_args (), targs);
18933   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
18934 }
18935
18936 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
18937    result.  */
18938
18939 tree
18940 splice_late_return_type (tree type, tree late_return_type)
18941 {
18942   tree argvec;
18943
18944   if (late_return_type == NULL_TREE)
18945     return type;
18946   argvec = make_tree_vec (1);
18947   TREE_VEC_ELT (argvec, 0) = late_return_type;
18948   if (processing_template_decl)
18949     argvec = add_to_template_args (current_template_args (), argvec);
18950   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
18951 }
18952
18953 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
18954
18955 bool
18956 is_auto (const_tree type)
18957 {
18958   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
18959       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
18960     return true;
18961   else
18962     return false;
18963 }
18964
18965 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
18966    appear as a type-specifier for the declaration in question, we don't
18967    have to look through the whole type.  */
18968
18969 tree
18970 type_uses_auto (tree type)
18971 {
18972   enum tree_code code;
18973   if (is_auto (type))
18974     return type;
18975
18976   code = TREE_CODE (type);
18977
18978   if (code == POINTER_TYPE || code == REFERENCE_TYPE
18979       || code == OFFSET_TYPE || code == FUNCTION_TYPE
18980       || code == METHOD_TYPE || code == ARRAY_TYPE)
18981     return type_uses_auto (TREE_TYPE (type));
18982
18983   if (TYPE_PTRMEMFUNC_P (type))
18984     return type_uses_auto (TREE_TYPE (TREE_TYPE
18985                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
18986
18987   return NULL_TREE;
18988 }
18989
18990 /* For a given template T, return the vector of typedefs referenced
18991    in T for which access check is needed at T instantiation time.
18992    T is either  a FUNCTION_DECL or a RECORD_TYPE.
18993    Those typedefs were added to T by the function
18994    append_type_to_template_for_access_check.  */
18995
18996 VEC(qualified_typedef_usage_t,gc)*
18997 get_types_needing_access_check (tree t)
18998 {
18999   tree ti;
19000   VEC(qualified_typedef_usage_t,gc) *result = NULL;
19001
19002   if (!t || t == error_mark_node)
19003     return NULL;
19004
19005   if (!(ti = get_template_info (t)))
19006     return NULL;
19007
19008   if (CLASS_TYPE_P (t)
19009       || TREE_CODE (t) == FUNCTION_DECL)
19010     {
19011       if (!TI_TEMPLATE (ti))
19012         return NULL;
19013
19014       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
19015     }
19016
19017   return result;
19018 }
19019
19020 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
19021    tied to T. That list of typedefs will be access checked at
19022    T instantiation time.
19023    T is either a FUNCTION_DECL or a RECORD_TYPE.
19024    TYPE_DECL is a TYPE_DECL node representing a typedef.
19025    SCOPE is the scope through which TYPE_DECL is accessed.
19026    LOCATION is the location of the usage point of TYPE_DECL.
19027
19028    This function is a subroutine of
19029    append_type_to_template_for_access_check.  */
19030
19031 static void
19032 append_type_to_template_for_access_check_1 (tree t,
19033                                             tree type_decl,
19034                                             tree scope,
19035                                             location_t location)
19036 {
19037   qualified_typedef_usage_t typedef_usage;
19038   tree ti;
19039
19040   if (!t || t == error_mark_node)
19041     return;
19042
19043   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
19044                || CLASS_TYPE_P (t))
19045               && type_decl
19046               && TREE_CODE (type_decl) == TYPE_DECL
19047               && scope);
19048
19049   if (!(ti = get_template_info (t)))
19050     return;
19051
19052   gcc_assert (TI_TEMPLATE (ti));
19053
19054   typedef_usage.typedef_decl = type_decl;
19055   typedef_usage.context = scope;
19056   typedef_usage.locus = location;
19057
19058   VEC_safe_push (qualified_typedef_usage_t, gc,
19059                  TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
19060                  &typedef_usage);
19061 }
19062
19063 /* Append TYPE_DECL to the template TEMPL.
19064    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
19065    At TEMPL instanciation time, TYPE_DECL will be checked to see
19066    if it can be accessed through SCOPE.
19067    LOCATION is the location of the usage point of TYPE_DECL.
19068
19069    e.g. consider the following code snippet:
19070
19071      class C
19072      {
19073        typedef int myint;
19074      };
19075
19076      template<class U> struct S
19077      {
19078        C::myint mi; // <-- usage point of the typedef C::myint
19079      };
19080
19081      S<char> s;
19082
19083    At S<char> instantiation time, we need to check the access of C::myint
19084    In other words, we need to check the access of the myint typedef through
19085    the C scope. For that purpose, this function will add the myint typedef
19086    and the scope C through which its being accessed to a list of typedefs
19087    tied to the template S. That list will be walked at template instantiation
19088    time and access check performed on each typedefs it contains.
19089    Note that this particular code snippet should yield an error because
19090    myint is private to C.  */
19091
19092 void
19093 append_type_to_template_for_access_check (tree templ,
19094                                           tree type_decl,
19095                                           tree scope,
19096                                           location_t location)
19097 {
19098   qualified_typedef_usage_t *iter;
19099   int i;
19100
19101   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
19102
19103   /* Make sure we don't append the type to the template twice.  */
19104   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
19105                     get_types_needing_access_check (templ),
19106                     i, iter)
19107     if (iter->typedef_decl == type_decl && scope == iter->context)
19108       return;
19109
19110   append_type_to_template_for_access_check_1 (templ, type_decl,
19111                                               scope, location);
19112 }
19113
19114 /* Set up the hash tables for template instantiations.  */
19115
19116 void
19117 init_template_processing (void)
19118 {
19119   decl_specializations = htab_create_ggc (37,
19120                                           hash_specialization,
19121                                           eq_specializations,
19122                                           ggc_free);
19123   type_specializations = htab_create_ggc (37,
19124                                           hash_specialization,
19125                                           eq_specializations,
19126                                           ggc_free);
19127 }
19128
19129 /* Print stats about the template hash tables for -fstats.  */
19130
19131 void
19132 print_template_statistics (void)
19133 {
19134   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
19135            "%f collisions\n", (long) htab_size (decl_specializations),
19136            (long) htab_elements (decl_specializations),
19137            htab_collisions (decl_specializations));
19138   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
19139            "%f collisions\n", (long) htab_size (type_specializations),
19140            (long) htab_elements (type_specializations),
19141            htab_collisions (type_specializations));
19142 }
19143
19144 #include "gt-cp-pt.h"