OSDN Git Service

* except.c (build_throw): Set EXPR_LOCATION.
[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, 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 hashval_t iterative_hash_template_arg (tree arg, hashval_t val);
191 static tree listify (tree);
192 static tree listify_autos (tree, tree);
193
194 /* Make the current scope suitable for access checking when we are
195    processing T.  T can be FUNCTION_DECL for instantiated function
196    template, or VAR_DECL for static member variable (need by
197    instantiate_decl).  */
198
199 static void
200 push_access_scope (tree t)
201 {
202   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
203               || TREE_CODE (t) == VAR_DECL);
204
205   if (DECL_FRIEND_CONTEXT (t))
206     push_nested_class (DECL_FRIEND_CONTEXT (t));
207   else if (DECL_CLASS_SCOPE_P (t))
208     push_nested_class (DECL_CONTEXT (t));
209   else
210     push_to_top_level ();
211
212   if (TREE_CODE (t) == FUNCTION_DECL)
213     {
214       saved_access_scope = tree_cons
215         (NULL_TREE, current_function_decl, saved_access_scope);
216       current_function_decl = t;
217     }
218 }
219
220 /* Restore the scope set up by push_access_scope.  T is the node we
221    are processing.  */
222
223 static void
224 pop_access_scope (tree t)
225 {
226   if (TREE_CODE (t) == FUNCTION_DECL)
227     {
228       current_function_decl = TREE_VALUE (saved_access_scope);
229       saved_access_scope = TREE_CHAIN (saved_access_scope);
230     }
231
232   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
233     pop_nested_class ();
234   else
235     pop_from_top_level ();
236 }
237
238 /* Do any processing required when DECL (a member template
239    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
240    to DECL, unless it is a specialization, in which case the DECL
241    itself is returned.  */
242
243 tree
244 finish_member_template_decl (tree decl)
245 {
246   if (decl == error_mark_node)
247     return error_mark_node;
248
249   gcc_assert (DECL_P (decl));
250
251   if (TREE_CODE (decl) == TYPE_DECL)
252     {
253       tree type;
254
255       type = TREE_TYPE (decl);
256       if (type == error_mark_node)
257         return error_mark_node;
258       if (MAYBE_CLASS_TYPE_P (type)
259           && CLASSTYPE_TEMPLATE_INFO (type)
260           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
261         {
262           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
263           check_member_template (tmpl);
264           return tmpl;
265         }
266       return NULL_TREE;
267     }
268   else if (TREE_CODE (decl) == FIELD_DECL)
269     error ("data member %qD cannot be a member template", decl);
270   else if (DECL_TEMPLATE_INFO (decl))
271     {
272       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
273         {
274           check_member_template (DECL_TI_TEMPLATE (decl));
275           return DECL_TI_TEMPLATE (decl);
276         }
277       else
278         return decl;
279     }
280   else
281     error ("invalid member template declaration %qD", decl);
282
283   return error_mark_node;
284 }
285
286 /* Create a template info node.  */
287
288 tree
289 build_template_info (tree template_decl, tree template_args)
290 {
291   tree result = make_node (TEMPLATE_INFO);
292   TI_TEMPLATE (result) = template_decl;
293   TI_ARGS (result) = template_args;
294   return result;
295 }
296
297 /* Return the template info node corresponding to T, whatever T is.  */
298
299 tree
300 get_template_info (const_tree t)
301 {
302   tree tinfo = NULL_TREE;
303
304   if (!t || t == error_mark_node)
305     return NULL;
306
307   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
308     tinfo = DECL_TEMPLATE_INFO (t);
309
310   if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
311     t = TREE_TYPE (t);
312
313   if (TAGGED_TYPE_P (t))
314     tinfo = TYPE_TEMPLATE_INFO (t);
315   else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
316     tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
317
318   return tinfo;
319 }
320
321 /* Returns the template nesting level of the indicated class TYPE.
322
323    For example, in:
324      template <class T>
325      struct A
326      {
327        template <class U>
328        struct B {};
329      };
330
331    A<T>::B<U> has depth two, while A<T> has depth one.
332    Both A<T>::B<int> and A<int>::B<U> have depth one, if
333    they are instantiations, not specializations.
334
335    This function is guaranteed to return 0 if passed NULL_TREE so
336    that, for example, `template_class_depth (current_class_type)' is
337    always safe.  */
338
339 int
340 template_class_depth (tree type)
341 {
342   int depth;
343
344   for (depth = 0;
345        type && TREE_CODE (type) != NAMESPACE_DECL;
346        type = (TREE_CODE (type) == FUNCTION_DECL)
347          ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
348     {
349       tree tinfo = get_template_info (type);
350
351       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
352           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
353         ++depth;
354     }
355
356   return depth;
357 }
358
359 /* Subroutine of maybe_begin_member_template_processing.
360    Returns true if processing DECL needs us to push template parms.  */
361
362 static bool
363 inline_needs_template_parms (tree decl)
364 {
365   if (! DECL_TEMPLATE_INFO (decl))
366     return false;
367
368   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
369           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
370 }
371
372 /* Subroutine of maybe_begin_member_template_processing.
373    Push the template parms in PARMS, starting from LEVELS steps into the
374    chain, and ending at the beginning, since template parms are listed
375    innermost first.  */
376
377 static void
378 push_inline_template_parms_recursive (tree parmlist, int levels)
379 {
380   tree parms = TREE_VALUE (parmlist);
381   int i;
382
383   if (levels > 1)
384     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
385
386   ++processing_template_decl;
387   current_template_parms
388     = tree_cons (size_int (processing_template_decl),
389                  parms, current_template_parms);
390   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
391
392   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
393                NULL);
394   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
395     {
396       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
397
398       if (parm == error_mark_node)
399         continue;
400
401       gcc_assert (DECL_P (parm));
402
403       switch (TREE_CODE (parm))
404         {
405         case TYPE_DECL:
406         case TEMPLATE_DECL:
407           pushdecl (parm);
408           break;
409
410         case PARM_DECL:
411           {
412             /* Make a CONST_DECL as is done in process_template_parm.
413                It is ugly that we recreate this here; the original
414                version built in process_template_parm is no longer
415                available.  */
416             tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
417                                     CONST_DECL, DECL_NAME (parm),
418                                     TREE_TYPE (parm));
419             DECL_ARTIFICIAL (decl) = 1;
420             TREE_CONSTANT (decl) = 1;
421             TREE_READONLY (decl) = 1;
422             DECL_INITIAL (decl) = DECL_INITIAL (parm);
423             SET_DECL_TEMPLATE_PARM_P (decl);
424             pushdecl (decl);
425           }
426           break;
427
428         default:
429           gcc_unreachable ();
430         }
431     }
432 }
433
434 /* Restore the template parameter context for a member template or
435    a friend template defined in a class definition.  */
436
437 void
438 maybe_begin_member_template_processing (tree decl)
439 {
440   tree parms;
441   int levels = 0;
442
443   if (inline_needs_template_parms (decl))
444     {
445       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
446       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
447
448       if (DECL_TEMPLATE_SPECIALIZATION (decl))
449         {
450           --levels;
451           parms = TREE_CHAIN (parms);
452         }
453
454       push_inline_template_parms_recursive (parms, levels);
455     }
456
457   /* Remember how many levels of template parameters we pushed so that
458      we can pop them later.  */
459   VEC_safe_push (int, heap, inline_parm_levels, levels);
460 }
461
462 /* Undo the effects of maybe_begin_member_template_processing.  */
463
464 void
465 maybe_end_member_template_processing (void)
466 {
467   int i;
468   int last;
469
470   if (VEC_length (int, inline_parm_levels) == 0)
471     return;
472
473   last = VEC_pop (int, inline_parm_levels);
474   for (i = 0; i < last; ++i)
475     {
476       --processing_template_decl;
477       current_template_parms = TREE_CHAIN (current_template_parms);
478       poplevel (0, 0, 0);
479     }
480 }
481
482 /* Return a new template argument vector which contains all of ARGS,
483    but has as its innermost set of arguments the EXTRA_ARGS.  */
484
485 static tree
486 add_to_template_args (tree args, tree extra_args)
487 {
488   tree new_args;
489   int extra_depth;
490   int i;
491   int j;
492
493   if (args == NULL_TREE || extra_args == error_mark_node)
494     return extra_args;
495
496   extra_depth = TMPL_ARGS_DEPTH (extra_args);
497   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
498
499   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
500     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
501
502   for (j = 1; j <= extra_depth; ++j, ++i)
503     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
504
505   return new_args;
506 }
507
508 /* Like add_to_template_args, but only the outermost ARGS are added to
509    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
510    (EXTRA_ARGS) levels are added.  This function is used to combine
511    the template arguments from a partial instantiation with the
512    template arguments used to attain the full instantiation from the
513    partial instantiation.  */
514
515 static tree
516 add_outermost_template_args (tree args, tree extra_args)
517 {
518   tree new_args;
519
520   /* If there are more levels of EXTRA_ARGS than there are ARGS,
521      something very fishy is going on.  */
522   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
523
524   /* If *all* the new arguments will be the EXTRA_ARGS, just return
525      them.  */
526   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
527     return extra_args;
528
529   /* For the moment, we make ARGS look like it contains fewer levels.  */
530   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
531
532   new_args = add_to_template_args (args, extra_args);
533
534   /* Now, we restore ARGS to its full dimensions.  */
535   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
536
537   return new_args;
538 }
539
540 /* Return the N levels of innermost template arguments from the ARGS.  */
541
542 tree
543 get_innermost_template_args (tree args, int n)
544 {
545   tree new_args;
546   int extra_levels;
547   int i;
548
549   gcc_assert (n >= 0);
550
551   /* If N is 1, just return the innermost set of template arguments.  */
552   if (n == 1)
553     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
554
555   /* If we're not removing anything, just return the arguments we were
556      given.  */
557   extra_levels = TMPL_ARGS_DEPTH (args) - n;
558   gcc_assert (extra_levels >= 0);
559   if (extra_levels == 0)
560     return args;
561
562   /* Make a new set of arguments, not containing the outer arguments.  */
563   new_args = make_tree_vec (n);
564   for (i = 1; i <= n; ++i)
565     SET_TMPL_ARGS_LEVEL (new_args, i,
566                          TMPL_ARGS_LEVEL (args, i + extra_levels));
567
568   return new_args;
569 }
570
571 /* The inverse of get_innermost_template_args: Return all but the innermost
572    EXTRA_LEVELS levels of template arguments from the ARGS.  */
573
574 static tree
575 strip_innermost_template_args (tree args, int extra_levels)
576 {
577   tree new_args;
578   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
579   int i;
580
581   gcc_assert (n >= 0);
582
583   /* If N is 1, just return the outermost set of template arguments.  */
584   if (n == 1)
585     return TMPL_ARGS_LEVEL (args, 1);
586
587   /* If we're not removing anything, just return the arguments we were
588      given.  */
589   gcc_assert (extra_levels >= 0);
590   if (extra_levels == 0)
591     return args;
592
593   /* Make a new set of arguments, not containing the inner arguments.  */
594   new_args = make_tree_vec (n);
595   for (i = 1; i <= n; ++i)
596     SET_TMPL_ARGS_LEVEL (new_args, i,
597                          TMPL_ARGS_LEVEL (args, i));
598
599   return new_args;
600 }
601
602 /* We've got a template header coming up; push to a new level for storing
603    the parms.  */
604
605 void
606 begin_template_parm_list (void)
607 {
608   /* We use a non-tag-transparent scope here, which causes pushtag to
609      put tags in this scope, rather than in the enclosing class or
610      namespace scope.  This is the right thing, since we want
611      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
612      global template class, push_template_decl handles putting the
613      TEMPLATE_DECL into top-level scope.  For a nested template class,
614      e.g.:
615
616        template <class T> struct S1 {
617          template <class T> struct S2 {};
618        };
619
620      pushtag contains special code to call pushdecl_with_scope on the
621      TEMPLATE_DECL for S2.  */
622   begin_scope (sk_template_parms, NULL);
623   ++processing_template_decl;
624   ++processing_template_parmlist;
625   note_template_header (0);
626 }
627
628 /* This routine is called when a specialization is declared.  If it is
629    invalid to declare a specialization here, an error is reported and
630    false is returned, otherwise this routine will return true.  */
631
632 static bool
633 check_specialization_scope (void)
634 {
635   tree scope = current_scope ();
636
637   /* [temp.expl.spec]
638
639      An explicit specialization shall be declared in the namespace of
640      which the template is a member, or, for member templates, in the
641      namespace of which the enclosing class or enclosing class
642      template is a member.  An explicit specialization of a member
643      function, member class or static data member of a class template
644      shall be declared in the namespace of which the class template
645      is a member.  */
646   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
647     {
648       error ("explicit specialization in non-namespace scope %qD", scope);
649       return false;
650     }
651
652   /* [temp.expl.spec]
653
654      In an explicit specialization declaration for a member of a class
655      template or a member template that appears in namespace scope,
656      the member template and some of its enclosing class templates may
657      remain unspecialized, except that the declaration shall not
658      explicitly specialize a class member template if its enclosing
659      class templates are not explicitly specialized as well.  */
660   if (current_template_parms)
661     {
662       error ("enclosing class templates are not explicitly specialized");
663       return false;
664     }
665
666   return true;
667 }
668
669 /* We've just seen template <>.  */
670
671 bool
672 begin_specialization (void)
673 {
674   begin_scope (sk_template_spec, NULL);
675   note_template_header (1);
676   return check_specialization_scope ();
677 }
678
679 /* Called at then end of processing a declaration preceded by
680    template<>.  */
681
682 void
683 end_specialization (void)
684 {
685   finish_scope ();
686   reset_specialization ();
687 }
688
689 /* Any template <>'s that we have seen thus far are not referring to a
690    function specialization.  */
691
692 void
693 reset_specialization (void)
694 {
695   processing_specialization = 0;
696   template_header_count = 0;
697 }
698
699 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
700    it was of the form template <>.  */
701
702 static void
703 note_template_header (int specialization)
704 {
705   processing_specialization = specialization;
706   template_header_count++;
707 }
708
709 /* We're beginning an explicit instantiation.  */
710
711 void
712 begin_explicit_instantiation (void)
713 {
714   gcc_assert (!processing_explicit_instantiation);
715   processing_explicit_instantiation = true;
716 }
717
718
719 void
720 end_explicit_instantiation (void)
721 {
722   gcc_assert (processing_explicit_instantiation);
723   processing_explicit_instantiation = false;
724 }
725
726 /* An explicit specialization or partial specialization TMPL is being
727    declared.  Check that the namespace in which the specialization is
728    occurring is permissible.  Returns false iff it is invalid to
729    specialize TMPL in the current namespace.  */
730
731 static bool
732 check_specialization_namespace (tree tmpl)
733 {
734   tree tpl_ns = decl_namespace_context (tmpl);
735
736   /* [tmpl.expl.spec]
737
738      An explicit specialization shall be declared in the namespace of
739      which the template is a member, or, for member templates, in the
740      namespace of which the enclosing class or enclosing class
741      template is a member.  An explicit specialization of a member
742      function, member class or static data member of a class template
743      shall be declared in the namespace of which the class template is
744      a member.  */
745   if (current_scope() != DECL_CONTEXT (tmpl)
746       && !at_namespace_scope_p ())
747     {
748       error ("specialization of %qD must appear at namespace scope", tmpl);
749       return false;
750     }
751   if (is_associated_namespace (current_namespace, tpl_ns))
752     /* Same or super-using namespace.  */
753     return true;
754   else
755     {
756       permerror (input_location, "specialization of %qD in different namespace", tmpl);
757       permerror (input_location, "  from definition of %q+#D", tmpl);
758       return false;
759     }
760 }
761
762 /* SPEC is an explicit instantiation.  Check that it is valid to
763    perform this explicit instantiation in the current namespace.  */
764
765 static void
766 check_explicit_instantiation_namespace (tree spec)
767 {
768   tree ns;
769
770   /* DR 275: An explicit instantiation shall appear in an enclosing
771      namespace of its template.  */
772   ns = decl_namespace_context (spec);
773   if (!is_ancestor (current_namespace, ns))
774     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
775                "(which does not enclose namespace %qD)",
776                spec, current_namespace, ns);
777 }
778
779 /* The TYPE is being declared.  If it is a template type, that means it
780    is a partial specialization.  Do appropriate error-checking.  */
781
782 tree
783 maybe_process_partial_specialization (tree type)
784 {
785   tree context;
786
787   if (type == error_mark_node)
788     return error_mark_node;
789
790   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
791     {
792       error ("name of class shadows template template parameter %qD",
793              TYPE_NAME (type));
794       return error_mark_node;
795     }
796
797   context = TYPE_CONTEXT (type);
798
799   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
800     {
801       /* This is for ordinary explicit specialization and partial
802          specialization of a template class such as:
803
804            template <> class C<int>;
805
806          or:
807
808            template <class T> class C<T*>;
809
810          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
811
812       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
813           && !COMPLETE_TYPE_P (type))
814         {
815           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
816           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
817           if (processing_template_decl)
818             {
819               if (push_template_decl (TYPE_MAIN_DECL (type))
820                   == error_mark_node)
821                 return error_mark_node;
822             }
823         }
824       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
825         error ("specialization of %qT after instantiation", type);
826     }
827   else if (CLASS_TYPE_P (type)
828            && !CLASSTYPE_USE_TEMPLATE (type)
829            && CLASSTYPE_TEMPLATE_INFO (type)
830            && context && CLASS_TYPE_P (context)
831            && CLASSTYPE_TEMPLATE_INFO (context))
832     {
833       /* This is for an explicit specialization of member class
834          template according to [temp.expl.spec/18]:
835
836            template <> template <class U> class C<int>::D;
837
838          The context `C<int>' must be an implicit instantiation.
839          Otherwise this is just a member class template declared
840          earlier like:
841
842            template <> class C<int> { template <class U> class D; };
843            template <> template <class U> class C<int>::D;
844
845          In the first case, `C<int>::D' is a specialization of `C<T>::D'
846          while in the second case, `C<int>::D' is a primary template
847          and `C<T>::D' may not exist.  */
848
849       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
850           && !COMPLETE_TYPE_P (type))
851         {
852           tree t;
853           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
854
855           if (current_namespace
856               != decl_namespace_context (tmpl))
857             {
858               permerror (input_location, "specializing %q#T in different namespace", type);
859               permerror (input_location, "  from definition of %q+#D", tmpl);
860             }
861
862           /* Check for invalid specialization after instantiation:
863
864                template <> template <> class C<int>::D<int>;
865                template <> template <class U> class C<int>::D;  */
866
867           for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
868                t; t = TREE_CHAIN (t))
869             {
870               tree inst = TREE_VALUE (t);
871               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst))
872                 {
873                   /* We already have a full specialization of this partial
874                      instantiation.  Reassign it to the new member
875                      specialization template.  */
876                   spec_entry elt;
877                   spec_entry **slot;
878
879                   elt.tmpl = most_general_template (tmpl);
880                   elt.args = CLASSTYPE_TI_ARGS (inst);
881                   elt.spec = inst;
882
883                   htab_remove_elt (type_specializations, &elt);
884
885                   elt.tmpl = tmpl;
886                   elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
887
888                   slot = (spec_entry **)
889                     htab_find_slot (type_specializations, &elt, INSERT);
890                   *slot = ggc_alloc_spec_entry ();
891                   **slot = elt;
892                 }
893               else if (COMPLETE_OR_OPEN_TYPE_P (inst))
894                 /* But if we've had an implicit instantiation, that's a
895                    problem ([temp.expl.spec]/6).  */
896                 error ("specialization %qT after instantiation %qT",
897                        type, inst);
898             }
899
900           /* Mark TYPE as a specialization.  And as a result, we only
901              have one level of template argument for the innermost
902              class template.  */
903           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
904           CLASSTYPE_TI_ARGS (type)
905             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
906         }
907     }
908   else if (processing_specialization)
909     {
910        /* Someday C++0x may allow for enum template specialization.  */
911       if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
912           && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
913         pedwarn (input_location, OPT_pedantic, "template specialization "
914                  "of %qD not allowed by ISO C++", type);
915       else
916         {
917           error ("explicit specialization of non-template %qT", type);
918           return error_mark_node;
919         }
920     }
921
922   return type;
923 }
924
925 /* Returns nonzero if we can optimize the retrieval of specializations
926    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
927    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
928
929 static inline bool
930 optimize_specialization_lookup_p (tree tmpl)
931 {
932   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
933           && DECL_CLASS_SCOPE_P (tmpl)
934           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
935              parameter.  */
936           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
937           /* The optimized lookup depends on the fact that the
938              template arguments for the member function template apply
939              purely to the containing class, which is not true if the
940              containing class is an explicit or partial
941              specialization.  */
942           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
943           && !DECL_MEMBER_TEMPLATE_P (tmpl)
944           && !DECL_CONV_FN_P (tmpl)
945           /* It is possible to have a template that is not a member
946              template and is not a member of a template class:
947
948              template <typename T>
949              struct S { friend A::f(); };
950
951              Here, the friend function is a template, but the context does
952              not have template information.  The optimized lookup relies
953              on having ARGS be the template arguments for both the class
954              and the function template.  */
955           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
956 }
957
958 /* Retrieve the specialization (in the sense of [temp.spec] - a
959    specialization is either an instantiation or an explicit
960    specialization) of TMPL for the given template ARGS.  If there is
961    no such specialization, return NULL_TREE.  The ARGS are a vector of
962    arguments, or a vector of vectors of arguments, in the case of
963    templates with more than one level of parameters.
964
965    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
966    then we search for a partial specialization matching ARGS.  This
967    parameter is ignored if TMPL is not a class template.  */
968
969 static tree
970 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
971 {
972   if (args == error_mark_node)
973     return NULL_TREE;
974
975   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
976
977   /* There should be as many levels of arguments as there are
978      levels of parameters.  */
979   gcc_assert (TMPL_ARGS_DEPTH (args)
980               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
981
982   if (optimize_specialization_lookup_p (tmpl))
983     {
984       tree class_template;
985       tree class_specialization;
986       VEC(tree,gc) *methods;
987       tree fns;
988       int idx;
989
990       /* The template arguments actually apply to the containing
991          class.  Find the class specialization with those
992          arguments.  */
993       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
994       class_specialization
995         = retrieve_specialization (class_template, args, 0);
996       if (!class_specialization)
997         return NULL_TREE;
998       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
999          for the specialization.  */
1000       idx = class_method_index_for_fn (class_specialization, tmpl);
1001       if (idx == -1)
1002         return NULL_TREE;
1003       /* Iterate through the methods with the indicated name, looking
1004          for the one that has an instance of TMPL.  */
1005       methods = CLASSTYPE_METHOD_VEC (class_specialization);
1006       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
1007         {
1008           tree fn = OVL_CURRENT (fns);
1009           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1010               /* using-declarations can add base methods to the method vec,
1011                  and we don't want those here.  */
1012               && DECL_CONTEXT (fn) == class_specialization)
1013             return fn;
1014         }
1015       return NULL_TREE;
1016     }
1017   else
1018     {
1019       spec_entry *found;
1020       spec_entry elt;
1021       htab_t specializations;
1022
1023       elt.tmpl = tmpl;
1024       elt.args = args;
1025       elt.spec = NULL_TREE;
1026
1027       if (DECL_CLASS_TEMPLATE_P (tmpl))
1028         specializations = type_specializations;
1029       else
1030         specializations = decl_specializations;
1031
1032       if (hash == 0)
1033         hash = hash_specialization (&elt);
1034       found = (spec_entry *) htab_find_with_hash (specializations, &elt, hash);
1035       if (found)
1036         return found->spec;
1037     }
1038
1039   return NULL_TREE;
1040 }
1041
1042 /* Like retrieve_specialization, but for local declarations.  */
1043
1044 static tree
1045 retrieve_local_specialization (tree tmpl)
1046 {
1047   tree spec;
1048
1049   if (local_specializations == NULL)
1050     return NULL_TREE;
1051
1052   spec = (tree) htab_find_with_hash (local_specializations, tmpl,
1053                                      htab_hash_pointer (tmpl));
1054   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
1055 }
1056
1057 /* Returns nonzero iff DECL is a specialization of TMPL.  */
1058
1059 int
1060 is_specialization_of (tree decl, tree tmpl)
1061 {
1062   tree t;
1063
1064   if (TREE_CODE (decl) == FUNCTION_DECL)
1065     {
1066       for (t = decl;
1067            t != NULL_TREE;
1068            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1069         if (t == tmpl)
1070           return 1;
1071     }
1072   else
1073     {
1074       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1075
1076       for (t = TREE_TYPE (decl);
1077            t != NULL_TREE;
1078            t = CLASSTYPE_USE_TEMPLATE (t)
1079              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1080         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1081           return 1;
1082     }
1083
1084   return 0;
1085 }
1086
1087 /* Returns nonzero iff DECL is a specialization of friend declaration
1088    FRIEND_DECL according to [temp.friend].  */
1089
1090 bool
1091 is_specialization_of_friend (tree decl, tree friend_decl)
1092 {
1093   bool need_template = true;
1094   int template_depth;
1095
1096   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1097               || TREE_CODE (decl) == TYPE_DECL);
1098
1099   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1100      of a template class, we want to check if DECL is a specialization
1101      if this.  */
1102   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1103       && DECL_TEMPLATE_INFO (friend_decl)
1104       && !DECL_USE_TEMPLATE (friend_decl))
1105     {
1106       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1107       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1108       need_template = false;
1109     }
1110   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1111            && !PRIMARY_TEMPLATE_P (friend_decl))
1112     need_template = false;
1113
1114   /* There is nothing to do if this is not a template friend.  */
1115   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1116     return false;
1117
1118   if (is_specialization_of (decl, friend_decl))
1119     return true;
1120
1121   /* [temp.friend/6]
1122      A member of a class template may be declared to be a friend of a
1123      non-template class.  In this case, the corresponding member of
1124      every specialization of the class template is a friend of the
1125      class granting friendship.
1126
1127      For example, given a template friend declaration
1128
1129        template <class T> friend void A<T>::f();
1130
1131      the member function below is considered a friend
1132
1133        template <> struct A<int> {
1134          void f();
1135        };
1136
1137      For this type of template friend, TEMPLATE_DEPTH below will be
1138      nonzero.  To determine if DECL is a friend of FRIEND, we first
1139      check if the enclosing class is a specialization of another.  */
1140
1141   template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1142   if (template_depth
1143       && DECL_CLASS_SCOPE_P (decl)
1144       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1145                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1146     {
1147       /* Next, we check the members themselves.  In order to handle
1148          a few tricky cases, such as when FRIEND_DECL's are
1149
1150            template <class T> friend void A<T>::g(T t);
1151            template <class T> template <T t> friend void A<T>::h();
1152
1153          and DECL's are
1154
1155            void A<int>::g(int);
1156            template <int> void A<int>::h();
1157
1158          we need to figure out ARGS, the template arguments from
1159          the context of DECL.  This is required for template substitution
1160          of `T' in the function parameter of `g' and template parameter
1161          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1162
1163       tree context = DECL_CONTEXT (decl);
1164       tree args = NULL_TREE;
1165       int current_depth = 0;
1166
1167       while (current_depth < template_depth)
1168         {
1169           if (CLASSTYPE_TEMPLATE_INFO (context))
1170             {
1171               if (current_depth == 0)
1172                 args = TYPE_TI_ARGS (context);
1173               else
1174                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1175               current_depth++;
1176             }
1177           context = TYPE_CONTEXT (context);
1178         }
1179
1180       if (TREE_CODE (decl) == FUNCTION_DECL)
1181         {
1182           bool is_template;
1183           tree friend_type;
1184           tree decl_type;
1185           tree friend_args_type;
1186           tree decl_args_type;
1187
1188           /* Make sure that both DECL and FRIEND_DECL are templates or
1189              non-templates.  */
1190           is_template = DECL_TEMPLATE_INFO (decl)
1191                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1192           if (need_template ^ is_template)
1193             return false;
1194           else if (is_template)
1195             {
1196               /* If both are templates, check template parameter list.  */
1197               tree friend_parms
1198                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1199                                          args, tf_none);
1200               if (!comp_template_parms
1201                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1202                       friend_parms))
1203                 return false;
1204
1205               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1206             }
1207           else
1208             decl_type = TREE_TYPE (decl);
1209
1210           friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1211                                               tf_none, NULL_TREE);
1212           if (friend_type == error_mark_node)
1213             return false;
1214
1215           /* Check if return types match.  */
1216           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1217             return false;
1218
1219           /* Check if function parameter types match, ignoring the
1220              `this' parameter.  */
1221           friend_args_type = TYPE_ARG_TYPES (friend_type);
1222           decl_args_type = TYPE_ARG_TYPES (decl_type);
1223           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1224             friend_args_type = TREE_CHAIN (friend_args_type);
1225           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1226             decl_args_type = TREE_CHAIN (decl_args_type);
1227
1228           return compparms (decl_args_type, friend_args_type);
1229         }
1230       else
1231         {
1232           /* DECL is a TYPE_DECL */
1233           bool is_template;
1234           tree decl_type = TREE_TYPE (decl);
1235
1236           /* Make sure that both DECL and FRIEND_DECL are templates or
1237              non-templates.  */
1238           is_template
1239             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1240               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1241
1242           if (need_template ^ is_template)
1243             return false;
1244           else if (is_template)
1245             {
1246               tree friend_parms;
1247               /* If both are templates, check the name of the two
1248                  TEMPLATE_DECL's first because is_friend didn't.  */
1249               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1250                   != DECL_NAME (friend_decl))
1251                 return false;
1252
1253               /* Now check template parameter list.  */
1254               friend_parms
1255                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1256                                          args, tf_none);
1257               return comp_template_parms
1258                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1259                  friend_parms);
1260             }
1261           else
1262             return (DECL_NAME (decl)
1263                     == DECL_NAME (friend_decl));
1264         }
1265     }
1266   return false;
1267 }
1268
1269 /* Register the specialization SPEC as a specialization of TMPL with
1270    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1271    is actually just a friend declaration.  Returns SPEC, or an
1272    equivalent prior declaration, if available.  */
1273
1274 static tree
1275 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1276                          hashval_t hash)
1277 {
1278   tree fn;
1279   spec_entry **slot = NULL;
1280   spec_entry elt;
1281
1282   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec));
1283
1284   if (TREE_CODE (spec) == FUNCTION_DECL
1285       && uses_template_parms (DECL_TI_ARGS (spec)))
1286     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1287        register it; we want the corresponding TEMPLATE_DECL instead.
1288        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1289        the more obvious `uses_template_parms (spec)' to avoid problems
1290        with default function arguments.  In particular, given
1291        something like this:
1292
1293           template <class T> void f(T t1, T t = T())
1294
1295        the default argument expression is not substituted for in an
1296        instantiation unless and until it is actually needed.  */
1297     return spec;
1298
1299   if (optimize_specialization_lookup_p (tmpl))
1300     /* We don't put these specializations in the hash table, but we might
1301        want to give an error about a mismatch.  */
1302     fn = retrieve_specialization (tmpl, args, 0);
1303   else
1304     {
1305       elt.tmpl = tmpl;
1306       elt.args = args;
1307       elt.spec = spec;
1308
1309       if (hash == 0)
1310         hash = hash_specialization (&elt);
1311
1312       slot = (spec_entry **)
1313         htab_find_slot_with_hash (decl_specializations, &elt, hash, INSERT);
1314       if (*slot)
1315         fn = (*slot)->spec;
1316       else
1317         fn = NULL_TREE;
1318     }
1319
1320   /* We can sometimes try to re-register a specialization that we've
1321      already got.  In particular, regenerate_decl_from_template calls
1322      duplicate_decls which will update the specialization list.  But,
1323      we'll still get called again here anyhow.  It's more convenient
1324      to simply allow this than to try to prevent it.  */
1325   if (fn == spec)
1326     return spec;
1327   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1328     {
1329       if (DECL_TEMPLATE_INSTANTIATION (fn))
1330         {
1331           if (DECL_ODR_USED (fn)
1332               || DECL_EXPLICIT_INSTANTIATION (fn))
1333             {
1334               error ("specialization of %qD after instantiation",
1335                      fn);
1336               return error_mark_node;
1337             }
1338           else
1339             {
1340               tree clone;
1341               /* This situation should occur only if the first
1342                  specialization is an implicit instantiation, the
1343                  second is an explicit specialization, and the
1344                  implicit instantiation has not yet been used.  That
1345                  situation can occur if we have implicitly
1346                  instantiated a member function and then specialized
1347                  it later.
1348
1349                  We can also wind up here if a friend declaration that
1350                  looked like an instantiation turns out to be a
1351                  specialization:
1352
1353                    template <class T> void foo(T);
1354                    class S { friend void foo<>(int) };
1355                    template <> void foo(int);
1356
1357                  We transform the existing DECL in place so that any
1358                  pointers to it become pointers to the updated
1359                  declaration.
1360
1361                  If there was a definition for the template, but not
1362                  for the specialization, we want this to look as if
1363                  there were no definition, and vice versa.  */
1364               DECL_INITIAL (fn) = NULL_TREE;
1365               duplicate_decls (spec, fn, is_friend);
1366               /* The call to duplicate_decls will have applied
1367                  [temp.expl.spec]:
1368
1369                    An explicit specialization of a function template
1370                    is inline only if it is explicitly declared to be,
1371                    and independently of whether its function template
1372                    is.
1373
1374                 to the primary function; now copy the inline bits to
1375                 the various clones.  */
1376               FOR_EACH_CLONE (clone, fn)
1377                 {
1378                   DECL_DECLARED_INLINE_P (clone)
1379                     = DECL_DECLARED_INLINE_P (fn);
1380                   DECL_SOURCE_LOCATION (clone)
1381                     = DECL_SOURCE_LOCATION (fn);
1382                 }
1383               check_specialization_namespace (fn);
1384
1385               return fn;
1386             }
1387         }
1388       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1389         {
1390           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1391             /* Dup decl failed, but this is a new definition. Set the
1392                line number so any errors match this new
1393                definition.  */
1394             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1395
1396           return fn;
1397         }
1398     }
1399   else if (fn)
1400     return duplicate_decls (spec, fn, is_friend);
1401
1402   /* A specialization must be declared in the same namespace as the
1403      template it is specializing.  */
1404   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1405       && !check_specialization_namespace (tmpl))
1406     DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1407
1408   if (!optimize_specialization_lookup_p (tmpl))
1409     {
1410       gcc_assert (tmpl && args && spec);
1411       *slot = ggc_alloc_spec_entry ();
1412       **slot = elt;
1413       if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1414           && PRIMARY_TEMPLATE_P (tmpl)
1415           && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1416         /* TMPL is a forward declaration of a template function; keep a list
1417            of all specializations in case we need to reassign them to a friend
1418            template later in tsubst_friend_function.  */
1419         DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1420           = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1421     }
1422
1423   return spec;
1424 }
1425
1426 /* Returns true iff two spec_entry nodes are equivalent.  Only compares the
1427    TMPL and ARGS members, ignores SPEC.  */
1428
1429 static int
1430 eq_specializations (const void *p1, const void *p2)
1431 {
1432   const spec_entry *e1 = (const spec_entry *)p1;
1433   const spec_entry *e2 = (const spec_entry *)p2;
1434
1435   return (e1->tmpl == e2->tmpl
1436           && comp_template_args (e1->args, e2->args));
1437 }
1438
1439 /* Returns a hash for a template TMPL and template arguments ARGS.  */
1440
1441 static hashval_t
1442 hash_tmpl_and_args (tree tmpl, tree args)
1443 {
1444   hashval_t val = DECL_UID (tmpl);
1445   return iterative_hash_template_arg (args, val);
1446 }
1447
1448 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1449    ignoring SPEC.  */
1450
1451 static hashval_t
1452 hash_specialization (const void *p)
1453 {
1454   const spec_entry *e = (const spec_entry *)p;
1455   return hash_tmpl_and_args (e->tmpl, e->args);
1456 }
1457
1458 /* Recursively calculate a hash value for a template argument ARG, for use
1459    in the hash tables of template specializations.  */
1460
1461 static hashval_t
1462 iterative_hash_template_arg (tree arg, hashval_t val)
1463 {
1464   unsigned HOST_WIDE_INT i;
1465   enum tree_code code;
1466   char tclass;
1467
1468   if (arg == NULL_TREE)
1469     return iterative_hash_object (arg, val);
1470
1471   if (!TYPE_P (arg))
1472     STRIP_NOPS (arg);
1473
1474   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1475     /* We can get one of these when re-hashing a previous entry in the middle
1476        of substituting into a pack expansion.  Just look through it.  */
1477     arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1478
1479   code = TREE_CODE (arg);
1480   tclass = TREE_CODE_CLASS (code);
1481
1482   val = iterative_hash_object (code, val);
1483
1484   switch (code)
1485     {
1486     case ERROR_MARK:
1487       return val;
1488
1489     case IDENTIFIER_NODE:
1490       return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1491
1492     case TREE_VEC:
1493       {
1494         int i, len = TREE_VEC_LENGTH (arg);
1495         for (i = 0; i < len; ++i)
1496           val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1497         return val;
1498       }
1499
1500     case TYPE_PACK_EXPANSION:
1501     case EXPR_PACK_EXPANSION:
1502       return iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1503
1504     case TYPE_ARGUMENT_PACK:
1505     case NONTYPE_ARGUMENT_PACK:
1506       return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1507
1508     case TREE_LIST:
1509       for (; arg; arg = TREE_CHAIN (arg))
1510         val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1511       return val;
1512
1513     case OVERLOAD:
1514       for (; arg; arg = OVL_CHAIN (arg))
1515         val = iterative_hash_template_arg (OVL_FUNCTION (arg), val);
1516       return val;
1517
1518     case CONSTRUCTOR:
1519       {
1520         tree field, value;
1521         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1522           {
1523             val = iterative_hash_template_arg (field, val);
1524             val = iterative_hash_template_arg (value, val);
1525           }
1526         return val;
1527       }
1528
1529     case PARM_DECL:
1530       if (!DECL_ARTIFICIAL (arg))
1531         val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1532       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1533
1534     case TARGET_EXPR:
1535       return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1536
1537     case PTRMEM_CST:
1538       val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1539       return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1540
1541     case TEMPLATE_PARM_INDEX:
1542       val = iterative_hash_template_arg
1543         (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1544       val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1545       return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1546
1547     case TRAIT_EXPR:
1548       val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1549       val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1550       return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1551
1552     case BASELINK:
1553       val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1554                                          val);
1555       return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1556                                           val);
1557
1558     case MODOP_EXPR:
1559       val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1560       code = TREE_CODE (TREE_OPERAND (arg, 1));
1561       val = iterative_hash_object (code, val);
1562       return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1563
1564     case ARRAY_TYPE:
1565       /* layout_type sets structural equality for arrays of
1566          incomplete type, so we can't rely on the canonical type
1567          for hashing.  */
1568       val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1569       return iterative_hash_template_arg (TYPE_DOMAIN (arg), val);
1570
1571     case LAMBDA_EXPR:
1572       /* A lambda can't appear in a template arg, but don't crash on
1573          erroneous input.  */
1574       gcc_assert (seen_error ());
1575       return val;
1576
1577     case CAST_EXPR:
1578     case STATIC_CAST_EXPR:
1579     case REINTERPRET_CAST_EXPR:
1580     case CONST_CAST_EXPR:
1581     case DYNAMIC_CAST_EXPR:
1582     case NEW_EXPR:
1583       val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1584       /* Now hash operands as usual.  */
1585       break;
1586
1587     default:
1588       break;
1589     }
1590
1591   switch (tclass)
1592     {
1593     case tcc_type:
1594       if (TYPE_CANONICAL (arg))
1595         return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1596                                       val);
1597       else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1598         return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1599       /* Otherwise just compare the types during lookup.  */
1600       return val;
1601
1602     case tcc_declaration:
1603     case tcc_constant:
1604       return iterative_hash_expr (arg, val);
1605
1606     default:
1607       gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1608       {
1609         unsigned n = TREE_OPERAND_LENGTH (arg);
1610         for (i = 0; i < n; ++i)
1611           val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1612         return val;
1613       }
1614     }
1615   gcc_unreachable ();
1616   return 0;
1617 }
1618
1619 /* Unregister the specialization SPEC as a specialization of TMPL.
1620    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1621    if the SPEC was listed as a specialization of TMPL.
1622
1623    Note that SPEC has been ggc_freed, so we can't look inside it.  */
1624
1625 bool
1626 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1627 {
1628   spec_entry **slot;
1629   spec_entry elt;
1630
1631   elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1632   elt.args = TI_ARGS (tinfo);
1633   elt.spec = NULL_TREE;
1634
1635   slot = (spec_entry **) htab_find_slot (decl_specializations, &elt, INSERT);
1636   if (*slot)
1637     {
1638       gcc_assert ((*slot)->spec == spec || (*slot)->spec == new_spec);
1639       gcc_assert (new_spec != NULL_TREE);
1640       (*slot)->spec = new_spec;
1641       return 1;
1642     }
1643
1644   return 0;
1645 }
1646
1647 /* Compare an entry in the local specializations hash table P1 (which
1648    is really a pointer to a TREE_LIST) with P2 (which is really a
1649    DECL).  */
1650
1651 static int
1652 eq_local_specializations (const void *p1, const void *p2)
1653 {
1654   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1655 }
1656
1657 /* Hash P1, an entry in the local specializations table.  */
1658
1659 static hashval_t
1660 hash_local_specialization (const void* p1)
1661 {
1662   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1663 }
1664
1665 /* Like register_specialization, but for local declarations.  We are
1666    registering SPEC, an instantiation of TMPL.  */
1667
1668 static void
1669 register_local_specialization (tree spec, tree tmpl)
1670 {
1671   void **slot;
1672
1673   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1674                                    htab_hash_pointer (tmpl), INSERT);
1675   *slot = build_tree_list (spec, tmpl);
1676 }
1677
1678 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1679    specialized class.  */
1680
1681 bool
1682 explicit_class_specialization_p (tree type)
1683 {
1684   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1685     return false;
1686   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1687 }
1688
1689 /* Print the list of functions at FNS, going through all the overloads
1690    for each element of the list.  Alternatively, FNS can not be a
1691    TREE_LIST, in which case it will be printed together with all the
1692    overloads.
1693
1694    MORE and *STR should respectively be FALSE and NULL when the function
1695    is called from the outside.  They are used internally on recursive
1696    calls.  print_candidates manages the two parameters and leaves NULL
1697    in *STR when it ends.  */
1698
1699 static void
1700 print_candidates_1 (tree fns, bool more, const char **str)
1701 {
1702   tree fn, fn2;
1703   char *spaces = NULL;
1704
1705   for (fn = fns; fn; fn = OVL_NEXT (fn))
1706     if (TREE_CODE (fn) == TREE_LIST)
1707       {
1708         gcc_assert (!OVL_NEXT (fn) && !is_overloaded_fn (fn));
1709         for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1710           print_candidates_1 (TREE_VALUE (fn2),
1711                               TREE_CHAIN (fn2) || more, str);
1712       }
1713     else
1714       {
1715         if (!*str)
1716           {
1717             /* Pick the prefix string.  */
1718             if (!more && !OVL_NEXT (fns))
1719               {
1720                 error ("candidate is: %+#D", OVL_CURRENT (fn));
1721                 continue;
1722               }
1723
1724             *str = _("candidates are:");
1725             spaces = get_spaces (*str);
1726           }
1727         error ("%s %+#D", *str, OVL_CURRENT (fn));
1728         *str = spaces ? spaces : *str;
1729       }
1730
1731   if (!more)
1732     {
1733       free (spaces);
1734       *str = NULL;
1735     }
1736 }
1737
1738 /* Print the list of candidate FNS in an error message.  */
1739
1740 void
1741 print_candidates (tree fns)
1742 {
1743   const char *str = NULL;
1744   print_candidates_1 (fns, false, &str);
1745   gcc_assert (str == NULL);
1746 }
1747
1748 /* Returns the template (one of the functions given by TEMPLATE_ID)
1749    which can be specialized to match the indicated DECL with the
1750    explicit template args given in TEMPLATE_ID.  The DECL may be
1751    NULL_TREE if none is available.  In that case, the functions in
1752    TEMPLATE_ID are non-members.
1753
1754    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1755    specialization of a member template.
1756
1757    The TEMPLATE_COUNT is the number of references to qualifying
1758    template classes that appeared in the name of the function. See
1759    check_explicit_specialization for a more accurate description.
1760
1761    TSK indicates what kind of template declaration (if any) is being
1762    declared.  TSK_TEMPLATE indicates that the declaration given by
1763    DECL, though a FUNCTION_DECL, has template parameters, and is
1764    therefore a template function.
1765
1766    The template args (those explicitly specified and those deduced)
1767    are output in a newly created vector *TARGS_OUT.
1768
1769    If it is impossible to determine the result, an error message is
1770    issued.  The error_mark_node is returned to indicate failure.  */
1771
1772 static tree
1773 determine_specialization (tree template_id,
1774                           tree decl,
1775                           tree* targs_out,
1776                           int need_member_template,
1777                           int template_count,
1778                           tmpl_spec_kind tsk)
1779 {
1780   tree fns;
1781   tree targs;
1782   tree explicit_targs;
1783   tree candidates = NULL_TREE;
1784   /* A TREE_LIST of templates of which DECL may be a specialization.
1785      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1786      corresponding TREE_PURPOSE is the set of template arguments that,
1787      when used to instantiate the template, would produce a function
1788      with the signature of DECL.  */
1789   tree templates = NULL_TREE;
1790   int header_count;
1791   struct cp_binding_level *b;
1792
1793   *targs_out = NULL_TREE;
1794
1795   if (template_id == error_mark_node || decl == error_mark_node)
1796     return error_mark_node;
1797
1798   fns = TREE_OPERAND (template_id, 0);
1799   explicit_targs = TREE_OPERAND (template_id, 1);
1800
1801   if (fns == error_mark_node)
1802     return error_mark_node;
1803
1804   /* Check for baselinks.  */
1805   if (BASELINK_P (fns))
1806     fns = BASELINK_FUNCTIONS (fns);
1807
1808   if (!is_overloaded_fn (fns))
1809     {
1810       error ("%qD is not a function template", fns);
1811       return error_mark_node;
1812     }
1813
1814   /* Count the number of template headers specified for this
1815      specialization.  */
1816   header_count = 0;
1817   for (b = current_binding_level;
1818        b->kind == sk_template_parms;
1819        b = b->level_chain)
1820     ++header_count;
1821
1822   for (; fns; fns = OVL_NEXT (fns))
1823     {
1824       tree fn = OVL_CURRENT (fns);
1825
1826       if (TREE_CODE (fn) == TEMPLATE_DECL)
1827         {
1828           tree decl_arg_types;
1829           tree fn_arg_types;
1830
1831           /* In case of explicit specialization, we need to check if
1832              the number of template headers appearing in the specialization
1833              is correct. This is usually done in check_explicit_specialization,
1834              but the check done there cannot be exhaustive when specializing
1835              member functions. Consider the following code:
1836
1837              template <> void A<int>::f(int);
1838              template <> template <> void A<int>::f(int);
1839
1840              Assuming that A<int> is not itself an explicit specialization
1841              already, the first line specializes "f" which is a non-template
1842              member function, whilst the second line specializes "f" which
1843              is a template member function. So both lines are syntactically
1844              correct, and check_explicit_specialization does not reject
1845              them.
1846
1847              Here, we can do better, as we are matching the specialization
1848              against the declarations. We count the number of template
1849              headers, and we check if they match TEMPLATE_COUNT + 1
1850              (TEMPLATE_COUNT is the number of qualifying template classes,
1851              plus there must be another header for the member template
1852              itself).
1853
1854              Notice that if header_count is zero, this is not a
1855              specialization but rather a template instantiation, so there
1856              is no check we can perform here.  */
1857           if (header_count && header_count != template_count + 1)
1858             continue;
1859
1860           /* Check that the number of template arguments at the
1861              innermost level for DECL is the same as for FN.  */
1862           if (current_binding_level->kind == sk_template_parms
1863               && !current_binding_level->explicit_spec_p
1864               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1865                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1866                                       (current_template_parms))))
1867             continue;
1868
1869           /* DECL might be a specialization of FN.  */
1870           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1871           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1872
1873           /* For a non-static member function, we need to make sure
1874              that the const qualification is the same.  Since
1875              get_bindings does not try to merge the "this" parameter,
1876              we must do the comparison explicitly.  */
1877           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1878               && !same_type_p (TREE_VALUE (fn_arg_types),
1879                                TREE_VALUE (decl_arg_types)))
1880             continue;
1881
1882           /* Skip the "this" parameter and, for constructors of
1883              classes with virtual bases, the VTT parameter.  A
1884              full specialization of a constructor will have a VTT
1885              parameter, but a template never will.  */ 
1886           decl_arg_types 
1887             = skip_artificial_parms_for (decl, decl_arg_types);
1888           fn_arg_types 
1889             = skip_artificial_parms_for (fn, fn_arg_types);
1890
1891           /* Check that the number of function parameters matches.
1892              For example,
1893                template <class T> void f(int i = 0);
1894                template <> void f<int>();
1895              The specialization f<int> is invalid but is not caught
1896              by get_bindings below.  */
1897           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1898             continue;
1899
1900           /* Function templates cannot be specializations; there are
1901              no partial specializations of functions.  Therefore, if
1902              the type of DECL does not match FN, there is no
1903              match.  */
1904           if (tsk == tsk_template)
1905             {
1906               if (compparms (fn_arg_types, decl_arg_types))
1907                 candidates = tree_cons (NULL_TREE, fn, candidates);
1908               continue;
1909             }
1910
1911           /* See whether this function might be a specialization of this
1912              template.  */
1913           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1914
1915           if (!targs)
1916             /* We cannot deduce template arguments that when used to
1917                specialize TMPL will produce DECL.  */
1918             continue;
1919
1920           /* Save this template, and the arguments deduced.  */
1921           templates = tree_cons (targs, fn, templates);
1922         }
1923       else if (need_member_template)
1924         /* FN is an ordinary member function, and we need a
1925            specialization of a member template.  */
1926         ;
1927       else if (TREE_CODE (fn) != FUNCTION_DECL)
1928         /* We can get IDENTIFIER_NODEs here in certain erroneous
1929            cases.  */
1930         ;
1931       else if (!DECL_FUNCTION_MEMBER_P (fn))
1932         /* This is just an ordinary non-member function.  Nothing can
1933            be a specialization of that.  */
1934         ;
1935       else if (DECL_ARTIFICIAL (fn))
1936         /* Cannot specialize functions that are created implicitly.  */
1937         ;
1938       else
1939         {
1940           tree decl_arg_types;
1941
1942           /* This is an ordinary member function.  However, since
1943              we're here, we can assume it's enclosing class is a
1944              template class.  For example,
1945
1946                template <typename T> struct S { void f(); };
1947                template <> void S<int>::f() {}
1948
1949              Here, S<int>::f is a non-template, but S<int> is a
1950              template class.  If FN has the same type as DECL, we
1951              might be in business.  */
1952
1953           if (!DECL_TEMPLATE_INFO (fn))
1954             /* Its enclosing class is an explicit specialization
1955                of a template class.  This is not a candidate.  */
1956             continue;
1957
1958           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1959                             TREE_TYPE (TREE_TYPE (fn))))
1960             /* The return types differ.  */
1961             continue;
1962
1963           /* Adjust the type of DECL in case FN is a static member.  */
1964           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1965           if (DECL_STATIC_FUNCTION_P (fn)
1966               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1967             decl_arg_types = TREE_CHAIN (decl_arg_types);
1968
1969           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1970                          decl_arg_types))
1971             /* They match!  */
1972             candidates = tree_cons (NULL_TREE, fn, candidates);
1973         }
1974     }
1975
1976   if (templates && TREE_CHAIN (templates))
1977     {
1978       /* We have:
1979
1980            [temp.expl.spec]
1981
1982            It is possible for a specialization with a given function
1983            signature to be instantiated from more than one function
1984            template.  In such cases, explicit specification of the
1985            template arguments must be used to uniquely identify the
1986            function template specialization being specialized.
1987
1988          Note that here, there's no suggestion that we're supposed to
1989          determine which of the candidate templates is most
1990          specialized.  However, we, also have:
1991
1992            [temp.func.order]
1993
1994            Partial ordering of overloaded function template
1995            declarations is used in the following contexts to select
1996            the function template to which a function template
1997            specialization refers:
1998
1999            -- when an explicit specialization refers to a function
2000               template.
2001
2002          So, we do use the partial ordering rules, at least for now.
2003          This extension can only serve to make invalid programs valid,
2004          so it's safe.  And, there is strong anecdotal evidence that
2005          the committee intended the partial ordering rules to apply;
2006          the EDG front end has that behavior, and John Spicer claims
2007          that the committee simply forgot to delete the wording in
2008          [temp.expl.spec].  */
2009       tree tmpl = most_specialized_instantiation (templates);
2010       if (tmpl != error_mark_node)
2011         {
2012           templates = tmpl;
2013           TREE_CHAIN (templates) = NULL_TREE;
2014         }
2015     }
2016
2017   if (templates == NULL_TREE && candidates == NULL_TREE)
2018     {
2019       error ("template-id %qD for %q+D does not match any template "
2020              "declaration", template_id, decl);
2021       if (header_count && header_count != template_count + 1)
2022         inform (input_location, "saw %d %<template<>%>, need %d for "
2023                 "specializing a member function template",
2024                 header_count, template_count + 1);
2025       return error_mark_node;
2026     }
2027   else if ((templates && TREE_CHAIN (templates))
2028            || (candidates && TREE_CHAIN (candidates))
2029            || (templates && candidates))
2030     {
2031       error ("ambiguous template specialization %qD for %q+D",
2032              template_id, decl);
2033       candidates = chainon (candidates, templates);
2034       print_candidates (candidates);
2035       return error_mark_node;
2036     }
2037
2038   /* We have one, and exactly one, match.  */
2039   if (candidates)
2040     {
2041       tree fn = TREE_VALUE (candidates);
2042       *targs_out = copy_node (DECL_TI_ARGS (fn));
2043       /* DECL is a re-declaration or partial instantiation of a template
2044          function.  */
2045       if (TREE_CODE (fn) == TEMPLATE_DECL)
2046         return fn;
2047       /* It was a specialization of an ordinary member function in a
2048          template class.  */
2049       return DECL_TI_TEMPLATE (fn);
2050     }
2051
2052   /* It was a specialization of a template.  */
2053   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2054   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2055     {
2056       *targs_out = copy_node (targs);
2057       SET_TMPL_ARGS_LEVEL (*targs_out,
2058                            TMPL_ARGS_DEPTH (*targs_out),
2059                            TREE_PURPOSE (templates));
2060     }
2061   else
2062     *targs_out = TREE_PURPOSE (templates);
2063   return TREE_VALUE (templates);
2064 }
2065
2066 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2067    but with the default argument values filled in from those in the
2068    TMPL_TYPES.  */
2069
2070 static tree
2071 copy_default_args_to_explicit_spec_1 (tree spec_types,
2072                                       tree tmpl_types)
2073 {
2074   tree new_spec_types;
2075
2076   if (!spec_types)
2077     return NULL_TREE;
2078
2079   if (spec_types == void_list_node)
2080     return void_list_node;
2081
2082   /* Substitute into the rest of the list.  */
2083   new_spec_types =
2084     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2085                                           TREE_CHAIN (tmpl_types));
2086
2087   /* Add the default argument for this parameter.  */
2088   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2089                          TREE_VALUE (spec_types),
2090                          new_spec_types);
2091 }
2092
2093 /* DECL is an explicit specialization.  Replicate default arguments
2094    from the template it specializes.  (That way, code like:
2095
2096      template <class T> void f(T = 3);
2097      template <> void f(double);
2098      void g () { f (); }
2099
2100    works, as required.)  An alternative approach would be to look up
2101    the correct default arguments at the call-site, but this approach
2102    is consistent with how implicit instantiations are handled.  */
2103
2104 static void
2105 copy_default_args_to_explicit_spec (tree decl)
2106 {
2107   tree tmpl;
2108   tree spec_types;
2109   tree tmpl_types;
2110   tree new_spec_types;
2111   tree old_type;
2112   tree new_type;
2113   tree t;
2114   tree object_type = NULL_TREE;
2115   tree in_charge = NULL_TREE;
2116   tree vtt = NULL_TREE;
2117
2118   /* See if there's anything we need to do.  */
2119   tmpl = DECL_TI_TEMPLATE (decl);
2120   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2121   for (t = tmpl_types; t; t = TREE_CHAIN (t))
2122     if (TREE_PURPOSE (t))
2123       break;
2124   if (!t)
2125     return;
2126
2127   old_type = TREE_TYPE (decl);
2128   spec_types = TYPE_ARG_TYPES (old_type);
2129
2130   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2131     {
2132       /* Remove the this pointer, but remember the object's type for
2133          CV quals.  */
2134       object_type = TREE_TYPE (TREE_VALUE (spec_types));
2135       spec_types = TREE_CHAIN (spec_types);
2136       tmpl_types = TREE_CHAIN (tmpl_types);
2137
2138       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2139         {
2140           /* DECL may contain more parameters than TMPL due to the extra
2141              in-charge parameter in constructors and destructors.  */
2142           in_charge = spec_types;
2143           spec_types = TREE_CHAIN (spec_types);
2144         }
2145       if (DECL_HAS_VTT_PARM_P (decl))
2146         {
2147           vtt = spec_types;
2148           spec_types = TREE_CHAIN (spec_types);
2149         }
2150     }
2151
2152   /* Compute the merged default arguments.  */
2153   new_spec_types =
2154     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2155
2156   /* Compute the new FUNCTION_TYPE.  */
2157   if (object_type)
2158     {
2159       if (vtt)
2160         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2161                                          TREE_VALUE (vtt),
2162                                          new_spec_types);
2163
2164       if (in_charge)
2165         /* Put the in-charge parameter back.  */
2166         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2167                                          TREE_VALUE (in_charge),
2168                                          new_spec_types);
2169
2170       new_type = build_method_type_directly (object_type,
2171                                              TREE_TYPE (old_type),
2172                                              new_spec_types);
2173     }
2174   else
2175     new_type = build_function_type (TREE_TYPE (old_type),
2176                                     new_spec_types);
2177   new_type = cp_build_type_attribute_variant (new_type,
2178                                               TYPE_ATTRIBUTES (old_type));
2179   new_type = build_exception_variant (new_type,
2180                                       TYPE_RAISES_EXCEPTIONS (old_type));
2181   TREE_TYPE (decl) = new_type;
2182 }
2183
2184 /* Check to see if the function just declared, as indicated in
2185    DECLARATOR, and in DECL, is a specialization of a function
2186    template.  We may also discover that the declaration is an explicit
2187    instantiation at this point.
2188
2189    Returns DECL, or an equivalent declaration that should be used
2190    instead if all goes well.  Issues an error message if something is
2191    amiss.  Returns error_mark_node if the error is not easily
2192    recoverable.
2193
2194    FLAGS is a bitmask consisting of the following flags:
2195
2196    2: The function has a definition.
2197    4: The function is a friend.
2198
2199    The TEMPLATE_COUNT is the number of references to qualifying
2200    template classes that appeared in the name of the function.  For
2201    example, in
2202
2203      template <class T> struct S { void f(); };
2204      void S<int>::f();
2205
2206    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
2207    classes are not counted in the TEMPLATE_COUNT, so that in
2208
2209      template <class T> struct S {};
2210      template <> struct S<int> { void f(); }
2211      template <> void S<int>::f();
2212
2213    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
2214    invalid; there should be no template <>.)
2215
2216    If the function is a specialization, it is marked as such via
2217    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
2218    is set up correctly, and it is added to the list of specializations
2219    for that template.  */
2220
2221 tree
2222 check_explicit_specialization (tree declarator,
2223                                tree decl,
2224                                int template_count,
2225                                int flags)
2226 {
2227   int have_def = flags & 2;
2228   int is_friend = flags & 4;
2229   int specialization = 0;
2230   int explicit_instantiation = 0;
2231   int member_specialization = 0;
2232   tree ctype = DECL_CLASS_CONTEXT (decl);
2233   tree dname = DECL_NAME (decl);
2234   tmpl_spec_kind tsk;
2235
2236   if (is_friend)
2237     {
2238       if (!processing_specialization)
2239         tsk = tsk_none;
2240       else
2241         tsk = tsk_excessive_parms;
2242     }
2243   else
2244     tsk = current_tmpl_spec_kind (template_count);
2245
2246   switch (tsk)
2247     {
2248     case tsk_none:
2249       if (processing_specialization)
2250         {
2251           specialization = 1;
2252           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2253         }
2254       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2255         {
2256           if (is_friend)
2257             /* This could be something like:
2258
2259                template <class T> void f(T);
2260                class S { friend void f<>(int); }  */
2261             specialization = 1;
2262           else
2263             {
2264               /* This case handles bogus declarations like template <>
2265                  template <class T> void f<int>(); */
2266
2267               error ("template-id %qD in declaration of primary template",
2268                      declarator);
2269               return decl;
2270             }
2271         }
2272       break;
2273
2274     case tsk_invalid_member_spec:
2275       /* The error has already been reported in
2276          check_specialization_scope.  */
2277       return error_mark_node;
2278
2279     case tsk_invalid_expl_inst:
2280       error ("template parameter list used in explicit instantiation");
2281
2282       /* Fall through.  */
2283
2284     case tsk_expl_inst:
2285       if (have_def)
2286         error ("definition provided for explicit instantiation");
2287
2288       explicit_instantiation = 1;
2289       break;
2290
2291     case tsk_excessive_parms:
2292     case tsk_insufficient_parms:
2293       if (tsk == tsk_excessive_parms)
2294         error ("too many template parameter lists in declaration of %qD",
2295                decl);
2296       else if (template_header_count)
2297         error("too few template parameter lists in declaration of %qD", decl);
2298       else
2299         error("explicit specialization of %qD must be introduced by "
2300               "%<template <>%>", decl);
2301
2302       /* Fall through.  */
2303     case tsk_expl_spec:
2304       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2305       if (ctype)
2306         member_specialization = 1;
2307       else
2308         specialization = 1;
2309       break;
2310
2311     case tsk_template:
2312       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2313         {
2314           /* This case handles bogus declarations like template <>
2315              template <class T> void f<int>(); */
2316
2317           if (uses_template_parms (declarator))
2318             error ("function template partial specialization %qD "
2319                    "is not allowed", declarator);
2320           else
2321             error ("template-id %qD in declaration of primary template",
2322                    declarator);
2323           return decl;
2324         }
2325
2326       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2327         /* This is a specialization of a member template, without
2328            specialization the containing class.  Something like:
2329
2330              template <class T> struct S {
2331                template <class U> void f (U);
2332              };
2333              template <> template <class U> void S<int>::f(U) {}
2334
2335            That's a specialization -- but of the entire template.  */
2336         specialization = 1;
2337       break;
2338
2339     default:
2340       gcc_unreachable ();
2341     }
2342
2343   if (specialization || member_specialization)
2344     {
2345       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2346       for (; t; t = TREE_CHAIN (t))
2347         if (TREE_PURPOSE (t))
2348           {
2349             permerror (input_location, 
2350                        "default argument specified in explicit specialization");
2351             break;
2352           }
2353     }
2354
2355   if (specialization || member_specialization || explicit_instantiation)
2356     {
2357       tree tmpl = NULL_TREE;
2358       tree targs = NULL_TREE;
2359
2360       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2361       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2362         {
2363           tree fns;
2364
2365           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2366           if (ctype)
2367             fns = dname;
2368           else
2369             {
2370               /* If there is no class context, the explicit instantiation
2371                  must be at namespace scope.  */
2372               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2373
2374               /* Find the namespace binding, using the declaration
2375                  context.  */
2376               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2377                                            false, true);
2378               if (fns == error_mark_node || !is_overloaded_fn (fns))
2379                 {
2380                   error ("%qD is not a template function", dname);
2381                   fns = error_mark_node;
2382                 }
2383               else
2384                 {
2385                   tree fn = OVL_CURRENT (fns);
2386                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2387                                                 CP_DECL_CONTEXT (fn)))
2388                     error ("%qD is not declared in %qD",
2389                            decl, current_namespace);
2390                 }
2391             }
2392
2393           declarator = lookup_template_function (fns, NULL_TREE);
2394         }
2395
2396       if (declarator == error_mark_node)
2397         return error_mark_node;
2398
2399       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2400         {
2401           if (!explicit_instantiation)
2402             /* A specialization in class scope.  This is invalid,
2403                but the error will already have been flagged by
2404                check_specialization_scope.  */
2405             return error_mark_node;
2406           else
2407             {
2408               /* It's not valid to write an explicit instantiation in
2409                  class scope, e.g.:
2410
2411                    class C { template void f(); }
2412
2413                    This case is caught by the parser.  However, on
2414                    something like:
2415
2416                    template class C { void f(); };
2417
2418                    (which is invalid) we can get here.  The error will be
2419                    issued later.  */
2420               ;
2421             }
2422
2423           return decl;
2424         }
2425       else if (ctype != NULL_TREE
2426                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2427                    IDENTIFIER_NODE))
2428         {
2429           /* Find the list of functions in ctype that have the same
2430              name as the declared function.  */
2431           tree name = TREE_OPERAND (declarator, 0);
2432           tree fns = NULL_TREE;
2433           int idx;
2434
2435           if (constructor_name_p (name, ctype))
2436             {
2437               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2438
2439               if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2440                   : !CLASSTYPE_DESTRUCTORS (ctype))
2441                 {
2442                   /* From [temp.expl.spec]:
2443
2444                      If such an explicit specialization for the member
2445                      of a class template names an implicitly-declared
2446                      special member function (clause _special_), the
2447                      program is ill-formed.
2448
2449                      Similar language is found in [temp.explicit].  */
2450                   error ("specialization of implicitly-declared special member function");
2451                   return error_mark_node;
2452                 }
2453
2454               name = is_constructor ? ctor_identifier : dtor_identifier;
2455             }
2456
2457           if (!DECL_CONV_FN_P (decl))
2458             {
2459               idx = lookup_fnfields_1 (ctype, name);
2460               if (idx >= 0)
2461                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2462             }
2463           else
2464             {
2465               VEC(tree,gc) *methods;
2466               tree ovl;
2467
2468               /* For a type-conversion operator, we cannot do a
2469                  name-based lookup.  We might be looking for `operator
2470                  int' which will be a specialization of `operator T'.
2471                  So, we find *all* the conversion operators, and then
2472                  select from them.  */
2473               fns = NULL_TREE;
2474
2475               methods = CLASSTYPE_METHOD_VEC (ctype);
2476               if (methods)
2477                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2478                      VEC_iterate (tree, methods, idx, ovl);
2479                      ++idx)
2480                   {
2481                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2482                       /* There are no more conversion functions.  */
2483                       break;
2484
2485                     /* Glue all these conversion functions together
2486                        with those we already have.  */
2487                     for (; ovl; ovl = OVL_NEXT (ovl))
2488                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2489                   }
2490             }
2491
2492           if (fns == NULL_TREE)
2493             {
2494               error ("no member function %qD declared in %qT", name, ctype);
2495               return error_mark_node;
2496             }
2497           else
2498             TREE_OPERAND (declarator, 0) = fns;
2499         }
2500
2501       /* Figure out what exactly is being specialized at this point.
2502          Note that for an explicit instantiation, even one for a
2503          member function, we cannot tell apriori whether the
2504          instantiation is for a member template, or just a member
2505          function of a template class.  Even if a member template is
2506          being instantiated, the member template arguments may be
2507          elided if they can be deduced from the rest of the
2508          declaration.  */
2509       tmpl = determine_specialization (declarator, decl,
2510                                        &targs,
2511                                        member_specialization,
2512                                        template_count,
2513                                        tsk);
2514
2515       if (!tmpl || tmpl == error_mark_node)
2516         /* We couldn't figure out what this declaration was
2517            specializing.  */
2518         return error_mark_node;
2519       else
2520         {
2521           tree gen_tmpl = most_general_template (tmpl);
2522
2523           if (explicit_instantiation)
2524             {
2525               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2526                  is done by do_decl_instantiation later.  */
2527
2528               int arg_depth = TMPL_ARGS_DEPTH (targs);
2529               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2530
2531               if (arg_depth > parm_depth)
2532                 {
2533                   /* If TMPL is not the most general template (for
2534                      example, if TMPL is a friend template that is
2535                      injected into namespace scope), then there will
2536                      be too many levels of TARGS.  Remove some of them
2537                      here.  */
2538                   int i;
2539                   tree new_targs;
2540
2541                   new_targs = make_tree_vec (parm_depth);
2542                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2543                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2544                       = TREE_VEC_ELT (targs, i);
2545                   targs = new_targs;
2546                 }
2547
2548               return instantiate_template (tmpl, targs, tf_error);
2549             }
2550
2551           /* If we thought that the DECL was a member function, but it
2552              turns out to be specializing a static member function,
2553              make DECL a static member function as well.  */
2554           if (DECL_STATIC_FUNCTION_P (tmpl)
2555               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2556             revert_static_member_fn (decl);
2557
2558           /* If this is a specialization of a member template of a
2559              template class, we want to return the TEMPLATE_DECL, not
2560              the specialization of it.  */
2561           if (tsk == tsk_template)
2562             {
2563               tree result = DECL_TEMPLATE_RESULT (tmpl);
2564               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2565               DECL_INITIAL (result) = NULL_TREE;
2566               if (have_def)
2567                 {
2568                   tree parm;
2569                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2570                   DECL_SOURCE_LOCATION (result)
2571                     = DECL_SOURCE_LOCATION (decl);
2572                   /* We want to use the argument list specified in the
2573                      definition, not in the original declaration.  */
2574                   DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2575                   for (parm = DECL_ARGUMENTS (result); parm;
2576                        parm = DECL_CHAIN (parm))
2577                     DECL_CONTEXT (parm) = result;
2578                 }
2579               return register_specialization (tmpl, gen_tmpl, targs,
2580                                               is_friend, 0);
2581             }
2582
2583           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2584           DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2585
2586           /* Inherit default function arguments from the template
2587              DECL is specializing.  */
2588           copy_default_args_to_explicit_spec (decl);
2589
2590           /* This specialization has the same protection as the
2591              template it specializes.  */
2592           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2593           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2594
2595           /* 7.1.1-1 [dcl.stc]
2596
2597              A storage-class-specifier shall not be specified in an
2598              explicit specialization...
2599
2600              The parser rejects these, so unless action is taken here,
2601              explicit function specializations will always appear with
2602              global linkage.
2603
2604              The action recommended by the C++ CWG in response to C++
2605              defect report 605 is to make the storage class and linkage
2606              of the explicit specialization match the templated function:
2607
2608              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2609            */
2610           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2611             {
2612               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2613               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2614
2615               /* This specialization has the same linkage and visibility as
2616                  the function template it specializes.  */
2617               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2618               if (! TREE_PUBLIC (decl))
2619                 {
2620                   DECL_INTERFACE_KNOWN (decl) = 1;
2621                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2622                 }
2623               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2624               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2625                 {
2626                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2627                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2628                 }
2629             }
2630
2631           /* If DECL is a friend declaration, declared using an
2632              unqualified name, the namespace associated with DECL may
2633              have been set incorrectly.  For example, in:
2634
2635                template <typename T> void f(T);
2636                namespace N {
2637                  struct S { friend void f<int>(int); }
2638                }
2639
2640              we will have set the DECL_CONTEXT for the friend
2641              declaration to N, rather than to the global namespace.  */
2642           if (DECL_NAMESPACE_SCOPE_P (decl))
2643             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2644
2645           if (is_friend && !have_def)
2646             /* This is not really a declaration of a specialization.
2647                It's just the name of an instantiation.  But, it's not
2648                a request for an instantiation, either.  */
2649             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2650           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2651             /* This is indeed a specialization.  In case of constructors
2652                and destructors, we need in-charge and not-in-charge
2653                versions in V3 ABI.  */
2654             clone_function_decl (decl, /*update_method_vec_p=*/0);
2655
2656           /* Register this specialization so that we can find it
2657              again.  */
2658           decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2659         }
2660     }
2661
2662   return decl;
2663 }
2664
2665 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2666    parameters.  These are represented in the same format used for
2667    DECL_TEMPLATE_PARMS.  */
2668
2669 int
2670 comp_template_parms (const_tree parms1, const_tree parms2)
2671 {
2672   const_tree p1;
2673   const_tree p2;
2674
2675   if (parms1 == parms2)
2676     return 1;
2677
2678   for (p1 = parms1, p2 = parms2;
2679        p1 != NULL_TREE && p2 != NULL_TREE;
2680        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2681     {
2682       tree t1 = TREE_VALUE (p1);
2683       tree t2 = TREE_VALUE (p2);
2684       int i;
2685
2686       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2687       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2688
2689       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2690         return 0;
2691
2692       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2693         {
2694           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2695           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2696
2697           /* If either of the template parameters are invalid, assume
2698              they match for the sake of error recovery. */
2699           if (parm1 == error_mark_node || parm2 == error_mark_node)
2700             return 1;
2701
2702           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2703             return 0;
2704
2705           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2706               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2707                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2708             continue;
2709           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2710             return 0;
2711         }
2712     }
2713
2714   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2715     /* One set of parameters has more parameters lists than the
2716        other.  */
2717     return 0;
2718
2719   return 1;
2720 }
2721
2722 /* Determine whether PARM is a parameter pack.  */
2723
2724 bool 
2725 template_parameter_pack_p (const_tree parm)
2726 {
2727   /* Determine if we have a non-type template parameter pack.  */
2728   if (TREE_CODE (parm) == PARM_DECL)
2729     return (DECL_TEMPLATE_PARM_P (parm) 
2730             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2731
2732   /* If this is a list of template parameters, we could get a
2733      TYPE_DECL or a TEMPLATE_DECL.  */ 
2734   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2735     parm = TREE_TYPE (parm);
2736
2737   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2738            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2739           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2740 }
2741
2742 /* Determine if T is a function parameter pack.  */
2743
2744 bool
2745 function_parameter_pack_p (const_tree t)
2746 {
2747   if (t && TREE_CODE (t) == PARM_DECL)
2748     return FUNCTION_PARAMETER_PACK_P (t);
2749   return false;
2750 }
2751
2752 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2753    PRIMARY_FUNC_TMPL_INST is a primary function template instantiation.  */
2754
2755 tree
2756 get_function_template_decl (const_tree primary_func_tmpl_inst)
2757 {
2758   if (! primary_func_tmpl_inst
2759       || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2760       || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2761     return NULL;
2762
2763   return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2764 }
2765
2766 /* Return true iff the function parameter PARAM_DECL was expanded
2767    from the function parameter pack PACK.  */
2768
2769 bool
2770 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2771 {
2772   if (DECL_ARTIFICIAL (param_decl)
2773       || !function_parameter_pack_p (pack))
2774     return false;
2775
2776   /* The parameter pack and its pack arguments have the same
2777      DECL_PARM_INDEX.  */
2778   return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2779 }
2780
2781 /* Determine whether ARGS describes a variadic template args list,
2782    i.e., one that is terminated by a template argument pack.  */
2783
2784 static bool 
2785 template_args_variadic_p (tree args)
2786 {
2787   int nargs;
2788   tree last_parm;
2789
2790   if (args == NULL_TREE)
2791     return false;
2792
2793   args = INNERMOST_TEMPLATE_ARGS (args);
2794   nargs = TREE_VEC_LENGTH (args);
2795
2796   if (nargs == 0)
2797     return false;
2798
2799   last_parm = TREE_VEC_ELT (args, nargs - 1);
2800
2801   return ARGUMENT_PACK_P (last_parm);
2802 }
2803
2804 /* Generate a new name for the parameter pack name NAME (an
2805    IDENTIFIER_NODE) that incorporates its */
2806
2807 static tree
2808 make_ith_pack_parameter_name (tree name, int i)
2809 {
2810   /* Munge the name to include the parameter index.  */
2811 #define NUMBUF_LEN 128
2812   char numbuf[NUMBUF_LEN];
2813   char* newname;
2814   int newname_len;
2815
2816   snprintf (numbuf, NUMBUF_LEN, "%i", i);
2817   newname_len = IDENTIFIER_LENGTH (name)
2818                 + strlen (numbuf) + 2;
2819   newname = (char*)alloca (newname_len);
2820   snprintf (newname, newname_len,
2821             "%s#%i", IDENTIFIER_POINTER (name), i);
2822   return get_identifier (newname);
2823 }
2824
2825 /* Return true if T is a primary function
2826    or class template instantiation.  */
2827
2828 bool
2829 primary_template_instantiation_p (const_tree t)
2830 {
2831   if (!t)
2832     return false;
2833
2834   if (TREE_CODE (t) == FUNCTION_DECL)
2835     return DECL_LANG_SPECIFIC (t)
2836            && DECL_TEMPLATE_INSTANTIATION (t)
2837            && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
2838   else if (CLASS_TYPE_P (t))
2839     return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
2840            && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
2841   return false;
2842 }
2843
2844 /* Return true if PARM is a template template parameter.  */
2845
2846 bool
2847 template_template_parameter_p (const_tree parm)
2848 {
2849   return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
2850 }
2851
2852 /* Return the template parameters of T if T is a
2853    primary template instantiation, NULL otherwise.  */
2854
2855 tree
2856 get_primary_template_innermost_parameters (const_tree t)
2857 {
2858   tree parms = NULL, template_info = NULL;
2859
2860   if ((template_info = get_template_info (t))
2861       && primary_template_instantiation_p (t))
2862     parms = INNERMOST_TEMPLATE_PARMS
2863         (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
2864
2865   return parms;
2866 }
2867
2868 /* Return the template parameters of the LEVELth level from the full list
2869    of template parameters PARMS.  */
2870
2871 tree
2872 get_template_parms_at_level (tree parms, int level)
2873 {
2874   tree p;
2875   if (!parms
2876       || TREE_CODE (parms) != TREE_LIST
2877       || level > TMPL_PARMS_DEPTH (parms))
2878     return NULL_TREE;
2879
2880   for (p = parms; p; p = TREE_CHAIN (p))
2881     if (TMPL_PARMS_DEPTH (p) == level)
2882       return p;
2883
2884   return NULL_TREE;
2885 }
2886
2887 /* Returns the template arguments of T if T is a template instantiation,
2888    NULL otherwise.  */
2889
2890 tree
2891 get_template_innermost_arguments (const_tree t)
2892 {
2893   tree args = NULL, template_info = NULL;
2894
2895   if ((template_info = get_template_info (t))
2896       && TI_ARGS (template_info))
2897     args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
2898
2899   return args;
2900 }
2901
2902 /* Return the argument pack elements of T if T is a template argument pack,
2903    NULL otherwise.  */
2904
2905 tree
2906 get_template_argument_pack_elems (const_tree t)
2907 {
2908   if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
2909       && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
2910     return NULL;
2911
2912   return ARGUMENT_PACK_ARGS (t);
2913 }
2914
2915 /* Structure used to track the progress of find_parameter_packs_r.  */
2916 struct find_parameter_pack_data 
2917 {
2918   /* TREE_LIST that will contain all of the parameter packs found by
2919      the traversal.  */
2920   tree* parameter_packs;
2921
2922   /* Set of AST nodes that have been visited by the traversal.  */
2923   struct pointer_set_t *visited;
2924 };
2925
2926 /* Identifies all of the argument packs that occur in a template
2927    argument and appends them to the TREE_LIST inside DATA, which is a
2928    find_parameter_pack_data structure. This is a subroutine of
2929    make_pack_expansion and uses_parameter_packs.  */
2930 static tree
2931 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2932 {
2933   tree t = *tp;
2934   struct find_parameter_pack_data* ppd = 
2935     (struct find_parameter_pack_data*)data;
2936   bool parameter_pack_p = false;
2937
2938   /* Identify whether this is a parameter pack or not.  */
2939   switch (TREE_CODE (t))
2940     {
2941     case TEMPLATE_PARM_INDEX:
2942       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2943         parameter_pack_p = true;
2944       break;
2945
2946     case TEMPLATE_TYPE_PARM:
2947     case TEMPLATE_TEMPLATE_PARM:
2948       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2949         parameter_pack_p = true;
2950       break;
2951
2952     case PARM_DECL:
2953       if (FUNCTION_PARAMETER_PACK_P (t))
2954         {
2955           /* We don't want to walk into the type of a PARM_DECL,
2956              because we don't want to see the type parameter pack.  */
2957           *walk_subtrees = 0;
2958           parameter_pack_p = true;
2959         }
2960       break;
2961
2962     default:
2963       /* Not a parameter pack.  */
2964       break;
2965     }
2966
2967   if (parameter_pack_p)
2968     {
2969       /* Add this parameter pack to the list.  */
2970       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2971     }
2972
2973   if (TYPE_P (t))
2974     cp_walk_tree (&TYPE_CONTEXT (t), 
2975                   &find_parameter_packs_r, ppd, ppd->visited);
2976
2977   /* This switch statement will return immediately if we don't find a
2978      parameter pack.  */
2979   switch (TREE_CODE (t)) 
2980     {
2981     case TEMPLATE_PARM_INDEX:
2982       return NULL_TREE;
2983
2984     case BOUND_TEMPLATE_TEMPLATE_PARM:
2985       /* Check the template itself.  */
2986       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
2987                     &find_parameter_packs_r, ppd, ppd->visited);
2988       /* Check the template arguments.  */
2989       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
2990                     ppd->visited);
2991       *walk_subtrees = 0;
2992       return NULL_TREE;
2993
2994     case TEMPLATE_TYPE_PARM:
2995     case TEMPLATE_TEMPLATE_PARM:
2996       return NULL_TREE;
2997
2998     case PARM_DECL:
2999       return NULL_TREE;
3000
3001     case RECORD_TYPE:
3002       if (TYPE_PTRMEMFUNC_P (t))
3003         return NULL_TREE;
3004       /* Fall through.  */
3005
3006     case UNION_TYPE:
3007     case ENUMERAL_TYPE:
3008       if (TYPE_TEMPLATE_INFO (t))
3009         cp_walk_tree (&TI_ARGS (TYPE_TEMPLATE_INFO (t)),
3010                       &find_parameter_packs_r, ppd, ppd->visited);
3011
3012       *walk_subtrees = 0;
3013       return NULL_TREE;
3014
3015     case TEMPLATE_DECL:
3016       cp_walk_tree (&TREE_TYPE (t),
3017                     &find_parameter_packs_r, ppd, ppd->visited);
3018       return NULL_TREE;
3019  
3020     case TYPENAME_TYPE:
3021       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3022                    ppd, ppd->visited);
3023       *walk_subtrees = 0;
3024       return NULL_TREE;
3025       
3026     case TYPE_PACK_EXPANSION:
3027     case EXPR_PACK_EXPANSION:
3028       *walk_subtrees = 0;
3029       return NULL_TREE;
3030
3031     case INTEGER_TYPE:
3032       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
3033                     ppd, ppd->visited);
3034       *walk_subtrees = 0;
3035       return NULL_TREE;
3036
3037     case IDENTIFIER_NODE:
3038       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
3039                     ppd->visited);
3040       *walk_subtrees = 0;
3041       return NULL_TREE;
3042
3043     default:
3044       return NULL_TREE;
3045     }
3046
3047   return NULL_TREE;
3048 }
3049
3050 /* Determines if the expression or type T uses any parameter packs.  */
3051 bool
3052 uses_parameter_packs (tree t)
3053 {
3054   tree parameter_packs = NULL_TREE;
3055   struct find_parameter_pack_data ppd;
3056   ppd.parameter_packs = &parameter_packs;
3057   ppd.visited = pointer_set_create ();
3058   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3059   pointer_set_destroy (ppd.visited);
3060   return parameter_packs != NULL_TREE;
3061 }
3062
3063 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3064    representation a base-class initializer into a parameter pack
3065    expansion. If all goes well, the resulting node will be an
3066    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3067    respectively.  */
3068 tree 
3069 make_pack_expansion (tree arg)
3070 {
3071   tree result;
3072   tree parameter_packs = NULL_TREE;
3073   bool for_types = false;
3074   struct find_parameter_pack_data ppd;
3075
3076   if (!arg || arg == error_mark_node)
3077     return arg;
3078
3079   if (TREE_CODE (arg) == TREE_LIST)
3080     {
3081       /* The only time we will see a TREE_LIST here is for a base
3082          class initializer.  In this case, the TREE_PURPOSE will be a
3083          _TYPE node (representing the base class expansion we're
3084          initializing) and the TREE_VALUE will be a TREE_LIST
3085          containing the initialization arguments. 
3086
3087          The resulting expansion looks somewhat different from most
3088          expansions. Rather than returning just one _EXPANSION, we
3089          return a TREE_LIST whose TREE_PURPOSE is a
3090          TYPE_PACK_EXPANSION containing the bases that will be
3091          initialized.  The TREE_VALUE will be identical to the
3092          original TREE_VALUE, which is a list of arguments that will
3093          be passed to each base.  We do not introduce any new pack
3094          expansion nodes into the TREE_VALUE (although it is possible
3095          that some already exist), because the TREE_PURPOSE and
3096          TREE_VALUE all need to be expanded together with the same
3097          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
3098          resulting TREE_PURPOSE will mention the parameter packs in
3099          both the bases and the arguments to the bases.  */
3100       tree purpose;
3101       tree value;
3102       tree parameter_packs = NULL_TREE;
3103
3104       /* Determine which parameter packs will be used by the base
3105          class expansion.  */
3106       ppd.visited = pointer_set_create ();
3107       ppd.parameter_packs = &parameter_packs;
3108       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
3109                     &ppd, ppd.visited);
3110
3111       if (parameter_packs == NULL_TREE)
3112         {
3113           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3114           pointer_set_destroy (ppd.visited);
3115           return error_mark_node;
3116         }
3117
3118       if (TREE_VALUE (arg) != void_type_node)
3119         {
3120           /* Collect the sets of parameter packs used in each of the
3121              initialization arguments.  */
3122           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3123             {
3124               /* Determine which parameter packs will be expanded in this
3125                  argument.  */
3126               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
3127                             &ppd, ppd.visited);
3128             }
3129         }
3130
3131       pointer_set_destroy (ppd.visited);
3132
3133       /* Create the pack expansion type for the base type.  */
3134       purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3135       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3136       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3137
3138       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3139          they will rarely be compared to anything.  */
3140       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3141
3142       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3143     }
3144
3145   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3146     for_types = true;
3147
3148   /* Build the PACK_EXPANSION_* node.  */
3149   result = for_types
3150      ? cxx_make_type (TYPE_PACK_EXPANSION)
3151      : make_node (EXPR_PACK_EXPANSION);
3152   SET_PACK_EXPANSION_PATTERN (result, arg);
3153   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3154     {
3155       /* Propagate type and const-expression information.  */
3156       TREE_TYPE (result) = TREE_TYPE (arg);
3157       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3158     }
3159   else
3160     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3161        they will rarely be compared to anything.  */
3162     SET_TYPE_STRUCTURAL_EQUALITY (result);
3163
3164   /* Determine which parameter packs will be expanded.  */
3165   ppd.parameter_packs = &parameter_packs;
3166   ppd.visited = pointer_set_create ();
3167   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3168   pointer_set_destroy (ppd.visited);
3169
3170   /* Make sure we found some parameter packs.  */
3171   if (parameter_packs == NULL_TREE)
3172     {
3173       if (TYPE_P (arg))
3174         error ("expansion pattern %<%T%> contains no argument packs", arg);
3175       else
3176         error ("expansion pattern %<%E%> contains no argument packs", arg);
3177       return error_mark_node;
3178     }
3179   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3180
3181   return result;
3182 }
3183
3184 /* Checks T for any "bare" parameter packs, which have not yet been
3185    expanded, and issues an error if any are found. This operation can
3186    only be done on full expressions or types (e.g., an expression
3187    statement, "if" condition, etc.), because we could have expressions like:
3188
3189      foo(f(g(h(args)))...)
3190
3191    where "args" is a parameter pack. check_for_bare_parameter_packs
3192    should not be called for the subexpressions args, h(args),
3193    g(h(args)), or f(g(h(args))), because we would produce erroneous
3194    error messages. 
3195
3196    Returns TRUE and emits an error if there were bare parameter packs,
3197    returns FALSE otherwise.  */
3198 bool 
3199 check_for_bare_parameter_packs (tree t)
3200 {
3201   tree parameter_packs = NULL_TREE;
3202   struct find_parameter_pack_data ppd;
3203
3204   if (!processing_template_decl || !t || t == error_mark_node)
3205     return false;
3206
3207   if (TREE_CODE (t) == TYPE_DECL)
3208     t = TREE_TYPE (t);
3209
3210   ppd.parameter_packs = &parameter_packs;
3211   ppd.visited = pointer_set_create ();
3212   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3213   pointer_set_destroy (ppd.visited);
3214
3215   if (parameter_packs) 
3216     {
3217       error ("parameter packs not expanded with %<...%>:");
3218       while (parameter_packs)
3219         {
3220           tree pack = TREE_VALUE (parameter_packs);
3221           tree name = NULL_TREE;
3222
3223           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3224               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3225             name = TYPE_NAME (pack);
3226           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3227             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3228           else
3229             name = DECL_NAME (pack);
3230
3231           if (name)
3232             inform (input_location, "        %qD", name);
3233           else
3234             inform (input_location, "        <anonymous>");
3235
3236           parameter_packs = TREE_CHAIN (parameter_packs);
3237         }
3238
3239       return true;
3240     }
3241
3242   return false;
3243 }
3244
3245 /* Expand any parameter packs that occur in the template arguments in
3246    ARGS.  */
3247 tree
3248 expand_template_argument_pack (tree args)
3249 {
3250   tree result_args = NULL_TREE;
3251   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3252   int num_result_args = -1;
3253   int non_default_args_count = -1;
3254
3255   /* First, determine if we need to expand anything, and the number of
3256      slots we'll need.  */
3257   for (in_arg = 0; in_arg < nargs; ++in_arg)
3258     {
3259       tree arg = TREE_VEC_ELT (args, in_arg);
3260       if (arg == NULL_TREE)
3261         return args;
3262       if (ARGUMENT_PACK_P (arg))
3263         {
3264           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3265           if (num_result_args < 0)
3266             num_result_args = in_arg + num_packed;
3267           else
3268             num_result_args += num_packed;
3269         }
3270       else
3271         {
3272           if (num_result_args >= 0)
3273             num_result_args++;
3274         }
3275     }
3276
3277   /* If no expansion is necessary, we're done.  */
3278   if (num_result_args < 0)
3279     return args;
3280
3281   /* Expand arguments.  */
3282   result_args = make_tree_vec (num_result_args);
3283   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3284     non_default_args_count =
3285       GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3286   for (in_arg = 0; in_arg < nargs; ++in_arg)
3287     {
3288       tree arg = TREE_VEC_ELT (args, in_arg);
3289       if (ARGUMENT_PACK_P (arg))
3290         {
3291           tree packed = ARGUMENT_PACK_ARGS (arg);
3292           int i, num_packed = TREE_VEC_LENGTH (packed);
3293           for (i = 0; i < num_packed; ++i, ++out_arg)
3294             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3295           if (non_default_args_count > 0)
3296             non_default_args_count += num_packed;
3297         }
3298       else
3299         {
3300           TREE_VEC_ELT (result_args, out_arg) = arg;
3301           ++out_arg;
3302         }
3303     }
3304   if (non_default_args_count >= 0)
3305     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3306   return result_args;
3307 }
3308
3309 /* Checks if DECL shadows a template parameter.
3310
3311    [temp.local]: A template-parameter shall not be redeclared within its
3312    scope (including nested scopes).
3313
3314    Emits an error and returns TRUE if the DECL shadows a parameter,
3315    returns FALSE otherwise.  */
3316
3317 bool
3318 check_template_shadow (tree decl)
3319 {
3320   tree olddecl;
3321
3322   /* If we're not in a template, we can't possibly shadow a template
3323      parameter.  */
3324   if (!current_template_parms)
3325     return true;
3326
3327   /* Figure out what we're shadowing.  */
3328   if (TREE_CODE (decl) == OVERLOAD)
3329     decl = OVL_CURRENT (decl);
3330   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3331
3332   /* If there's no previous binding for this name, we're not shadowing
3333      anything, let alone a template parameter.  */
3334   if (!olddecl)
3335     return true;
3336
3337   /* If we're not shadowing a template parameter, we're done.  Note
3338      that OLDDECL might be an OVERLOAD (or perhaps even an
3339      ERROR_MARK), so we can't just blithely assume it to be a _DECL
3340      node.  */
3341   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3342     return true;
3343
3344   /* We check for decl != olddecl to avoid bogus errors for using a
3345      name inside a class.  We check TPFI to avoid duplicate errors for
3346      inline member templates.  */
3347   if (decl == olddecl
3348       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
3349     return true;
3350
3351   error ("declaration of %q+#D", decl);
3352   error (" shadows template parm %q+#D", olddecl);
3353   return false;
3354 }
3355
3356 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3357    ORIG_LEVEL, DECL, and TYPE.  */
3358
3359 static tree
3360 build_template_parm_index (int index,
3361                            int level,
3362                            int orig_level,
3363                            tree decl,
3364                            tree type)
3365 {
3366   tree t = make_node (TEMPLATE_PARM_INDEX);
3367   TEMPLATE_PARM_IDX (t) = index;
3368   TEMPLATE_PARM_LEVEL (t) = level;
3369   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3370   TEMPLATE_PARM_DECL (t) = decl;
3371   TREE_TYPE (t) = type;
3372   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3373   TREE_READONLY (t) = TREE_READONLY (decl);
3374
3375   return t;
3376 }
3377
3378 /* Find the canonical type parameter for the given template type
3379    parameter.  Returns the canonical type parameter, which may be TYPE
3380    if no such parameter existed.  */
3381 static tree
3382 canonical_type_parameter (tree type)
3383 {
3384   tree list;
3385   int idx = TEMPLATE_TYPE_IDX (type);
3386   if (!canonical_template_parms)
3387     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
3388
3389   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
3390     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
3391
3392   list = VEC_index (tree, canonical_template_parms, idx);
3393   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3394     list = TREE_CHAIN (list);
3395
3396   if (list)
3397     return TREE_VALUE (list);
3398   else
3399     {
3400       VEC_replace(tree, canonical_template_parms, idx,
3401                   tree_cons (NULL_TREE, type, 
3402                              VEC_index (tree, canonical_template_parms, idx)));
3403       return type;
3404     }
3405 }
3406
3407 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3408    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
3409    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3410    new one is created.  */
3411
3412 static tree
3413 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3414                             tsubst_flags_t complain)
3415 {
3416   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3417       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3418           != TEMPLATE_PARM_LEVEL (index) - levels)
3419       || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3420     {
3421       tree orig_decl = TEMPLATE_PARM_DECL (index);
3422       tree decl, t;
3423
3424       decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3425                          TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3426       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3427       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3428       DECL_ARTIFICIAL (decl) = 1;
3429       SET_DECL_TEMPLATE_PARM_P (decl);
3430
3431       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3432                                      TEMPLATE_PARM_LEVEL (index) - levels,
3433                                      TEMPLATE_PARM_ORIG_LEVEL (index),
3434                                      decl, type);
3435       TEMPLATE_PARM_DESCENDANTS (index) = t;
3436       TEMPLATE_PARM_PARAMETER_PACK (t) 
3437         = TEMPLATE_PARM_PARAMETER_PACK (index);
3438
3439         /* Template template parameters need this.  */
3440       if (TREE_CODE (decl) == TEMPLATE_DECL)
3441         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3442           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3443            args, complain);
3444     }
3445
3446   return TEMPLATE_PARM_DESCENDANTS (index);
3447 }
3448
3449 /* Process information from new template parameter PARM and append it to the
3450    LIST being built.  This new parameter is a non-type parameter iff
3451    IS_NON_TYPE is true. This new parameter is a parameter
3452    pack iff IS_PARAMETER_PACK is true.  The location of PARM is in 
3453    PARM_LOC.  */
3454
3455 tree
3456 process_template_parm (tree list, location_t parm_loc, tree parm, bool is_non_type, 
3457                        bool is_parameter_pack)
3458 {
3459   tree decl = 0;
3460   tree defval;
3461   tree err_parm_list;
3462   int idx = 0;
3463
3464   gcc_assert (TREE_CODE (parm) == TREE_LIST);
3465   defval = TREE_PURPOSE (parm);
3466
3467   if (list)
3468     {
3469       tree p = tree_last (list);
3470
3471       if (p && TREE_VALUE (p) != error_mark_node)
3472         {
3473           p = TREE_VALUE (p);
3474           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3475             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3476           else
3477             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3478         }
3479
3480       ++idx;
3481     }
3482   else
3483     idx = 0;
3484
3485   if (is_non_type)
3486     {
3487       parm = TREE_VALUE (parm);
3488
3489       SET_DECL_TEMPLATE_PARM_P (parm);
3490
3491       if (TREE_TYPE (parm) == error_mark_node)
3492         {
3493           err_parm_list = build_tree_list (defval, parm);
3494           TREE_VALUE (err_parm_list) = error_mark_node;
3495            return chainon (list, err_parm_list);
3496         }
3497       else
3498       {
3499         /* [temp.param]
3500
3501            The top-level cv-qualifiers on the template-parameter are
3502            ignored when determining its type.  */
3503         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3504         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3505           {
3506             err_parm_list = build_tree_list (defval, parm);
3507             TREE_VALUE (err_parm_list) = error_mark_node;
3508              return chainon (list, err_parm_list);
3509           }
3510
3511         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3512           {
3513             /* This template parameter is not a parameter pack, but it
3514                should be. Complain about "bare" parameter packs.  */
3515             check_for_bare_parameter_packs (TREE_TYPE (parm));
3516             
3517             /* Recover by calling this a parameter pack.  */
3518             is_parameter_pack = true;
3519           }
3520       }
3521
3522       /* A template parameter is not modifiable.  */
3523       TREE_CONSTANT (parm) = 1;
3524       TREE_READONLY (parm) = 1;
3525       decl = build_decl (parm_loc,
3526                          CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3527       TREE_CONSTANT (decl) = 1;
3528       TREE_READONLY (decl) = 1;
3529       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3530         = build_template_parm_index (idx, processing_template_decl,
3531                                      processing_template_decl,
3532                                      decl, TREE_TYPE (parm));
3533
3534       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3535         = is_parameter_pack;
3536     }
3537   else
3538     {
3539       tree t;
3540       parm = TREE_VALUE (TREE_VALUE (parm));
3541
3542       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3543         {
3544           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3545           /* This is for distinguishing between real templates and template
3546              template parameters */
3547           TREE_TYPE (parm) = t;
3548           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3549           decl = parm;
3550         }
3551       else
3552         {
3553           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3554           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3555           decl = build_decl (parm_loc,
3556                              TYPE_DECL, parm, t);
3557         }
3558
3559       TYPE_NAME (t) = decl;
3560       TYPE_STUB_DECL (t) = decl;
3561       parm = decl;
3562       TEMPLATE_TYPE_PARM_INDEX (t)
3563         = build_template_parm_index (idx, processing_template_decl,
3564                                      processing_template_decl,
3565                                      decl, TREE_TYPE (parm));
3566       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3567       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3568     }
3569   DECL_ARTIFICIAL (decl) = 1;
3570   SET_DECL_TEMPLATE_PARM_P (decl);
3571   pushdecl (decl);
3572   parm = build_tree_list (defval, parm);
3573   return chainon (list, parm);
3574 }
3575
3576 /* The end of a template parameter list has been reached.  Process the
3577    tree list into a parameter vector, converting each parameter into a more
3578    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3579    as PARM_DECLs.  */
3580
3581 tree
3582 end_template_parm_list (tree parms)
3583 {
3584   int nparms;
3585   tree parm, next;
3586   tree saved_parmlist = make_tree_vec (list_length (parms));
3587
3588   current_template_parms
3589     = tree_cons (size_int (processing_template_decl),
3590                  saved_parmlist, current_template_parms);
3591
3592   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3593     {
3594       next = TREE_CHAIN (parm);
3595       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3596       TREE_CHAIN (parm) = NULL_TREE;
3597       if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL)
3598         TEMPLATE_TYPE_PARM_SIBLING_PARMS (TREE_TYPE (TREE_VALUE (parm))) =
3599               current_template_parms;
3600     }
3601
3602   --processing_template_parmlist;
3603
3604   return saved_parmlist;
3605 }
3606
3607 /* end_template_decl is called after a template declaration is seen.  */
3608
3609 void
3610 end_template_decl (void)
3611 {
3612   reset_specialization ();
3613
3614   if (! processing_template_decl)
3615     return;
3616
3617   /* This matches the pushlevel in begin_template_parm_list.  */
3618   finish_scope ();
3619
3620   --processing_template_decl;
3621   current_template_parms = TREE_CHAIN (current_template_parms);
3622 }
3623
3624 /* Within the declaration of a template, return all levels of template
3625    parameters that apply.  The template parameters are represented as
3626    a TREE_VEC, in the form documented in cp-tree.h for template
3627    arguments.  */
3628
3629 static tree
3630 current_template_args (void)
3631 {
3632   tree header;
3633   tree args = NULL_TREE;
3634   int length = TMPL_PARMS_DEPTH (current_template_parms);
3635   int l = length;
3636
3637   /* If there is only one level of template parameters, we do not
3638      create a TREE_VEC of TREE_VECs.  Instead, we return a single
3639      TREE_VEC containing the arguments.  */
3640   if (length > 1)
3641     args = make_tree_vec (length);
3642
3643   for (header = current_template_parms; header; header = TREE_CHAIN (header))
3644     {
3645       tree a = copy_node (TREE_VALUE (header));
3646       int i;
3647
3648       TREE_TYPE (a) = NULL_TREE;
3649       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3650         {
3651           tree t = TREE_VEC_ELT (a, i);
3652
3653           /* T will be a list if we are called from within a
3654              begin/end_template_parm_list pair, but a vector directly
3655              if within a begin/end_member_template_processing pair.  */
3656           if (TREE_CODE (t) == TREE_LIST)
3657             {
3658               t = TREE_VALUE (t);
3659
3660               if (!error_operand_p (t))
3661                 {
3662                   if (TREE_CODE (t) == TYPE_DECL
3663                       || TREE_CODE (t) == TEMPLATE_DECL)
3664                     {
3665                       t = TREE_TYPE (t);
3666                       
3667                       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3668                         {
3669                           /* Turn this argument into a TYPE_ARGUMENT_PACK
3670                              with a single element, which expands T.  */
3671                           tree vec = make_tree_vec (1);
3672 #ifdef ENABLE_CHECKING
3673                           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3674                                 (vec, TREE_VEC_LENGTH (vec));
3675 #endif
3676                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3677                           
3678                           t = cxx_make_type (TYPE_ARGUMENT_PACK);
3679                           SET_ARGUMENT_PACK_ARGS (t, vec);
3680                         }
3681                     }
3682                   else
3683                     {
3684                       t = DECL_INITIAL (t);
3685                       
3686                       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3687                         {
3688                           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3689                              with a single element, which expands T.  */
3690                           tree vec = make_tree_vec (1);
3691                           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3692 #ifdef ENABLE_CHECKING
3693                           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3694                                 (vec, TREE_VEC_LENGTH (vec));
3695 #endif
3696                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3697                           
3698                           t  = make_node (NONTYPE_ARGUMENT_PACK);
3699                           SET_ARGUMENT_PACK_ARGS (t, vec);
3700                           TREE_TYPE (t) = type;
3701                         }
3702                     }
3703                   TREE_VEC_ELT (a, i) = t;
3704                 }
3705             }
3706         }
3707
3708 #ifdef ENABLE_CHECKING
3709       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
3710 #endif
3711
3712       if (length > 1)
3713         TREE_VEC_ELT (args, --l) = a;
3714       else
3715         args = a;
3716     }
3717
3718   return args;
3719 }
3720
3721 /* Update the declared TYPE by doing any lookups which were thought to be
3722    dependent, but are not now that we know the SCOPE of the declarator.  */
3723
3724 tree
3725 maybe_update_decl_type (tree orig_type, tree scope)
3726 {
3727   tree type = orig_type;
3728
3729   if (type == NULL_TREE)
3730     return type;
3731
3732   if (TREE_CODE (orig_type) == TYPE_DECL)
3733     type = TREE_TYPE (type);
3734
3735   if (scope && TYPE_P (scope) && dependent_type_p (scope)
3736       && dependent_type_p (type)
3737       /* Don't bother building up the args in this case.  */
3738       && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
3739     {
3740       /* tsubst in the args corresponding to the template parameters,
3741          including auto if present.  Most things will be unchanged, but
3742          make_typename_type and tsubst_qualified_id will resolve
3743          TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
3744       tree args = current_template_args ();
3745       tree auto_node = type_uses_auto (type);
3746       tree pushed;
3747       if (auto_node)
3748         {
3749           tree auto_vec = make_tree_vec (1);
3750           TREE_VEC_ELT (auto_vec, 0) = auto_node;
3751           args = add_to_template_args (args, auto_vec);
3752         }
3753       pushed = push_scope (scope);
3754       type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
3755       if (pushed)
3756         pop_scope (scope);
3757     }
3758
3759   if (type == error_mark_node)
3760     return orig_type;
3761
3762   if (TREE_CODE (orig_type) == TYPE_DECL)
3763     {
3764       if (same_type_p (type, TREE_TYPE (orig_type)))
3765         type = orig_type;
3766       else
3767         type = TYPE_NAME (type);
3768     }
3769   return type;
3770 }
3771
3772 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3773    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
3774    a member template.  Used by push_template_decl below.  */
3775
3776 static tree
3777 build_template_decl (tree decl, tree parms, bool member_template_p)
3778 {
3779   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3780   DECL_TEMPLATE_PARMS (tmpl) = parms;
3781   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3782   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3783
3784   return tmpl;
3785 }
3786
3787 struct template_parm_data
3788 {
3789   /* The level of the template parameters we are currently
3790      processing.  */
3791   int level;
3792
3793   /* The index of the specialization argument we are currently
3794      processing.  */
3795   int current_arg;
3796
3797   /* An array whose size is the number of template parameters.  The
3798      elements are nonzero if the parameter has been used in any one
3799      of the arguments processed so far.  */
3800   int* parms;
3801
3802   /* An array whose size is the number of template arguments.  The
3803      elements are nonzero if the argument makes use of template
3804      parameters of this level.  */
3805   int* arg_uses_template_parms;
3806 };
3807
3808 /* Subroutine of push_template_decl used to see if each template
3809    parameter in a partial specialization is used in the explicit
3810    argument list.  If T is of the LEVEL given in DATA (which is
3811    treated as a template_parm_data*), then DATA->PARMS is marked
3812    appropriately.  */
3813
3814 static int
3815 mark_template_parm (tree t, void* data)
3816 {
3817   int level;
3818   int idx;
3819   struct template_parm_data* tpd = (struct template_parm_data*) data;
3820
3821   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3822     {
3823       level = TEMPLATE_PARM_LEVEL (t);
3824       idx = TEMPLATE_PARM_IDX (t);
3825     }
3826   else
3827     {
3828       level = TEMPLATE_TYPE_LEVEL (t);
3829       idx = TEMPLATE_TYPE_IDX (t);
3830     }
3831
3832   if (level == tpd->level)
3833     {
3834       tpd->parms[idx] = 1;
3835       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3836     }
3837
3838   /* Return zero so that for_each_template_parm will continue the
3839      traversal of the tree; we want to mark *every* template parm.  */
3840   return 0;
3841 }
3842
3843 /* Process the partial specialization DECL.  */
3844
3845 static tree
3846 process_partial_specialization (tree decl)
3847 {
3848   tree type = TREE_TYPE (decl);
3849   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3850   tree specargs = CLASSTYPE_TI_ARGS (type);
3851   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3852   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3853   tree inner_parms;
3854   tree inst;
3855   int nargs = TREE_VEC_LENGTH (inner_args);
3856   int ntparms;
3857   int  i;
3858   bool did_error_intro = false;
3859   struct template_parm_data tpd;
3860   struct template_parm_data tpd2;
3861
3862   gcc_assert (current_template_parms);
3863
3864   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3865   ntparms = TREE_VEC_LENGTH (inner_parms);
3866
3867   /* We check that each of the template parameters given in the
3868      partial specialization is used in the argument list to the
3869      specialization.  For example:
3870
3871        template <class T> struct S;
3872        template <class T> struct S<T*>;
3873
3874      The second declaration is OK because `T*' uses the template
3875      parameter T, whereas
3876
3877        template <class T> struct S<int>;
3878
3879      is no good.  Even trickier is:
3880
3881        template <class T>
3882        struct S1
3883        {
3884           template <class U>
3885           struct S2;
3886           template <class U>
3887           struct S2<T>;
3888        };
3889
3890      The S2<T> declaration is actually invalid; it is a
3891      full-specialization.  Of course,
3892
3893           template <class U>
3894           struct S2<T (*)(U)>;
3895
3896      or some such would have been OK.  */
3897   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3898   tpd.parms = XALLOCAVEC (int, ntparms);
3899   memset (tpd.parms, 0, sizeof (int) * ntparms);
3900
3901   tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
3902   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3903   for (i = 0; i < nargs; ++i)
3904     {
3905       tpd.current_arg = i;
3906       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3907                               &mark_template_parm,
3908                               &tpd,
3909                               NULL,
3910                               /*include_nondeduced_p=*/false);
3911     }
3912   for (i = 0; i < ntparms; ++i)
3913     if (tpd.parms[i] == 0)
3914       {
3915         /* One of the template parms was not used in the
3916            specialization.  */
3917         if (!did_error_intro)
3918           {
3919             error ("template parameters not used in partial specialization:");
3920             did_error_intro = true;
3921           }
3922
3923         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3924       }
3925
3926   if (did_error_intro)
3927     return error_mark_node;
3928
3929   /* [temp.class.spec]
3930
3931      The argument list of the specialization shall not be identical to
3932      the implicit argument list of the primary template.  */
3933   if (comp_template_args
3934       (inner_args,
3935        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3936                                                    (maintmpl)))))
3937     error ("partial specialization %qT does not specialize any template arguments", type);
3938
3939   /* [temp.class.spec]
3940
3941      A partially specialized non-type argument expression shall not
3942      involve template parameters of the partial specialization except
3943      when the argument expression is a simple identifier.
3944
3945      The type of a template parameter corresponding to a specialized
3946      non-type argument shall not be dependent on a parameter of the
3947      specialization. 
3948
3949      Also, we verify that pack expansions only occur at the
3950      end of the argument list.  */
3951   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3952   tpd2.parms = 0;
3953   for (i = 0; i < nargs; ++i)
3954     {
3955       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3956       tree arg = TREE_VEC_ELT (inner_args, i);
3957       tree packed_args = NULL_TREE;
3958       int j, len = 1;
3959
3960       if (ARGUMENT_PACK_P (arg))
3961         {
3962           /* Extract the arguments from the argument pack. We'll be
3963              iterating over these in the following loop.  */
3964           packed_args = ARGUMENT_PACK_ARGS (arg);
3965           len = TREE_VEC_LENGTH (packed_args);
3966         }
3967
3968       for (j = 0; j < len; j++)
3969         {
3970           if (packed_args)
3971             /* Get the Jth argument in the parameter pack.  */
3972             arg = TREE_VEC_ELT (packed_args, j);
3973
3974           if (PACK_EXPANSION_P (arg))
3975             {
3976               /* Pack expansions must come at the end of the
3977                  argument list.  */
3978               if ((packed_args && j < len - 1)
3979                   || (!packed_args && i < nargs - 1))
3980                 {
3981                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3982                     error ("parameter pack argument %qE must be at the "
3983                            "end of the template argument list", arg);
3984                   else
3985                     error ("parameter pack argument %qT must be at the "
3986                            "end of the template argument list", arg);
3987                 }
3988             }
3989
3990           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3991             /* We only care about the pattern.  */
3992             arg = PACK_EXPANSION_PATTERN (arg);
3993
3994           if (/* These first two lines are the `non-type' bit.  */
3995               !TYPE_P (arg)
3996               && TREE_CODE (arg) != TEMPLATE_DECL
3997               /* This next line is the `argument expression is not just a
3998                  simple identifier' condition and also the `specialized
3999                  non-type argument' bit.  */
4000               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
4001             {
4002               if ((!packed_args && tpd.arg_uses_template_parms[i])
4003                   || (packed_args && uses_template_parms (arg)))
4004                 error ("template argument %qE involves template parameter(s)",
4005                        arg);
4006               else 
4007                 {
4008                   /* Look at the corresponding template parameter,
4009                      marking which template parameters its type depends
4010                      upon.  */
4011                   tree type = TREE_TYPE (parm);
4012
4013                   if (!tpd2.parms)
4014                     {
4015                       /* We haven't yet initialized TPD2.  Do so now.  */
4016                       tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4017                       /* The number of parameters here is the number in the
4018                          main template, which, as checked in the assertion
4019                          above, is NARGS.  */
4020                       tpd2.parms = XALLOCAVEC (int, nargs);
4021                       tpd2.level = 
4022                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4023                     }
4024
4025                   /* Mark the template parameters.  But this time, we're
4026                      looking for the template parameters of the main
4027                      template, not in the specialization.  */
4028                   tpd2.current_arg = i;
4029                   tpd2.arg_uses_template_parms[i] = 0;
4030                   memset (tpd2.parms, 0, sizeof (int) * nargs);
4031                   for_each_template_parm (type,
4032                                           &mark_template_parm,
4033                                           &tpd2,
4034                                           NULL,
4035                                           /*include_nondeduced_p=*/false);
4036
4037                   if (tpd2.arg_uses_template_parms [i])
4038                     {
4039                       /* The type depended on some template parameters.
4040                          If they are fully specialized in the
4041                          specialization, that's OK.  */
4042                       int j;
4043                       int count = 0;
4044                       for (j = 0; j < nargs; ++j)
4045                         if (tpd2.parms[j] != 0
4046                             && tpd.arg_uses_template_parms [j])
4047                           ++count;
4048                       if (count != 0)
4049                         error_n (input_location, count,
4050                                  "type %qT of template argument %qE depends "
4051                                  "on a template parameter",
4052                                  "type %qT of template argument %qE depends "
4053                                  "on template parameters",
4054                                  type,
4055                                  arg);
4056                     }
4057                 }
4058             }
4059         }
4060     }
4061
4062   /* We should only get here once.  */
4063   gcc_assert (!COMPLETE_TYPE_P (type));
4064
4065   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4066     = tree_cons (specargs, inner_parms,
4067                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4068   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4069
4070   for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4071        inst = TREE_CHAIN (inst))
4072     {
4073       tree inst_type = TREE_VALUE (inst);
4074       if (COMPLETE_TYPE_P (inst_type)
4075           && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4076         {
4077           tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
4078           if (spec && TREE_TYPE (spec) == type)
4079             permerror (input_location,
4080                        "partial specialization of %qT after instantiation "
4081                        "of %qT", type, inst_type);
4082         }
4083     }
4084
4085   return decl;
4086 }
4087
4088 /* Check that a template declaration's use of default arguments and
4089    parameter packs is not invalid.  Here, PARMS are the template
4090    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
4091    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
4092    specialization.
4093    
4094
4095    IS_FRIEND_DECL is nonzero if DECL is a friend function template
4096    declaration (but not a definition); 1 indicates a declaration, 2
4097    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4098    emitted for extraneous default arguments.
4099
4100    Returns TRUE if there were no errors found, FALSE otherwise. */
4101
4102 bool
4103 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
4104                          int is_partial, int is_friend_decl)
4105 {
4106   const char *msg;
4107   int last_level_to_check;
4108   tree parm_level;
4109   bool no_errors = true;
4110
4111   /* [temp.param]
4112
4113      A default template-argument shall not be specified in a
4114      function template declaration or a function template definition, nor
4115      in the template-parameter-list of the definition of a member of a
4116      class template.  */
4117
4118   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
4119     /* You can't have a function template declaration in a local
4120        scope, nor you can you define a member of a class template in a
4121        local scope.  */
4122     return true;
4123
4124   if (current_class_type
4125       && !TYPE_BEING_DEFINED (current_class_type)
4126       && DECL_LANG_SPECIFIC (decl)
4127       && DECL_DECLARES_FUNCTION_P (decl)
4128       /* If this is either a friend defined in the scope of the class
4129          or a member function.  */
4130       && (DECL_FUNCTION_MEMBER_P (decl)
4131           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4132           : DECL_FRIEND_CONTEXT (decl)
4133           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4134           : false)
4135       /* And, if it was a member function, it really was defined in
4136          the scope of the class.  */
4137       && (!DECL_FUNCTION_MEMBER_P (decl)
4138           || DECL_INITIALIZED_IN_CLASS_P (decl)))
4139     /* We already checked these parameters when the template was
4140        declared, so there's no need to do it again now.  This function
4141        was defined in class scope, but we're processing it's body now
4142        that the class is complete.  */
4143     return true;
4144
4145   /* Core issue 226 (C++0x only): the following only applies to class
4146      templates.  */
4147   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
4148     {
4149       /* [temp.param]
4150
4151          If a template-parameter has a default template-argument, all
4152          subsequent template-parameters shall have a default
4153          template-argument supplied.  */
4154       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4155         {
4156           tree inner_parms = TREE_VALUE (parm_level);
4157           int ntparms = TREE_VEC_LENGTH (inner_parms);
4158           int seen_def_arg_p = 0;
4159           int i;
4160
4161           for (i = 0; i < ntparms; ++i)
4162             {
4163               tree parm = TREE_VEC_ELT (inner_parms, i);
4164
4165               if (parm == error_mark_node)
4166                 continue;
4167
4168               if (TREE_PURPOSE (parm))
4169                 seen_def_arg_p = 1;
4170               else if (seen_def_arg_p
4171                        && !template_parameter_pack_p (TREE_VALUE (parm)))
4172                 {
4173                   error ("no default argument for %qD", TREE_VALUE (parm));
4174                   /* For better subsequent error-recovery, we indicate that
4175                      there should have been a default argument.  */
4176                   TREE_PURPOSE (parm) = error_mark_node;
4177                   no_errors = false;
4178                 }
4179               else if (is_primary
4180                        && !is_partial
4181                        && !is_friend_decl
4182                        /* Don't complain about an enclosing partial
4183                           specialization.  */
4184                        && parm_level == parms
4185                        && TREE_CODE (decl) == TYPE_DECL
4186                        && i < ntparms - 1
4187                        && template_parameter_pack_p (TREE_VALUE (parm)))
4188                 {
4189                   /* A primary class template can only have one
4190                      parameter pack, at the end of the template
4191                      parameter list.  */
4192
4193                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4194                     error ("parameter pack %qE must be at the end of the"
4195                            " template parameter list", TREE_VALUE (parm));
4196                   else
4197                     error ("parameter pack %qT must be at the end of the"
4198                            " template parameter list", 
4199                            TREE_TYPE (TREE_VALUE (parm)));
4200
4201                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
4202                     = error_mark_node;
4203                   no_errors = false;
4204                 }
4205             }
4206         }
4207     }
4208
4209   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4210       || is_partial 
4211       || !is_primary
4212       || is_friend_decl)
4213     /* For an ordinary class template, default template arguments are
4214        allowed at the innermost level, e.g.:
4215          template <class T = int>
4216          struct S {};
4217        but, in a partial specialization, they're not allowed even
4218        there, as we have in [temp.class.spec]:
4219
4220          The template parameter list of a specialization shall not
4221          contain default template argument values.
4222
4223        So, for a partial specialization, or for a function template
4224        (in C++98/C++03), we look at all of them.  */
4225     ;
4226   else
4227     /* But, for a primary class template that is not a partial
4228        specialization we look at all template parameters except the
4229        innermost ones.  */
4230     parms = TREE_CHAIN (parms);
4231
4232   /* Figure out what error message to issue.  */
4233   if (is_friend_decl == 2)
4234     msg = G_("default template arguments may not be used in function template "
4235              "friend re-declaration");
4236   else if (is_friend_decl)
4237     msg = G_("default template arguments may not be used in function template "
4238              "friend declarations");
4239   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4240     msg = G_("default template arguments may not be used in function templates "
4241              "without -std=c++0x or -std=gnu++0x");
4242   else if (is_partial)
4243     msg = G_("default template arguments may not be used in "
4244              "partial specializations");
4245   else
4246     msg = G_("default argument for template parameter for class enclosing %qD");
4247
4248   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4249     /* If we're inside a class definition, there's no need to
4250        examine the parameters to the class itself.  On the one
4251        hand, they will be checked when the class is defined, and,
4252        on the other, default arguments are valid in things like:
4253          template <class T = double>
4254          struct S { template <class U> void f(U); };
4255        Here the default argument for `S' has no bearing on the
4256        declaration of `f'.  */
4257     last_level_to_check = template_class_depth (current_class_type) + 1;
4258   else
4259     /* Check everything.  */
4260     last_level_to_check = 0;
4261
4262   for (parm_level = parms;
4263        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4264        parm_level = TREE_CHAIN (parm_level))
4265     {
4266       tree inner_parms = TREE_VALUE (parm_level);
4267       int i;
4268       int ntparms;
4269
4270       ntparms = TREE_VEC_LENGTH (inner_parms);
4271       for (i = 0; i < ntparms; ++i)
4272         {
4273           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4274             continue;
4275
4276           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4277             {
4278               if (msg)
4279                 {
4280                   no_errors = false;
4281                   if (is_friend_decl == 2)
4282                     return no_errors;
4283
4284                   error (msg, decl);
4285                   msg = 0;
4286                 }
4287
4288               /* Clear out the default argument so that we are not
4289                  confused later.  */
4290               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4291             }
4292         }
4293
4294       /* At this point, if we're still interested in issuing messages,
4295          they must apply to classes surrounding the object declared.  */
4296       if (msg)
4297         msg = G_("default argument for template parameter for class "
4298                  "enclosing %qD");
4299     }
4300
4301   return no_errors;
4302 }
4303
4304 /* Worker for push_template_decl_real, called via
4305    for_each_template_parm.  DATA is really an int, indicating the
4306    level of the parameters we are interested in.  If T is a template
4307    parameter of that level, return nonzero.  */
4308
4309 static int
4310 template_parm_this_level_p (tree t, void* data)
4311 {
4312   int this_level = *(int *)data;
4313   int level;
4314
4315   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4316     level = TEMPLATE_PARM_LEVEL (t);
4317   else
4318     level = TEMPLATE_TYPE_LEVEL (t);
4319   return level == this_level;
4320 }
4321
4322 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4323    parameters given by current_template_args, or reuses a
4324    previously existing one, if appropriate.  Returns the DECL, or an
4325    equivalent one, if it is replaced via a call to duplicate_decls.
4326
4327    If IS_FRIEND is true, DECL is a friend declaration.  */
4328
4329 tree
4330 push_template_decl_real (tree decl, bool is_friend)
4331 {
4332   tree tmpl;
4333   tree args;
4334   tree info;
4335   tree ctx;
4336   int primary;
4337   int is_partial;
4338   int new_template_p = 0;
4339   /* True if the template is a member template, in the sense of
4340      [temp.mem].  */
4341   bool member_template_p = false;
4342
4343   if (decl == error_mark_node || !current_template_parms)
4344     return error_mark_node;
4345
4346   /* See if this is a partial specialization.  */
4347   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4348                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4349                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4350
4351   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4352     is_friend = true;
4353
4354   if (is_friend)
4355     /* For a friend, we want the context of the friend function, not
4356        the type of which it is a friend.  */
4357     ctx = CP_DECL_CONTEXT (decl);
4358   else if (CP_DECL_CONTEXT (decl)
4359            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4360     /* In the case of a virtual function, we want the class in which
4361        it is defined.  */
4362     ctx = CP_DECL_CONTEXT (decl);
4363   else
4364     /* Otherwise, if we're currently defining some class, the DECL
4365        is assumed to be a member of the class.  */
4366     ctx = current_scope ();
4367
4368   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4369     ctx = NULL_TREE;
4370
4371   if (!DECL_CONTEXT (decl))
4372     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4373
4374   /* See if this is a primary template.  */
4375   if (is_friend && ctx)
4376     /* A friend template that specifies a class context, i.e.
4377          template <typename T> friend void A<T>::f();
4378        is not primary.  */
4379     primary = 0;
4380   else
4381     primary = template_parm_scope_p ();
4382
4383   if (primary)
4384     {
4385       if (DECL_CLASS_SCOPE_P (decl))
4386         member_template_p = true;
4387       if (TREE_CODE (decl) == TYPE_DECL
4388           && ANON_AGGRNAME_P (DECL_NAME (decl)))
4389         {
4390           error ("template class without a name");
4391           return error_mark_node;
4392         }
4393       else if (TREE_CODE (decl) == FUNCTION_DECL)
4394         {
4395           if (DECL_DESTRUCTOR_P (decl))
4396             {
4397               /* [temp.mem]
4398
4399                  A destructor shall not be a member template.  */
4400               error ("destructor %qD declared as member template", decl);
4401               return error_mark_node;
4402             }
4403           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4404               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
4405                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4406                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4407                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4408                       == void_list_node)))
4409             {
4410               /* [basic.stc.dynamic.allocation]
4411
4412                  An allocation function can be a function
4413                  template. ... Template allocation functions shall
4414                  have two or more parameters.  */
4415               error ("invalid template declaration of %qD", decl);
4416               return error_mark_node;
4417             }
4418         }
4419       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4420                && CLASS_TYPE_P (TREE_TYPE (decl)))
4421         /* OK */;
4422       else
4423         {
4424           error ("template declaration of %q#D", decl);
4425           return error_mark_node;
4426         }
4427     }
4428
4429   /* Check to see that the rules regarding the use of default
4430      arguments are not being violated.  */
4431   check_default_tmpl_args (decl, current_template_parms,
4432                            primary, is_partial, /*is_friend_decl=*/0);
4433
4434   /* Ensure that there are no parameter packs in the type of this
4435      declaration that have not been expanded.  */
4436   if (TREE_CODE (decl) == FUNCTION_DECL)
4437     {
4438       /* Check each of the arguments individually to see if there are
4439          any bare parameter packs.  */
4440       tree type = TREE_TYPE (decl);
4441       tree arg = DECL_ARGUMENTS (decl);
4442       tree argtype = TYPE_ARG_TYPES (type);
4443
4444       while (arg && argtype)
4445         {
4446           if (!FUNCTION_PARAMETER_PACK_P (arg)
4447               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4448             {
4449             /* This is a PARM_DECL that contains unexpanded parameter
4450                packs. We have already complained about this in the
4451                check_for_bare_parameter_packs call, so just replace
4452                these types with ERROR_MARK_NODE.  */
4453               TREE_TYPE (arg) = error_mark_node;
4454               TREE_VALUE (argtype) = error_mark_node;
4455             }
4456
4457           arg = DECL_CHAIN (arg);
4458           argtype = TREE_CHAIN (argtype);
4459         }
4460
4461       /* Check for bare parameter packs in the return type and the
4462          exception specifiers.  */
4463       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4464         /* Errors were already issued, set return type to int
4465            as the frontend doesn't expect error_mark_node as
4466            the return type.  */
4467         TREE_TYPE (type) = integer_type_node;
4468       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4469         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4470     }
4471   else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
4472     {
4473       TREE_TYPE (decl) = error_mark_node;
4474       return error_mark_node;
4475     }
4476
4477   if (is_partial)
4478     return process_partial_specialization (decl);
4479
4480   args = current_template_args ();
4481
4482   if (!ctx
4483       || TREE_CODE (ctx) == FUNCTION_DECL
4484       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4485       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4486     {
4487       if (DECL_LANG_SPECIFIC (decl)
4488           && DECL_TEMPLATE_INFO (decl)
4489           && DECL_TI_TEMPLATE (decl))
4490         tmpl = DECL_TI_TEMPLATE (decl);
4491       /* If DECL is a TYPE_DECL for a class-template, then there won't
4492          be DECL_LANG_SPECIFIC.  The information equivalent to
4493          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4494       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4495                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4496                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4497         {
4498           /* Since a template declaration already existed for this
4499              class-type, we must be redeclaring it here.  Make sure
4500              that the redeclaration is valid.  */
4501           redeclare_class_template (TREE_TYPE (decl),
4502                                     current_template_parms);
4503           /* We don't need to create a new TEMPLATE_DECL; just use the
4504              one we already had.  */
4505           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4506         }
4507       else
4508         {
4509           tmpl = build_template_decl (decl, current_template_parms,
4510                                       member_template_p);
4511           new_template_p = 1;
4512
4513           if (DECL_LANG_SPECIFIC (decl)
4514               && DECL_TEMPLATE_SPECIALIZATION (decl))
4515             {
4516               /* A specialization of a member template of a template
4517                  class.  */
4518               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4519               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4520               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4521             }
4522         }
4523     }
4524   else
4525     {
4526       tree a, t, current, parms;
4527       int i;
4528       tree tinfo = get_template_info (decl);
4529
4530       if (!tinfo)
4531         {
4532           error ("template definition of non-template %q#D", decl);
4533           return error_mark_node;
4534         }
4535
4536       tmpl = TI_TEMPLATE (tinfo);
4537
4538       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4539           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4540           && DECL_TEMPLATE_SPECIALIZATION (decl)
4541           && DECL_MEMBER_TEMPLATE_P (tmpl))
4542         {
4543           tree new_tmpl;
4544
4545           /* The declaration is a specialization of a member
4546              template, declared outside the class.  Therefore, the
4547              innermost template arguments will be NULL, so we
4548              replace them with the arguments determined by the
4549              earlier call to check_explicit_specialization.  */
4550           args = DECL_TI_ARGS (decl);
4551
4552           new_tmpl
4553             = build_template_decl (decl, current_template_parms,
4554                                    member_template_p);
4555           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4556           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4557           DECL_TI_TEMPLATE (decl) = new_tmpl;
4558           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4559           DECL_TEMPLATE_INFO (new_tmpl)
4560             = build_template_info (tmpl, args);
4561
4562           register_specialization (new_tmpl,
4563                                    most_general_template (tmpl),
4564                                    args,
4565                                    is_friend, 0);
4566           return decl;
4567         }
4568
4569       /* Make sure the template headers we got make sense.  */
4570
4571       parms = DECL_TEMPLATE_PARMS (tmpl);
4572       i = TMPL_PARMS_DEPTH (parms);
4573       if (TMPL_ARGS_DEPTH (args) != i)
4574         {
4575           error ("expected %d levels of template parms for %q#D, got %d",
4576                  i, decl, TMPL_ARGS_DEPTH (args));
4577         }
4578       else
4579         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
4580           {
4581             a = TMPL_ARGS_LEVEL (args, i);
4582             t = INNERMOST_TEMPLATE_PARMS (parms);
4583
4584             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
4585               {
4586                 if (current == decl)
4587                   error ("got %d template parameters for %q#D",
4588                          TREE_VEC_LENGTH (a), decl);
4589                 else
4590                   error ("got %d template parameters for %q#T",
4591                          TREE_VEC_LENGTH (a), current);
4592                 error ("  but %d required", TREE_VEC_LENGTH (t));
4593                 return error_mark_node;
4594               }
4595
4596             if (current == decl)
4597               current = ctx;
4598             else if (current == NULL_TREE)
4599               /* Can happen in erroneous input.  */
4600               break;
4601             else
4602               current = (TYPE_P (current)
4603                          ? TYPE_CONTEXT (current)
4604                          : DECL_CONTEXT (current));
4605           }
4606
4607       /* Check that the parms are used in the appropriate qualifying scopes
4608          in the declarator.  */
4609       if (!comp_template_args
4610           (TI_ARGS (tinfo),
4611            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4612         {
4613           error ("\
4614 template arguments to %qD do not match original template %qD",
4615                  decl, DECL_TEMPLATE_RESULT (tmpl));
4616           if (!uses_template_parms (TI_ARGS (tinfo)))
4617             inform (input_location, "use template<> for an explicit specialization");
4618           /* Avoid crash in import_export_decl.  */
4619           DECL_INTERFACE_KNOWN (decl) = 1;
4620           return error_mark_node;
4621         }
4622     }
4623
4624   DECL_TEMPLATE_RESULT (tmpl) = decl;
4625   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4626
4627   /* Push template declarations for global functions and types.  Note
4628      that we do not try to push a global template friend declared in a
4629      template class; such a thing may well depend on the template
4630      parameters of the class.  */
4631   if (new_template_p && !ctx
4632       && !(is_friend && template_class_depth (current_class_type) > 0))
4633     {
4634       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4635       if (tmpl == error_mark_node)
4636         return error_mark_node;
4637
4638       /* Hide template friend classes that haven't been declared yet.  */
4639       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4640         {
4641           DECL_ANTICIPATED (tmpl) = 1;
4642           DECL_FRIEND_P (tmpl) = 1;
4643         }
4644     }
4645
4646   if (primary)
4647     {
4648       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4649       int i;
4650
4651       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4652       if (DECL_CONV_FN_P (tmpl))
4653         {
4654           int depth = TMPL_PARMS_DEPTH (parms);
4655
4656           /* It is a conversion operator. See if the type converted to
4657              depends on innermost template operands.  */
4658
4659           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4660                                          depth))
4661             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4662         }
4663
4664       /* Give template template parms a DECL_CONTEXT of the template
4665          for which they are a parameter.  */
4666       parms = INNERMOST_TEMPLATE_PARMS (parms);
4667       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
4668         {
4669           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4670           if (TREE_CODE (parm) == TEMPLATE_DECL)
4671             DECL_CONTEXT (parm) = tmpl;
4672         }
4673     }
4674
4675   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4676      back to its most general template.  If TMPL is a specialization,
4677      ARGS may only have the innermost set of arguments.  Add the missing
4678      argument levels if necessary.  */
4679   if (DECL_TEMPLATE_INFO (tmpl))
4680     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4681
4682   info = build_template_info (tmpl, args);
4683
4684   if (DECL_IMPLICIT_TYPEDEF_P (decl))
4685     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4686   else if (DECL_LANG_SPECIFIC (decl))
4687     DECL_TEMPLATE_INFO (decl) = info;
4688
4689   return DECL_TEMPLATE_RESULT (tmpl);
4690 }
4691
4692 tree
4693 push_template_decl (tree decl)
4694 {
4695   return push_template_decl_real (decl, false);
4696 }
4697
4698 /* Called when a class template TYPE is redeclared with the indicated
4699    template PARMS, e.g.:
4700
4701      template <class T> struct S;
4702      template <class T> struct S {};  */
4703
4704 bool
4705 redeclare_class_template (tree type, tree parms)
4706 {
4707   tree tmpl;
4708   tree tmpl_parms;
4709   int i;
4710
4711   if (!TYPE_TEMPLATE_INFO (type))
4712     {
4713       error ("%qT is not a template type", type);
4714       return false;
4715     }
4716
4717   tmpl = TYPE_TI_TEMPLATE (type);
4718   if (!PRIMARY_TEMPLATE_P (tmpl))
4719     /* The type is nested in some template class.  Nothing to worry
4720        about here; there are no new template parameters for the nested
4721        type.  */
4722     return true;
4723
4724   if (!parms)
4725     {
4726       error ("template specifiers not specified in declaration of %qD",
4727              tmpl);
4728       return false;
4729     }
4730
4731   parms = INNERMOST_TEMPLATE_PARMS (parms);
4732   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4733
4734   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4735     {
4736       error_n (input_location, TREE_VEC_LENGTH (parms),
4737                "redeclared with %d template parameter",
4738                "redeclared with %d template parameters",
4739                TREE_VEC_LENGTH (parms));
4740       inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
4741                 "previous declaration %q+D used %d template parameter",
4742                 "previous declaration %q+D used %d template parameters",
4743                 tmpl, TREE_VEC_LENGTH (tmpl_parms));
4744       return false;
4745     }
4746
4747   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4748     {
4749       tree tmpl_parm;
4750       tree parm;
4751       tree tmpl_default;
4752       tree parm_default;
4753
4754       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4755           || TREE_VEC_ELT (parms, i) == error_mark_node)
4756         continue;
4757
4758       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4759       if (tmpl_parm == error_mark_node)
4760         return false;
4761
4762       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4763       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4764       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4765
4766       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4767          TEMPLATE_DECL.  */
4768       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4769           || (TREE_CODE (tmpl_parm) != TYPE_DECL
4770               && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
4771           || (TREE_CODE (tmpl_parm) != PARM_DECL
4772               && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
4773                   != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
4774           || (TREE_CODE (tmpl_parm) == PARM_DECL
4775               && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
4776                   != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
4777         {
4778           error ("template parameter %q+#D", tmpl_parm);
4779           error ("redeclared here as %q#D", parm);
4780           return false;
4781         }
4782
4783       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4784         {
4785           /* We have in [temp.param]:
4786
4787              A template-parameter may not be given default arguments
4788              by two different declarations in the same scope.  */
4789           error_at (input_location, "redefinition of default argument for %q#D", parm);
4790           inform (DECL_SOURCE_LOCATION (tmpl_parm),
4791                   "original definition appeared here");
4792           return false;
4793         }
4794
4795       if (parm_default != NULL_TREE)
4796         /* Update the previous template parameters (which are the ones
4797            that will really count) with the new default value.  */
4798         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4799       else if (tmpl_default != NULL_TREE)
4800         /* Update the new parameters, too; they'll be used as the
4801            parameters for any members.  */
4802         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4803     }
4804
4805     return true;
4806 }
4807
4808 /* Simplify EXPR if it is a non-dependent expression.  Returns the
4809    (possibly simplified) expression.  */
4810
4811 static tree
4812 fold_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
4813 {
4814   if (expr == NULL_TREE)
4815     return NULL_TREE;
4816
4817   /* If we're in a template, but EXPR isn't value dependent, simplify
4818      it.  We're supposed to treat:
4819
4820        template <typename T> void f(T[1 + 1]);
4821        template <typename T> void f(T[2]);
4822
4823      as two declarations of the same function, for example.  */
4824   if (processing_template_decl
4825       && !type_dependent_expression_p (expr)
4826       && !value_dependent_expression_p (expr))
4827     {
4828       HOST_WIDE_INT saved_processing_template_decl;
4829
4830       saved_processing_template_decl = processing_template_decl;
4831       processing_template_decl = 0;
4832       expr = tsubst_copy_and_build (expr,
4833                                     /*args=*/NULL_TREE,
4834                                     complain,
4835                                     /*in_decl=*/NULL_TREE,
4836                                     /*function_p=*/false,
4837                                     /*integral_constant_expression_p=*/true);
4838       processing_template_decl = saved_processing_template_decl;
4839     }
4840   return expr;
4841 }
4842
4843 tree
4844 fold_non_dependent_expr (tree expr)
4845 {
4846   return fold_non_dependent_expr_sfinae (expr, tf_error);
4847 }
4848
4849 /* EXPR is an expression which is used in a constant-expression context.
4850    For instance, it could be a VAR_DECL with a constant initializer.
4851    Extract the innermost constant expression.
4852
4853    This is basically a more powerful version of
4854    integral_constant_value, which can be used also in templates where
4855    initializers can maintain a syntactic rather than semantic form
4856    (even if they are non-dependent, for access-checking purposes).  */
4857
4858 static tree
4859 fold_decl_constant_value (tree expr)
4860 {
4861   tree const_expr = expr;
4862   do
4863     {
4864       expr = fold_non_dependent_expr (const_expr);
4865       const_expr = integral_constant_value (expr);
4866     }
4867   while (expr != const_expr);
4868
4869   return expr;
4870 }
4871
4872 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4873    must be a function or a pointer-to-function type, as specified
4874    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4875    and check that the resulting function has external linkage.  */
4876
4877 static tree
4878 convert_nontype_argument_function (tree type, tree expr)
4879 {
4880   tree fns = expr;
4881   tree fn, fn_no_ptr;
4882
4883   fn = instantiate_type (type, fns, tf_none);
4884   if (fn == error_mark_node)
4885     return error_mark_node;
4886
4887   fn_no_ptr = fn;
4888   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4889     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4890   if (TREE_CODE (fn_no_ptr) == BASELINK)
4891     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4892  
4893   /* [temp.arg.nontype]/1
4894
4895      A template-argument for a non-type, non-template template-parameter
4896      shall be one of:
4897      [...]
4898      -- the address of an object or function with external linkage.  */
4899   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4900     {
4901       error ("%qE is not a valid template argument for type %qT "
4902              "because function %qD has not external linkage",
4903              expr, type, fn_no_ptr);
4904       return NULL_TREE;
4905     }
4906
4907   return fn;
4908 }
4909
4910 /* Subroutine of convert_nontype_argument.
4911    Check if EXPR of type TYPE is a valid pointer-to-member constant.
4912    Emit an error otherwise.  */
4913
4914 static bool
4915 check_valid_ptrmem_cst_expr (tree type, tree expr)
4916 {
4917   STRIP_NOPS (expr);
4918   if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
4919     return true;
4920   error ("%qE is not a valid template argument for type %qT",
4921          expr, type);
4922   error ("it must be a pointer-to-member of the form `&X::Y'");
4923   return false;
4924 }
4925
4926 /* Returns TRUE iff the address of OP is value-dependent.
4927
4928    14.6.2.4 [temp.dep.temp]:
4929    A non-integral non-type template-argument is dependent if its type is
4930    dependent or it has either of the following forms
4931      qualified-id
4932      & qualified-id
4933    and contains a nested-name-specifier which specifies a class-name that
4934    names a dependent type.
4935
4936    We generalize this to just say that the address of a member of a
4937    dependent class is value-dependent; the above doesn't cover the
4938    address of a static data member named with an unqualified-id.  */
4939
4940 static bool
4941 has_value_dependent_address (tree op)
4942 {
4943   /* We could use get_inner_reference here, but there's no need;
4944      this is only relevant for template non-type arguments, which
4945      can only be expressed as &id-expression.  */
4946   if (DECL_P (op))
4947     {
4948       tree ctx = CP_DECL_CONTEXT (op);
4949       if (TYPE_P (ctx) && dependent_type_p (ctx))
4950         return true;
4951     }
4952
4953   return false;
4954 }
4955
4956 /* Attempt to convert the non-type template parameter EXPR to the
4957    indicated TYPE.  If the conversion is successful, return the
4958    converted value.  If the conversion is unsuccessful, return
4959    NULL_TREE if we issued an error message, or error_mark_node if we
4960    did not.  We issue error messages for out-and-out bad template
4961    parameters, but not simply because the conversion failed, since we
4962    might be just trying to do argument deduction.  Both TYPE and EXPR
4963    must be non-dependent.
4964
4965    The conversion follows the special rules described in
4966    [temp.arg.nontype], and it is much more strict than an implicit
4967    conversion.
4968
4969    This function is called twice for each template argument (see
4970    lookup_template_class for a more accurate description of this
4971    problem). This means that we need to handle expressions which
4972    are not valid in a C++ source, but can be created from the
4973    first call (for instance, casts to perform conversions). These
4974    hacks can go away after we fix the double coercion problem.  */
4975
4976 static tree
4977 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
4978 {
4979   tree expr_type;
4980
4981   /* Detect immediately string literals as invalid non-type argument.
4982      This special-case is not needed for correctness (we would easily
4983      catch this later), but only to provide better diagnostic for this
4984      common user mistake. As suggested by DR 100, we do not mention
4985      linkage issues in the diagnostic as this is not the point.  */
4986   /* FIXME we're making this OK.  */
4987   if (TREE_CODE (expr) == STRING_CST)
4988     {
4989       if (complain & tf_error)
4990         error ("%qE is not a valid template argument for type %qT "
4991                "because string literals can never be used in this context",
4992                expr, type);
4993       return NULL_TREE;
4994     }
4995
4996   /* Add the ADDR_EXPR now for the benefit of
4997      value_dependent_expression_p.  */
4998   if (TYPE_PTROBV_P (type))
4999     expr = decay_conversion (expr);
5000
5001   /* If we are in a template, EXPR may be non-dependent, but still
5002      have a syntactic, rather than semantic, form.  For example, EXPR
5003      might be a SCOPE_REF, rather than the VAR_DECL to which the
5004      SCOPE_REF refers.  Preserving the qualifying scope is necessary
5005      so that access checking can be performed when the template is
5006      instantiated -- but here we need the resolved form so that we can
5007      convert the argument.  */
5008   if (TYPE_REF_OBJ_P (type)
5009       && has_value_dependent_address (expr))
5010     /* If we want the address and it's value-dependent, don't fold.  */;
5011   else if (!type_unknown_p (expr))
5012     expr = fold_non_dependent_expr_sfinae (expr, complain);
5013   if (error_operand_p (expr))
5014     return error_mark_node;
5015   expr_type = TREE_TYPE (expr);
5016   if (TREE_CODE (type) == REFERENCE_TYPE)
5017     expr = mark_lvalue_use (expr);
5018   else
5019     expr = mark_rvalue_use (expr);
5020
5021   /* HACK: Due to double coercion, we can get a
5022      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5023      which is the tree that we built on the first call (see
5024      below when coercing to reference to object or to reference to
5025      function). We just strip everything and get to the arg.
5026      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5027      for examples.  */
5028   if (TREE_CODE (expr) == NOP_EXPR)
5029     {
5030       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5031         {
5032           /* ??? Maybe we could use convert_from_reference here, but we
5033              would need to relax its constraints because the NOP_EXPR
5034              could actually change the type to something more cv-qualified,
5035              and this is not folded by convert_from_reference.  */
5036           tree addr = TREE_OPERAND (expr, 0);
5037           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
5038           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
5039           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
5040           gcc_assert (same_type_ignoring_top_level_qualifiers_p
5041                       (TREE_TYPE (expr_type),
5042                        TREE_TYPE (TREE_TYPE (addr))));
5043
5044           expr = TREE_OPERAND (addr, 0);
5045           expr_type = TREE_TYPE (expr);
5046         }
5047
5048       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5049          parameter is a pointer to object, through decay and
5050          qualification conversion. Let's strip everything.  */
5051       else if (TYPE_PTROBV_P (type))
5052         {
5053           STRIP_NOPS (expr);
5054           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
5055           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
5056           /* Skip the ADDR_EXPR only if it is part of the decay for
5057              an array. Otherwise, it is part of the original argument
5058              in the source code.  */
5059           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
5060             expr = TREE_OPERAND (expr, 0);
5061           expr_type = TREE_TYPE (expr);
5062         }
5063     }
5064
5065   /* [temp.arg.nontype]/5, bullet 1
5066
5067      For a non-type template-parameter of integral or enumeration type,
5068      integral promotions (_conv.prom_) and integral conversions
5069      (_conv.integral_) are applied.  */
5070   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5071     {
5072       if (!INTEGRAL_OR_ENUMERATION_TYPE_P (expr_type))
5073         return error_mark_node;
5074
5075       expr = fold_decl_constant_value (expr);
5076       /* Notice that there are constant expressions like '4 % 0' which
5077          do not fold into integer constants.  */
5078       if (TREE_CODE (expr) != INTEGER_CST)
5079         {
5080           if (complain & tf_error)
5081             error ("%qE is not a valid template argument for type %qT "
5082                    "because it is a non-constant expression", expr, type);
5083           return NULL_TREE;
5084         }
5085
5086       /* At this point, an implicit conversion does what we want,
5087          because we already know that the expression is of integral
5088          type.  */
5089       expr = perform_implicit_conversion (type, expr, complain);
5090       if (expr == error_mark_node)
5091         return error_mark_node;
5092
5093       /* Conversion was allowed: fold it to a bare integer constant.  */
5094       expr = fold (expr);
5095     }
5096   /* [temp.arg.nontype]/5, bullet 2
5097
5098      For a non-type template-parameter of type pointer to object,
5099      qualification conversions (_conv.qual_) and the array-to-pointer
5100      conversion (_conv.array_) are applied.  */
5101   else if (TYPE_PTROBV_P (type))
5102     {
5103       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
5104
5105          A template-argument for a non-type, non-template template-parameter
5106          shall be one of: [...]
5107
5108          -- the name of a non-type template-parameter;
5109          -- the address of an object or function with external linkage, [...]
5110             expressed as "& id-expression" where the & is optional if the name
5111             refers to a function or array, or if the corresponding
5112             template-parameter is a reference.
5113
5114         Here, we do not care about functions, as they are invalid anyway
5115         for a parameter of type pointer-to-object.  */
5116
5117       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5118         /* Non-type template parameters are OK.  */
5119         ;
5120       else if (TREE_CODE (expr) != ADDR_EXPR
5121                && TREE_CODE (expr_type) != ARRAY_TYPE)
5122         {
5123           if (TREE_CODE (expr) == VAR_DECL)
5124             {
5125               error ("%qD is not a valid template argument "
5126                      "because %qD is a variable, not the address of "
5127                      "a variable",
5128                      expr, expr);
5129               return NULL_TREE;
5130             }
5131           /* Other values, like integer constants, might be valid
5132              non-type arguments of some other type.  */
5133           return error_mark_node;
5134         }
5135       else
5136         {
5137           tree decl;
5138
5139           decl = ((TREE_CODE (expr) == ADDR_EXPR)
5140                   ? TREE_OPERAND (expr, 0) : expr);
5141           if (TREE_CODE (decl) != VAR_DECL)
5142             {
5143               error ("%qE is not a valid template argument of type %qT "
5144                      "because %qE is not a variable",
5145                      expr, type, decl);
5146               return NULL_TREE;
5147             }
5148           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
5149             {
5150               error ("%qE is not a valid template argument of type %qT "
5151                      "because %qD does not have external linkage",
5152                      expr, type, decl);
5153               return NULL_TREE;
5154             }
5155         }
5156
5157       expr = decay_conversion (expr);
5158       if (expr == error_mark_node)
5159         return error_mark_node;
5160
5161       expr = perform_qualification_conversions (type, expr);
5162       if (expr == error_mark_node)
5163         return error_mark_node;
5164     }
5165   /* [temp.arg.nontype]/5, bullet 3
5166
5167      For a non-type template-parameter of type reference to object, no
5168      conversions apply. The type referred to by the reference may be more
5169      cv-qualified than the (otherwise identical) type of the
5170      template-argument. The template-parameter is bound directly to the
5171      template-argument, which must be an lvalue.  */
5172   else if (TYPE_REF_OBJ_P (type))
5173     {
5174       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5175                                                       expr_type))
5176         return error_mark_node;
5177
5178       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5179         {
5180           error ("%qE is not a valid template argument for type %qT "
5181                  "because of conflicts in cv-qualification", expr, type);
5182           return NULL_TREE;
5183         }
5184
5185       if (!real_lvalue_p (expr))
5186         {
5187           error ("%qE is not a valid template argument for type %qT "
5188                  "because it is not an lvalue", expr, type);
5189           return NULL_TREE;
5190         }
5191
5192       /* [temp.arg.nontype]/1
5193
5194          A template-argument for a non-type, non-template template-parameter
5195          shall be one of: [...]
5196
5197          -- the address of an object or function with external linkage.  */
5198       if (TREE_CODE (expr) == INDIRECT_REF
5199           && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5200         {
5201           expr = TREE_OPERAND (expr, 0);
5202           if (DECL_P (expr))
5203             {
5204               error ("%q#D is not a valid template argument for type %qT "
5205                      "because a reference variable does not have a constant "
5206                      "address", expr, type);
5207               return NULL_TREE;
5208             }
5209         }
5210
5211       if (!DECL_P (expr))
5212         {
5213           error ("%qE is not a valid template argument for type %qT "
5214                  "because it is not an object with external linkage",
5215                  expr, type);
5216           return NULL_TREE;
5217         }
5218
5219       if (!DECL_EXTERNAL_LINKAGE_P (expr))
5220         {
5221           error ("%qE is not a valid template argument for type %qT "
5222                  "because object %qD has not external linkage",
5223                  expr, type, expr);
5224           return NULL_TREE;
5225         }
5226
5227       expr = build_nop (type, build_address (expr));
5228     }
5229   /* [temp.arg.nontype]/5, bullet 4
5230
5231      For a non-type template-parameter of type pointer to function, only
5232      the function-to-pointer conversion (_conv.func_) is applied. If the
5233      template-argument represents a set of overloaded functions (or a
5234      pointer to such), the matching function is selected from the set
5235      (_over.over_).  */
5236   else if (TYPE_PTRFN_P (type))
5237     {
5238       /* If the argument is a template-id, we might not have enough
5239          context information to decay the pointer.  */
5240       if (!type_unknown_p (expr_type))
5241         {
5242           expr = decay_conversion (expr);
5243           if (expr == error_mark_node)
5244             return error_mark_node;
5245         }
5246
5247       expr = convert_nontype_argument_function (type, expr);
5248       if (!expr || expr == error_mark_node)
5249         return expr;
5250
5251       if (TREE_CODE (expr) != ADDR_EXPR)
5252         {
5253           error ("%qE is not a valid template argument for type %qT", expr, type);
5254           error ("it must be the address of a function with external linkage");
5255           return NULL_TREE;
5256         }
5257     }
5258   /* [temp.arg.nontype]/5, bullet 5
5259
5260      For a non-type template-parameter of type reference to function, no
5261      conversions apply. If the template-argument represents a set of
5262      overloaded functions, the matching function is selected from the set
5263      (_over.over_).  */
5264   else if (TYPE_REFFN_P (type))
5265     {
5266       if (TREE_CODE (expr) == ADDR_EXPR)
5267         {
5268           error ("%qE is not a valid template argument for type %qT "
5269                  "because it is a pointer", expr, type);
5270           inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
5271           return NULL_TREE;
5272         }
5273
5274       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
5275       if (!expr || expr == error_mark_node)
5276         return expr;
5277
5278       expr = build_nop (type, build_address (expr));
5279     }
5280   /* [temp.arg.nontype]/5, bullet 6
5281
5282      For a non-type template-parameter of type pointer to member function,
5283      no conversions apply. If the template-argument represents a set of
5284      overloaded member functions, the matching member function is selected
5285      from the set (_over.over_).  */
5286   else if (TYPE_PTRMEMFUNC_P (type))
5287     {
5288       expr = instantiate_type (type, expr, tf_none);
5289       if (expr == error_mark_node)
5290         return error_mark_node;
5291
5292       /* [temp.arg.nontype] bullet 1 says the pointer to member
5293          expression must be a pointer-to-member constant.  */
5294       if (!check_valid_ptrmem_cst_expr (type, expr))
5295         return error_mark_node;
5296
5297       /* There is no way to disable standard conversions in
5298          resolve_address_of_overloaded_function (called by
5299          instantiate_type). It is possible that the call succeeded by
5300          converting &B::I to &D::I (where B is a base of D), so we need
5301          to reject this conversion here.
5302
5303          Actually, even if there was a way to disable standard conversions,
5304          it would still be better to reject them here so that we can
5305          provide a superior diagnostic.  */
5306       if (!same_type_p (TREE_TYPE (expr), type))
5307         {
5308           error ("%qE is not a valid template argument for type %qT "
5309                  "because it is of type %qT", expr, type,
5310                  TREE_TYPE (expr));
5311           /* If we are just one standard conversion off, explain.  */
5312           if (can_convert (type, TREE_TYPE (expr)))
5313             inform (input_location,
5314                     "standard conversions are not allowed in this context");
5315           return NULL_TREE;
5316         }
5317     }
5318   /* [temp.arg.nontype]/5, bullet 7
5319
5320      For a non-type template-parameter of type pointer to data member,
5321      qualification conversions (_conv.qual_) are applied.  */
5322   else if (TYPE_PTRMEM_P (type))
5323     {
5324       /* [temp.arg.nontype] bullet 1 says the pointer to member
5325          expression must be a pointer-to-member constant.  */
5326       if (!check_valid_ptrmem_cst_expr (type, expr))
5327         return error_mark_node;
5328
5329       expr = perform_qualification_conversions (type, expr);
5330       if (expr == error_mark_node)
5331         return expr;
5332     }
5333   /* A template non-type parameter must be one of the above.  */
5334   else
5335     gcc_unreachable ();
5336
5337   /* Sanity check: did we actually convert the argument to the
5338      right type?  */
5339   gcc_assert (same_type_ignoring_top_level_qualifiers_p
5340               (type, TREE_TYPE (expr)));
5341   return expr;
5342 }
5343
5344 /* Subroutine of coerce_template_template_parms, which returns 1 if
5345    PARM_PARM and ARG_PARM match using the rule for the template
5346    parameters of template template parameters. Both PARM and ARG are
5347    template parameters; the rest of the arguments are the same as for
5348    coerce_template_template_parms.
5349  */
5350 static int
5351 coerce_template_template_parm (tree parm,
5352                               tree arg,
5353                               tsubst_flags_t complain,
5354                               tree in_decl,
5355                               tree outer_args)
5356 {
5357   if (arg == NULL_TREE || arg == error_mark_node
5358       || parm == NULL_TREE || parm == error_mark_node)
5359     return 0;
5360   
5361   if (TREE_CODE (arg) != TREE_CODE (parm))
5362     return 0;
5363   
5364   switch (TREE_CODE (parm))
5365     {
5366     case TEMPLATE_DECL:
5367       /* We encounter instantiations of templates like
5368          template <template <template <class> class> class TT>
5369          class C;  */
5370       {
5371         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5372         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5373         
5374         if (!coerce_template_template_parms
5375             (parmparm, argparm, complain, in_decl, outer_args))
5376           return 0;
5377       }
5378       /* Fall through.  */
5379       
5380     case TYPE_DECL:
5381       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
5382           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
5383         /* Argument is a parameter pack but parameter is not.  */
5384         return 0;
5385       break;
5386       
5387     case PARM_DECL:
5388       /* The tsubst call is used to handle cases such as
5389          
5390            template <int> class C {};
5391            template <class T, template <T> class TT> class D {};
5392            D<int, C> d;
5393
5394          i.e. the parameter list of TT depends on earlier parameters.  */
5395       if (!uses_template_parms (TREE_TYPE (arg))
5396           && !same_type_p
5397                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
5398                  TREE_TYPE (arg)))
5399         return 0;
5400       
5401       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
5402           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
5403         /* Argument is a parameter pack but parameter is not.  */
5404         return 0;
5405       
5406       break;
5407
5408     default:
5409       gcc_unreachable ();
5410     }
5411
5412   return 1;
5413 }
5414
5415
5416 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
5417    template template parameters.  Both PARM_PARMS and ARG_PARMS are
5418    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
5419    or PARM_DECL.
5420
5421    Consider the example:
5422      template <class T> class A;
5423      template<template <class U> class TT> class B;
5424
5425    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
5426    the parameters to A, and OUTER_ARGS contains A.  */
5427
5428 static int
5429 coerce_template_template_parms (tree parm_parms,
5430                                 tree arg_parms,
5431                                 tsubst_flags_t complain,
5432                                 tree in_decl,
5433                                 tree outer_args)
5434 {
5435   int nparms, nargs, i;
5436   tree parm, arg;
5437   int variadic_p = 0;
5438
5439   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
5440   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
5441
5442   nparms = TREE_VEC_LENGTH (parm_parms);
5443   nargs = TREE_VEC_LENGTH (arg_parms);
5444
5445   /* Determine whether we have a parameter pack at the end of the
5446      template template parameter's template parameter list.  */
5447   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
5448     {
5449       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
5450       
5451       if (parm == error_mark_node)
5452         return 0;
5453
5454       switch (TREE_CODE (parm))
5455         {
5456         case TEMPLATE_DECL:
5457         case TYPE_DECL:
5458           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
5459             variadic_p = 1;
5460           break;
5461           
5462         case PARM_DECL:
5463           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
5464             variadic_p = 1;
5465           break;
5466           
5467         default:
5468           gcc_unreachable ();
5469         }
5470     }
5471  
5472   if (nargs != nparms
5473       && !(variadic_p && nargs >= nparms - 1))
5474     return 0;
5475
5476   /* Check all of the template parameters except the parameter pack at
5477      the end (if any).  */
5478   for (i = 0; i < nparms - variadic_p; ++i)
5479     {
5480       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
5481           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
5482         continue;
5483
5484       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
5485       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
5486
5487       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
5488                                           outer_args))
5489         return 0;
5490
5491     }
5492
5493   if (variadic_p)
5494     {
5495       /* Check each of the template parameters in the template
5496          argument against the template parameter pack at the end of
5497          the template template parameter.  */
5498       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
5499         return 0;
5500
5501       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
5502
5503       for (; i < nargs; ++i)
5504         {
5505           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
5506             continue;
5507  
5508           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
5509  
5510           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
5511                                               outer_args))
5512             return 0;
5513         }
5514     }
5515
5516   return 1;
5517 }
5518
5519 /* Verifies that the deduced template arguments (in TARGS) for the
5520    template template parameters (in TPARMS) represent valid bindings,
5521    by comparing the template parameter list of each template argument
5522    to the template parameter list of its corresponding template
5523    template parameter, in accordance with DR150. This
5524    routine can only be called after all template arguments have been
5525    deduced. It will return TRUE if all of the template template
5526    parameter bindings are okay, FALSE otherwise.  */
5527 bool 
5528 template_template_parm_bindings_ok_p (tree tparms, tree targs)
5529 {
5530   int i, ntparms = TREE_VEC_LENGTH (tparms);
5531   bool ret = true;
5532
5533   /* We're dealing with template parms in this process.  */
5534   ++processing_template_decl;
5535
5536   targs = INNERMOST_TEMPLATE_ARGS (targs);
5537
5538   for (i = 0; i < ntparms; ++i)
5539     {
5540       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
5541       tree targ = TREE_VEC_ELT (targs, i);
5542
5543       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
5544         {
5545           tree packed_args = NULL_TREE;
5546           int idx, len = 1;
5547
5548           if (ARGUMENT_PACK_P (targ))
5549             {
5550               /* Look inside the argument pack.  */
5551               packed_args = ARGUMENT_PACK_ARGS (targ);
5552               len = TREE_VEC_LENGTH (packed_args);
5553             }
5554
5555           for (idx = 0; idx < len; ++idx)
5556             {
5557               tree targ_parms = NULL_TREE;
5558
5559               if (packed_args)
5560                 /* Extract the next argument from the argument
5561                    pack.  */
5562                 targ = TREE_VEC_ELT (packed_args, idx);
5563
5564               if (PACK_EXPANSION_P (targ))
5565                 /* Look at the pattern of the pack expansion.  */
5566                 targ = PACK_EXPANSION_PATTERN (targ);
5567
5568               /* Extract the template parameters from the template
5569                  argument.  */
5570               if (TREE_CODE (targ) == TEMPLATE_DECL)
5571                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
5572               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
5573                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
5574
5575               /* Verify that we can coerce the template template
5576                  parameters from the template argument to the template
5577                  parameter.  This requires an exact match.  */
5578               if (targ_parms
5579                   && !coerce_template_template_parms
5580                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
5581                         targ_parms,
5582                         tf_none,
5583                         tparm,
5584                         targs))
5585                 {
5586                   ret = false;
5587                   goto out;
5588                 }
5589             }
5590         }
5591     }
5592
5593  out:
5594
5595   --processing_template_decl;
5596   return ret;
5597 }
5598
5599 /* Convert the indicated template ARG as necessary to match the
5600    indicated template PARM.  Returns the converted ARG, or
5601    error_mark_node if the conversion was unsuccessful.  Error and
5602    warning messages are issued under control of COMPLAIN.  This
5603    conversion is for the Ith parameter in the parameter list.  ARGS is
5604    the full set of template arguments deduced so far.  */
5605
5606 static tree
5607 convert_template_argument (tree parm,
5608                            tree arg,
5609                            tree args,
5610                            tsubst_flags_t complain,
5611                            int i,
5612                            tree in_decl)
5613 {
5614   tree orig_arg;
5615   tree val;
5616   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
5617
5618   if (TREE_CODE (arg) == TREE_LIST
5619       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
5620     {
5621       /* The template argument was the name of some
5622          member function.  That's usually
5623          invalid, but static members are OK.  In any
5624          case, grab the underlying fields/functions
5625          and issue an error later if required.  */
5626       orig_arg = TREE_VALUE (arg);
5627       TREE_TYPE (arg) = unknown_type_node;
5628     }
5629
5630   orig_arg = arg;
5631
5632   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
5633   requires_type = (TREE_CODE (parm) == TYPE_DECL
5634                    || requires_tmpl_type);
5635
5636   /* When determining whether an argument pack expansion is a template,
5637      look at the pattern.  */
5638   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
5639     arg = PACK_EXPANSION_PATTERN (arg);
5640
5641   /* Deal with an injected-class-name used as a template template arg.  */
5642   if (requires_tmpl_type && CLASS_TYPE_P (arg))
5643     {
5644       tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
5645       if (TREE_CODE (t) == TEMPLATE_DECL)
5646         {
5647           if (complain & tf_warning_or_error)
5648             pedwarn (input_location, OPT_pedantic, "injected-class-name %qD"
5649                      " used as template template argument", TYPE_NAME (arg));
5650           else if (flag_pedantic_errors)
5651             t = arg;
5652
5653           arg = t;
5654         }
5655     }
5656
5657   is_tmpl_type = 
5658     ((TREE_CODE (arg) == TEMPLATE_DECL
5659       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
5660      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
5661      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
5662
5663   if (is_tmpl_type
5664       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
5665           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
5666     arg = TYPE_STUB_DECL (arg);
5667
5668   is_type = TYPE_P (arg) || is_tmpl_type;
5669
5670   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
5671       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
5672     {
5673       permerror (input_location, "to refer to a type member of a template parameter, "
5674                  "use %<typename %E%>", orig_arg);
5675
5676       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
5677                                      TREE_OPERAND (arg, 1),
5678                                      typename_type,
5679                                      complain & tf_error);
5680       arg = orig_arg;
5681       is_type = 1;
5682     }
5683   if (is_type != requires_type)
5684     {
5685       if (in_decl)
5686         {
5687           if (complain & tf_error)
5688             {
5689               error ("type/value mismatch at argument %d in template "
5690                      "parameter list for %qD",
5691                      i + 1, in_decl);
5692               if (is_type)
5693                 error ("  expected a constant of type %qT, got %qT",
5694                        TREE_TYPE (parm),
5695                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
5696               else if (requires_tmpl_type)
5697                 error ("  expected a class template, got %qE", orig_arg);
5698               else
5699                 error ("  expected a type, got %qE", orig_arg);
5700             }
5701         }
5702       return error_mark_node;
5703     }
5704   if (is_tmpl_type ^ requires_tmpl_type)
5705     {
5706       if (in_decl && (complain & tf_error))
5707         {
5708           error ("type/value mismatch at argument %d in template "
5709                  "parameter list for %qD",
5710                  i + 1, in_decl);
5711           if (is_tmpl_type)
5712             error ("  expected a type, got %qT", DECL_NAME (arg));
5713           else
5714             error ("  expected a class template, got %qT", orig_arg);
5715         }
5716       return error_mark_node;
5717     }
5718
5719   if (is_type)
5720     {
5721       if (requires_tmpl_type)
5722         {
5723           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
5724             /* The number of argument required is not known yet.
5725                Just accept it for now.  */
5726             val = TREE_TYPE (arg);
5727           else
5728             {
5729               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5730               tree argparm;
5731
5732               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5733
5734               if (coerce_template_template_parms (parmparm, argparm,
5735                                                   complain, in_decl,
5736                                                   args))
5737                 {
5738                   val = arg;
5739
5740                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
5741                      TEMPLATE_DECL.  */
5742                   if (val != error_mark_node)
5743                     {
5744                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
5745                         val = TREE_TYPE (val);
5746                       if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
5747                         val = make_pack_expansion (val);
5748                     }
5749                 }
5750               else
5751                 {
5752                   if (in_decl && (complain & tf_error))
5753                     {
5754                       error ("type/value mismatch at argument %d in "
5755                              "template parameter list for %qD",
5756                              i + 1, in_decl);
5757                       error ("  expected a template of type %qD, got %qT",
5758                              parm, orig_arg);
5759                     }
5760
5761                   val = error_mark_node;
5762                 }
5763             }
5764         }
5765       else
5766         val = orig_arg;
5767       /* We only form one instance of each template specialization.
5768          Therefore, if we use a non-canonical variant (i.e., a
5769          typedef), any future messages referring to the type will use
5770          the typedef, which is confusing if those future uses do not
5771          themselves also use the typedef.  */
5772       if (TYPE_P (val))
5773         val = strip_typedefs (val);
5774     }
5775   else
5776     {
5777       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
5778
5779       if (invalid_nontype_parm_type_p (t, complain))
5780         return error_mark_node;
5781
5782       if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
5783         {
5784           if (same_type_p (t, TREE_TYPE (orig_arg)))
5785             val = orig_arg;
5786           else
5787             {
5788               /* Not sure if this is reachable, but it doesn't hurt
5789                  to be robust.  */
5790               error ("type mismatch in nontype parameter pack");
5791               val = error_mark_node;
5792             }
5793         }
5794       else if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
5795         /* We used to call digest_init here.  However, digest_init
5796            will report errors, which we don't want when complain
5797            is zero.  More importantly, digest_init will try too
5798            hard to convert things: for example, `0' should not be
5799            converted to pointer type at this point according to
5800            the standard.  Accepting this is not merely an
5801            extension, since deciding whether or not these
5802            conversions can occur is part of determining which
5803            function template to call, or whether a given explicit
5804            argument specification is valid.  */
5805         val = convert_nontype_argument (t, orig_arg, complain);
5806       else
5807         val = orig_arg;
5808
5809       if (val == NULL_TREE)
5810         val = error_mark_node;
5811       else if (val == error_mark_node && (complain & tf_error))
5812         error ("could not convert template argument %qE to %qT",  orig_arg, t);
5813
5814       if (TREE_CODE (val) == SCOPE_REF)
5815         {
5816           /* Strip typedefs from the SCOPE_REF.  */
5817           tree type = strip_typedefs (TREE_TYPE (val));
5818           tree scope = strip_typedefs (TREE_OPERAND (val, 0));
5819           val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
5820                                       QUALIFIED_NAME_IS_TEMPLATE (val));
5821         }
5822     }
5823
5824   return val;
5825 }
5826
5827 /* Coerces the remaining template arguments in INNER_ARGS (from
5828    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
5829    Returns the coerced argument pack. PARM_IDX is the position of this
5830    parameter in the template parameter list. ARGS is the original
5831    template argument list.  */
5832 static tree
5833 coerce_template_parameter_pack (tree parms,
5834                                 int parm_idx,
5835                                 tree args,
5836                                 tree inner_args,
5837                                 int arg_idx,
5838                                 tree new_args,
5839                                 int* lost,
5840                                 tree in_decl,
5841                                 tsubst_flags_t complain)
5842 {
5843   tree parm = TREE_VEC_ELT (parms, parm_idx);
5844   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5845   tree packed_args;
5846   tree argument_pack;
5847   tree packed_types = NULL_TREE;
5848
5849   if (arg_idx > nargs)
5850     arg_idx = nargs;
5851
5852   packed_args = make_tree_vec (nargs - arg_idx);
5853
5854   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
5855       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
5856     {
5857       /* When the template parameter is a non-type template
5858          parameter pack whose type uses parameter packs, we need
5859          to look at each of the template arguments
5860          separately. Build a vector of the types for these
5861          non-type template parameters in PACKED_TYPES.  */
5862       tree expansion 
5863         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
5864       packed_types = tsubst_pack_expansion (expansion, args,
5865                                             complain, in_decl);
5866
5867       if (packed_types == error_mark_node)
5868         return error_mark_node;
5869
5870       /* Check that we have the right number of arguments.  */
5871       if (arg_idx < nargs
5872           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
5873           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
5874         {
5875           int needed_parms 
5876             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
5877           error ("wrong number of template arguments (%d, should be %d)",
5878                  nargs, needed_parms);
5879           return error_mark_node;
5880         }
5881
5882       /* If we aren't able to check the actual arguments now
5883          (because they haven't been expanded yet), we can at least
5884          verify that all of the types used for the non-type
5885          template parameter pack are, in fact, valid for non-type
5886          template parameters.  */
5887       if (arg_idx < nargs 
5888           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
5889         {
5890           int j, len = TREE_VEC_LENGTH (packed_types);
5891           for (j = 0; j < len; ++j)
5892             {
5893               tree t = TREE_VEC_ELT (packed_types, j);
5894               if (invalid_nontype_parm_type_p (t, complain))
5895                 return error_mark_node;
5896             }
5897         }
5898     }
5899
5900   /* Convert the remaining arguments, which will be a part of the
5901      parameter pack "parm".  */
5902   for (; arg_idx < nargs; ++arg_idx)
5903     {
5904       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
5905       tree actual_parm = TREE_VALUE (parm);
5906
5907       if (packed_types && !PACK_EXPANSION_P (arg))
5908         {
5909           /* When we have a vector of types (corresponding to the
5910              non-type template parameter pack that uses parameter
5911              packs in its type, as mention above), and the
5912              argument is not an expansion (which expands to a
5913              currently unknown number of arguments), clone the
5914              parm and give it the next type in PACKED_TYPES.  */
5915           actual_parm = copy_node (actual_parm);
5916           TREE_TYPE (actual_parm) = 
5917             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
5918         }
5919
5920       if (arg != error_mark_node)
5921         arg = convert_template_argument (actual_parm, 
5922                                          arg, new_args, complain, parm_idx,
5923                                          in_decl);
5924       if (arg == error_mark_node)
5925         (*lost)++;
5926       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
5927     }
5928
5929   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
5930       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
5931     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
5932   else
5933     {
5934       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
5935       TREE_TYPE (argument_pack) 
5936         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
5937       TREE_CONSTANT (argument_pack) = 1;
5938     }
5939
5940   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
5941 #ifdef ENABLE_CHECKING
5942   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
5943                                        TREE_VEC_LENGTH (packed_args));
5944 #endif
5945   return argument_pack;
5946 }
5947
5948 /* Convert all template arguments to their appropriate types, and
5949    return a vector containing the innermost resulting template
5950    arguments.  If any error occurs, return error_mark_node. Error and
5951    warning messages are issued under control of COMPLAIN.
5952
5953    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
5954    for arguments not specified in ARGS.  Otherwise, if
5955    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
5956    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
5957    USE_DEFAULT_ARGS is false, then all arguments must be specified in
5958    ARGS.  */
5959
5960 static tree
5961 coerce_template_parms (tree parms,
5962                        tree args,
5963                        tree in_decl,
5964                        tsubst_flags_t complain,
5965                        bool require_all_args,
5966                        bool use_default_args)
5967 {
5968   int nparms, nargs, parm_idx, arg_idx, lost = 0;
5969   tree inner_args;
5970   tree new_args;
5971   tree new_inner_args;
5972   int saved_unevaluated_operand;
5973   int saved_inhibit_evaluation_warnings;
5974
5975   /* When used as a boolean value, indicates whether this is a
5976      variadic template parameter list. Since it's an int, we can also
5977      subtract it from nparms to get the number of non-variadic
5978      parameters.  */
5979   int variadic_p = 0;
5980
5981   if (args == error_mark_node)
5982     return error_mark_node;
5983
5984   nparms = TREE_VEC_LENGTH (parms);
5985
5986   /* Determine if there are any parameter packs.  */
5987   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
5988     {
5989       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5990       if (template_parameter_pack_p (tparm))
5991         ++variadic_p;
5992     }
5993
5994   inner_args = INNERMOST_TEMPLATE_ARGS (args);
5995   /* If there are 0 or 1 parameter packs, we need to expand any argument
5996      packs so that we can deduce a parameter pack from some non-packed args
5997      followed by an argument pack, as in variadic85.C.  If there are more
5998      than that, we need to leave argument packs intact so the arguments are
5999      assigned to the right parameter packs.  This should only happen when
6000      dealing with a nested class inside a partial specialization of a class
6001      template, as in variadic92.C.  */
6002   if (variadic_p <= 1)
6003     inner_args = expand_template_argument_pack (inner_args);
6004
6005   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6006   if ((nargs > nparms && !variadic_p)
6007       || (nargs < nparms - variadic_p
6008           && require_all_args
6009           && (!use_default_args
6010               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6011                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6012     {
6013       if (complain & tf_error)
6014         {
6015           if (variadic_p)
6016             {
6017               --nparms;
6018               error ("wrong number of template arguments "
6019                      "(%d, should be %d or more)", nargs, nparms);
6020             }
6021           else
6022              error ("wrong number of template arguments "
6023                     "(%d, should be %d)", nargs, nparms);
6024
6025           if (in_decl)
6026             error ("provided for %q+D", in_decl);
6027         }
6028
6029       return error_mark_node;
6030     }
6031
6032   /* We need to evaluate the template arguments, even though this
6033      template-id may be nested within a "sizeof".  */
6034   saved_unevaluated_operand = cp_unevaluated_operand;
6035   cp_unevaluated_operand = 0;
6036   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6037   c_inhibit_evaluation_warnings = 0;
6038   new_inner_args = make_tree_vec (nparms);
6039   new_args = add_outermost_template_args (args, new_inner_args);
6040   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6041     {
6042       tree arg;
6043       tree parm;
6044
6045       /* Get the Ith template parameter.  */
6046       parm = TREE_VEC_ELT (parms, parm_idx);
6047  
6048       if (parm == error_mark_node)
6049       {
6050         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6051         continue;
6052       }
6053
6054       /* Calculate the next argument.  */
6055       if (arg_idx < nargs)
6056         arg = TREE_VEC_ELT (inner_args, arg_idx);
6057       else
6058         arg = NULL_TREE;
6059
6060       if (template_parameter_pack_p (TREE_VALUE (parm))
6061           && !(arg && ARGUMENT_PACK_P (arg)))
6062         {
6063           /* All remaining arguments will be placed in the
6064              template parameter pack PARM.  */
6065           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
6066                                                 inner_args, arg_idx,
6067                                                 new_args, &lost,
6068                                                 in_decl, complain);
6069
6070           /* Store this argument.  */
6071           if (arg == error_mark_node)
6072             lost++;
6073           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
6074
6075           /* We are done with all of the arguments.  */
6076           arg_idx = nargs;
6077           
6078           continue;
6079         }
6080       else if (arg)
6081         {
6082           if (PACK_EXPANSION_P (arg))
6083             {
6084               if (complain & tf_error)
6085                 {
6086                   /* FIXME this restriction was removed by N2555; see
6087                      bug 35722.  */
6088                   /* If ARG is a pack expansion, but PARM is not a
6089                      template parameter pack (if it were, we would have
6090                      handled it above), we're trying to expand into a
6091                      fixed-length argument list.  */
6092                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
6093                     sorry ("cannot expand %<%E%> into a fixed-length "
6094                            "argument list", arg);
6095                   else
6096                     sorry ("cannot expand %<%T%> into a fixed-length "
6097                            "argument list", arg);
6098                 }
6099               return error_mark_node;
6100             }
6101         }
6102       else if (require_all_args)
6103         {
6104           /* There must be a default arg in this case.  */
6105           arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
6106                                      complain, in_decl);
6107           /* The position of the first default template argument,
6108              is also the number of non-defaulted arguments in NEW_INNER_ARGS.
6109              Record that.  */
6110           if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6111             SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args, arg_idx);
6112         }
6113       else
6114         break;
6115
6116       if (arg == error_mark_node)
6117         {
6118           if (complain & tf_error)
6119             error ("template argument %d is invalid", arg_idx + 1);
6120         }
6121       else if (!arg)
6122         /* This only occurs if there was an error in the template
6123            parameter list itself (which we would already have
6124            reported) that we are trying to recover from, e.g., a class
6125            template with a parameter list such as
6126            template<typename..., typename>.  */
6127         return error_mark_node;
6128       else
6129         arg = convert_template_argument (TREE_VALUE (parm),
6130                                          arg, new_args, complain, 
6131                                          parm_idx, in_decl);
6132
6133       if (arg == error_mark_node)
6134         lost++;
6135       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
6136     }
6137   cp_unevaluated_operand = saved_unevaluated_operand;
6138   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
6139
6140   if (lost)
6141     return error_mark_node;
6142
6143 #ifdef ENABLE_CHECKING
6144   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6145     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
6146                                          TREE_VEC_LENGTH (new_inner_args));
6147 #endif
6148
6149   return new_inner_args;
6150 }
6151
6152 /* Returns 1 if template args OT and NT are equivalent.  */
6153
6154 static int
6155 template_args_equal (tree ot, tree nt)
6156 {
6157   if (nt == ot)
6158     return 1;
6159
6160   if (TREE_CODE (nt) == TREE_VEC)
6161     /* For member templates */
6162     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
6163   else if (PACK_EXPANSION_P (ot))
6164     return PACK_EXPANSION_P (nt) 
6165       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
6166                               PACK_EXPANSION_PATTERN (nt));
6167   else if (ARGUMENT_PACK_P (ot))
6168     {
6169       int i, len;
6170       tree opack, npack;
6171
6172       if (!ARGUMENT_PACK_P (nt))
6173         return 0;
6174
6175       opack = ARGUMENT_PACK_ARGS (ot);
6176       npack = ARGUMENT_PACK_ARGS (nt);
6177       len = TREE_VEC_LENGTH (opack);
6178       if (TREE_VEC_LENGTH (npack) != len)
6179         return 0;
6180       for (i = 0; i < len; ++i)
6181         if (!template_args_equal (TREE_VEC_ELT (opack, i),
6182                                   TREE_VEC_ELT (npack, i)))
6183           return 0;
6184       return 1;
6185     }
6186   else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
6187     {
6188       /* We get here probably because we are in the middle of substituting
6189          into the pattern of a pack expansion. In that case the
6190          ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
6191          interested in. So we want to use the initial pack argument for
6192          the comparison.  */
6193       ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
6194       if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
6195         nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
6196       return template_args_equal (ot, nt);
6197     }
6198   else if (TYPE_P (nt))
6199     return TYPE_P (ot) && same_type_p (ot, nt);
6200   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
6201     return 0;
6202   else
6203     return cp_tree_equal (ot, nt);
6204 }
6205
6206 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
6207    of template arguments.  Returns 0 otherwise.  */
6208
6209 int
6210 comp_template_args (tree oldargs, tree newargs)
6211 {
6212   int i;
6213
6214   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
6215     return 0;
6216
6217   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
6218     {
6219       tree nt = TREE_VEC_ELT (newargs, i);
6220       tree ot = TREE_VEC_ELT (oldargs, i);
6221
6222       if (! template_args_equal (ot, nt))
6223         return 0;
6224     }
6225   return 1;
6226 }
6227
6228 static void
6229 add_pending_template (tree d)
6230 {
6231   tree ti = (TYPE_P (d)
6232              ? CLASSTYPE_TEMPLATE_INFO (d)
6233              : DECL_TEMPLATE_INFO (d));
6234   struct pending_template *pt;
6235   int level;
6236
6237   if (TI_PENDING_TEMPLATE_FLAG (ti))
6238     return;
6239
6240   /* We are called both from instantiate_decl, where we've already had a
6241      tinst_level pushed, and instantiate_template, where we haven't.
6242      Compensate.  */
6243   level = !current_tinst_level || current_tinst_level->decl != d;
6244
6245   if (level)
6246     push_tinst_level (d);
6247
6248   pt = ggc_alloc_pending_template ();
6249   pt->next = NULL;
6250   pt->tinst = current_tinst_level;
6251   if (last_pending_template)
6252     last_pending_template->next = pt;
6253   else
6254     pending_templates = pt;
6255
6256   last_pending_template = pt;
6257
6258   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
6259
6260   if (level)
6261     pop_tinst_level ();
6262 }
6263
6264
6265 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
6266    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
6267    documentation for TEMPLATE_ID_EXPR.  */
6268
6269 tree
6270 lookup_template_function (tree fns, tree arglist)
6271 {
6272   tree type;
6273
6274   if (fns == error_mark_node || arglist == error_mark_node)
6275     return error_mark_node;
6276
6277   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
6278   gcc_assert (fns && (is_overloaded_fn (fns)
6279                       || TREE_CODE (fns) == IDENTIFIER_NODE));
6280
6281   if (BASELINK_P (fns))
6282     {
6283       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
6284                                          unknown_type_node,
6285                                          BASELINK_FUNCTIONS (fns),
6286                                          arglist);
6287       return fns;
6288     }
6289
6290   type = TREE_TYPE (fns);
6291   if (TREE_CODE (fns) == OVERLOAD || !type)
6292     type = unknown_type_node;
6293
6294   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
6295 }
6296
6297 /* Within the scope of a template class S<T>, the name S gets bound
6298    (in build_self_reference) to a TYPE_DECL for the class, not a
6299    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
6300    or one of its enclosing classes, and that type is a template,
6301    return the associated TEMPLATE_DECL.  Otherwise, the original
6302    DECL is returned.
6303
6304    Also handle the case when DECL is a TREE_LIST of ambiguous
6305    injected-class-names from different bases.  */
6306
6307 tree
6308 maybe_get_template_decl_from_type_decl (tree decl)
6309 {
6310   if (decl == NULL_TREE)
6311     return decl;
6312
6313   /* DR 176: A lookup that finds an injected-class-name (10.2
6314      [class.member.lookup]) can result in an ambiguity in certain cases
6315      (for example, if it is found in more than one base class). If all of
6316      the injected-class-names that are found refer to specializations of
6317      the same class template, and if the name is followed by a
6318      template-argument-list, the reference refers to the class template
6319      itself and not a specialization thereof, and is not ambiguous.  */
6320   if (TREE_CODE (decl) == TREE_LIST)
6321     {
6322       tree t, tmpl = NULL_TREE;
6323       for (t = decl; t; t = TREE_CHAIN (t))
6324         {
6325           tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
6326           if (!tmpl)
6327             tmpl = elt;
6328           else if (tmpl != elt)
6329             break;
6330         }
6331       if (tmpl && t == NULL_TREE)
6332         return tmpl;
6333       else
6334         return decl;
6335     }
6336
6337   return (decl != NULL_TREE
6338           && DECL_SELF_REFERENCE_P (decl)
6339           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
6340     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
6341 }
6342
6343 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
6344    parameters, find the desired type.
6345
6346    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
6347
6348    IN_DECL, if non-NULL, is the template declaration we are trying to
6349    instantiate.
6350
6351    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
6352    the class we are looking up.
6353
6354    Issue error and warning messages under control of COMPLAIN.
6355
6356    If the template class is really a local class in a template
6357    function, then the FUNCTION_CONTEXT is the function in which it is
6358    being instantiated.
6359
6360    ??? Note that this function is currently called *twice* for each
6361    template-id: the first time from the parser, while creating the
6362    incomplete type (finish_template_type), and the second type during the
6363    real instantiation (instantiate_template_class). This is surely something
6364    that we want to avoid. It also causes some problems with argument
6365    coercion (see convert_nontype_argument for more information on this).  */
6366
6367 tree
6368 lookup_template_class (tree d1,
6369                        tree arglist,
6370                        tree in_decl,
6371                        tree context,
6372                        int entering_scope,
6373                        tsubst_flags_t complain)
6374 {
6375   tree templ = NULL_TREE, parmlist;
6376   tree t;
6377   spec_entry **slot;
6378   spec_entry *entry;
6379   spec_entry elt;
6380   hashval_t hash;
6381
6382   timevar_push (TV_NAME_LOOKUP);
6383
6384   if (TREE_CODE (d1) == IDENTIFIER_NODE)
6385     {
6386       tree value = innermost_non_namespace_value (d1);
6387       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
6388         templ = value;
6389       else
6390         {
6391           if (context)
6392             push_decl_namespace (context);
6393           templ = lookup_name (d1);
6394           templ = maybe_get_template_decl_from_type_decl (templ);
6395           if (context)
6396             pop_decl_namespace ();
6397         }
6398       if (templ)
6399         context = DECL_CONTEXT (templ);
6400     }
6401   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
6402     {
6403       tree type = TREE_TYPE (d1);
6404
6405       /* If we are declaring a constructor, say A<T>::A<T>, we will get
6406          an implicit typename for the second A.  Deal with it.  */
6407       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
6408         type = TREE_TYPE (type);
6409
6410       if (CLASSTYPE_TEMPLATE_INFO (type))
6411         {
6412           templ = CLASSTYPE_TI_TEMPLATE (type);
6413           d1 = DECL_NAME (templ);
6414         }
6415     }
6416   else if (TREE_CODE (d1) == ENUMERAL_TYPE
6417            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
6418     {
6419       templ = TYPE_TI_TEMPLATE (d1);
6420       d1 = DECL_NAME (templ);
6421     }
6422   else if (TREE_CODE (d1) == TEMPLATE_DECL
6423            && DECL_TEMPLATE_RESULT (d1)
6424            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
6425     {
6426       templ = d1;
6427       d1 = DECL_NAME (templ);
6428       context = DECL_CONTEXT (templ);
6429     }
6430
6431   /* Issue an error message if we didn't find a template.  */
6432   if (! templ)
6433     {
6434       if (complain & tf_error)
6435         error ("%qT is not a template", d1);
6436       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6437     }
6438
6439   if (TREE_CODE (templ) != TEMPLATE_DECL
6440          /* Make sure it's a user visible template, if it was named by
6441             the user.  */
6442       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
6443           && !PRIMARY_TEMPLATE_P (templ)))
6444     {
6445       if (complain & tf_error)
6446         {
6447           error ("non-template type %qT used as a template", d1);
6448           if (in_decl)
6449             error ("for template declaration %q+D", in_decl);
6450         }
6451       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6452     }
6453
6454   complain &= ~tf_user;
6455
6456   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
6457     {
6458       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
6459          template arguments */
6460
6461       tree parm;
6462       tree arglist2;
6463       tree outer;
6464
6465       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
6466
6467       /* Consider an example where a template template parameter declared as
6468
6469            template <class T, class U = std::allocator<T> > class TT
6470
6471          The template parameter level of T and U are one level larger than
6472          of TT.  To proper process the default argument of U, say when an
6473          instantiation `TT<int>' is seen, we need to build the full
6474          arguments containing {int} as the innermost level.  Outer levels,
6475          available when not appearing as default template argument, can be
6476          obtained from the arguments of the enclosing template.
6477
6478          Suppose that TT is later substituted with std::vector.  The above
6479          instantiation is `TT<int, std::allocator<T> >' with TT at
6480          level 1, and T at level 2, while the template arguments at level 1
6481          becomes {std::vector} and the inner level 2 is {int}.  */
6482
6483       outer = DECL_CONTEXT (templ);
6484       if (outer)
6485         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
6486       else if (current_template_parms)
6487         /* This is an argument of the current template, so we haven't set
6488            DECL_CONTEXT yet.  */
6489         outer = current_template_args ();
6490
6491       if (outer)
6492         arglist = add_to_template_args (outer, arglist);
6493
6494       arglist2 = coerce_template_parms (parmlist, arglist, templ,
6495                                         complain,
6496                                         /*require_all_args=*/true,
6497                                         /*use_default_args=*/true);
6498       if (arglist2 == error_mark_node
6499           || (!uses_template_parms (arglist2)
6500               && check_instantiated_args (templ, arglist2, complain)))
6501         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6502
6503       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
6504       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
6505     }
6506   else
6507     {
6508       tree template_type = TREE_TYPE (templ);
6509       tree gen_tmpl;
6510       tree type_decl;
6511       tree found = NULL_TREE;
6512       int arg_depth;
6513       int parm_depth;
6514       int is_dependent_type;
6515       int use_partial_inst_tmpl = false;
6516
6517       gen_tmpl = most_general_template (templ);
6518       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
6519       parm_depth = TMPL_PARMS_DEPTH (parmlist);
6520       arg_depth = TMPL_ARGS_DEPTH (arglist);
6521
6522       if (arg_depth == 1 && parm_depth > 1)
6523         {
6524           /* We've been given an incomplete set of template arguments.
6525              For example, given:
6526
6527                template <class T> struct S1 {
6528                  template <class U> struct S2 {};
6529                  template <class U> struct S2<U*> {};
6530                 };
6531
6532              we will be called with an ARGLIST of `U*', but the
6533              TEMPLATE will be `template <class T> template
6534              <class U> struct S1<T>::S2'.  We must fill in the missing
6535              arguments.  */
6536           arglist
6537             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
6538                                            arglist);
6539           arg_depth = TMPL_ARGS_DEPTH (arglist);
6540         }
6541
6542       /* Now we should have enough arguments.  */
6543       gcc_assert (parm_depth == arg_depth);
6544
6545       /* From here on, we're only interested in the most general
6546          template.  */
6547
6548       /* Calculate the BOUND_ARGS.  These will be the args that are
6549          actually tsubst'd into the definition to create the
6550          instantiation.  */
6551       if (parm_depth > 1)
6552         {
6553           /* We have multiple levels of arguments to coerce, at once.  */
6554           int i;
6555           int saved_depth = TMPL_ARGS_DEPTH (arglist);
6556
6557           tree bound_args = make_tree_vec (parm_depth);
6558
6559           for (i = saved_depth,
6560                  t = DECL_TEMPLATE_PARMS (gen_tmpl);
6561                i > 0 && t != NULL_TREE;
6562                --i, t = TREE_CHAIN (t))
6563             {
6564               tree a;
6565               if (i == saved_depth)
6566                 a = coerce_template_parms (TREE_VALUE (t),
6567                                            arglist, gen_tmpl,
6568                                            complain,
6569                                            /*require_all_args=*/true,
6570                                            /*use_default_args=*/true);
6571               else
6572                 /* Outer levels should have already been coerced.  */
6573                 a = TMPL_ARGS_LEVEL (arglist, i);
6574
6575               /* Don't process further if one of the levels fails.  */
6576               if (a == error_mark_node)
6577                 {
6578                   /* Restore the ARGLIST to its full size.  */
6579                   TREE_VEC_LENGTH (arglist) = saved_depth;
6580                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6581                 }
6582
6583               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
6584
6585               /* We temporarily reduce the length of the ARGLIST so
6586                  that coerce_template_parms will see only the arguments
6587                  corresponding to the template parameters it is
6588                  examining.  */
6589               TREE_VEC_LENGTH (arglist)--;
6590             }
6591
6592           /* Restore the ARGLIST to its full size.  */
6593           TREE_VEC_LENGTH (arglist) = saved_depth;
6594
6595           arglist = bound_args;
6596         }
6597       else
6598         arglist
6599           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
6600                                    INNERMOST_TEMPLATE_ARGS (arglist),
6601                                    gen_tmpl,
6602                                    complain,
6603                                    /*require_all_args=*/true,
6604                                    /*use_default_args=*/true);
6605
6606       if (arglist == error_mark_node)
6607         /* We were unable to bind the arguments.  */
6608         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6609
6610       /* In the scope of a template class, explicit references to the
6611          template class refer to the type of the template, not any
6612          instantiation of it.  For example, in:
6613
6614            template <class T> class C { void f(C<T>); }
6615
6616          the `C<T>' is just the same as `C'.  Outside of the
6617          class, however, such a reference is an instantiation.  */
6618       if ((entering_scope
6619            || !PRIMARY_TEMPLATE_P (gen_tmpl)
6620            || currently_open_class (template_type))
6621           /* comp_template_args is expensive, check it last.  */
6622           && comp_template_args (TYPE_TI_ARGS (template_type),
6623                                  arglist))
6624         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, template_type);
6625
6626       /* If we already have this specialization, return it.  */
6627       elt.tmpl = gen_tmpl;
6628       elt.args = arglist;
6629       hash = hash_specialization (&elt);
6630       entry = (spec_entry *) htab_find_with_hash (type_specializations,
6631                                                   &elt, hash);
6632
6633       if (entry)
6634         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, entry->spec);
6635
6636       is_dependent_type = uses_template_parms (arglist);
6637
6638       /* If the deduced arguments are invalid, then the binding
6639          failed.  */
6640       if (!is_dependent_type
6641           && check_instantiated_args (gen_tmpl,
6642                                       INNERMOST_TEMPLATE_ARGS (arglist),
6643                                       complain))
6644         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
6645
6646       if (!is_dependent_type
6647           && !PRIMARY_TEMPLATE_P (gen_tmpl)
6648           && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
6649           && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
6650         {
6651           found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
6652                                       DECL_NAME (gen_tmpl),
6653                                       /*tag_scope=*/ts_global);
6654           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
6655         }
6656
6657       context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
6658                         complain, in_decl);
6659       if (!context)
6660         context = global_namespace;
6661
6662       /* Create the type.  */
6663       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
6664         {
6665           if (!is_dependent_type)
6666             {
6667               set_current_access_from_decl (TYPE_NAME (template_type));
6668               t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
6669                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
6670                                       arglist, complain, in_decl),
6671                               SCOPED_ENUM_P (template_type), NULL);
6672             }
6673           else
6674             {
6675               /* We don't want to call start_enum for this type, since
6676                  the values for the enumeration constants may involve
6677                  template parameters.  And, no one should be interested
6678                  in the enumeration constants for such a type.  */
6679               t = cxx_make_type (ENUMERAL_TYPE);
6680               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
6681             }
6682           SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
6683         }
6684       else
6685         {
6686           t = make_class_type (TREE_CODE (template_type));
6687           CLASSTYPE_DECLARED_CLASS (t)
6688             = CLASSTYPE_DECLARED_CLASS (template_type);
6689           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
6690           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
6691
6692           /* A local class.  Make sure the decl gets registered properly.  */
6693           if (context == current_function_decl)
6694             pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
6695
6696           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
6697             /* This instantiation is another name for the primary
6698                template type. Set the TYPE_CANONICAL field
6699                appropriately. */
6700             TYPE_CANONICAL (t) = template_type;
6701           else if (any_template_arguments_need_structural_equality_p (arglist))
6702             /* Some of the template arguments require structural
6703                equality testing, so this template class requires
6704                structural equality testing. */
6705             SET_TYPE_STRUCTURAL_EQUALITY (t);
6706         }
6707
6708       /* If we called start_enum or pushtag above, this information
6709          will already be set up.  */
6710       if (!TYPE_NAME (t))
6711         {
6712           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
6713
6714           type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
6715           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
6716           DECL_SOURCE_LOCATION (type_decl)
6717             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
6718         }
6719       else
6720         type_decl = TYPE_NAME (t);
6721
6722       TREE_PRIVATE (type_decl)
6723         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
6724       TREE_PROTECTED (type_decl)
6725         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
6726       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
6727         {
6728           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
6729           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
6730         }
6731
6732       /* Let's consider the explicit specialization of a member
6733          of a class template specialization that is implicitely instantiated,
6734          e.g.:
6735              template<class T>
6736              struct S
6737              {
6738                template<class U> struct M {}; //#0
6739              };
6740
6741              template<>
6742              template<>
6743              struct S<int>::M<char> //#1
6744              {
6745                int i;
6746              };
6747         [temp.expl.spec]/4 says this is valid.
6748
6749         In this case, when we write:
6750         S<int>::M<char> m;
6751
6752         M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
6753         the one of #0.
6754
6755         When we encounter #1, we want to store the partial instantiation
6756         of M (template<class T> S<int>::M<T>) in it's CLASSTYPE_TI_TEMPLATE.
6757
6758         For all cases other than this "explicit specialization of member of a
6759         class template", we just want to store the most general template into
6760         the CLASSTYPE_TI_TEMPLATE of M.
6761
6762         This case of "explicit specialization of member of a class template"
6763         only happens when:
6764         1/ the enclosing class is an instantiation of, and therefore not
6765         the same as, the context of the most general template, and
6766         2/ we aren't looking at the partial instantiation itself, i.e.
6767         the innermost arguments are not the same as the innermost parms of
6768         the most general template.
6769
6770         So it's only when 1/ and 2/ happens that we want to use the partial
6771         instantiation of the member template in lieu of its most general
6772         template.  */
6773
6774       if (PRIMARY_TEMPLATE_P (gen_tmpl)
6775           && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
6776           /* the enclosing class must be an instantiation...  */
6777           && CLASS_TYPE_P (context)
6778           && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
6779         {
6780           tree partial_inst_args;
6781           TREE_VEC_LENGTH (arglist)--;
6782           ++processing_template_decl;
6783           partial_inst_args =
6784             tsubst (INNERMOST_TEMPLATE_ARGS
6785                         (CLASSTYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
6786                     arglist, complain, NULL_TREE);
6787           --processing_template_decl;
6788           TREE_VEC_LENGTH (arglist)++;
6789           use_partial_inst_tmpl =
6790             /*...and we must not be looking at the partial instantiation
6791              itself. */
6792             !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
6793                                  partial_inst_args);
6794         }
6795
6796       if (!use_partial_inst_tmpl)
6797         /* This case is easy; there are no member templates involved.  */
6798         found = gen_tmpl;
6799       else
6800         {
6801           /* This is a full instantiation of a member template.  Find
6802              the partial instantiation of which this is an instance.  */
6803
6804           /* Temporarily reduce by one the number of levels in the ARGLIST
6805              so as to avoid comparing the last set of arguments.  */
6806           TREE_VEC_LENGTH (arglist)--;
6807           found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
6808           TREE_VEC_LENGTH (arglist)++;
6809           found = CLASSTYPE_TI_TEMPLATE (found);
6810         }
6811
6812       SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
6813
6814       elt.spec = t;
6815       slot = (spec_entry **) htab_find_slot_with_hash (type_specializations,
6816                                                        &elt, hash, INSERT);
6817       *slot = ggc_alloc_spec_entry ();
6818       **slot = elt;
6819
6820       /* Note this use of the partial instantiation so we can check it
6821          later in maybe_process_partial_specialization.  */
6822       DECL_TEMPLATE_INSTANTIATIONS (templ)
6823         = tree_cons (arglist, t,
6824                      DECL_TEMPLATE_INSTANTIATIONS (templ));
6825
6826       if (TREE_CODE (t) == ENUMERAL_TYPE && !is_dependent_type)
6827         /* Now that the type has been registered on the instantiations
6828            list, we set up the enumerators.  Because the enumeration
6829            constants may involve the enumeration type itself, we make
6830            sure to register the type first, and then create the
6831            constants.  That way, doing tsubst_expr for the enumeration
6832            constants won't result in recursive calls here; we'll find
6833            the instantiation and exit above.  */
6834         tsubst_enum (template_type, t, arglist);
6835
6836       if (is_dependent_type)
6837         /* If the type makes use of template parameters, the
6838            code that generates debugging information will crash.  */
6839         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
6840
6841       /* Possibly limit visibility based on template args.  */
6842       TREE_PUBLIC (type_decl) = 1;
6843       determine_visibility (type_decl);
6844
6845       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
6846     }
6847   timevar_pop (TV_NAME_LOOKUP);
6848 }
6849 \f
6850 struct pair_fn_data
6851 {
6852   tree_fn_t fn;
6853   void *data;
6854   /* True when we should also visit template parameters that occur in
6855      non-deduced contexts.  */
6856   bool include_nondeduced_p;
6857   struct pointer_set_t *visited;
6858 };
6859
6860 /* Called from for_each_template_parm via walk_tree.  */
6861
6862 static tree
6863 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
6864 {
6865   tree t = *tp;
6866   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
6867   tree_fn_t fn = pfd->fn;
6868   void *data = pfd->data;
6869
6870   if (TYPE_P (t)
6871       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
6872       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
6873                                  pfd->include_nondeduced_p))
6874     return error_mark_node;
6875
6876   switch (TREE_CODE (t))
6877     {
6878     case RECORD_TYPE:
6879       if (TYPE_PTRMEMFUNC_P (t))
6880         break;
6881       /* Fall through.  */
6882
6883     case UNION_TYPE:
6884     case ENUMERAL_TYPE:
6885       if (!TYPE_TEMPLATE_INFO (t))
6886         *walk_subtrees = 0;
6887       else if (for_each_template_parm (TI_ARGS (TYPE_TEMPLATE_INFO (t)),
6888                                        fn, data, pfd->visited, 
6889                                        pfd->include_nondeduced_p))
6890         return error_mark_node;
6891       break;
6892
6893     case INTEGER_TYPE:
6894       if (for_each_template_parm (TYPE_MIN_VALUE (t),
6895                                   fn, data, pfd->visited, 
6896                                   pfd->include_nondeduced_p)
6897           || for_each_template_parm (TYPE_MAX_VALUE (t),
6898                                      fn, data, pfd->visited,
6899                                      pfd->include_nondeduced_p))
6900         return error_mark_node;
6901       break;
6902
6903     case METHOD_TYPE:
6904       /* Since we're not going to walk subtrees, we have to do this
6905          explicitly here.  */
6906       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
6907                                   pfd->visited, pfd->include_nondeduced_p))
6908         return error_mark_node;
6909       /* Fall through.  */
6910
6911     case FUNCTION_TYPE:
6912       /* Check the return type.  */
6913       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6914                                   pfd->include_nondeduced_p))
6915         return error_mark_node;
6916
6917       /* Check the parameter types.  Since default arguments are not
6918          instantiated until they are needed, the TYPE_ARG_TYPES may
6919          contain expressions that involve template parameters.  But,
6920          no-one should be looking at them yet.  And, once they're
6921          instantiated, they don't contain template parameters, so
6922          there's no point in looking at them then, either.  */
6923       {
6924         tree parm;
6925
6926         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
6927           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
6928                                       pfd->visited, pfd->include_nondeduced_p))
6929             return error_mark_node;
6930
6931         /* Since we've already handled the TYPE_ARG_TYPES, we don't
6932            want walk_tree walking into them itself.  */
6933         *walk_subtrees = 0;
6934       }
6935       break;
6936
6937     case TYPEOF_TYPE:
6938       if (pfd->include_nondeduced_p
6939           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
6940                                      pfd->visited, 
6941                                      pfd->include_nondeduced_p))
6942         return error_mark_node;
6943       break;
6944
6945     case FUNCTION_DECL:
6946     case VAR_DECL:
6947       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
6948           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
6949                                      pfd->visited, pfd->include_nondeduced_p))
6950         return error_mark_node;
6951       /* Fall through.  */
6952
6953     case PARM_DECL:
6954     case CONST_DECL:
6955       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
6956           && for_each_template_parm (DECL_INITIAL (t), fn, data,
6957                                      pfd->visited, pfd->include_nondeduced_p))
6958         return error_mark_node;
6959       if (DECL_CONTEXT (t)
6960           && pfd->include_nondeduced_p
6961           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
6962                                      pfd->visited, pfd->include_nondeduced_p))
6963         return error_mark_node;
6964       break;
6965
6966     case BOUND_TEMPLATE_TEMPLATE_PARM:
6967       /* Record template parameters such as `T' inside `TT<T>'.  */
6968       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
6969                                   pfd->include_nondeduced_p))
6970         return error_mark_node;
6971       /* Fall through.  */
6972
6973     case TEMPLATE_TEMPLATE_PARM:
6974     case TEMPLATE_TYPE_PARM:
6975     case TEMPLATE_PARM_INDEX:
6976       if (fn && (*fn)(t, data))
6977         return error_mark_node;
6978       else if (!fn)
6979         return error_mark_node;
6980       break;
6981
6982     case TEMPLATE_DECL:
6983       /* A template template parameter is encountered.  */
6984       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
6985           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6986                                      pfd->include_nondeduced_p))
6987         return error_mark_node;
6988
6989       /* Already substituted template template parameter */
6990       *walk_subtrees = 0;
6991       break;
6992
6993     case TYPENAME_TYPE:
6994       if (!fn
6995           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
6996                                      data, pfd->visited, 
6997                                      pfd->include_nondeduced_p))
6998         return error_mark_node;
6999       break;
7000
7001     case CONSTRUCTOR:
7002       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
7003           && pfd->include_nondeduced_p
7004           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
7005                                      (TREE_TYPE (t)), fn, data,
7006                                      pfd->visited, pfd->include_nondeduced_p))
7007         return error_mark_node;
7008       break;
7009
7010     case INDIRECT_REF:
7011     case COMPONENT_REF:
7012       /* If there's no type, then this thing must be some expression
7013          involving template parameters.  */
7014       if (!fn && !TREE_TYPE (t))
7015         return error_mark_node;
7016       break;
7017
7018     case MODOP_EXPR:
7019     case CAST_EXPR:
7020     case REINTERPRET_CAST_EXPR:
7021     case CONST_CAST_EXPR:
7022     case STATIC_CAST_EXPR:
7023     case DYNAMIC_CAST_EXPR:
7024     case ARROW_EXPR:
7025     case DOTSTAR_EXPR:
7026     case TYPEID_EXPR:
7027     case PSEUDO_DTOR_EXPR:
7028       if (!fn)
7029         return error_mark_node;
7030       break;
7031
7032     default:
7033       break;
7034     }
7035
7036   /* We didn't find any template parameters we liked.  */
7037   return NULL_TREE;
7038 }
7039
7040 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
7041    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
7042    call FN with the parameter and the DATA.
7043    If FN returns nonzero, the iteration is terminated, and
7044    for_each_template_parm returns 1.  Otherwise, the iteration
7045    continues.  If FN never returns a nonzero value, the value
7046    returned by for_each_template_parm is 0.  If FN is NULL, it is
7047    considered to be the function which always returns 1.
7048
7049    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
7050    parameters that occur in non-deduced contexts.  When false, only
7051    visits those template parameters that can be deduced.  */
7052
7053 static int
7054 for_each_template_parm (tree t, tree_fn_t fn, void* data,
7055                         struct pointer_set_t *visited,
7056                         bool include_nondeduced_p)
7057 {
7058   struct pair_fn_data pfd;
7059   int result;
7060
7061   /* Set up.  */
7062   pfd.fn = fn;
7063   pfd.data = data;
7064   pfd.include_nondeduced_p = include_nondeduced_p;
7065
7066   /* Walk the tree.  (Conceptually, we would like to walk without
7067      duplicates, but for_each_template_parm_r recursively calls
7068      for_each_template_parm, so we would need to reorganize a fair
7069      bit to use walk_tree_without_duplicates, so we keep our own
7070      visited list.)  */
7071   if (visited)
7072     pfd.visited = visited;
7073   else
7074     pfd.visited = pointer_set_create ();
7075   result = cp_walk_tree (&t,
7076                          for_each_template_parm_r,
7077                          &pfd,
7078                          pfd.visited) != NULL_TREE;
7079
7080   /* Clean up.  */
7081   if (!visited)
7082     {
7083       pointer_set_destroy (pfd.visited);
7084       pfd.visited = 0;
7085     }
7086
7087   return result;
7088 }
7089
7090 /* Returns true if T depends on any template parameter.  */
7091
7092 int
7093 uses_template_parms (tree t)
7094 {
7095   bool dependent_p;
7096   int saved_processing_template_decl;
7097
7098   saved_processing_template_decl = processing_template_decl;
7099   if (!saved_processing_template_decl)
7100     processing_template_decl = 1;
7101   if (TYPE_P (t))
7102     dependent_p = dependent_type_p (t);
7103   else if (TREE_CODE (t) == TREE_VEC)
7104     dependent_p = any_dependent_template_arguments_p (t);
7105   else if (TREE_CODE (t) == TREE_LIST)
7106     dependent_p = (uses_template_parms (TREE_VALUE (t))
7107                    || uses_template_parms (TREE_CHAIN (t)));
7108   else if (TREE_CODE (t) == TYPE_DECL)
7109     dependent_p = dependent_type_p (TREE_TYPE (t));
7110   else if (DECL_P (t)
7111            || EXPR_P (t)
7112            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
7113            || TREE_CODE (t) == OVERLOAD
7114            || TREE_CODE (t) == BASELINK
7115            || TREE_CODE (t) == IDENTIFIER_NODE
7116            || TREE_CODE (t) == TRAIT_EXPR
7117            || TREE_CODE (t) == CONSTRUCTOR
7118            || CONSTANT_CLASS_P (t))
7119     dependent_p = (type_dependent_expression_p (t)
7120                    || value_dependent_expression_p (t));
7121   else
7122     {
7123       gcc_assert (t == error_mark_node);
7124       dependent_p = false;
7125     }
7126
7127   processing_template_decl = saved_processing_template_decl;
7128
7129   return dependent_p;
7130 }
7131
7132 /* Returns true if T depends on any template parameter with level LEVEL.  */
7133
7134 int
7135 uses_template_parms_level (tree t, int level)
7136 {
7137   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
7138                                  /*include_nondeduced_p=*/true);
7139 }
7140
7141 static int tinst_depth;
7142 extern int max_tinst_depth;
7143 #ifdef GATHER_STATISTICS
7144 int depth_reached;
7145 #endif
7146 static int tinst_level_tick;
7147 static int last_template_error_tick;
7148
7149 /* We're starting to instantiate D; record the template instantiation context
7150    for diagnostics and to restore it later.  */
7151
7152 int
7153 push_tinst_level (tree d)
7154 {
7155   struct tinst_level *new_level;
7156
7157   if (tinst_depth >= max_tinst_depth)
7158     {
7159       /* If the instantiation in question still has unbound template parms,
7160          we don't really care if we can't instantiate it, so just return.
7161          This happens with base instantiation for implicit `typename'.  */
7162       if (uses_template_parms (d))
7163         return 0;
7164
7165       last_template_error_tick = tinst_level_tick;
7166       error ("template instantiation depth exceeds maximum of %d (use "
7167              "-ftemplate-depth= to increase the maximum) instantiating %qD",
7168              max_tinst_depth, d);
7169
7170       print_instantiation_context ();
7171
7172       return 0;
7173     }
7174
7175   new_level = ggc_alloc_tinst_level ();
7176   new_level->decl = d;
7177   new_level->locus = input_location;
7178   new_level->in_system_header_p = in_system_header;
7179   new_level->next = current_tinst_level;
7180   current_tinst_level = new_level;
7181
7182   ++tinst_depth;
7183 #ifdef GATHER_STATISTICS
7184   if (tinst_depth > depth_reached)
7185     depth_reached = tinst_depth;
7186 #endif
7187
7188   ++tinst_level_tick;
7189   return 1;
7190 }
7191
7192 /* We're done instantiating this template; return to the instantiation
7193    context.  */
7194
7195 void
7196 pop_tinst_level (void)
7197 {
7198   /* Restore the filename and line number stashed away when we started
7199      this instantiation.  */
7200   input_location = current_tinst_level->locus;
7201   current_tinst_level = current_tinst_level->next;
7202   --tinst_depth;
7203   ++tinst_level_tick;
7204 }
7205
7206 /* We're instantiating a deferred template; restore the template
7207    instantiation context in which the instantiation was requested, which
7208    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
7209
7210 static tree
7211 reopen_tinst_level (struct tinst_level *level)
7212 {
7213   struct tinst_level *t;
7214
7215   tinst_depth = 0;
7216   for (t = level; t; t = t->next)
7217     ++tinst_depth;
7218
7219   current_tinst_level = level;
7220   pop_tinst_level ();
7221   return level->decl;
7222 }
7223
7224 /* Returns the TINST_LEVEL which gives the original instantiation
7225    context.  */
7226
7227 struct tinst_level *
7228 outermost_tinst_level (void)
7229 {
7230   struct tinst_level *level = current_tinst_level;
7231   if (level)
7232     while (level->next)
7233       level = level->next;
7234   return level;
7235 }
7236
7237 /* Returns TRUE if PARM is a parameter of the template TEMPL.  */
7238
7239 bool
7240 parameter_of_template_p (tree parm, tree templ)
7241 {
7242   tree parms;
7243   int i;
7244
7245   if (!parm || !templ)
7246     return false;
7247
7248   gcc_assert (DECL_TEMPLATE_PARM_P (parm));
7249   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
7250
7251   parms = DECL_TEMPLATE_PARMS (templ);
7252   parms = INNERMOST_TEMPLATE_PARMS (parms);
7253
7254   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
7255     if (parm == TREE_VALUE (TREE_VEC_ELT (parms, i)))
7256       return true;
7257
7258   return false;
7259 }
7260
7261 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
7262    vector of template arguments, as for tsubst.
7263
7264    Returns an appropriate tsubst'd friend declaration.  */
7265
7266 static tree
7267 tsubst_friend_function (tree decl, tree args)
7268 {
7269   tree new_friend;
7270
7271   if (TREE_CODE (decl) == FUNCTION_DECL
7272       && DECL_TEMPLATE_INSTANTIATION (decl)
7273       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
7274     /* This was a friend declared with an explicit template
7275        argument list, e.g.:
7276
7277        friend void f<>(T);
7278
7279        to indicate that f was a template instantiation, not a new
7280        function declaration.  Now, we have to figure out what
7281        instantiation of what template.  */
7282     {
7283       tree template_id, arglist, fns;
7284       tree new_args;
7285       tree tmpl;
7286       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
7287
7288       /* Friend functions are looked up in the containing namespace scope.
7289          We must enter that scope, to avoid finding member functions of the
7290          current class with same name.  */
7291       push_nested_namespace (ns);
7292       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
7293                          tf_warning_or_error, NULL_TREE,
7294                          /*integral_constant_expression_p=*/false);
7295       pop_nested_namespace (ns);
7296       arglist = tsubst (DECL_TI_ARGS (decl), args,
7297                         tf_warning_or_error, NULL_TREE);
7298       template_id = lookup_template_function (fns, arglist);
7299
7300       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
7301       tmpl = determine_specialization (template_id, new_friend,
7302                                        &new_args,
7303                                        /*need_member_template=*/0,
7304                                        TREE_VEC_LENGTH (args),
7305                                        tsk_none);
7306       return instantiate_template (tmpl, new_args, tf_error);
7307     }
7308
7309   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
7310
7311   /* The NEW_FRIEND will look like an instantiation, to the
7312      compiler, but is not an instantiation from the point of view of
7313      the language.  For example, we might have had:
7314
7315      template <class T> struct S {
7316        template <class U> friend void f(T, U);
7317      };
7318
7319      Then, in S<int>, template <class U> void f(int, U) is not an
7320      instantiation of anything.  */
7321   if (new_friend == error_mark_node)
7322     return error_mark_node;
7323
7324   DECL_USE_TEMPLATE (new_friend) = 0;
7325   if (TREE_CODE (decl) == TEMPLATE_DECL)
7326     {
7327       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
7328       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
7329         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
7330     }
7331
7332   /* The mangled name for the NEW_FRIEND is incorrect.  The function
7333      is not a template instantiation and should not be mangled like
7334      one.  Therefore, we forget the mangling here; we'll recompute it
7335      later if we need it.  */
7336   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
7337     {
7338       SET_DECL_RTL (new_friend, NULL);
7339       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
7340     }
7341
7342   if (DECL_NAMESPACE_SCOPE_P (new_friend))
7343     {
7344       tree old_decl;
7345       tree new_friend_template_info;
7346       tree new_friend_result_template_info;
7347       tree ns;
7348       int  new_friend_is_defn;
7349
7350       /* We must save some information from NEW_FRIEND before calling
7351          duplicate decls since that function will free NEW_FRIEND if
7352          possible.  */
7353       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
7354       new_friend_is_defn =
7355             (DECL_INITIAL (DECL_TEMPLATE_RESULT
7356                            (template_for_substitution (new_friend)))
7357              != NULL_TREE);
7358       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
7359         {
7360           /* This declaration is a `primary' template.  */
7361           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
7362
7363           new_friend_result_template_info
7364             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
7365         }
7366       else
7367         new_friend_result_template_info = NULL_TREE;
7368
7369       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
7370       if (new_friend_is_defn)
7371         DECL_INITIAL (new_friend) = error_mark_node;
7372
7373       /* Inside pushdecl_namespace_level, we will push into the
7374          current namespace. However, the friend function should go
7375          into the namespace of the template.  */
7376       ns = decl_namespace_context (new_friend);
7377       push_nested_namespace (ns);
7378       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
7379       pop_nested_namespace (ns);
7380
7381       if (old_decl == error_mark_node)
7382         return error_mark_node;
7383
7384       if (old_decl != new_friend)
7385         {
7386           /* This new friend declaration matched an existing
7387              declaration.  For example, given:
7388
7389                template <class T> void f(T);
7390                template <class U> class C {
7391                  template <class T> friend void f(T) {}
7392                };
7393
7394              the friend declaration actually provides the definition
7395              of `f', once C has been instantiated for some type.  So,
7396              old_decl will be the out-of-class template declaration,
7397              while new_friend is the in-class definition.
7398
7399              But, if `f' was called before this point, the
7400              instantiation of `f' will have DECL_TI_ARGS corresponding
7401              to `T' but not to `U', references to which might appear
7402              in the definition of `f'.  Previously, the most general
7403              template for an instantiation of `f' was the out-of-class
7404              version; now it is the in-class version.  Therefore, we
7405              run through all specialization of `f', adding to their
7406              DECL_TI_ARGS appropriately.  In particular, they need a
7407              new set of outer arguments, corresponding to the
7408              arguments for this class instantiation.
7409
7410              The same situation can arise with something like this:
7411
7412                friend void f(int);
7413                template <class T> class C {
7414                  friend void f(T) {}
7415                };
7416
7417              when `C<int>' is instantiated.  Now, `f(int)' is defined
7418              in the class.  */
7419
7420           if (!new_friend_is_defn)
7421             /* On the other hand, if the in-class declaration does
7422                *not* provide a definition, then we don't want to alter
7423                existing definitions.  We can just leave everything
7424                alone.  */
7425             ;
7426           else
7427             {
7428               tree new_template = TI_TEMPLATE (new_friend_template_info);
7429               tree new_args = TI_ARGS (new_friend_template_info);
7430
7431               /* Overwrite whatever template info was there before, if
7432                  any, with the new template information pertaining to
7433                  the declaration.  */
7434               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
7435
7436               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
7437                 {
7438                   /* We should have called reregister_specialization in
7439                      duplicate_decls.  */
7440                   gcc_assert (retrieve_specialization (new_template,
7441                                                        new_args, 0)
7442                               == old_decl);
7443
7444                   /* Instantiate it if the global has already been used.  */
7445                   if (DECL_ODR_USED (old_decl))
7446                     instantiate_decl (old_decl, /*defer_ok=*/true,
7447                                       /*expl_inst_class_mem_p=*/false);
7448                 }
7449               else
7450                 {
7451                   tree t;
7452
7453                   /* Indicate that the old function template is a partial
7454                      instantiation.  */
7455                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
7456                     = new_friend_result_template_info;
7457
7458                   gcc_assert (new_template
7459                               == most_general_template (new_template));
7460                   gcc_assert (new_template != old_decl);
7461
7462                   /* Reassign any specializations already in the hash table
7463                      to the new more general template, and add the
7464                      additional template args.  */
7465                   for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
7466                        t != NULL_TREE;
7467                        t = TREE_CHAIN (t))
7468                     {
7469                       tree spec = TREE_VALUE (t);
7470                       spec_entry elt;
7471
7472                       elt.tmpl = old_decl;
7473                       elt.args = DECL_TI_ARGS (spec);
7474                       elt.spec = NULL_TREE;
7475
7476                       htab_remove_elt (decl_specializations, &elt);
7477
7478                       DECL_TI_ARGS (spec)
7479                         = add_outermost_template_args (new_args,
7480                                                        DECL_TI_ARGS (spec));
7481
7482                       register_specialization
7483                         (spec, new_template, DECL_TI_ARGS (spec), true, 0);
7484
7485                     }
7486                   DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
7487                 }
7488             }
7489
7490           /* The information from NEW_FRIEND has been merged into OLD_DECL
7491              by duplicate_decls.  */
7492           new_friend = old_decl;
7493         }
7494     }
7495   else
7496     {
7497       tree context = DECL_CONTEXT (new_friend);
7498       bool dependent_p;
7499
7500       /* In the code
7501            template <class T> class C {
7502              template <class U> friend void C1<U>::f (); // case 1
7503              friend void C2<T>::f ();                    // case 2
7504            };
7505          we only need to make sure CONTEXT is a complete type for
7506          case 2.  To distinguish between the two cases, we note that
7507          CONTEXT of case 1 remains dependent type after tsubst while
7508          this isn't true for case 2.  */
7509       ++processing_template_decl;
7510       dependent_p = dependent_type_p (context);
7511       --processing_template_decl;
7512
7513       if (!dependent_p
7514           && !complete_type_or_else (context, NULL_TREE))
7515         return error_mark_node;
7516
7517       if (COMPLETE_TYPE_P (context))
7518         {
7519           /* Check to see that the declaration is really present, and,
7520              possibly obtain an improved declaration.  */
7521           tree fn = check_classfn (context,
7522                                    new_friend, NULL_TREE);
7523
7524           if (fn)
7525             new_friend = fn;
7526         }
7527     }
7528
7529   return new_friend;
7530 }
7531
7532 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
7533    template arguments, as for tsubst.
7534
7535    Returns an appropriate tsubst'd friend type or error_mark_node on
7536    failure.  */
7537
7538 static tree
7539 tsubst_friend_class (tree friend_tmpl, tree args)
7540 {
7541   tree friend_type;
7542   tree tmpl;
7543   tree context;
7544
7545   context = CP_DECL_CONTEXT (friend_tmpl);
7546
7547   if (context != global_namespace)
7548     {
7549       if (TREE_CODE (context) == NAMESPACE_DECL)
7550         push_nested_namespace (context);
7551       else
7552         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
7553     }
7554
7555   /* Look for a class template declaration.  We look for hidden names
7556      because two friend declarations of the same template are the
7557      same.  For example, in:
7558
7559        struct A { 
7560          template <typename> friend class F;
7561        };
7562        template <typename> struct B { 
7563          template <typename> friend class F;
7564        };
7565
7566      both F templates are the same.  */
7567   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
7568                            /*block_p=*/true, 0, 
7569                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
7570
7571   /* But, if we don't find one, it might be because we're in a
7572      situation like this:
7573
7574        template <class T>
7575        struct S {
7576          template <class U>
7577          friend struct S;
7578        };
7579
7580      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
7581      for `S<int>', not the TEMPLATE_DECL.  */
7582   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
7583     {
7584       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
7585       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
7586     }
7587
7588   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
7589     {
7590       /* The friend template has already been declared.  Just
7591          check to see that the declarations match, and install any new
7592          default parameters.  We must tsubst the default parameters,
7593          of course.  We only need the innermost template parameters
7594          because that is all that redeclare_class_template will look
7595          at.  */
7596       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
7597           > TMPL_ARGS_DEPTH (args))
7598         {
7599           tree parms;
7600           location_t saved_input_location;
7601           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
7602                                          args, tf_warning_or_error);
7603
7604           saved_input_location = input_location;
7605           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
7606           redeclare_class_template (TREE_TYPE (tmpl), parms);
7607           input_location = saved_input_location;
7608           
7609         }
7610
7611       friend_type = TREE_TYPE (tmpl);
7612     }
7613   else
7614     {
7615       /* The friend template has not already been declared.  In this
7616          case, the instantiation of the template class will cause the
7617          injection of this template into the global scope.  */
7618       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
7619       if (tmpl == error_mark_node)
7620         return error_mark_node;
7621
7622       /* The new TMPL is not an instantiation of anything, so we
7623          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
7624          the new type because that is supposed to be the corresponding
7625          template decl, i.e., TMPL.  */
7626       DECL_USE_TEMPLATE (tmpl) = 0;
7627       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
7628       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
7629       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
7630         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
7631
7632       /* Inject this template into the global scope.  */
7633       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
7634     }
7635
7636   if (context != global_namespace)
7637     {
7638       if (TREE_CODE (context) == NAMESPACE_DECL)
7639         pop_nested_namespace (context);
7640       else
7641         pop_nested_class ();
7642     }
7643
7644   return friend_type;
7645 }
7646
7647 /* Returns zero if TYPE cannot be completed later due to circularity.
7648    Otherwise returns one.  */
7649
7650 static int
7651 can_complete_type_without_circularity (tree type)
7652 {
7653   if (type == NULL_TREE || type == error_mark_node)
7654     return 0;
7655   else if (COMPLETE_TYPE_P (type))
7656     return 1;
7657   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
7658     return can_complete_type_without_circularity (TREE_TYPE (type));
7659   else if (CLASS_TYPE_P (type)
7660            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
7661     return 0;
7662   else
7663     return 1;
7664 }
7665
7666 /* Apply any attributes which had to be deferred until instantiation
7667    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
7668    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
7669
7670 static void
7671 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
7672                                 tree args, tsubst_flags_t complain, tree in_decl)
7673 {
7674   tree last_dep = NULL_TREE;
7675   tree t;
7676   tree *p;
7677
7678   for (t = attributes; t; t = TREE_CHAIN (t))
7679     if (ATTR_IS_DEPENDENT (t))
7680       {
7681         last_dep = t;
7682         attributes = copy_list (attributes);
7683         break;
7684       }
7685
7686   if (DECL_P (*decl_p))
7687     {
7688       if (TREE_TYPE (*decl_p) == error_mark_node)
7689         return;
7690       p = &DECL_ATTRIBUTES (*decl_p);
7691     }
7692   else
7693     p = &TYPE_ATTRIBUTES (*decl_p);
7694
7695   if (last_dep)
7696     {
7697       tree late_attrs = NULL_TREE;
7698       tree *q = &late_attrs;
7699
7700       for (*p = attributes; *p; )
7701         {
7702           t = *p;
7703           if (ATTR_IS_DEPENDENT (t))
7704             {
7705               *p = TREE_CHAIN (t);
7706               TREE_CHAIN (t) = NULL_TREE;
7707               /* If the first attribute argument is an identifier, don't
7708                  pass it through tsubst.  Attributes like mode, format,
7709                  cleanup and several target specific attributes expect it
7710                  unmodified.  */
7711               if (TREE_VALUE (t)
7712                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
7713                   && TREE_VALUE (TREE_VALUE (t))
7714                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
7715                       == IDENTIFIER_NODE))
7716                 {
7717                   tree chain
7718                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
7719                                    in_decl,
7720                                    /*integral_constant_expression_p=*/false);
7721                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
7722                     TREE_VALUE (t)
7723                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
7724                                    chain);
7725                 }
7726               else
7727                 TREE_VALUE (t)
7728                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
7729                                  /*integral_constant_expression_p=*/false);
7730               *q = t;
7731               q = &TREE_CHAIN (t);
7732             }
7733           else
7734             p = &TREE_CHAIN (t);
7735         }
7736
7737       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
7738     }
7739 }
7740
7741 /* Perform (or defer) access check for typedefs that were referenced
7742    from within the template TMPL code.
7743    This is a subroutine of instantiate_template and instantiate_class_template.
7744    TMPL is the template to consider and TARGS is the list of arguments of
7745    that template.  */
7746
7747 static void
7748 perform_typedefs_access_check (tree tmpl, tree targs)
7749 {
7750   location_t saved_location;
7751   int i;
7752   qualified_typedef_usage_t *iter;
7753
7754   if (!tmpl
7755       || (!CLASS_TYPE_P (tmpl)
7756           && TREE_CODE (tmpl) != FUNCTION_DECL))
7757     return;
7758
7759   saved_location = input_location;
7760   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
7761                     get_types_needing_access_check (tmpl),
7762                     i, iter)
7763     {
7764       tree type_decl = iter->typedef_decl;
7765       tree type_scope = iter->context;
7766
7767       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
7768         continue;
7769
7770       if (uses_template_parms (type_decl))
7771         type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
7772       if (uses_template_parms (type_scope))
7773         type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
7774
7775       /* Make access check error messages point to the location
7776          of the use of the typedef.  */
7777       input_location = iter->locus;
7778       perform_or_defer_access_check (TYPE_BINFO (type_scope),
7779                                      type_decl, type_decl);
7780     }
7781     input_location = saved_location;
7782 }
7783
7784 tree
7785 instantiate_class_template (tree type)
7786 {
7787   tree templ, args, pattern, t, member;
7788   tree typedecl;
7789   tree pbinfo;
7790   tree base_list;
7791   unsigned int saved_maximum_field_alignment;
7792
7793   if (type == error_mark_node)
7794     return error_mark_node;
7795
7796   if (COMPLETE_OR_OPEN_TYPE_P (type)
7797       || uses_template_parms (type))
7798     return type;
7799
7800   /* Figure out which template is being instantiated.  */
7801   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
7802   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
7803
7804   /* Determine what specialization of the original template to
7805      instantiate.  */
7806   t = most_specialized_class (type, templ, tf_warning_or_error);
7807   if (t == error_mark_node)
7808     {
7809       TYPE_BEING_DEFINED (type) = 1;
7810       return error_mark_node;
7811     }
7812   else if (t)
7813     {
7814       /* This TYPE is actually an instantiation of a partial
7815          specialization.  We replace the innermost set of ARGS with
7816          the arguments appropriate for substitution.  For example,
7817          given:
7818
7819            template <class T> struct S {};
7820            template <class T> struct S<T*> {};
7821
7822          and supposing that we are instantiating S<int*>, ARGS will
7823          presently be {int*} -- but we need {int}.  */
7824       pattern = TREE_TYPE (t);
7825       args = TREE_PURPOSE (t);
7826     }
7827   else
7828     {
7829       pattern = TREE_TYPE (templ);
7830       args = CLASSTYPE_TI_ARGS (type);
7831     }
7832
7833   /* If the template we're instantiating is incomplete, then clearly
7834      there's nothing we can do.  */
7835   if (!COMPLETE_TYPE_P (pattern))
7836     return type;
7837
7838   /* If we've recursively instantiated too many templates, stop.  */
7839   if (! push_tinst_level (type))
7840     return type;
7841
7842   /* Now we're really doing the instantiation.  Mark the type as in
7843      the process of being defined.  */
7844   TYPE_BEING_DEFINED (type) = 1;
7845
7846   /* We may be in the middle of deferred access check.  Disable
7847      it now.  */
7848   push_deferring_access_checks (dk_no_deferred);
7849
7850   push_to_top_level ();
7851   /* Use #pragma pack from the template context.  */
7852   saved_maximum_field_alignment = maximum_field_alignment;
7853   maximum_field_alignment = TYPE_PRECISION (pattern);
7854
7855   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
7856
7857   /* Set the input location to the most specialized template definition.
7858      This is needed if tsubsting causes an error.  */
7859   typedecl = TYPE_MAIN_DECL (pattern);
7860   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
7861     DECL_SOURCE_LOCATION (typedecl);
7862
7863   TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern);
7864   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
7865   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
7866   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
7867   TYPE_HAS_COPY_ASSIGN (type) = TYPE_HAS_COPY_ASSIGN (pattern);
7868   TYPE_HAS_CONST_COPY_ASSIGN (type) = TYPE_HAS_CONST_COPY_ASSIGN (pattern);
7869   TYPE_HAS_COPY_CTOR (type) = TYPE_HAS_COPY_CTOR (pattern);
7870   TYPE_HAS_CONST_COPY_CTOR (type) = TYPE_HAS_CONST_COPY_CTOR (pattern);
7871   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
7872   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
7873   TYPE_PACKED (type) = TYPE_PACKED (pattern);
7874   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
7875   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
7876   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
7877   if (ANON_AGGR_TYPE_P (pattern))
7878     SET_ANON_AGGR_TYPE_P (type);
7879   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
7880     {
7881       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
7882       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
7883     }
7884
7885   pbinfo = TYPE_BINFO (pattern);
7886
7887   /* We should never instantiate a nested class before its enclosing
7888      class; we need to look up the nested class by name before we can
7889      instantiate it, and that lookup should instantiate the enclosing
7890      class.  */
7891   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
7892               || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
7893
7894   base_list = NULL_TREE;
7895   if (BINFO_N_BASE_BINFOS (pbinfo))
7896     {
7897       tree pbase_binfo;
7898       tree pushed_scope;
7899       int i;
7900
7901       /* We must enter the scope containing the type, as that is where
7902          the accessibility of types named in dependent bases are
7903          looked up from.  */
7904       pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
7905
7906       /* Substitute into each of the bases to determine the actual
7907          basetypes.  */
7908       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
7909         {
7910           tree base;
7911           tree access = BINFO_BASE_ACCESS (pbinfo, i);
7912           tree expanded_bases = NULL_TREE;
7913           int idx, len = 1;
7914
7915           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
7916             {
7917               expanded_bases = 
7918                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
7919                                        args, tf_error, NULL_TREE);
7920               if (expanded_bases == error_mark_node)
7921                 continue;
7922
7923               len = TREE_VEC_LENGTH (expanded_bases);
7924             }
7925
7926           for (idx = 0; idx < len; idx++)
7927             {
7928               if (expanded_bases)
7929                 /* Extract the already-expanded base class.  */
7930                 base = TREE_VEC_ELT (expanded_bases, idx);
7931               else
7932                 /* Substitute to figure out the base class.  */
7933                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
7934                                NULL_TREE);
7935
7936               if (base == error_mark_node)
7937                 continue;
7938
7939               base_list = tree_cons (access, base, base_list);
7940               if (BINFO_VIRTUAL_P (pbase_binfo))
7941                 TREE_TYPE (base_list) = integer_type_node;
7942             }
7943         }
7944
7945       /* The list is now in reverse order; correct that.  */
7946       base_list = nreverse (base_list);
7947
7948       if (pushed_scope)
7949         pop_scope (pushed_scope);
7950     }
7951   /* Now call xref_basetypes to set up all the base-class
7952      information.  */
7953   xref_basetypes (type, base_list);
7954
7955   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
7956                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
7957                                   args, tf_error, NULL_TREE);
7958   fixup_attribute_variants (type);
7959
7960   /* Now that our base classes are set up, enter the scope of the
7961      class, so that name lookups into base classes, etc. will work
7962      correctly.  This is precisely analogous to what we do in
7963      begin_class_definition when defining an ordinary non-template
7964      class, except we also need to push the enclosing classes.  */
7965   push_nested_class (type);
7966
7967   /* Now members are processed in the order of declaration.  */
7968   for (member = CLASSTYPE_DECL_LIST (pattern);
7969        member; member = TREE_CHAIN (member))
7970     {
7971       tree t = TREE_VALUE (member);
7972
7973       if (TREE_PURPOSE (member))
7974         {
7975           if (TYPE_P (t))
7976             {
7977               /* Build new CLASSTYPE_NESTED_UTDS.  */
7978
7979               tree newtag;
7980               bool class_template_p;
7981
7982               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
7983                                   && TYPE_LANG_SPECIFIC (t)
7984                                   && CLASSTYPE_IS_TEMPLATE (t));
7985               /* If the member is a class template, then -- even after
7986                  substitution -- there may be dependent types in the
7987                  template argument list for the class.  We increment
7988                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
7989                  that function will assume that no types are dependent
7990                  when outside of a template.  */
7991               if (class_template_p)
7992                 ++processing_template_decl;
7993               newtag = tsubst (t, args, tf_error, NULL_TREE);
7994               if (class_template_p)
7995                 --processing_template_decl;
7996               if (newtag == error_mark_node)
7997                 continue;
7998
7999               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
8000                 {
8001                   tree name = TYPE_IDENTIFIER (t);
8002
8003                   if (class_template_p)
8004                     /* Unfortunately, lookup_template_class sets
8005                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
8006                        instantiation (i.e., for the type of a member
8007                        template class nested within a template class.)
8008                        This behavior is required for
8009                        maybe_process_partial_specialization to work
8010                        correctly, but is not accurate in this case;
8011                        the TAG is not an instantiation of anything.
8012                        (The corresponding TEMPLATE_DECL is an
8013                        instantiation, but the TYPE is not.) */
8014                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
8015
8016                   /* Now, we call pushtag to put this NEWTAG into the scope of
8017                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
8018                      pushtag calling push_template_decl.  We don't have to do
8019                      this for enums because it will already have been done in
8020                      tsubst_enum.  */
8021                   if (name)
8022                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
8023                   pushtag (name, newtag, /*tag_scope=*/ts_current);
8024                 }
8025             }
8026           else if (TREE_CODE (t) == FUNCTION_DECL
8027                    || DECL_FUNCTION_TEMPLATE_P (t))
8028             {
8029               /* Build new TYPE_METHODS.  */
8030               tree r;
8031
8032               if (TREE_CODE (t) == TEMPLATE_DECL)
8033                 ++processing_template_decl;
8034               r = tsubst (t, args, tf_error, NULL_TREE);
8035               if (TREE_CODE (t) == TEMPLATE_DECL)
8036                 --processing_template_decl;
8037               set_current_access_from_decl (r);
8038               finish_member_declaration (r);
8039             }
8040           else
8041             {
8042               /* Build new TYPE_FIELDS.  */
8043               if (TREE_CODE (t) == STATIC_ASSERT)
8044                 {
8045                   tree condition = 
8046                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
8047                                  tf_warning_or_error, NULL_TREE,
8048                                  /*integral_constant_expression_p=*/true);
8049                   finish_static_assert (condition,
8050                                         STATIC_ASSERT_MESSAGE (t), 
8051                                         STATIC_ASSERT_SOURCE_LOCATION (t),
8052                                         /*member_p=*/true);
8053                 }
8054               else if (TREE_CODE (t) != CONST_DECL)
8055                 {
8056                   tree r;
8057
8058                   /* The file and line for this declaration, to
8059                      assist in error message reporting.  Since we
8060                      called push_tinst_level above, we don't need to
8061                      restore these.  */
8062                   input_location = DECL_SOURCE_LOCATION (t);
8063
8064                   if (TREE_CODE (t) == TEMPLATE_DECL)
8065                     ++processing_template_decl;
8066                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
8067                   if (TREE_CODE (t) == TEMPLATE_DECL)
8068                     --processing_template_decl;
8069                   if (TREE_CODE (r) == VAR_DECL)
8070                     {
8071                       /* In [temp.inst]:
8072
8073                            [t]he initialization (and any associated
8074                            side-effects) of a static data member does
8075                            not occur unless the static data member is
8076                            itself used in a way that requires the
8077                            definition of the static data member to
8078                            exist.
8079
8080                          Therefore, we do not substitute into the
8081                          initialized for the static data member here.  */
8082                       finish_static_data_member_decl
8083                         (r,
8084                          /*init=*/NULL_TREE,
8085                          /*init_const_expr_p=*/false,
8086                          /*asmspec_tree=*/NULL_TREE,
8087                          /*flags=*/0);
8088                       if (DECL_INITIALIZED_IN_CLASS_P (r))
8089                         check_static_variable_definition (r, TREE_TYPE (r));
8090                     }
8091                   else if (TREE_CODE (r) == FIELD_DECL)
8092                     {
8093                       /* Determine whether R has a valid type and can be
8094                          completed later.  If R is invalid, then it is
8095                          replaced by error_mark_node so that it will not be
8096                          added to TYPE_FIELDS.  */
8097                       tree rtype = TREE_TYPE (r);
8098                       if (can_complete_type_without_circularity (rtype))
8099                         complete_type (rtype);
8100
8101                       if (!COMPLETE_TYPE_P (rtype))
8102                         {
8103                           cxx_incomplete_type_error (r, rtype);
8104                           r = error_mark_node;
8105                         }
8106                     }
8107
8108                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
8109                      such a thing will already have been added to the field
8110                      list by tsubst_enum in finish_member_declaration in the
8111                      CLASSTYPE_NESTED_UTDS case above.  */
8112                   if (!(TREE_CODE (r) == TYPE_DECL
8113                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
8114                         && DECL_ARTIFICIAL (r)))
8115                     {
8116                       set_current_access_from_decl (r);
8117                       finish_member_declaration (r);
8118                     }
8119                 }
8120             }
8121         }
8122       else
8123         {
8124           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
8125             {
8126               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
8127
8128               tree friend_type = t;
8129               bool adjust_processing_template_decl = false;
8130
8131               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8132                 {
8133                   /* template <class T> friend class C;  */
8134                   friend_type = tsubst_friend_class (friend_type, args);
8135                   adjust_processing_template_decl = true;
8136                 }
8137               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
8138                 {
8139                   /* template <class T> friend class C::D;  */
8140                   friend_type = tsubst (friend_type, args,
8141                                         tf_warning_or_error, NULL_TREE);
8142                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8143                     friend_type = TREE_TYPE (friend_type);
8144                   adjust_processing_template_decl = true;
8145                 }
8146               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
8147                 {
8148                   /* This could be either
8149
8150                        friend class T::C;
8151
8152                      when dependent_type_p is false or
8153
8154                        template <class U> friend class T::C;
8155
8156                      otherwise.  */
8157                   friend_type = tsubst (friend_type, args,
8158                                         tf_warning_or_error, NULL_TREE);
8159                   /* Bump processing_template_decl for correct
8160                      dependent_type_p calculation.  */
8161                   ++processing_template_decl;
8162                   if (dependent_type_p (friend_type))
8163                     adjust_processing_template_decl = true;
8164                   --processing_template_decl;
8165                 }
8166               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
8167                        && hidden_name_p (TYPE_NAME (friend_type)))
8168                 {
8169                   /* friend class C;
8170
8171                      where C hasn't been declared yet.  Let's lookup name
8172                      from namespace scope directly, bypassing any name that
8173                      come from dependent base class.  */
8174                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
8175
8176                   /* The call to xref_tag_from_type does injection for friend
8177                      classes.  */
8178                   push_nested_namespace (ns);
8179                   friend_type =
8180                     xref_tag_from_type (friend_type, NULL_TREE,
8181                                         /*tag_scope=*/ts_current);
8182                   pop_nested_namespace (ns);
8183                 }
8184               else if (uses_template_parms (friend_type))
8185                 /* friend class C<T>;  */
8186                 friend_type = tsubst (friend_type, args,
8187                                       tf_warning_or_error, NULL_TREE);
8188               /* Otherwise it's
8189
8190                    friend class C;
8191
8192                  where C is already declared or
8193
8194                    friend class C<int>;
8195
8196                  We don't have to do anything in these cases.  */
8197
8198               if (adjust_processing_template_decl)
8199                 /* Trick make_friend_class into realizing that the friend
8200                    we're adding is a template, not an ordinary class.  It's
8201                    important that we use make_friend_class since it will
8202                    perform some error-checking and output cross-reference
8203                    information.  */
8204                 ++processing_template_decl;
8205
8206               if (friend_type != error_mark_node)
8207                 make_friend_class (type, friend_type, /*complain=*/false);
8208
8209               if (adjust_processing_template_decl)
8210                 --processing_template_decl;
8211             }
8212           else
8213             {
8214               /* Build new DECL_FRIENDLIST.  */
8215               tree r;
8216
8217               /* The file and line for this declaration, to
8218                  assist in error message reporting.  Since we
8219                  called push_tinst_level above, we don't need to
8220                  restore these.  */
8221               input_location = DECL_SOURCE_LOCATION (t);
8222
8223               if (TREE_CODE (t) == TEMPLATE_DECL)
8224                 {
8225                   ++processing_template_decl;
8226                   push_deferring_access_checks (dk_no_check);
8227                 }
8228
8229               r = tsubst_friend_function (t, args);
8230               add_friend (type, r, /*complain=*/false);
8231               if (TREE_CODE (t) == TEMPLATE_DECL)
8232                 {
8233                   pop_deferring_access_checks ();
8234                   --processing_template_decl;
8235                 }
8236             }
8237         }
8238     }
8239
8240   /* Set the file and line number information to whatever is given for
8241      the class itself.  This puts error messages involving generated
8242      implicit functions at a predictable point, and the same point
8243      that would be used for non-template classes.  */
8244   input_location = DECL_SOURCE_LOCATION (typedecl);
8245
8246   unreverse_member_declarations (type);
8247   finish_struct_1 (type);
8248   TYPE_BEING_DEFINED (type) = 0;
8249
8250   /* We don't instantiate default arguments for member functions.  14.7.1:
8251
8252      The implicit instantiation of a class template specialization causes
8253      the implicit instantiation of the declarations, but not of the
8254      definitions or default arguments, of the class member functions,
8255      member classes, static data members and member templates....  */
8256
8257   /* Some typedefs referenced from within the template code need to be access
8258      checked at template instantiation time, i.e now. These types were
8259      added to the template at parsing time. Let's get those and perform
8260      the access checks then.  */
8261   perform_typedefs_access_check (pattern, args);
8262   perform_deferred_access_checks ();
8263   pop_nested_class ();
8264   maximum_field_alignment = saved_maximum_field_alignment;
8265   pop_from_top_level ();
8266   pop_deferring_access_checks ();
8267   pop_tinst_level ();
8268
8269   /* The vtable for a template class can be emitted in any translation
8270      unit in which the class is instantiated.  When there is no key
8271      method, however, finish_struct_1 will already have added TYPE to
8272      the keyed_classes list.  */
8273   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
8274     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
8275
8276   return type;
8277 }
8278
8279 static tree
8280 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8281 {
8282   tree r;
8283
8284   if (!t)
8285     r = t;
8286   else if (TYPE_P (t))
8287     r = tsubst (t, args, complain, in_decl);
8288   else
8289     {
8290       if (!(complain & tf_warning))
8291         ++c_inhibit_evaluation_warnings;
8292       r = tsubst_expr (t, args, complain, in_decl,
8293                        /*integral_constant_expression_p=*/true);
8294       if (!(complain & tf_warning))
8295         --c_inhibit_evaluation_warnings;
8296     }
8297   return r;
8298 }
8299
8300 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
8301    NONTYPE_ARGUMENT_PACK.  */
8302
8303 static tree
8304 make_fnparm_pack (tree spec_parm)
8305 {
8306   /* Collect all of the extra "packed" parameters into an
8307      argument pack.  */
8308   tree parmvec;
8309   tree parmtypevec;
8310   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
8311   tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
8312   int i, len = list_length (spec_parm);
8313
8314   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
8315   parmvec = make_tree_vec (len);
8316   parmtypevec = make_tree_vec (len);
8317   for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
8318     {
8319       TREE_VEC_ELT (parmvec, i) = spec_parm;
8320       TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
8321     }
8322
8323   /* Build the argument packs.  */
8324   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
8325   SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
8326   TREE_TYPE (argpack) = argtypepack;
8327
8328   return argpack;
8329 }        
8330
8331 /* Substitute ARGS into T, which is an pack expansion
8332    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
8333    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
8334    (if only a partial substitution could be performed) or
8335    ERROR_MARK_NODE if there was an error.  */
8336 tree
8337 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
8338                        tree in_decl)
8339 {
8340   tree pattern;
8341   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
8342   int i, len = -1;
8343   tree result;
8344   int incomplete = 0;
8345   htab_t saved_local_specializations = NULL;
8346
8347   gcc_assert (PACK_EXPANSION_P (t));
8348   pattern = PACK_EXPANSION_PATTERN (t);
8349
8350   /* Determine the argument packs that will instantiate the parameter
8351      packs used in the expansion expression. While we're at it,
8352      compute the number of arguments to be expanded and make sure it
8353      is consistent.  */
8354   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
8355        pack = TREE_CHAIN (pack))
8356     {
8357       tree parm_pack = TREE_VALUE (pack);
8358       tree arg_pack = NULL_TREE;
8359       tree orig_arg = NULL_TREE;
8360
8361       if (TREE_CODE (parm_pack) == PARM_DECL)
8362         {
8363           if (!cp_unevaluated_operand)
8364             arg_pack = retrieve_local_specialization (parm_pack);
8365           else
8366             {
8367               /* We can't rely on local_specializations for a parameter
8368                  name used later in a function declaration (such as in a
8369                  late-specified return type).  Even if it exists, it might
8370                  have the wrong value for a recursive call.  Just make a
8371                  dummy decl, since it's only used for its type.  */
8372               arg_pack = tsubst_decl (parm_pack, args, complain);
8373               arg_pack = make_fnparm_pack (arg_pack);
8374             }
8375         }
8376       else
8377         {
8378           int level, idx, levels;
8379           template_parm_level_and_index (parm_pack, &level, &idx);
8380
8381           levels = TMPL_ARGS_DEPTH (args);
8382           if (level <= levels)
8383             arg_pack = TMPL_ARG (args, level, idx);
8384         }
8385
8386       orig_arg = arg_pack;
8387       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
8388         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
8389       
8390       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
8391         /* This can only happen if we forget to expand an argument
8392            pack somewhere else. Just return an error, silently.  */
8393         {
8394           result = make_tree_vec (1);
8395           TREE_VEC_ELT (result, 0) = error_mark_node;
8396           return result;
8397         }
8398
8399       if (arg_pack
8400           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
8401           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
8402         {
8403           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
8404           tree pattern = PACK_EXPANSION_PATTERN (expansion);
8405           if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack))
8406               || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern)))
8407             /* The argument pack that the parameter maps to is just an
8408                expansion of the parameter itself, such as one would
8409                find in the implicit typedef of a class inside the
8410                class itself.  Consider this parameter "unsubstituted",
8411                so that we will maintain the outer pack expansion.  */
8412             arg_pack = NULL_TREE;
8413         }
8414           
8415       if (arg_pack)
8416         {
8417           int my_len = 
8418             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
8419
8420           /* It's all-or-nothing with incomplete argument packs.  */
8421           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
8422             return error_mark_node;
8423           
8424           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
8425             incomplete = 1;
8426
8427           if (len < 0)
8428             len = my_len;
8429           else if (len != my_len)
8430             {
8431               if (incomplete)
8432                 /* We got explicit args for some packs but not others;
8433                    do nothing now and try again after deduction.  */
8434                 return t;
8435               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
8436                 error ("mismatched argument pack lengths while expanding "
8437                        "%<%T%>",
8438                        pattern);
8439               else
8440                 error ("mismatched argument pack lengths while expanding "
8441                        "%<%E%>",
8442                        pattern);
8443               return error_mark_node;
8444             }
8445
8446           /* Keep track of the parameter packs and their corresponding
8447              argument packs.  */
8448           packs = tree_cons (parm_pack, arg_pack, packs);
8449           TREE_TYPE (packs) = orig_arg;
8450         }
8451       else
8452         /* We can't substitute for this parameter pack.  */
8453         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
8454                                          TREE_VALUE (pack),
8455                                          unsubstituted_packs);
8456     }
8457
8458   /* We cannot expand this expansion expression, because we don't have
8459      all of the argument packs we need. Substitute into the pattern
8460      and return a PACK_EXPANSION_*. The caller will need to deal with
8461      that.  */
8462   if (unsubstituted_packs)
8463     {
8464       tree new_pat;
8465       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
8466         new_pat = tsubst_expr (pattern, args, complain, in_decl,
8467                                /*integral_constant_expression_p=*/false);
8468       else
8469         new_pat = tsubst (pattern, args, complain, in_decl);
8470       return make_pack_expansion (new_pat);
8471     }
8472
8473   /* We could not find any argument packs that work.  */
8474   if (len < 0)
8475     return error_mark_node;
8476
8477   if (cp_unevaluated_operand)
8478     {
8479       /* We're in a late-specified return type, so create our own local
8480          specializations table; the current table is either NULL or (in the
8481          case of recursive unification) might have bindings that we don't
8482          want to use or alter.  */
8483       saved_local_specializations = local_specializations;
8484       local_specializations = htab_create (37,
8485                                            hash_local_specialization,
8486                                            eq_local_specializations,
8487                                            NULL);
8488     }
8489
8490   /* For each argument in each argument pack, substitute into the
8491      pattern.  */
8492   result = make_tree_vec (len + incomplete);
8493   for (i = 0; i < len + incomplete; ++i)
8494     {
8495       /* For parameter pack, change the substitution of the parameter
8496          pack to the ith argument in its argument pack, then expand
8497          the pattern.  */
8498       for (pack = packs; pack; pack = TREE_CHAIN (pack))
8499         {
8500           tree parm = TREE_PURPOSE (pack);
8501
8502           if (TREE_CODE (parm) == PARM_DECL)
8503             {
8504               /* Select the Ith argument from the pack.  */
8505               tree arg = make_node (ARGUMENT_PACK_SELECT);
8506               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
8507               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
8508               mark_used (parm);
8509               register_local_specialization (arg, parm);
8510             }
8511           else
8512             {
8513               tree value = parm;
8514               int idx, level;
8515               template_parm_level_and_index (parm, &level, &idx);
8516               
8517               if (i < len) 
8518                 {
8519                   /* Select the Ith argument from the pack. */
8520                   value = make_node (ARGUMENT_PACK_SELECT);
8521                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
8522                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
8523                 }
8524
8525               /* Update the corresponding argument.  */
8526               TMPL_ARG (args, level, idx) = value;
8527             }
8528         }
8529
8530       /* Substitute into the PATTERN with the altered arguments.  */
8531       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
8532         TREE_VEC_ELT (result, i) = 
8533           tsubst_expr (pattern, args, complain, in_decl,
8534                        /*integral_constant_expression_p=*/false);
8535       else
8536         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
8537
8538       if (i == len)
8539         /* When we have incomplete argument packs, the last "expanded"
8540            result is itself a pack expansion, which allows us
8541            to deduce more arguments.  */
8542         TREE_VEC_ELT (result, i) = 
8543           make_pack_expansion (TREE_VEC_ELT (result, i));
8544
8545       if (TREE_VEC_ELT (result, i) == error_mark_node)
8546         {
8547           result = error_mark_node;
8548           break;
8549         }
8550     }
8551
8552   /* Update ARGS to restore the substitution from parameter packs to
8553      their argument packs.  */
8554   for (pack = packs; pack; pack = TREE_CHAIN (pack))
8555     {
8556       tree parm = TREE_PURPOSE (pack);
8557
8558       if (TREE_CODE (parm) == PARM_DECL)
8559         register_local_specialization (TREE_TYPE (pack), parm);
8560       else
8561         {
8562           int idx, level;
8563           template_parm_level_and_index (parm, &level, &idx);
8564           
8565           /* Update the corresponding argument.  */
8566           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
8567             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
8568               TREE_TYPE (pack);
8569           else
8570             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
8571         }
8572     }
8573
8574   if (saved_local_specializations)
8575     {
8576       htab_delete (local_specializations);
8577       local_specializations = saved_local_specializations;
8578     }
8579   
8580   return result;
8581 }
8582
8583 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
8584    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
8585    parameter packs; all parms generated from a function parameter pack will
8586    have the same DECL_PARM_INDEX.  */
8587
8588 tree
8589 get_pattern_parm (tree parm, tree tmpl)
8590 {
8591   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
8592   tree patparm;
8593
8594   if (DECL_ARTIFICIAL (parm))
8595     {
8596       for (patparm = DECL_ARGUMENTS (pattern);
8597            patparm; patparm = DECL_CHAIN (patparm))
8598         if (DECL_ARTIFICIAL (patparm)
8599             && DECL_NAME (parm) == DECL_NAME (patparm))
8600           break;
8601     }
8602   else
8603     {
8604       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
8605       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
8606       gcc_assert (DECL_PARM_INDEX (patparm)
8607                   == DECL_PARM_INDEX (parm));
8608     }
8609
8610   return patparm;
8611 }
8612
8613 /* Substitute ARGS into the vector or list of template arguments T.  */
8614
8615 static tree
8616 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8617 {
8618   tree orig_t = t;
8619   int len = TREE_VEC_LENGTH (t);
8620   int need_new = 0, i, expanded_len_adjust = 0, out;
8621   tree *elts = XALLOCAVEC (tree, len);
8622
8623   for (i = 0; i < len; i++)
8624     {
8625       tree orig_arg = TREE_VEC_ELT (t, i);
8626       tree new_arg;
8627
8628       if (TREE_CODE (orig_arg) == TREE_VEC)
8629         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
8630       else if (PACK_EXPANSION_P (orig_arg))
8631         {
8632           /* Substitute into an expansion expression.  */
8633           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
8634
8635           if (TREE_CODE (new_arg) == TREE_VEC)
8636             /* Add to the expanded length adjustment the number of
8637                expanded arguments. We subtract one from this
8638                measurement, because the argument pack expression
8639                itself is already counted as 1 in
8640                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
8641                the argument pack is empty.  */
8642             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
8643         }
8644       else if (ARGUMENT_PACK_P (orig_arg))
8645         {
8646           /* Substitute into each of the arguments.  */
8647           new_arg = TYPE_P (orig_arg)
8648             ? cxx_make_type (TREE_CODE (orig_arg))
8649             : make_node (TREE_CODE (orig_arg));
8650           
8651           SET_ARGUMENT_PACK_ARGS (
8652             new_arg,
8653             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
8654                                   args, complain, in_decl));
8655
8656           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
8657             new_arg = error_mark_node;
8658
8659           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
8660             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
8661                                           complain, in_decl);
8662             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
8663
8664             if (TREE_TYPE (new_arg) == error_mark_node)
8665               new_arg = error_mark_node;
8666           }
8667         }
8668       else
8669         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
8670
8671       if (new_arg == error_mark_node)
8672         return error_mark_node;
8673
8674       elts[i] = new_arg;
8675       if (new_arg != orig_arg)
8676         need_new = 1;
8677     }
8678
8679   if (!need_new)
8680     return t;
8681
8682   /* Make space for the expanded arguments coming from template
8683      argument packs.  */
8684   t = make_tree_vec (len + expanded_len_adjust);
8685   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
8686      arguments for a member template.
8687      In that case each TREE_VEC in ORIG_T represents a level of template
8688      arguments, and ORIG_T won't carry any non defaulted argument count.
8689      It will rather be the nested TREE_VECs that will carry one.
8690      In other words, ORIG_T carries a non defaulted argument count only
8691      if it doesn't contain any nested TREE_VEC.  */
8692   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
8693     {
8694       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
8695       count += expanded_len_adjust;
8696       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
8697     }
8698   for (i = 0, out = 0; i < len; i++)
8699     {
8700       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
8701            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
8702           && TREE_CODE (elts[i]) == TREE_VEC)
8703         {
8704           int idx;
8705
8706           /* Now expand the template argument pack "in place".  */
8707           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
8708             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
8709         }
8710       else
8711         {
8712           TREE_VEC_ELT (t, out) = elts[i];
8713           out++;
8714         }
8715     }
8716
8717   return t;
8718 }
8719
8720 /* Return the result of substituting ARGS into the template parameters
8721    given by PARMS.  If there are m levels of ARGS and m + n levels of
8722    PARMS, then the result will contain n levels of PARMS.  For
8723    example, if PARMS is `template <class T> template <class U>
8724    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
8725    result will be `template <int*, double, class V>'.  */
8726
8727 static tree
8728 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
8729 {
8730   tree r = NULL_TREE;
8731   tree* new_parms;
8732
8733   /* When substituting into a template, we must set
8734      PROCESSING_TEMPLATE_DECL as the template parameters may be
8735      dependent if they are based on one-another, and the dependency
8736      predicates are short-circuit outside of templates.  */
8737   ++processing_template_decl;
8738
8739   for (new_parms = &r;
8740        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
8741        new_parms = &(TREE_CHAIN (*new_parms)),
8742          parms = TREE_CHAIN (parms))
8743     {
8744       tree new_vec =
8745         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
8746       int i;
8747
8748       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
8749         {
8750           tree tuple;
8751           tree default_value;
8752           tree parm_decl;
8753
8754           if (parms == error_mark_node)
8755             continue;
8756
8757           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
8758
8759           if (tuple == error_mark_node)
8760             continue;
8761
8762           default_value = TREE_PURPOSE (tuple);
8763           parm_decl = TREE_VALUE (tuple);
8764
8765           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
8766           if (TREE_CODE (parm_decl) == PARM_DECL
8767               && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
8768             parm_decl = error_mark_node;
8769           default_value = tsubst_template_arg (default_value, args,
8770                                                complain, NULL_TREE);
8771
8772           tuple = build_tree_list (default_value, parm_decl);
8773           TREE_VEC_ELT (new_vec, i) = tuple;
8774         }
8775
8776       *new_parms =
8777         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
8778                              - TMPL_ARGS_DEPTH (args)),
8779                    new_vec, NULL_TREE);
8780     }
8781
8782   --processing_template_decl;
8783
8784   return r;
8785 }
8786
8787 /* Substitute the ARGS into the indicated aggregate (or enumeration)
8788    type T.  If T is not an aggregate or enumeration type, it is
8789    handled as if by tsubst.  IN_DECL is as for tsubst.  If
8790    ENTERING_SCOPE is nonzero, T is the context for a template which
8791    we are presently tsubst'ing.  Return the substituted value.  */
8792
8793 static tree
8794 tsubst_aggr_type (tree t,
8795                   tree args,
8796                   tsubst_flags_t complain,
8797                   tree in_decl,
8798                   int entering_scope)
8799 {
8800   if (t == NULL_TREE)
8801     return NULL_TREE;
8802
8803   switch (TREE_CODE (t))
8804     {
8805     case RECORD_TYPE:
8806       if (TYPE_PTRMEMFUNC_P (t))
8807         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
8808
8809       /* Else fall through.  */
8810     case ENUMERAL_TYPE:
8811     case UNION_TYPE:
8812       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
8813         {
8814           tree argvec;
8815           tree context;
8816           tree r;
8817           int saved_unevaluated_operand;
8818           int saved_inhibit_evaluation_warnings;
8819
8820           /* In "sizeof(X<I>)" we need to evaluate "I".  */
8821           saved_unevaluated_operand = cp_unevaluated_operand;
8822           cp_unevaluated_operand = 0;
8823           saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
8824           c_inhibit_evaluation_warnings = 0;
8825
8826           /* First, determine the context for the type we are looking
8827              up.  */
8828           context = TYPE_CONTEXT (t);
8829           if (context)
8830             {
8831               context = tsubst_aggr_type (context, args, complain,
8832                                           in_decl, /*entering_scope=*/1);
8833               /* If context is a nested class inside a class template,
8834                  it may still need to be instantiated (c++/33959).  */
8835               if (TYPE_P (context))
8836                 context = complete_type (context);
8837             }
8838
8839           /* Then, figure out what arguments are appropriate for the
8840              type we are trying to find.  For example, given:
8841
8842                template <class T> struct S;
8843                template <class T, class U> void f(T, U) { S<U> su; }
8844
8845              and supposing that we are instantiating f<int, double>,
8846              then our ARGS will be {int, double}, but, when looking up
8847              S we only want {double}.  */
8848           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
8849                                          complain, in_decl);
8850           if (argvec == error_mark_node)
8851             r = error_mark_node;
8852           else
8853             {
8854               r = lookup_template_class (t, argvec, in_decl, context,
8855                                          entering_scope, complain);
8856               r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
8857             }
8858
8859           cp_unevaluated_operand = saved_unevaluated_operand;
8860           c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
8861
8862           return r;
8863         }
8864       else
8865         /* This is not a template type, so there's nothing to do.  */
8866         return t;
8867
8868     default:
8869       return tsubst (t, args, complain, in_decl);
8870     }
8871 }
8872
8873 /* Substitute into the default argument ARG (a default argument for
8874    FN), which has the indicated TYPE.  */
8875
8876 tree
8877 tsubst_default_argument (tree fn, tree type, tree arg)
8878 {
8879   tree saved_class_ptr = NULL_TREE;
8880   tree saved_class_ref = NULL_TREE;
8881
8882   /* This can happen in invalid code.  */
8883   if (TREE_CODE (arg) == DEFAULT_ARG)
8884     return arg;
8885
8886   /* This default argument came from a template.  Instantiate the
8887      default argument here, not in tsubst.  In the case of
8888      something like:
8889
8890        template <class T>
8891        struct S {
8892          static T t();
8893          void f(T = t());
8894        };
8895
8896      we must be careful to do name lookup in the scope of S<T>,
8897      rather than in the current class.  */
8898   push_access_scope (fn);
8899   /* The "this" pointer is not valid in a default argument.  */
8900   if (cfun)
8901     {
8902       saved_class_ptr = current_class_ptr;
8903       cp_function_chain->x_current_class_ptr = NULL_TREE;
8904       saved_class_ref = current_class_ref;
8905       cp_function_chain->x_current_class_ref = NULL_TREE;
8906     }
8907
8908   push_deferring_access_checks(dk_no_deferred);
8909   /* The default argument expression may cause implicitly defined
8910      member functions to be synthesized, which will result in garbage
8911      collection.  We must treat this situation as if we were within
8912      the body of function so as to avoid collecting live data on the
8913      stack.  */
8914   ++function_depth;
8915   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
8916                      tf_warning_or_error, NULL_TREE,
8917                      /*integral_constant_expression_p=*/false);
8918   --function_depth;
8919   pop_deferring_access_checks();
8920
8921   /* Restore the "this" pointer.  */
8922   if (cfun)
8923     {
8924       cp_function_chain->x_current_class_ptr = saved_class_ptr;
8925       cp_function_chain->x_current_class_ref = saved_class_ref;
8926     }
8927
8928   /* Make sure the default argument is reasonable.  */
8929   arg = check_default_argument (type, arg);
8930
8931   pop_access_scope (fn);
8932
8933   return arg;
8934 }
8935
8936 /* Substitute into all the default arguments for FN.  */
8937
8938 static void
8939 tsubst_default_arguments (tree fn)
8940 {
8941   tree arg;
8942   tree tmpl_args;
8943
8944   tmpl_args = DECL_TI_ARGS (fn);
8945
8946   /* If this function is not yet instantiated, we certainly don't need
8947      its default arguments.  */
8948   if (uses_template_parms (tmpl_args))
8949     return;
8950   /* Don't do this again for clones.  */
8951   if (DECL_CLONED_FUNCTION_P (fn))
8952     return;
8953
8954   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
8955        arg;
8956        arg = TREE_CHAIN (arg))
8957     if (TREE_PURPOSE (arg))
8958       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
8959                                                     TREE_VALUE (arg),
8960                                                     TREE_PURPOSE (arg));
8961 }
8962
8963 /* Substitute the ARGS into the T, which is a _DECL.  Return the
8964    result of the substitution.  Issue error and warning messages under
8965    control of COMPLAIN.  */
8966
8967 static tree
8968 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
8969 {
8970 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
8971   location_t saved_loc;
8972   tree r = NULL_TREE;
8973   tree in_decl = t;
8974   hashval_t hash = 0;
8975
8976   /* Set the filename and linenumber to improve error-reporting.  */
8977   saved_loc = input_location;
8978   input_location = DECL_SOURCE_LOCATION (t);
8979
8980   switch (TREE_CODE (t))
8981     {
8982     case TEMPLATE_DECL:
8983       {
8984         /* We can get here when processing a member function template,
8985            member class template, or template template parameter.  */
8986         tree decl = DECL_TEMPLATE_RESULT (t);
8987         tree spec;
8988         tree tmpl_args;
8989         tree full_args;
8990
8991         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
8992           {
8993             /* Template template parameter is treated here.  */
8994             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8995             if (new_type == error_mark_node)
8996               RETURN (error_mark_node);
8997
8998             r = copy_decl (t);
8999             DECL_CHAIN (r) = NULL_TREE;
9000             TREE_TYPE (r) = new_type;
9001             DECL_TEMPLATE_RESULT (r)
9002               = build_decl (DECL_SOURCE_LOCATION (decl),
9003                             TYPE_DECL, DECL_NAME (decl), new_type);
9004             DECL_TEMPLATE_PARMS (r)
9005               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
9006                                        complain);
9007             TYPE_NAME (new_type) = r;
9008             break;
9009           }
9010
9011         /* We might already have an instance of this template.
9012            The ARGS are for the surrounding class type, so the
9013            full args contain the tsubst'd args for the context,
9014            plus the innermost args from the template decl.  */
9015         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
9016           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
9017           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
9018         /* Because this is a template, the arguments will still be
9019            dependent, even after substitution.  If
9020            PROCESSING_TEMPLATE_DECL is not set, the dependency
9021            predicates will short-circuit.  */
9022         ++processing_template_decl;
9023         full_args = tsubst_template_args (tmpl_args, args,
9024                                           complain, in_decl);
9025         --processing_template_decl;
9026         if (full_args == error_mark_node)
9027           RETURN (error_mark_node);
9028
9029         /* If this is a default template template argument,
9030            tsubst might not have changed anything.  */
9031         if (full_args == tmpl_args)
9032           RETURN (t);
9033
9034         hash = hash_tmpl_and_args (t, full_args);
9035         spec = retrieve_specialization (t, full_args, hash);
9036         if (spec != NULL_TREE)
9037           {
9038             r = spec;
9039             break;
9040           }
9041
9042         /* Make a new template decl.  It will be similar to the
9043            original, but will record the current template arguments.
9044            We also create a new function declaration, which is just
9045            like the old one, but points to this new template, rather
9046            than the old one.  */
9047         r = copy_decl (t);
9048         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
9049         DECL_CHAIN (r) = NULL_TREE;
9050
9051         DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
9052
9053         if (TREE_CODE (decl) == TYPE_DECL)
9054           {
9055             tree new_type;
9056             ++processing_template_decl;
9057             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9058             --processing_template_decl;
9059             if (new_type == error_mark_node)
9060               RETURN (error_mark_node);
9061
9062             TREE_TYPE (r) = new_type;
9063             CLASSTYPE_TI_TEMPLATE (new_type) = r;
9064             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
9065             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
9066             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
9067           }
9068         else
9069           {
9070             tree new_decl;
9071             ++processing_template_decl;
9072             new_decl = tsubst (decl, args, complain, in_decl);
9073             --processing_template_decl;
9074             if (new_decl == error_mark_node)
9075               RETURN (error_mark_node);
9076
9077             DECL_TEMPLATE_RESULT (r) = new_decl;
9078             DECL_TI_TEMPLATE (new_decl) = r;
9079             TREE_TYPE (r) = TREE_TYPE (new_decl);
9080             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
9081             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
9082           }
9083
9084         SET_DECL_IMPLICIT_INSTANTIATION (r);
9085         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
9086         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
9087
9088         /* The template parameters for this new template are all the
9089            template parameters for the old template, except the
9090            outermost level of parameters.  */
9091         DECL_TEMPLATE_PARMS (r)
9092           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
9093                                    complain);
9094
9095         if (PRIMARY_TEMPLATE_P (t))
9096           DECL_PRIMARY_TEMPLATE (r) = r;
9097
9098         if (TREE_CODE (decl) != TYPE_DECL)
9099           /* Record this non-type partial instantiation.  */
9100           register_specialization (r, t,
9101                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
9102                                    false, hash);
9103       }
9104       break;
9105
9106     case FUNCTION_DECL:
9107       {
9108         tree ctx;
9109         tree argvec = NULL_TREE;
9110         tree *friends;
9111         tree gen_tmpl;
9112         tree type;
9113         int member;
9114         int args_depth;
9115         int parms_depth;
9116
9117         /* Nobody should be tsubst'ing into non-template functions.  */
9118         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
9119
9120         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
9121           {
9122             tree spec;
9123             bool dependent_p;
9124
9125             /* If T is not dependent, just return it.  We have to
9126                increment PROCESSING_TEMPLATE_DECL because
9127                value_dependent_expression_p assumes that nothing is
9128                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
9129             ++processing_template_decl;
9130             dependent_p = value_dependent_expression_p (t);
9131             --processing_template_decl;
9132             if (!dependent_p)
9133               RETURN (t);
9134
9135             /* Calculate the most general template of which R is a
9136                specialization, and the complete set of arguments used to
9137                specialize R.  */
9138             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
9139             argvec = tsubst_template_args (DECL_TI_ARGS
9140                                           (DECL_TEMPLATE_RESULT
9141                                                  (DECL_TI_TEMPLATE (t))),
9142                                            args, complain, in_decl);
9143
9144             /* Check to see if we already have this specialization.  */
9145             hash = hash_tmpl_and_args (gen_tmpl, argvec);
9146             spec = retrieve_specialization (gen_tmpl, argvec, hash);
9147
9148             if (spec)
9149               {
9150                 r = spec;
9151                 break;
9152               }
9153
9154             /* We can see more levels of arguments than parameters if
9155                there was a specialization of a member template, like
9156                this:
9157
9158                  template <class T> struct S { template <class U> void f(); }
9159                  template <> template <class U> void S<int>::f(U);
9160
9161                Here, we'll be substituting into the specialization,
9162                because that's where we can find the code we actually
9163                want to generate, but we'll have enough arguments for
9164                the most general template.
9165
9166                We also deal with the peculiar case:
9167
9168                  template <class T> struct S {
9169                    template <class U> friend void f();
9170                  };
9171                  template <class U> void f() {}
9172                  template S<int>;
9173                  template void f<double>();
9174
9175                Here, the ARGS for the instantiation of will be {int,
9176                double}.  But, we only need as many ARGS as there are
9177                levels of template parameters in CODE_PATTERN.  We are
9178                careful not to get fooled into reducing the ARGS in
9179                situations like:
9180
9181                  template <class T> struct S { template <class U> void f(U); }
9182                  template <class T> template <> void S<T>::f(int) {}
9183
9184                which we can spot because the pattern will be a
9185                specialization in this case.  */
9186             args_depth = TMPL_ARGS_DEPTH (args);
9187             parms_depth =
9188               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
9189             if (args_depth > parms_depth
9190                 && !DECL_TEMPLATE_SPECIALIZATION (t))
9191               args = get_innermost_template_args (args, parms_depth);
9192           }
9193         else
9194           {
9195             /* This special case arises when we have something like this:
9196
9197                  template <class T> struct S {
9198                    friend void f<int>(int, double);
9199                  };
9200
9201                Here, the DECL_TI_TEMPLATE for the friend declaration
9202                will be an IDENTIFIER_NODE.  We are being called from
9203                tsubst_friend_function, and we want only to create a
9204                new decl (R) with appropriate types so that we can call
9205                determine_specialization.  */
9206             gen_tmpl = NULL_TREE;
9207           }
9208
9209         if (DECL_CLASS_SCOPE_P (t))
9210           {
9211             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
9212               member = 2;
9213             else
9214               member = 1;
9215             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
9216                                     complain, t, /*entering_scope=*/1);
9217           }
9218         else
9219           {
9220             member = 0;
9221             ctx = DECL_CONTEXT (t);
9222           }
9223         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9224         if (type == error_mark_node)
9225           RETURN (error_mark_node);
9226
9227         /* We do NOT check for matching decls pushed separately at this
9228            point, as they may not represent instantiations of this
9229            template, and in any case are considered separate under the
9230            discrete model.  */
9231         r = copy_decl (t);
9232         DECL_USE_TEMPLATE (r) = 0;
9233         TREE_TYPE (r) = type;
9234         /* Clear out the mangled name and RTL for the instantiation.  */
9235         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
9236         SET_DECL_RTL (r, NULL);
9237         /* Leave DECL_INITIAL set on deleted instantiations.  */
9238         if (!DECL_DELETED_FN (r))
9239           DECL_INITIAL (r) = NULL_TREE;
9240         DECL_CONTEXT (r) = ctx;
9241
9242         if (member && DECL_CONV_FN_P (r))
9243           /* Type-conversion operator.  Reconstruct the name, in
9244              case it's the name of one of the template's parameters.  */
9245           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
9246
9247         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
9248                                      complain, t);
9249         DECL_RESULT (r) = NULL_TREE;
9250
9251         TREE_STATIC (r) = 0;
9252         TREE_PUBLIC (r) = TREE_PUBLIC (t);
9253         DECL_EXTERNAL (r) = 1;
9254         /* If this is an instantiation of a function with internal
9255            linkage, we already know what object file linkage will be
9256            assigned to the instantiation.  */
9257         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
9258         DECL_DEFER_OUTPUT (r) = 0;
9259         DECL_CHAIN (r) = NULL_TREE;
9260         DECL_PENDING_INLINE_INFO (r) = 0;
9261         DECL_PENDING_INLINE_P (r) = 0;
9262         DECL_SAVED_TREE (r) = NULL_TREE;
9263         DECL_STRUCT_FUNCTION (r) = NULL;
9264         TREE_USED (r) = 0;
9265         /* We'll re-clone as appropriate in instantiate_template.  */
9266         DECL_CLONED_FUNCTION (r) = NULL_TREE;
9267
9268         /* If we aren't complaining now, return on error before we register
9269            the specialization so that we'll complain eventually.  */
9270         if ((complain & tf_error) == 0
9271             && IDENTIFIER_OPNAME_P (DECL_NAME (r))
9272             && !grok_op_properties (r, /*complain=*/false))
9273           RETURN (error_mark_node);
9274
9275         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
9276            this in the special friend case mentioned above where
9277            GEN_TMPL is NULL.  */
9278         if (gen_tmpl)
9279           {
9280             DECL_TEMPLATE_INFO (r)
9281               = build_template_info (gen_tmpl, argvec);
9282             SET_DECL_IMPLICIT_INSTANTIATION (r);
9283             register_specialization (r, gen_tmpl, argvec, false, hash);
9284
9285             /* We're not supposed to instantiate default arguments
9286                until they are called, for a template.  But, for a
9287                declaration like:
9288
9289                  template <class T> void f ()
9290                  { extern void g(int i = T()); }
9291
9292                we should do the substitution when the template is
9293                instantiated.  We handle the member function case in
9294                instantiate_class_template since the default arguments
9295                might refer to other members of the class.  */
9296             if (!member
9297                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
9298                 && !uses_template_parms (argvec))
9299               tsubst_default_arguments (r);
9300           }
9301         else
9302           DECL_TEMPLATE_INFO (r) = NULL_TREE;
9303
9304         /* Copy the list of befriending classes.  */
9305         for (friends = &DECL_BEFRIENDING_CLASSES (r);
9306              *friends;
9307              friends = &TREE_CHAIN (*friends))
9308           {
9309             *friends = copy_node (*friends);
9310             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
9311                                             args, complain,
9312                                             in_decl);
9313           }
9314
9315         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
9316           {
9317             maybe_retrofit_in_chrg (r);
9318             if (DECL_CONSTRUCTOR_P (r))
9319               grok_ctor_properties (ctx, r);
9320             /* If this is an instantiation of a member template, clone it.
9321                If it isn't, that'll be handled by
9322                clone_constructors_and_destructors.  */
9323             if (PRIMARY_TEMPLATE_P (gen_tmpl))
9324               clone_function_decl (r, /*update_method_vec_p=*/0);
9325           }
9326         else if ((complain & tf_error) != 0
9327                  && IDENTIFIER_OPNAME_P (DECL_NAME (r))
9328                  && !grok_op_properties (r, /*complain=*/true))
9329           RETURN (error_mark_node);
9330
9331         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
9332           SET_DECL_FRIEND_CONTEXT (r,
9333                                    tsubst (DECL_FRIEND_CONTEXT (t),
9334                                             args, complain, in_decl));
9335
9336         /* Possibly limit visibility based on template args.  */
9337         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
9338         if (DECL_VISIBILITY_SPECIFIED (t))
9339           {
9340             DECL_VISIBILITY_SPECIFIED (r) = 0;
9341             DECL_ATTRIBUTES (r)
9342               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
9343           }
9344         determine_visibility (r);
9345         if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
9346             && !processing_template_decl)
9347           defaulted_late_check (r);
9348
9349         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9350                                         args, complain, in_decl);
9351       }
9352       break;
9353
9354     case PARM_DECL:
9355       {
9356         tree type = NULL_TREE;
9357         int i, len = 1;
9358         tree expanded_types = NULL_TREE;
9359         tree prev_r = NULL_TREE;
9360         tree first_r = NULL_TREE;
9361
9362         if (FUNCTION_PARAMETER_PACK_P (t))
9363           {
9364             /* If there is a local specialization that isn't a
9365                parameter pack, it means that we're doing a "simple"
9366                substitution from inside tsubst_pack_expansion. Just
9367                return the local specialization (which will be a single
9368                parm).  */
9369             tree spec = retrieve_local_specialization (t);
9370             if (spec 
9371                 && TREE_CODE (spec) == PARM_DECL
9372                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
9373               RETURN (spec);
9374
9375             /* Expand the TYPE_PACK_EXPANSION that provides the types for
9376                the parameters in this function parameter pack.  */
9377             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
9378                                                     complain, in_decl);
9379             if (TREE_CODE (expanded_types) == TREE_VEC)
9380               {
9381                 len = TREE_VEC_LENGTH (expanded_types);
9382
9383                 /* Zero-length parameter packs are boring. Just substitute
9384                    into the chain.  */
9385                 if (len == 0)
9386                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
9387                                   TREE_CHAIN (t)));
9388               }
9389             else
9390               {
9391                 /* All we did was update the type. Make a note of that.  */
9392                 type = expanded_types;
9393                 expanded_types = NULL_TREE;
9394               }
9395           }
9396
9397         /* Loop through all of the parameter's we'll build. When T is
9398            a function parameter pack, LEN is the number of expanded
9399            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
9400         r = NULL_TREE;
9401         for (i = 0; i < len; ++i)
9402           {
9403             prev_r = r;
9404             r = copy_node (t);
9405             if (DECL_TEMPLATE_PARM_P (t))
9406               SET_DECL_TEMPLATE_PARM_P (r);
9407
9408             /* An argument of a function parameter pack is not a parameter
9409                pack.  */
9410             FUNCTION_PARAMETER_PACK_P (r) = false;
9411
9412             if (expanded_types)
9413               /* We're on the Ith parameter of the function parameter
9414                  pack.  */
9415               {
9416                 /* Get the Ith type.  */
9417                 type = TREE_VEC_ELT (expanded_types, i);
9418
9419                 if (DECL_NAME (r))
9420                   /* Rename the parameter to include the index.  */
9421                   DECL_NAME (r) =
9422                     make_ith_pack_parameter_name (DECL_NAME (r), i);
9423               }
9424             else if (!type)
9425               /* We're dealing with a normal parameter.  */
9426               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9427
9428             type = type_decays_to (type);
9429             TREE_TYPE (r) = type;
9430             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9431
9432             if (DECL_INITIAL (r))
9433               {
9434                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
9435                   DECL_INITIAL (r) = TREE_TYPE (r);
9436                 else
9437                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
9438                                              complain, in_decl);
9439               }
9440
9441             DECL_CONTEXT (r) = NULL_TREE;
9442
9443             if (!DECL_TEMPLATE_PARM_P (r))
9444               DECL_ARG_TYPE (r) = type_passed_as (type);
9445
9446             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9447                                             args, complain, in_decl);
9448
9449             /* Keep track of the first new parameter we
9450                generate. That's what will be returned to the
9451                caller.  */
9452             if (!first_r)
9453               first_r = r;
9454
9455             /* Build a proper chain of parameters when substituting
9456                into a function parameter pack.  */
9457             if (prev_r)
9458               DECL_CHAIN (prev_r) = r;
9459           }
9460
9461         if (DECL_CHAIN (t))
9462           DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
9463                                    complain, DECL_CHAIN (t));
9464
9465         /* FIRST_R contains the start of the chain we've built.  */
9466         r = first_r;
9467       }
9468       break;
9469
9470     case FIELD_DECL:
9471       {
9472         tree type;
9473
9474         r = copy_decl (t);
9475         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9476         if (type == error_mark_node)
9477           RETURN (error_mark_node);
9478         TREE_TYPE (r) = type;
9479         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9480
9481         /* DECL_INITIAL gives the number of bits in a bit-field.  */
9482         DECL_INITIAL (r)
9483           = tsubst_expr (DECL_INITIAL (t), args,
9484                          complain, in_decl,
9485                          /*integral_constant_expression_p=*/true);
9486         /* We don't have to set DECL_CONTEXT here; it is set by
9487            finish_member_declaration.  */
9488         DECL_CHAIN (r) = NULL_TREE;
9489         if (VOID_TYPE_P (type))
9490           error ("instantiation of %q+D as type %qT", r, type);
9491
9492         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
9493                                         args, complain, in_decl);
9494       }
9495       break;
9496
9497     case USING_DECL:
9498       /* We reach here only for member using decls.  */
9499       if (DECL_DEPENDENT_P (t))
9500         {
9501           r = do_class_using_decl
9502             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
9503              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
9504           if (!r)
9505             r = error_mark_node;
9506           else
9507             {
9508               TREE_PROTECTED (r) = TREE_PROTECTED (t);
9509               TREE_PRIVATE (r) = TREE_PRIVATE (t);
9510             }
9511         }
9512       else
9513         {
9514           r = copy_node (t);
9515           DECL_CHAIN (r) = NULL_TREE;
9516         }
9517       break;
9518
9519     case TYPE_DECL:
9520     case VAR_DECL:
9521       {
9522         tree argvec = NULL_TREE;
9523         tree gen_tmpl = NULL_TREE;
9524         tree spec;
9525         tree tmpl = NULL_TREE;
9526         tree ctx;
9527         tree type = NULL_TREE;
9528         bool local_p;
9529
9530         if (TREE_CODE (t) == TYPE_DECL
9531             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
9532           {
9533             /* If this is the canonical decl, we don't have to
9534                mess with instantiations, and often we can't (for
9535                typename, template type parms and such).  Note that
9536                TYPE_NAME is not correct for the above test if
9537                we've copied the type for a typedef.  */
9538             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9539             if (type == error_mark_node)
9540               RETURN (error_mark_node);
9541             r = TYPE_NAME (type);
9542             break;
9543           }
9544
9545         /* Check to see if we already have the specialization we
9546            need.  */
9547         spec = NULL_TREE;
9548         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
9549           {
9550             /* T is a static data member or namespace-scope entity.
9551                We have to substitute into namespace-scope variables
9552                (even though such entities are never templates) because
9553                of cases like:
9554                
9555                  template <class T> void f() { extern T t; }
9556
9557                where the entity referenced is not known until
9558                instantiation time.  */
9559             local_p = false;
9560             ctx = DECL_CONTEXT (t);
9561             if (DECL_CLASS_SCOPE_P (t))
9562               {
9563                 ctx = tsubst_aggr_type (ctx, args,
9564                                         complain,
9565                                         in_decl, /*entering_scope=*/1);
9566                 /* If CTX is unchanged, then T is in fact the
9567                    specialization we want.  That situation occurs when
9568                    referencing a static data member within in its own
9569                    class.  We can use pointer equality, rather than
9570                    same_type_p, because DECL_CONTEXT is always
9571                    canonical.  */
9572                 if (ctx == DECL_CONTEXT (t))
9573                   spec = t;
9574               }
9575
9576             if (!spec)
9577               {
9578                 tmpl = DECL_TI_TEMPLATE (t);
9579                 gen_tmpl = most_general_template (tmpl);
9580                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
9581                 hash = hash_tmpl_and_args (gen_tmpl, argvec);
9582                 spec = retrieve_specialization (gen_tmpl, argvec, hash);
9583               }
9584           }
9585         else
9586           {
9587             /* A local variable.  */
9588             local_p = true;
9589             /* Subsequent calls to pushdecl will fill this in.  */
9590             ctx = NULL_TREE;
9591             spec = retrieve_local_specialization (t);
9592           }
9593         /* If we already have the specialization we need, there is
9594            nothing more to do.  */ 
9595         if (spec)
9596           {
9597             r = spec;
9598             break;
9599           }
9600
9601         /* Create a new node for the specialization we need.  */
9602         r = copy_decl (t);
9603         if (type == NULL_TREE)
9604           {
9605             if (is_typedef_decl (t))
9606               type = DECL_ORIGINAL_TYPE (t);
9607             else
9608               type = TREE_TYPE (t);
9609             if (TREE_CODE (t) == VAR_DECL && VAR_HAD_UNKNOWN_BOUND (t))
9610               type = strip_array_domain (type);
9611             type = tsubst (type, args, complain, in_decl);
9612           }
9613         if (TREE_CODE (r) == VAR_DECL)
9614           {
9615             /* Even if the original location is out of scope, the
9616                newly substituted one is not.  */
9617             DECL_DEAD_FOR_LOCAL (r) = 0;
9618             DECL_INITIALIZED_P (r) = 0;
9619             DECL_TEMPLATE_INSTANTIATED (r) = 0;
9620             if (type == error_mark_node)
9621               RETURN (error_mark_node);
9622             if (TREE_CODE (type) == FUNCTION_TYPE)
9623               {
9624                 /* It may seem that this case cannot occur, since:
9625
9626                      typedef void f();
9627                      void g() { f x; }
9628
9629                    declares a function, not a variable.  However:
9630       
9631                      typedef void f();
9632                      template <typename T> void g() { T t; }
9633                      template void g<f>();
9634
9635                    is an attempt to declare a variable with function
9636                    type.  */
9637                 error ("variable %qD has function type",
9638                        /* R is not yet sufficiently initialized, so we
9639                           just use its name.  */
9640                        DECL_NAME (r));
9641                 RETURN (error_mark_node);
9642               }
9643             type = complete_type (type);
9644             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
9645               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
9646             type = check_var_type (DECL_NAME (r), type);
9647
9648             if (DECL_HAS_VALUE_EXPR_P (t))
9649               {
9650                 tree ve = DECL_VALUE_EXPR (t);
9651                 ve = tsubst_expr (ve, args, complain, in_decl,
9652                                   /*constant_expression_p=*/false);
9653                 SET_DECL_VALUE_EXPR (r, ve);
9654               }
9655           }
9656         else if (DECL_SELF_REFERENCE_P (t))
9657           SET_DECL_SELF_REFERENCE_P (r);
9658         TREE_TYPE (r) = type;
9659         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
9660         DECL_CONTEXT (r) = ctx;
9661         /* Clear out the mangled name and RTL for the instantiation.  */
9662         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
9663         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
9664           SET_DECL_RTL (r, NULL);
9665         /* The initializer must not be expanded until it is required;
9666            see [temp.inst].  */
9667         DECL_INITIAL (r) = NULL_TREE;
9668         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
9669           SET_DECL_RTL (r, NULL);
9670         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
9671         if (TREE_CODE (r) == VAR_DECL)
9672           {
9673             /* Possibly limit visibility based on template args.  */
9674             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
9675             if (DECL_VISIBILITY_SPECIFIED (t))
9676               {
9677                 DECL_VISIBILITY_SPECIFIED (r) = 0;
9678                 DECL_ATTRIBUTES (r)
9679                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
9680               }
9681             determine_visibility (r);
9682           }
9683
9684         if (!local_p)
9685           {
9686             /* A static data member declaration is always marked
9687                external when it is declared in-class, even if an
9688                initializer is present.  We mimic the non-template
9689                processing here.  */
9690             DECL_EXTERNAL (r) = 1;
9691
9692             register_specialization (r, gen_tmpl, argvec, false, hash);
9693             DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
9694             SET_DECL_IMPLICIT_INSTANTIATION (r);
9695           }
9696         else if (cp_unevaluated_operand)
9697           {
9698             /* We're substituting this var in a decltype outside of its
9699                scope, such as for a lambda return type.  Don't add it to
9700                local_specializations, do perform auto deduction.  */
9701             tree auto_node = type_uses_auto (type);
9702             tree init
9703               = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
9704                              /*constant_expression_p=*/false);
9705
9706             if (auto_node && init && describable_type (init))
9707               {
9708                 type = do_auto_deduction (type, init, auto_node);
9709                 TREE_TYPE (r) = type;
9710               }
9711           }
9712         else
9713           register_local_specialization (r, t);
9714
9715         DECL_CHAIN (r) = NULL_TREE;
9716
9717         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
9718                                         /*flags=*/0,
9719                                         args, complain, in_decl);
9720
9721         /* Preserve a typedef that names a type.  */
9722         if (is_typedef_decl (r))
9723           {
9724             DECL_ORIGINAL_TYPE (r) = NULL_TREE;
9725             set_underlying_type (r);
9726           }
9727
9728         layout_decl (r, 0);
9729       }
9730       break;
9731
9732     default:
9733       gcc_unreachable ();
9734     }
9735 #undef RETURN
9736
9737  out:
9738   /* Restore the file and line information.  */
9739   input_location = saved_loc;
9740
9741   return r;
9742 }
9743
9744 /* Substitute into the ARG_TYPES of a function type.  */
9745
9746 static tree
9747 tsubst_arg_types (tree arg_types,
9748                   tree args,
9749                   tsubst_flags_t complain,
9750                   tree in_decl)
9751 {
9752   tree remaining_arg_types;
9753   tree type = NULL_TREE;
9754   int i = 1;
9755   tree expanded_args = NULL_TREE;
9756   tree default_arg;
9757
9758   if (!arg_types || arg_types == void_list_node)
9759     return arg_types;
9760
9761   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
9762                                           args, complain, in_decl);
9763   if (remaining_arg_types == error_mark_node)
9764     return error_mark_node;
9765
9766   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
9767     {
9768       /* For a pack expansion, perform substitution on the
9769          entire expression. Later on, we'll handle the arguments
9770          one-by-one.  */
9771       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
9772                                             args, complain, in_decl);
9773
9774       if (TREE_CODE (expanded_args) == TREE_VEC)
9775         /* So that we'll spin through the parameters, one by one.  */
9776         i = TREE_VEC_LENGTH (expanded_args);
9777       else
9778         {
9779           /* We only partially substituted into the parameter
9780              pack. Our type is TYPE_PACK_EXPANSION.  */
9781           type = expanded_args;
9782           expanded_args = NULL_TREE;
9783         }
9784     }
9785
9786   while (i > 0) {
9787     --i;
9788     
9789     if (expanded_args)
9790       type = TREE_VEC_ELT (expanded_args, i);
9791     else if (!type)
9792       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
9793
9794     if (type == error_mark_node)
9795       return error_mark_node;
9796     if (VOID_TYPE_P (type))
9797       {
9798         if (complain & tf_error)
9799           {
9800             error ("invalid parameter type %qT", type);
9801             if (in_decl)
9802               error ("in declaration %q+D", in_decl);
9803           }
9804         return error_mark_node;
9805     }
9806     
9807     /* Do array-to-pointer, function-to-pointer conversion, and ignore
9808        top-level qualifiers as required.  */
9809     type = TYPE_MAIN_VARIANT (type_decays_to (type));
9810
9811     /* We do not substitute into default arguments here.  The standard
9812        mandates that they be instantiated only when needed, which is
9813        done in build_over_call.  */
9814     default_arg = TREE_PURPOSE (arg_types);
9815
9816     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
9817       {
9818         /* We've instantiated a template before its default arguments
9819            have been parsed.  This can happen for a nested template
9820            class, and is not an error unless we require the default
9821            argument in a call of this function.  */
9822         remaining_arg_types = 
9823           tree_cons (default_arg, type, remaining_arg_types);
9824         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
9825                        remaining_arg_types);
9826       }
9827     else
9828       remaining_arg_types = 
9829         hash_tree_cons (default_arg, type, remaining_arg_types);
9830   }
9831         
9832   return remaining_arg_types;
9833 }
9834
9835 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
9836    *not* handle the exception-specification for FNTYPE, because the
9837    initial substitution of explicitly provided template parameters
9838    during argument deduction forbids substitution into the
9839    exception-specification:
9840
9841      [temp.deduct]
9842
9843      All references in the function type of the function template to  the
9844      corresponding template parameters are replaced by the specified tem-
9845      plate argument values.  If a substitution in a template parameter or
9846      in  the function type of the function template results in an invalid
9847      type, type deduction fails.  [Note: The equivalent  substitution  in
9848      exception specifications is done only when the function is instanti-
9849      ated, at which point a program is  ill-formed  if  the  substitution
9850      results in an invalid type.]  */
9851
9852 static tree
9853 tsubst_function_type (tree t,
9854                       tree args,
9855                       tsubst_flags_t complain,
9856                       tree in_decl)
9857 {
9858   tree return_type;
9859   tree arg_types;
9860   tree fntype;
9861
9862   /* The TYPE_CONTEXT is not used for function/method types.  */
9863   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
9864
9865   /* Substitute the return type.  */
9866   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9867   if (return_type == error_mark_node)
9868     return error_mark_node;
9869   /* The standard does not presently indicate that creation of a
9870      function type with an invalid return type is a deduction failure.
9871      However, that is clearly analogous to creating an array of "void"
9872      or a reference to a reference.  This is core issue #486.  */
9873   if (TREE_CODE (return_type) == ARRAY_TYPE
9874       || TREE_CODE (return_type) == FUNCTION_TYPE)
9875     {
9876       if (complain & tf_error)
9877         {
9878           if (TREE_CODE (return_type) == ARRAY_TYPE)
9879             error ("function returning an array");
9880           else
9881             error ("function returning a function");
9882         }
9883       return error_mark_node;
9884     }
9885
9886   /* Substitute the argument types.  */
9887   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
9888                                 complain, in_decl);
9889   if (arg_types == error_mark_node)
9890     return error_mark_node;
9891
9892   /* Construct a new type node and return it.  */
9893   if (TREE_CODE (t) == FUNCTION_TYPE)
9894     {
9895       fntype = build_function_type (return_type, arg_types);
9896       fntype = apply_memfn_quals (fntype, type_memfn_quals (t));
9897     }
9898   else
9899     {
9900       tree r = TREE_TYPE (TREE_VALUE (arg_types));
9901       if (! MAYBE_CLASS_TYPE_P (r))
9902         {
9903           /* [temp.deduct]
9904
9905              Type deduction may fail for any of the following
9906              reasons:
9907
9908              -- Attempting to create "pointer to member of T" when T
9909              is not a class type.  */
9910           if (complain & tf_error)
9911             error ("creating pointer to member function of non-class type %qT",
9912                       r);
9913           return error_mark_node;
9914         }
9915
9916       fntype = build_method_type_directly (r, return_type,
9917                                            TREE_CHAIN (arg_types));
9918     }
9919   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
9920
9921   return fntype;
9922 }
9923
9924 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
9925    ARGS into that specification, and return the substituted
9926    specification.  If there is no specification, return NULL_TREE.  */
9927
9928 static tree
9929 tsubst_exception_specification (tree fntype,
9930                                 tree args,
9931                                 tsubst_flags_t complain,
9932                                 tree in_decl)
9933 {
9934   tree specs;
9935   tree new_specs;
9936
9937   specs = TYPE_RAISES_EXCEPTIONS (fntype);
9938   new_specs = NULL_TREE;
9939   if (specs && TREE_PURPOSE (specs))
9940     {
9941       /* A noexcept-specifier.  */
9942       new_specs = tsubst_copy_and_build
9943         (TREE_PURPOSE (specs), args, complain, in_decl, /*function_p=*/false,
9944          /*integral_constant_expression_p=*/true);
9945       new_specs = build_noexcept_spec (new_specs, complain);
9946     }
9947   else if (specs)
9948     {
9949       if (! TREE_VALUE (specs))
9950         new_specs = specs;
9951       else
9952         while (specs)
9953           {
9954             tree spec;
9955             int i, len = 1;
9956             tree expanded_specs = NULL_TREE;
9957
9958             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
9959               {
9960                 /* Expand the pack expansion type.  */
9961                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
9962                                                        args, complain,
9963                                                        in_decl);
9964
9965                 if (expanded_specs == error_mark_node)
9966                   return error_mark_node;
9967                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
9968                   len = TREE_VEC_LENGTH (expanded_specs);
9969                 else
9970                   {
9971                     /* We're substituting into a member template, so
9972                        we got a TYPE_PACK_EXPANSION back.  Add that
9973                        expansion and move on.  */
9974                     gcc_assert (TREE_CODE (expanded_specs) 
9975                                 == TYPE_PACK_EXPANSION);
9976                     new_specs = add_exception_specifier (new_specs,
9977                                                          expanded_specs,
9978                                                          complain);
9979                     specs = TREE_CHAIN (specs);
9980                     continue;
9981                   }
9982               }
9983
9984             for (i = 0; i < len; ++i)
9985               {
9986                 if (expanded_specs)
9987                   spec = TREE_VEC_ELT (expanded_specs, i);
9988                 else
9989                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
9990                 if (spec == error_mark_node)
9991                   return spec;
9992                 new_specs = add_exception_specifier (new_specs, spec, 
9993                                                      complain);
9994               }
9995
9996             specs = TREE_CHAIN (specs);
9997           }
9998     }
9999   return new_specs;
10000 }
10001
10002 /* Take the tree structure T and replace template parameters used
10003    therein with the argument vector ARGS.  IN_DECL is an associated
10004    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
10005    Issue error and warning messages under control of COMPLAIN.  Note
10006    that we must be relatively non-tolerant of extensions here, in
10007    order to preserve conformance; if we allow substitutions that
10008    should not be allowed, we may allow argument deductions that should
10009    not succeed, and therefore report ambiguous overload situations
10010    where there are none.  In theory, we could allow the substitution,
10011    but indicate that it should have failed, and allow our caller to
10012    make sure that the right thing happens, but we don't try to do this
10013    yet.
10014
10015    This function is used for dealing with types, decls and the like;
10016    for expressions, use tsubst_expr or tsubst_copy.  */
10017
10018 tree
10019 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10020 {
10021   enum tree_code code;
10022   tree type, r;
10023
10024   if (t == NULL_TREE || t == error_mark_node
10025       || t == integer_type_node
10026       || t == void_type_node
10027       || t == char_type_node
10028       || t == unknown_type_node
10029       || TREE_CODE (t) == NAMESPACE_DECL
10030       || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
10031     return t;
10032
10033   if (DECL_P (t))
10034     return tsubst_decl (t, args, complain);
10035
10036   if (args == NULL_TREE)
10037     return t;
10038
10039   code = TREE_CODE (t);
10040
10041   if (code == IDENTIFIER_NODE)
10042     type = IDENTIFIER_TYPE_VALUE (t);
10043   else
10044     type = TREE_TYPE (t);
10045
10046   gcc_assert (type != unknown_type_node);
10047
10048   /* Reuse typedefs.  We need to do this to handle dependent attributes,
10049      such as attribute aligned.  */
10050   if (TYPE_P (t)
10051       && typedef_variant_p (t))
10052     {
10053       tree decl = TYPE_NAME (t);
10054       
10055       if (DECL_CLASS_SCOPE_P (decl)
10056           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
10057           && uses_template_parms (DECL_CONTEXT (decl)))
10058         {
10059           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
10060           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
10061           r = retrieve_specialization (tmpl, gen_args, 0);
10062         }
10063       else if (DECL_FUNCTION_SCOPE_P (decl)
10064                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
10065                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
10066         r = retrieve_local_specialization (decl);
10067       else
10068         /* The typedef is from a non-template context.  */
10069         return t;
10070
10071       if (r)
10072         {
10073           r = TREE_TYPE (r);
10074           r = cp_build_qualified_type_real
10075             (r, cp_type_quals (t) | cp_type_quals (r),
10076              complain | tf_ignore_bad_quals);
10077           return r;
10078         }
10079       /* Else we must be instantiating the typedef, so fall through.  */
10080     }
10081
10082   if (type
10083       && code != TYPENAME_TYPE
10084       && code != TEMPLATE_TYPE_PARM
10085       && code != IDENTIFIER_NODE
10086       && code != FUNCTION_TYPE
10087       && code != METHOD_TYPE)
10088     type = tsubst (type, args, complain, in_decl);
10089   if (type == error_mark_node)
10090     return error_mark_node;
10091
10092   switch (code)
10093     {
10094     case RECORD_TYPE:
10095     case UNION_TYPE:
10096     case ENUMERAL_TYPE:
10097       return tsubst_aggr_type (t, args, complain, in_decl,
10098                                /*entering_scope=*/0);
10099
10100     case ERROR_MARK:
10101     case IDENTIFIER_NODE:
10102     case VOID_TYPE:
10103     case REAL_TYPE:
10104     case COMPLEX_TYPE:
10105     case VECTOR_TYPE:
10106     case BOOLEAN_TYPE:
10107     case NULLPTR_TYPE:
10108     case LANG_TYPE:
10109       return t;
10110
10111     case INTEGER_TYPE:
10112       if (t == integer_type_node)
10113         return t;
10114
10115       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
10116           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
10117         return t;
10118
10119       {
10120         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
10121
10122         max = tsubst_expr (omax, args, complain, in_decl,
10123                            /*integral_constant_expression_p=*/false);
10124
10125         /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
10126            needed.  */
10127         if (TREE_CODE (max) == NOP_EXPR
10128             && TREE_SIDE_EFFECTS (omax)
10129             && !TREE_TYPE (max))
10130           TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
10131
10132         max = mark_rvalue_use (max);
10133         max = fold_decl_constant_value (max);
10134
10135         /* If we're in a partial instantiation, preserve the magic NOP_EXPR
10136            with TREE_SIDE_EFFECTS that indicates this is not an integral
10137            constant expression.  */
10138         if (processing_template_decl
10139             && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
10140           {
10141             gcc_assert (TREE_CODE (max) == NOP_EXPR);
10142             TREE_SIDE_EFFECTS (max) = 1;
10143           }
10144
10145         if (TREE_CODE (max) != INTEGER_CST
10146             && !at_function_scope_p ()
10147             && !TREE_SIDE_EFFECTS (max)
10148             && !value_dependent_expression_p (max))
10149           {
10150             if (complain & tf_error)
10151               error ("array bound is not an integer constant");
10152             return error_mark_node;
10153           }
10154
10155         /* [temp.deduct]
10156
10157            Type deduction may fail for any of the following
10158            reasons:
10159
10160              Attempting to create an array with a size that is
10161              zero or negative.  */
10162         if (integer_zerop (max) && !(complain & tf_error))
10163           /* We must fail if performing argument deduction (as
10164              indicated by the state of complain), so that
10165              another substitution can be found.  */
10166           return error_mark_node;
10167         else if (TREE_CODE (max) == INTEGER_CST
10168                  && INT_CST_LT (max, integer_zero_node))
10169           {
10170             if (complain & tf_error)
10171               error ("creating array with negative size (%qE)", max);
10172
10173             return error_mark_node;
10174           }
10175
10176         return compute_array_index_type (NULL_TREE, max);
10177       }
10178
10179     case TEMPLATE_TYPE_PARM:
10180     case TEMPLATE_TEMPLATE_PARM:
10181     case BOUND_TEMPLATE_TEMPLATE_PARM:
10182     case TEMPLATE_PARM_INDEX:
10183       {
10184         int idx;
10185         int level;
10186         int levels;
10187         tree arg = NULL_TREE;
10188
10189         r = NULL_TREE;
10190
10191         gcc_assert (TREE_VEC_LENGTH (args) > 0);
10192         template_parm_level_and_index (t, &level, &idx); 
10193
10194         levels = TMPL_ARGS_DEPTH (args);
10195         if (level <= levels)
10196           {
10197             arg = TMPL_ARG (args, level, idx);
10198
10199             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
10200               /* See through ARGUMENT_PACK_SELECT arguments. */
10201               arg = ARGUMENT_PACK_SELECT_ARG (arg);
10202           }
10203
10204         if (arg == error_mark_node)
10205           return error_mark_node;
10206         else if (arg != NULL_TREE)
10207           {
10208             if (ARGUMENT_PACK_P (arg))
10209               /* If ARG is an argument pack, we don't actually want to
10210                  perform a substitution here, because substitutions
10211                  for argument packs are only done
10212                  element-by-element. We can get to this point when
10213                  substituting the type of a non-type template
10214                  parameter pack, when that type actually contains
10215                  template parameter packs from an outer template, e.g.,
10216
10217                  template<typename... Types> struct A {
10218                    template<Types... Values> struct B { };
10219                  };  */
10220               return t;
10221
10222             if (code == TEMPLATE_TYPE_PARM)
10223               {
10224                 int quals;
10225                 gcc_assert (TYPE_P (arg));
10226
10227                 quals = cp_type_quals (arg) | cp_type_quals (t);
10228                   
10229                 return cp_build_qualified_type_real
10230                   (arg, quals, complain | tf_ignore_bad_quals);
10231               }
10232             else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
10233               {
10234                 /* We are processing a type constructed from a
10235                    template template parameter.  */
10236                 tree argvec = tsubst (TYPE_TI_ARGS (t),
10237                                       args, complain, in_decl);
10238                 if (argvec == error_mark_node)
10239                   return error_mark_node;
10240
10241                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
10242                    are resolving nested-types in the signature of a
10243                    member function templates.  Otherwise ARG is a
10244                    TEMPLATE_DECL and is the real template to be
10245                    instantiated.  */
10246                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
10247                   arg = TYPE_NAME (arg);
10248
10249                 r = lookup_template_class (arg,
10250                                            argvec, in_decl,
10251                                            DECL_CONTEXT (arg),
10252                                             /*entering_scope=*/0,
10253                                            complain);
10254                 return cp_build_qualified_type_real
10255                   (r, cp_type_quals (t), complain);
10256               }
10257             else
10258               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
10259               return unshare_expr (arg);
10260           }
10261
10262         if (level == 1)
10263           /* This can happen during the attempted tsubst'ing in
10264              unify.  This means that we don't yet have any information
10265              about the template parameter in question.  */
10266           return t;
10267
10268         /* If we get here, we must have been looking at a parm for a
10269            more deeply nested template.  Make a new version of this
10270            template parameter, but with a lower level.  */
10271         switch (code)
10272           {
10273           case TEMPLATE_TYPE_PARM:
10274           case TEMPLATE_TEMPLATE_PARM:
10275           case BOUND_TEMPLATE_TEMPLATE_PARM:
10276             if (cp_type_quals (t))
10277               {
10278                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
10279                 r = cp_build_qualified_type_real
10280                   (r, cp_type_quals (t),
10281                    complain | (code == TEMPLATE_TYPE_PARM
10282                                ? tf_ignore_bad_quals : 0));
10283               }
10284             else
10285               {
10286                 r = copy_type (t);
10287                 TEMPLATE_TYPE_PARM_INDEX (r)
10288                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
10289                                                 r, levels, args, complain);
10290                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
10291                 TYPE_MAIN_VARIANT (r) = r;
10292                 TYPE_POINTER_TO (r) = NULL_TREE;
10293                 TYPE_REFERENCE_TO (r) = NULL_TREE;
10294
10295                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
10296                   /* We have reduced the level of the template
10297                      template parameter, but not the levels of its
10298                      template parameters, so canonical_type_parameter
10299                      will not be able to find the canonical template
10300                      template parameter for this level. Thus, we
10301                      require structural equality checking to compare
10302                      TEMPLATE_TEMPLATE_PARMs. */
10303                   SET_TYPE_STRUCTURAL_EQUALITY (r);
10304                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
10305                   SET_TYPE_STRUCTURAL_EQUALITY (r);
10306                 else
10307                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
10308
10309                 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
10310                   {
10311                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
10312                                           complain, in_decl);
10313                     if (argvec == error_mark_node)
10314                       return error_mark_node;
10315
10316                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
10317                       = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
10318                   }
10319               }
10320             break;
10321
10322           case TEMPLATE_PARM_INDEX:
10323             r = reduce_template_parm_level (t, type, levels, args, complain);
10324             break;
10325
10326           default:
10327             gcc_unreachable ();
10328           }
10329
10330         return r;
10331       }
10332
10333     case TREE_LIST:
10334       {
10335         tree purpose, value, chain;
10336
10337         if (t == void_list_node)
10338           return t;
10339
10340         purpose = TREE_PURPOSE (t);
10341         if (purpose)
10342           {
10343             purpose = tsubst (purpose, args, complain, in_decl);
10344             if (purpose == error_mark_node)
10345               return error_mark_node;
10346           }
10347         value = TREE_VALUE (t);
10348         if (value)
10349           {
10350             value = tsubst (value, args, complain, in_decl);
10351             if (value == error_mark_node)
10352               return error_mark_node;
10353           }
10354         chain = TREE_CHAIN (t);
10355         if (chain && chain != void_type_node)
10356           {
10357             chain = tsubst (chain, args, complain, in_decl);
10358             if (chain == error_mark_node)
10359               return error_mark_node;
10360           }
10361         if (purpose == TREE_PURPOSE (t)
10362             && value == TREE_VALUE (t)
10363             && chain == TREE_CHAIN (t))
10364           return t;
10365         return hash_tree_cons (purpose, value, chain);
10366       }
10367
10368     case TREE_BINFO:
10369       /* We should never be tsubsting a binfo.  */
10370       gcc_unreachable ();
10371
10372     case TREE_VEC:
10373       /* A vector of template arguments.  */
10374       gcc_assert (!type);
10375       return tsubst_template_args (t, args, complain, in_decl);
10376
10377     case POINTER_TYPE:
10378     case REFERENCE_TYPE:
10379       {
10380         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
10381           return t;
10382
10383         /* [temp.deduct]
10384
10385            Type deduction may fail for any of the following
10386            reasons:
10387
10388            -- Attempting to create a pointer to reference type.
10389            -- Attempting to create a reference to a reference type or
10390               a reference to void.
10391
10392           Core issue 106 says that creating a reference to a reference
10393           during instantiation is no longer a cause for failure. We
10394           only enforce this check in strict C++98 mode.  */
10395         if ((TREE_CODE (type) == REFERENCE_TYPE
10396              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
10397             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
10398           {
10399             static location_t last_loc;
10400
10401             /* We keep track of the last time we issued this error
10402                message to avoid spewing a ton of messages during a
10403                single bad template instantiation.  */
10404             if (complain & tf_error
10405                 && last_loc != input_location)
10406               {
10407                 if (TREE_CODE (type) == VOID_TYPE)
10408                   error ("forming reference to void");
10409                else if (code == POINTER_TYPE)
10410                  error ("forming pointer to reference type %qT", type);
10411                else
10412                   error ("forming reference to reference type %qT", type);
10413                 last_loc = input_location;
10414               }
10415
10416             return error_mark_node;
10417           }
10418         else if (code == POINTER_TYPE)
10419           {
10420             r = build_pointer_type (type);
10421             if (TREE_CODE (type) == METHOD_TYPE)
10422               r = build_ptrmemfunc_type (r);
10423           }
10424         else if (TREE_CODE (type) == REFERENCE_TYPE)
10425           /* In C++0x, during template argument substitution, when there is an
10426              attempt to create a reference to a reference type, reference
10427              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
10428
10429              "If a template-argument for a template-parameter T names a type
10430              that is a reference to a type A, an attempt to create the type
10431              'lvalue reference to cv T' creates the type 'lvalue reference to
10432              A,' while an attempt to create the type type rvalue reference to
10433              cv T' creates the type T"
10434           */
10435           r = cp_build_reference_type
10436               (TREE_TYPE (type),
10437                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
10438         else
10439           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
10440         r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
10441
10442         if (r != error_mark_node)
10443           /* Will this ever be needed for TYPE_..._TO values?  */
10444           layout_type (r);
10445
10446         return r;
10447       }
10448     case OFFSET_TYPE:
10449       {
10450         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
10451         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
10452           {
10453             /* [temp.deduct]
10454
10455                Type deduction may fail for any of the following
10456                reasons:
10457
10458                -- Attempting to create "pointer to member of T" when T
10459                   is not a class type.  */
10460             if (complain & tf_error)
10461               error ("creating pointer to member of non-class type %qT", r);
10462             return error_mark_node;
10463           }
10464         if (TREE_CODE (type) == REFERENCE_TYPE)
10465           {
10466             if (complain & tf_error)
10467               error ("creating pointer to member reference type %qT", type);
10468             return error_mark_node;
10469           }
10470         if (TREE_CODE (type) == VOID_TYPE)
10471           {
10472             if (complain & tf_error)
10473               error ("creating pointer to member of type void");
10474             return error_mark_node;
10475           }
10476         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
10477         if (TREE_CODE (type) == FUNCTION_TYPE)
10478           {
10479             /* The type of the implicit object parameter gets its
10480                cv-qualifiers from the FUNCTION_TYPE. */
10481             tree memptr;
10482             tree method_type = build_memfn_type (type, r, type_memfn_quals (type));
10483             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
10484             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
10485                                                  complain);
10486           }
10487         else
10488           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
10489                                                cp_type_quals (t),
10490                                                complain);
10491       }
10492     case FUNCTION_TYPE:
10493     case METHOD_TYPE:
10494       {
10495         tree fntype;
10496         tree specs;
10497         fntype = tsubst_function_type (t, args, complain, in_decl);
10498         if (fntype == error_mark_node)
10499           return error_mark_node;
10500
10501         /* Substitute the exception specification.  */
10502         specs = tsubst_exception_specification (t, args, complain,
10503                                                 in_decl);
10504         if (specs == error_mark_node)
10505           return error_mark_node;
10506         if (specs)
10507           fntype = build_exception_variant (fntype, specs);
10508         return fntype;
10509       }
10510     case ARRAY_TYPE:
10511       {
10512         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
10513         if (domain == error_mark_node)
10514           return error_mark_node;
10515
10516         /* As an optimization, we avoid regenerating the array type if
10517            it will obviously be the same as T.  */
10518         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
10519           return t;
10520
10521         /* These checks should match the ones in grokdeclarator.
10522
10523            [temp.deduct]
10524
10525            The deduction may fail for any of the following reasons:
10526
10527            -- Attempting to create an array with an element type that
10528               is void, a function type, or a reference type, or [DR337]
10529               an abstract class type.  */
10530         if (TREE_CODE (type) == VOID_TYPE
10531             || TREE_CODE (type) == FUNCTION_TYPE
10532             || TREE_CODE (type) == REFERENCE_TYPE)
10533           {
10534             if (complain & tf_error)
10535               error ("creating array of %qT", type);
10536             return error_mark_node;
10537           }
10538         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
10539           {
10540             if (complain & tf_error)
10541               error ("creating array of %qT, which is an abstract class type",
10542                      type);
10543             return error_mark_node;
10544           }
10545
10546         r = build_cplus_array_type (type, domain);
10547
10548         if (TYPE_USER_ALIGN (t))
10549           {
10550             TYPE_ALIGN (r) = TYPE_ALIGN (t);
10551             TYPE_USER_ALIGN (r) = 1;
10552           }
10553
10554         return r;
10555       }
10556
10557     case TYPENAME_TYPE:
10558       {
10559         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
10560                                      in_decl, /*entering_scope=*/1);
10561         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
10562                               complain, in_decl);
10563
10564         if (ctx == error_mark_node || f == error_mark_node)
10565           return error_mark_node;
10566
10567         if (!MAYBE_CLASS_TYPE_P (ctx))
10568           {
10569             if (complain & tf_error)
10570               error ("%qT is not a class, struct, or union type", ctx);
10571             return error_mark_node;
10572           }
10573         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
10574           {
10575             /* Normally, make_typename_type does not require that the CTX
10576                have complete type in order to allow things like:
10577
10578                  template <class T> struct S { typename S<T>::X Y; };
10579
10580                But, such constructs have already been resolved by this
10581                point, so here CTX really should have complete type, unless
10582                it's a partial instantiation.  */
10583             if (!(complain & tf_no_class_instantiations))
10584               ctx = complete_type (ctx);
10585             if (!COMPLETE_TYPE_P (ctx))
10586               {
10587                 if (complain & tf_error)
10588                   cxx_incomplete_type_error (NULL_TREE, ctx);
10589                 return error_mark_node;
10590               }
10591           }
10592
10593         f = make_typename_type (ctx, f, typename_type,
10594                                 (complain & tf_error) | tf_keep_type_decl);
10595         if (f == error_mark_node)
10596           return f;
10597         if (TREE_CODE (f) == TYPE_DECL)
10598           {
10599             complain |= tf_ignore_bad_quals;
10600             f = TREE_TYPE (f);
10601           }
10602
10603         if (TREE_CODE (f) != TYPENAME_TYPE)
10604           {
10605             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
10606               error ("%qT resolves to %qT, which is not an enumeration type",
10607                      t, f);
10608             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
10609               error ("%qT resolves to %qT, which is is not a class type",
10610                      t, f);
10611           }
10612
10613         return cp_build_qualified_type_real
10614           (f, cp_type_quals (f) | cp_type_quals (t), complain);
10615       }
10616
10617     case UNBOUND_CLASS_TEMPLATE:
10618       {
10619         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
10620                                      in_decl, /*entering_scope=*/1);
10621         tree name = TYPE_IDENTIFIER (t);
10622         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
10623
10624         if (ctx == error_mark_node || name == error_mark_node)
10625           return error_mark_node;
10626
10627         if (parm_list)
10628           parm_list = tsubst_template_parms (parm_list, args, complain);
10629         return make_unbound_class_template (ctx, name, parm_list, complain);
10630       }
10631
10632     case TYPEOF_TYPE:
10633       {
10634         tree type;
10635
10636         ++cp_unevaluated_operand;
10637         ++c_inhibit_evaluation_warnings;
10638
10639         type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
10640                             complain, in_decl,
10641                             /*integral_constant_expression_p=*/false);
10642
10643         --cp_unevaluated_operand;
10644         --c_inhibit_evaluation_warnings;
10645
10646         type = finish_typeof (type);
10647         return cp_build_qualified_type_real (type,
10648                                              cp_type_quals (t)
10649                                              | cp_type_quals (type),
10650                                              complain);
10651       }
10652
10653     case DECLTYPE_TYPE:
10654       {
10655         tree type;
10656
10657         ++cp_unevaluated_operand;
10658         ++c_inhibit_evaluation_warnings;
10659
10660         type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
10661                             complain, in_decl,
10662                             /*integral_constant_expression_p=*/false);
10663
10664         --cp_unevaluated_operand;
10665         --c_inhibit_evaluation_warnings;
10666
10667         if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
10668           type = lambda_capture_field_type (type);
10669         else if (DECLTYPE_FOR_LAMBDA_RETURN (t))
10670           type = lambda_return_type (type);
10671         else
10672           type = finish_decltype_type
10673             (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
10674         return cp_build_qualified_type_real (type,
10675                                              cp_type_quals (t)
10676                                              | cp_type_quals (type),
10677                                              complain);
10678       }
10679
10680     case TYPE_ARGUMENT_PACK:
10681     case NONTYPE_ARGUMENT_PACK:
10682       {
10683         tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
10684         tree packed_out = 
10685           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
10686                                 args,
10687                                 complain,
10688                                 in_decl);
10689         SET_ARGUMENT_PACK_ARGS (r, packed_out);
10690
10691         /* For template nontype argument packs, also substitute into
10692            the type.  */
10693         if (code == NONTYPE_ARGUMENT_PACK)
10694           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
10695
10696         return r;
10697       }
10698       break;
10699
10700     case INTEGER_CST:
10701     case REAL_CST:
10702     case STRING_CST:
10703     case PLUS_EXPR:
10704     case MINUS_EXPR:
10705     case NEGATE_EXPR:
10706     case NOP_EXPR:
10707     case INDIRECT_REF:
10708     case ADDR_EXPR:
10709     case CALL_EXPR:
10710     case ARRAY_REF:
10711     case SCOPE_REF:
10712       /* We should use one of the expression tsubsts for these codes.  */
10713       gcc_unreachable ();
10714
10715     default:
10716       sorry ("use of %qs in template", tree_code_name [(int) code]);
10717       return error_mark_node;
10718     }
10719 }
10720
10721 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
10722    type of the expression on the left-hand side of the "." or "->"
10723    operator.  */
10724
10725 static tree
10726 tsubst_baselink (tree baselink, tree object_type,
10727                  tree args, tsubst_flags_t complain, tree in_decl)
10728 {
10729     tree name;
10730     tree qualifying_scope;
10731     tree fns;
10732     tree optype;
10733     tree template_args = 0;
10734     bool template_id_p = false;
10735
10736     /* A baselink indicates a function from a base class.  Both the
10737        BASELINK_ACCESS_BINFO and the base class referenced may
10738        indicate bases of the template class, rather than the
10739        instantiated class.  In addition, lookups that were not
10740        ambiguous before may be ambiguous now.  Therefore, we perform
10741        the lookup again.  */
10742     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
10743     qualifying_scope = tsubst (qualifying_scope, args,
10744                                complain, in_decl);
10745     fns = BASELINK_FUNCTIONS (baselink);
10746     optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
10747     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
10748       {
10749         template_id_p = true;
10750         template_args = TREE_OPERAND (fns, 1);
10751         fns = TREE_OPERAND (fns, 0);
10752         if (template_args)
10753           template_args = tsubst_template_args (template_args, args,
10754                                                 complain, in_decl);
10755       }
10756     name = DECL_NAME (get_first_fn (fns));
10757     if (IDENTIFIER_TYPENAME_P (name))
10758       name = mangle_conv_op_name_for_type (optype);
10759     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
10760     if (!baselink)
10761       return error_mark_node;
10762
10763     /* If lookup found a single function, mark it as used at this
10764        point.  (If it lookup found multiple functions the one selected
10765        later by overload resolution will be marked as used at that
10766        point.)  */
10767     if (BASELINK_P (baselink))
10768       fns = BASELINK_FUNCTIONS (baselink);
10769     if (!template_id_p && !really_overloaded_fn (fns))
10770       mark_used (OVL_CURRENT (fns));
10771
10772     /* Add back the template arguments, if present.  */
10773     if (BASELINK_P (baselink) && template_id_p)
10774       BASELINK_FUNCTIONS (baselink)
10775         = build_nt (TEMPLATE_ID_EXPR,
10776                     BASELINK_FUNCTIONS (baselink),
10777                     template_args);
10778     /* Update the conversion operator type.  */
10779     BASELINK_OPTYPE (baselink) = optype;
10780
10781     if (!object_type)
10782       object_type = current_class_type;
10783     return adjust_result_of_qualified_name_lookup (baselink,
10784                                                    qualifying_scope,
10785                                                    object_type);
10786 }
10787
10788 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
10789    true if the qualified-id will be a postfix-expression in-and-of
10790    itself; false if more of the postfix-expression follows the
10791    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
10792    of "&".  */
10793
10794 static tree
10795 tsubst_qualified_id (tree qualified_id, tree args,
10796                      tsubst_flags_t complain, tree in_decl,
10797                      bool done, bool address_p)
10798 {
10799   tree expr;
10800   tree scope;
10801   tree name;
10802   bool is_template;
10803   tree template_args;
10804
10805   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
10806
10807   /* Figure out what name to look up.  */
10808   name = TREE_OPERAND (qualified_id, 1);
10809   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
10810     {
10811       is_template = true;
10812       template_args = TREE_OPERAND (name, 1);
10813       if (template_args)
10814         template_args = tsubst_template_args (template_args, args,
10815                                               complain, in_decl);
10816       name = TREE_OPERAND (name, 0);
10817     }
10818   else
10819     {
10820       is_template = false;
10821       template_args = NULL_TREE;
10822     }
10823
10824   /* Substitute into the qualifying scope.  When there are no ARGS, we
10825      are just trying to simplify a non-dependent expression.  In that
10826      case the qualifying scope may be dependent, and, in any case,
10827      substituting will not help.  */
10828   scope = TREE_OPERAND (qualified_id, 0);
10829   if (args)
10830     {
10831       scope = tsubst (scope, args, complain, in_decl);
10832       expr = tsubst_copy (name, args, complain, in_decl);
10833     }
10834   else
10835     expr = name;
10836
10837   if (dependent_scope_p (scope))
10838     return build_qualified_name (NULL_TREE, scope, expr,
10839                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
10840
10841   if (!BASELINK_P (name) && !DECL_P (expr))
10842     {
10843       if (TREE_CODE (expr) == BIT_NOT_EXPR)
10844         {
10845           /* A BIT_NOT_EXPR is used to represent a destructor.  */
10846           if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
10847             {
10848               error ("qualifying type %qT does not match destructor name ~%qT",
10849                      scope, TREE_OPERAND (expr, 0));
10850               expr = error_mark_node;
10851             }
10852           else
10853             expr = lookup_qualified_name (scope, complete_dtor_identifier,
10854                                           /*is_type_p=*/0, false);
10855         }
10856       else
10857         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
10858       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
10859                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
10860         {
10861           if (complain & tf_error)
10862             {
10863               error ("dependent-name %qE is parsed as a non-type, but "
10864                      "instantiation yields a type", qualified_id);
10865               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
10866             }
10867           return error_mark_node;
10868         }
10869     }
10870
10871   if (DECL_P (expr))
10872     {
10873       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
10874                                            scope);
10875       /* Remember that there was a reference to this entity.  */
10876       mark_used (expr);
10877     }
10878
10879   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
10880     {
10881       if (complain & tf_error)
10882         qualified_name_lookup_error (scope,
10883                                      TREE_OPERAND (qualified_id, 1),
10884                                      expr, input_location);
10885       return error_mark_node;
10886     }
10887
10888   if (is_template)
10889     expr = lookup_template_function (expr, template_args);
10890
10891   if (expr == error_mark_node && complain & tf_error)
10892     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
10893                                  expr, input_location);
10894   else if (TYPE_P (scope))
10895     {
10896       expr = (adjust_result_of_qualified_name_lookup
10897               (expr, scope, current_class_type));
10898       expr = (finish_qualified_id_expr
10899               (scope, expr, done, address_p,
10900                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
10901                /*template_arg_p=*/false));
10902     }
10903
10904   /* Expressions do not generally have reference type.  */
10905   if (TREE_CODE (expr) != SCOPE_REF
10906       /* However, if we're about to form a pointer-to-member, we just
10907          want the referenced member referenced.  */
10908       && TREE_CODE (expr) != OFFSET_REF)
10909     expr = convert_from_reference (expr);
10910
10911   return expr;
10912 }
10913
10914 /* Like tsubst, but deals with expressions.  This function just replaces
10915    template parms; to finish processing the resultant expression, use
10916    tsubst_expr.  */
10917
10918 static tree
10919 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10920 {
10921   enum tree_code code;
10922   tree r;
10923
10924   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
10925     return t;
10926
10927   code = TREE_CODE (t);
10928
10929   switch (code)
10930     {
10931     case PARM_DECL:
10932       r = retrieve_local_specialization (t);
10933
10934       if (r == NULL)
10935         {
10936           tree c;
10937           /* This can happen for a parameter name used later in a function
10938              declaration (such as in a late-specified return type).  Just
10939              make a dummy decl, since it's only used for its type.  */
10940           gcc_assert (cp_unevaluated_operand != 0);
10941           /* We copy T because want to tsubst the PARM_DECL only,
10942              not the following PARM_DECLs that are chained to T.  */
10943           c = copy_node (t);
10944           r = tsubst_decl (c, args, complain);
10945           /* Give it the template pattern as its context; its true context
10946              hasn't been instantiated yet and this is good enough for
10947              mangling.  */
10948           DECL_CONTEXT (r) = DECL_CONTEXT (t);
10949         }
10950       
10951       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
10952         r = ARGUMENT_PACK_SELECT_ARG (r);
10953       mark_used (r);
10954       return r;
10955
10956     case CONST_DECL:
10957       {
10958         tree enum_type;
10959         tree v;
10960
10961         if (DECL_TEMPLATE_PARM_P (t))
10962           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
10963         /* There is no need to substitute into namespace-scope
10964            enumerators.  */
10965         if (DECL_NAMESPACE_SCOPE_P (t))
10966           return t;
10967         /* If ARGS is NULL, then T is known to be non-dependent.  */
10968         if (args == NULL_TREE)
10969           return integral_constant_value (t);
10970
10971         /* Unfortunately, we cannot just call lookup_name here.
10972            Consider:
10973
10974              template <int I> int f() {
10975              enum E { a = I };
10976              struct S { void g() { E e = a; } };
10977              };
10978
10979            When we instantiate f<7>::S::g(), say, lookup_name is not
10980            clever enough to find f<7>::a.  */
10981         enum_type
10982           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
10983                               /*entering_scope=*/0);
10984
10985         for (v = TYPE_VALUES (enum_type);
10986              v != NULL_TREE;
10987              v = TREE_CHAIN (v))
10988           if (TREE_PURPOSE (v) == DECL_NAME (t))
10989             return TREE_VALUE (v);
10990
10991           /* We didn't find the name.  That should never happen; if
10992              name-lookup found it during preliminary parsing, we
10993              should find it again here during instantiation.  */
10994         gcc_unreachable ();
10995       }
10996       return t;
10997
10998     case FIELD_DECL:
10999       if (DECL_CONTEXT (t))
11000         {
11001           tree ctx;
11002
11003           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
11004                                   /*entering_scope=*/1);
11005           if (ctx != DECL_CONTEXT (t))
11006             {
11007               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
11008               if (!r)
11009                 {
11010                   if (complain & tf_error)
11011                     error ("using invalid field %qD", t);
11012                   return error_mark_node;
11013                 }
11014               return r;
11015             }
11016         }
11017
11018       return t;
11019
11020     case VAR_DECL:
11021     case FUNCTION_DECL:
11022       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
11023           || local_variable_p (t))
11024         t = tsubst (t, args, complain, in_decl);
11025       mark_used (t);
11026       return t;
11027
11028     case OVERLOAD:
11029       /* An OVERLOAD will always be a non-dependent overload set; an
11030          overload set from function scope will just be represented with an
11031          IDENTIFIER_NODE, and from class scope with a BASELINK.  */
11032       gcc_assert (!uses_template_parms (t));
11033       return t;
11034
11035     case BASELINK:
11036       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
11037
11038     case TEMPLATE_DECL:
11039       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
11040         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
11041                        args, complain, in_decl);
11042       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
11043         return tsubst (t, args, complain, in_decl);
11044       else if (DECL_CLASS_SCOPE_P (t)
11045                && uses_template_parms (DECL_CONTEXT (t)))
11046         {
11047           /* Template template argument like the following example need
11048              special treatment:
11049
11050                template <template <class> class TT> struct C {};
11051                template <class T> struct D {
11052                  template <class U> struct E {};
11053                  C<E> c;                                // #1
11054                };
11055                D<int> d;                                // #2
11056
11057              We are processing the template argument `E' in #1 for
11058              the template instantiation #2.  Originally, `E' is a
11059              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
11060              have to substitute this with one having context `D<int>'.  */
11061
11062           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
11063           return lookup_field (context, DECL_NAME(t), 0, false);
11064         }
11065       else
11066         /* Ordinary template template argument.  */
11067         return t;
11068
11069     case CAST_EXPR:
11070     case REINTERPRET_CAST_EXPR:
11071     case CONST_CAST_EXPR:
11072     case STATIC_CAST_EXPR:
11073     case DYNAMIC_CAST_EXPR:
11074     case NOP_EXPR:
11075       return build1
11076         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11077          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
11078
11079     case SIZEOF_EXPR:
11080       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
11081         {
11082           /* We only want to compute the number of arguments.  */
11083           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
11084                                                 complain, in_decl);
11085           int len = 0;
11086
11087           if (TREE_CODE (expanded) == TREE_VEC)
11088             len = TREE_VEC_LENGTH (expanded);
11089
11090           if (expanded == error_mark_node)
11091             return error_mark_node;
11092           else if (PACK_EXPANSION_P (expanded)
11093                    || (TREE_CODE (expanded) == TREE_VEC
11094                        && len > 0
11095                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
11096             {
11097               if (TREE_CODE (expanded) == TREE_VEC)
11098                 expanded = TREE_VEC_ELT (expanded, len - 1);
11099
11100               if (TYPE_P (expanded))
11101                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
11102                                                    complain & tf_error);
11103               else
11104                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
11105                                                    complain & tf_error);
11106             }
11107           else
11108             return build_int_cst (size_type_node, len);
11109         }
11110       /* Fall through */
11111
11112     case INDIRECT_REF:
11113     case NEGATE_EXPR:
11114     case TRUTH_NOT_EXPR:
11115     case BIT_NOT_EXPR:
11116     case ADDR_EXPR:
11117     case UNARY_PLUS_EXPR:      /* Unary + */
11118     case ALIGNOF_EXPR:
11119     case AT_ENCODE_EXPR:
11120     case ARROW_EXPR:
11121     case THROW_EXPR:
11122     case TYPEID_EXPR:
11123     case REALPART_EXPR:
11124     case IMAGPART_EXPR:
11125       return build1
11126         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11127          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
11128
11129     case COMPONENT_REF:
11130       {
11131         tree object;
11132         tree name;
11133
11134         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
11135         name = TREE_OPERAND (t, 1);
11136         if (TREE_CODE (name) == BIT_NOT_EXPR)
11137           {
11138             name = tsubst_copy (TREE_OPERAND (name, 0), args,
11139                                 complain, in_decl);
11140             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
11141           }
11142         else if (TREE_CODE (name) == SCOPE_REF
11143                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
11144           {
11145             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
11146                                      complain, in_decl);
11147             name = TREE_OPERAND (name, 1);
11148             name = tsubst_copy (TREE_OPERAND (name, 0), args,
11149                                 complain, in_decl);
11150             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
11151             name = build_qualified_name (/*type=*/NULL_TREE,
11152                                          base, name,
11153                                          /*template_p=*/false);
11154           }
11155         else if (TREE_CODE (name) == BASELINK)
11156           name = tsubst_baselink (name,
11157                                   non_reference (TREE_TYPE (object)),
11158                                   args, complain,
11159                                   in_decl);
11160         else
11161           name = tsubst_copy (name, args, complain, in_decl);
11162         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
11163       }
11164
11165     case PLUS_EXPR:
11166     case MINUS_EXPR:
11167     case MULT_EXPR:
11168     case TRUNC_DIV_EXPR:
11169     case CEIL_DIV_EXPR:
11170     case FLOOR_DIV_EXPR:
11171     case ROUND_DIV_EXPR:
11172     case EXACT_DIV_EXPR:
11173     case BIT_AND_EXPR:
11174     case BIT_IOR_EXPR:
11175     case BIT_XOR_EXPR:
11176     case TRUNC_MOD_EXPR:
11177     case FLOOR_MOD_EXPR:
11178     case TRUTH_ANDIF_EXPR:
11179     case TRUTH_ORIF_EXPR:
11180     case TRUTH_AND_EXPR:
11181     case TRUTH_OR_EXPR:
11182     case RSHIFT_EXPR:
11183     case LSHIFT_EXPR:
11184     case RROTATE_EXPR:
11185     case LROTATE_EXPR:
11186     case EQ_EXPR:
11187     case NE_EXPR:
11188     case MAX_EXPR:
11189     case MIN_EXPR:
11190     case LE_EXPR:
11191     case GE_EXPR:
11192     case LT_EXPR:
11193     case GT_EXPR:
11194     case COMPOUND_EXPR:
11195     case DOTSTAR_EXPR:
11196     case MEMBER_REF:
11197     case PREDECREMENT_EXPR:
11198     case PREINCREMENT_EXPR:
11199     case POSTDECREMENT_EXPR:
11200     case POSTINCREMENT_EXPR:
11201       return build_nt
11202         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11203          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11204
11205     case SCOPE_REF:
11206       return build_qualified_name (/*type=*/NULL_TREE,
11207                                    tsubst_copy (TREE_OPERAND (t, 0),
11208                                                 args, complain, in_decl),
11209                                    tsubst_copy (TREE_OPERAND (t, 1),
11210                                                 args, complain, in_decl),
11211                                    QUALIFIED_NAME_IS_TEMPLATE (t));
11212
11213     case ARRAY_REF:
11214       return build_nt
11215         (ARRAY_REF,
11216          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11217          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11218          NULL_TREE, NULL_TREE);
11219
11220     case CALL_EXPR:
11221       {
11222         int n = VL_EXP_OPERAND_LENGTH (t);
11223         tree result = build_vl_exp (CALL_EXPR, n);
11224         int i;
11225         for (i = 0; i < n; i++)
11226           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
11227                                              complain, in_decl);
11228         return result;
11229       }
11230
11231     case COND_EXPR:
11232     case MODOP_EXPR:
11233     case PSEUDO_DTOR_EXPR:
11234       {
11235         r = build_nt
11236           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11237            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11238            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
11239         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
11240         return r;
11241       }
11242
11243     case NEW_EXPR:
11244       {
11245         r = build_nt
11246         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11247          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11248          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
11249         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
11250         return r;
11251       }
11252
11253     case DELETE_EXPR:
11254       {
11255         r = build_nt
11256         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11257          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11258         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
11259         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
11260         return r;
11261       }
11262
11263     case TEMPLATE_ID_EXPR:
11264       {
11265         /* Substituted template arguments */
11266         tree fn = TREE_OPERAND (t, 0);
11267         tree targs = TREE_OPERAND (t, 1);
11268
11269         fn = tsubst_copy (fn, args, complain, in_decl);
11270         if (targs)
11271           targs = tsubst_template_args (targs, args, complain, in_decl);
11272
11273         return lookup_template_function (fn, targs);
11274       }
11275
11276     case TREE_LIST:
11277       {
11278         tree purpose, value, chain;
11279
11280         if (t == void_list_node)
11281           return t;
11282
11283         purpose = TREE_PURPOSE (t);
11284         if (purpose)
11285           purpose = tsubst_copy (purpose, args, complain, in_decl);
11286         value = TREE_VALUE (t);
11287         if (value)
11288           value = tsubst_copy (value, args, complain, in_decl);
11289         chain = TREE_CHAIN (t);
11290         if (chain && chain != void_type_node)
11291           chain = tsubst_copy (chain, args, complain, in_decl);
11292         if (purpose == TREE_PURPOSE (t)
11293             && value == TREE_VALUE (t)
11294             && chain == TREE_CHAIN (t))
11295           return t;
11296         return tree_cons (purpose, value, chain);
11297       }
11298
11299     case RECORD_TYPE:
11300     case UNION_TYPE:
11301     case ENUMERAL_TYPE:
11302     case INTEGER_TYPE:
11303     case TEMPLATE_TYPE_PARM:
11304     case TEMPLATE_TEMPLATE_PARM:
11305     case BOUND_TEMPLATE_TEMPLATE_PARM:
11306     case TEMPLATE_PARM_INDEX:
11307     case POINTER_TYPE:
11308     case REFERENCE_TYPE:
11309     case OFFSET_TYPE:
11310     case FUNCTION_TYPE:
11311     case METHOD_TYPE:
11312     case ARRAY_TYPE:
11313     case TYPENAME_TYPE:
11314     case UNBOUND_CLASS_TEMPLATE:
11315     case TYPEOF_TYPE:
11316     case DECLTYPE_TYPE:
11317     case TYPE_DECL:
11318       return tsubst (t, args, complain, in_decl);
11319
11320     case IDENTIFIER_NODE:
11321       if (IDENTIFIER_TYPENAME_P (t))
11322         {
11323           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11324           return mangle_conv_op_name_for_type (new_type);
11325         }
11326       else
11327         return t;
11328
11329     case CONSTRUCTOR:
11330       /* This is handled by tsubst_copy_and_build.  */
11331       gcc_unreachable ();
11332
11333     case VA_ARG_EXPR:
11334       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
11335                                           in_decl),
11336                              tsubst (TREE_TYPE (t), args, complain, in_decl));
11337
11338     case CLEANUP_POINT_EXPR:
11339       /* We shouldn't have built any of these during initial template
11340          generation.  Instead, they should be built during instantiation
11341          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
11342       gcc_unreachable ();
11343
11344     case OFFSET_REF:
11345       r = build2
11346         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11347          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11348          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11349       PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
11350       mark_used (TREE_OPERAND (r, 1));
11351       return r;
11352
11353     case EXPR_PACK_EXPANSION:
11354       error ("invalid use of pack expansion expression");
11355       return error_mark_node;
11356
11357     case NONTYPE_ARGUMENT_PACK:
11358       error ("use %<...%> to expand argument pack");
11359       return error_mark_node;
11360
11361     case INTEGER_CST:
11362     case REAL_CST:
11363     case STRING_CST:
11364       {
11365         /* Instantiate any typedefs in the type.  */
11366         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11367         r = fold_convert (type, t);
11368         gcc_assert (TREE_CODE (r) == code);
11369         return r;
11370       }
11371
11372     case PTRMEM_CST:
11373       /* These can sometimes show up in a partial instantiation, but never
11374          involve template parms.  */
11375       gcc_assert (!uses_template_parms (t));
11376       return t;
11377
11378     default:
11379       gcc_unreachable ();
11380     }
11381 }
11382
11383 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
11384
11385 static tree
11386 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
11387                     tree in_decl)
11388 {
11389   tree new_clauses = NULL, nc, oc;
11390
11391   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
11392     {
11393       nc = copy_node (oc);
11394       OMP_CLAUSE_CHAIN (nc) = new_clauses;
11395       new_clauses = nc;
11396
11397       switch (OMP_CLAUSE_CODE (nc))
11398         {
11399         case OMP_CLAUSE_LASTPRIVATE:
11400           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
11401             {
11402               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
11403               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
11404                            in_decl, /*integral_constant_expression_p=*/false);
11405               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
11406                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
11407             }
11408           /* FALLTHRU */
11409         case OMP_CLAUSE_PRIVATE:
11410         case OMP_CLAUSE_SHARED:
11411         case OMP_CLAUSE_FIRSTPRIVATE:
11412         case OMP_CLAUSE_REDUCTION:
11413         case OMP_CLAUSE_COPYIN:
11414         case OMP_CLAUSE_COPYPRIVATE:
11415         case OMP_CLAUSE_IF:
11416         case OMP_CLAUSE_NUM_THREADS:
11417         case OMP_CLAUSE_SCHEDULE:
11418         case OMP_CLAUSE_COLLAPSE:
11419           OMP_CLAUSE_OPERAND (nc, 0)
11420             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
11421                            in_decl, /*integral_constant_expression_p=*/false);
11422           break;
11423         case OMP_CLAUSE_NOWAIT:
11424         case OMP_CLAUSE_ORDERED:
11425         case OMP_CLAUSE_DEFAULT:
11426         case OMP_CLAUSE_UNTIED:
11427           break;
11428         default:
11429           gcc_unreachable ();
11430         }
11431     }
11432
11433   return finish_omp_clauses (nreverse (new_clauses));
11434 }
11435
11436 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
11437
11438 static tree
11439 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
11440                           tree in_decl)
11441 {
11442 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
11443
11444   tree purpose, value, chain;
11445
11446   if (t == NULL)
11447     return t;
11448
11449   if (TREE_CODE (t) != TREE_LIST)
11450     return tsubst_copy_and_build (t, args, complain, in_decl,
11451                                   /*function_p=*/false,
11452                                   /*integral_constant_expression_p=*/false);
11453
11454   if (t == void_list_node)
11455     return t;
11456
11457   purpose = TREE_PURPOSE (t);
11458   if (purpose)
11459     purpose = RECUR (purpose);
11460   value = TREE_VALUE (t);
11461   if (value && TREE_CODE (value) != LABEL_DECL)
11462     value = RECUR (value);
11463   chain = TREE_CHAIN (t);
11464   if (chain && chain != void_type_node)
11465     chain = RECUR (chain);
11466   return tree_cons (purpose, value, chain);
11467 #undef RECUR
11468 }
11469
11470 /* Substitute one OMP_FOR iterator.  */
11471
11472 static void
11473 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
11474                          tree condv, tree incrv, tree *clauses,
11475                          tree args, tsubst_flags_t complain, tree in_decl,
11476                          bool integral_constant_expression_p)
11477 {
11478 #define RECUR(NODE)                             \
11479   tsubst_expr ((NODE), args, complain, in_decl, \
11480                integral_constant_expression_p)
11481   tree decl, init, cond, incr, auto_node;
11482
11483   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
11484   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
11485   decl = RECUR (TREE_OPERAND (init, 0));
11486   init = TREE_OPERAND (init, 1);
11487   auto_node = type_uses_auto (TREE_TYPE (decl));
11488   if (auto_node && init)
11489     {
11490       tree init_expr = init;
11491       if (TREE_CODE (init_expr) == DECL_EXPR)
11492         init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
11493       init_expr = RECUR (init_expr);
11494       TREE_TYPE (decl)
11495         = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
11496     }
11497   gcc_assert (!type_dependent_expression_p (decl));
11498
11499   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
11500     {
11501       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
11502       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
11503       if (TREE_CODE (incr) == MODIFY_EXPR)
11504         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
11505                                     RECUR (TREE_OPERAND (incr, 1)),
11506                                     complain);
11507       else
11508         incr = RECUR (incr);
11509       TREE_VEC_ELT (declv, i) = decl;
11510       TREE_VEC_ELT (initv, i) = init;
11511       TREE_VEC_ELT (condv, i) = cond;
11512       TREE_VEC_ELT (incrv, i) = incr;
11513       return;
11514     }
11515
11516   if (init && TREE_CODE (init) != DECL_EXPR)
11517     {
11518       tree c;
11519       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
11520         {
11521           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
11522                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
11523               && OMP_CLAUSE_DECL (c) == decl)
11524             break;
11525           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
11526                    && OMP_CLAUSE_DECL (c) == decl)
11527             error ("iteration variable %qD should not be firstprivate", decl);
11528           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
11529                    && OMP_CLAUSE_DECL (c) == decl)
11530             error ("iteration variable %qD should not be reduction", decl);
11531         }
11532       if (c == NULL)
11533         {
11534           c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
11535           OMP_CLAUSE_DECL (c) = decl;
11536           c = finish_omp_clauses (c);
11537           if (c)
11538             {
11539               OMP_CLAUSE_CHAIN (c) = *clauses;
11540               *clauses = c;
11541             }
11542         }
11543     }
11544   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
11545   if (COMPARISON_CLASS_P (cond))
11546     cond = build2 (TREE_CODE (cond), boolean_type_node,
11547                    RECUR (TREE_OPERAND (cond, 0)),
11548                    RECUR (TREE_OPERAND (cond, 1)));
11549   else
11550     cond = RECUR (cond);
11551   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
11552   switch (TREE_CODE (incr))
11553     {
11554     case PREINCREMENT_EXPR:
11555     case PREDECREMENT_EXPR:
11556     case POSTINCREMENT_EXPR:
11557     case POSTDECREMENT_EXPR:
11558       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
11559                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
11560       break;
11561     case MODIFY_EXPR:
11562       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
11563           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
11564         {
11565           tree rhs = TREE_OPERAND (incr, 1);
11566           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
11567                          RECUR (TREE_OPERAND (incr, 0)),
11568                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
11569                                  RECUR (TREE_OPERAND (rhs, 0)),
11570                                  RECUR (TREE_OPERAND (rhs, 1))));
11571         }
11572       else
11573         incr = RECUR (incr);
11574       break;
11575     case MODOP_EXPR:
11576       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
11577           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
11578         {
11579           tree lhs = RECUR (TREE_OPERAND (incr, 0));
11580           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
11581                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
11582                                  TREE_TYPE (decl), lhs,
11583                                  RECUR (TREE_OPERAND (incr, 2))));
11584         }
11585       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
11586                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
11587                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
11588         {
11589           tree rhs = TREE_OPERAND (incr, 2);
11590           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
11591                          RECUR (TREE_OPERAND (incr, 0)),
11592                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
11593                                  RECUR (TREE_OPERAND (rhs, 0)),
11594                                  RECUR (TREE_OPERAND (rhs, 1))));
11595         }
11596       else
11597         incr = RECUR (incr);
11598       break;
11599     default:
11600       incr = RECUR (incr);
11601       break;
11602     }
11603
11604   TREE_VEC_ELT (declv, i) = decl;
11605   TREE_VEC_ELT (initv, i) = init;
11606   TREE_VEC_ELT (condv, i) = cond;
11607   TREE_VEC_ELT (incrv, i) = incr;
11608 #undef RECUR
11609 }
11610
11611 /* Like tsubst_copy for expressions, etc. but also does semantic
11612    processing.  */
11613
11614 static tree
11615 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
11616              bool integral_constant_expression_p)
11617 {
11618 #define RECUR(NODE)                             \
11619   tsubst_expr ((NODE), args, complain, in_decl, \
11620                integral_constant_expression_p)
11621
11622   tree stmt, tmp;
11623
11624   if (t == NULL_TREE || t == error_mark_node)
11625     return t;
11626
11627   if (EXPR_HAS_LOCATION (t))
11628     input_location = EXPR_LOCATION (t);
11629   if (STATEMENT_CODE_P (TREE_CODE (t)))
11630     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
11631
11632   switch (TREE_CODE (t))
11633     {
11634     case STATEMENT_LIST:
11635       {
11636         tree_stmt_iterator i;
11637         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
11638           RECUR (tsi_stmt (i));
11639         break;
11640       }
11641
11642     case CTOR_INITIALIZER:
11643       finish_mem_initializers (tsubst_initializer_list
11644                                (TREE_OPERAND (t, 0), args));
11645       break;
11646
11647     case RETURN_EXPR:
11648       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
11649       break;
11650
11651     case EXPR_STMT:
11652       tmp = RECUR (EXPR_STMT_EXPR (t));
11653       if (EXPR_STMT_STMT_EXPR_RESULT (t))
11654         finish_stmt_expr_expr (tmp, cur_stmt_expr);
11655       else
11656         finish_expr_stmt (tmp);
11657       break;
11658
11659     case USING_STMT:
11660       do_using_directive (USING_STMT_NAMESPACE (t));
11661       break;
11662
11663     case DECL_EXPR:
11664       {
11665         tree decl;
11666         tree init;
11667
11668         decl = DECL_EXPR_DECL (t);
11669         if (TREE_CODE (decl) == LABEL_DECL)
11670           finish_label_decl (DECL_NAME (decl));
11671         else if (TREE_CODE (decl) == USING_DECL)
11672           {
11673             tree scope = USING_DECL_SCOPE (decl);
11674             tree name = DECL_NAME (decl);
11675             tree decl;
11676
11677             scope = tsubst (scope, args, complain, in_decl);
11678             decl = lookup_qualified_name (scope, name,
11679                                           /*is_type_p=*/false,
11680                                           /*complain=*/false);
11681             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
11682               qualified_name_lookup_error (scope, name, decl, input_location);
11683             else
11684               do_local_using_decl (decl, scope, name);
11685           }
11686         else
11687           {
11688             init = DECL_INITIAL (decl);
11689             decl = tsubst (decl, args, complain, in_decl);
11690             if (decl != error_mark_node)
11691               {
11692                 /* By marking the declaration as instantiated, we avoid
11693                    trying to instantiate it.  Since instantiate_decl can't
11694                    handle local variables, and since we've already done
11695                    all that needs to be done, that's the right thing to
11696                    do.  */
11697                 if (TREE_CODE (decl) == VAR_DECL)
11698                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
11699                 if (TREE_CODE (decl) == VAR_DECL
11700                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
11701                   /* Anonymous aggregates are a special case.  */
11702                   finish_anon_union (decl);
11703                 else
11704                   {
11705                     maybe_push_decl (decl);
11706                     if (TREE_CODE (decl) == VAR_DECL
11707                         && DECL_PRETTY_FUNCTION_P (decl))
11708                       {
11709                         /* For __PRETTY_FUNCTION__ we have to adjust the
11710                            initializer.  */
11711                         const char *const name
11712                           = cxx_printable_name (current_function_decl, 2);
11713                         init = cp_fname_init (name, &TREE_TYPE (decl));
11714                       }
11715                     else
11716                       {
11717                         tree t = RECUR (init);
11718
11719                         if (init && !t)
11720                           {
11721                             /* If we had an initializer but it
11722                                instantiated to nothing,
11723                                value-initialize the object.  This will
11724                                only occur when the initializer was a
11725                                pack expansion where the parameter packs
11726                                used in that expansion were of length
11727                                zero.  */
11728                             init = build_value_init (TREE_TYPE (decl),
11729                                                      complain);
11730                             if (TREE_CODE (init) == AGGR_INIT_EXPR)
11731                               init = get_target_expr (init);
11732                           }
11733                         else
11734                           init = t;
11735                       }
11736
11737                     cp_finish_decl (decl, init, false, NULL_TREE, 0);
11738                   }
11739               }
11740           }
11741
11742         /* A DECL_EXPR can also be used as an expression, in the condition
11743            clause of an if/for/while construct.  */
11744         return decl;
11745       }
11746
11747     case FOR_STMT:
11748       stmt = begin_for_stmt ();
11749       RECUR (FOR_INIT_STMT (t));
11750       finish_for_init_stmt (stmt);
11751       tmp = RECUR (FOR_COND (t));
11752       finish_for_cond (tmp, stmt);
11753       tmp = RECUR (FOR_EXPR (t));
11754       finish_for_expr (tmp, stmt);
11755       RECUR (FOR_BODY (t));
11756       finish_for_stmt (stmt);
11757       break;
11758
11759     case RANGE_FOR_STMT:
11760       {
11761         tree decl, expr;
11762         stmt = begin_for_stmt ();
11763         decl = RANGE_FOR_DECL (t);
11764         decl = tsubst (decl, args, complain, in_decl);
11765         maybe_push_decl (decl);
11766         expr = RECUR (RANGE_FOR_EXPR (t));
11767         stmt = cp_convert_range_for (stmt, decl, expr);
11768         RECUR (RANGE_FOR_BODY (t));
11769         finish_for_stmt (stmt);
11770       }
11771       break;
11772
11773     case WHILE_STMT:
11774       stmt = begin_while_stmt ();
11775       tmp = RECUR (WHILE_COND (t));
11776       finish_while_stmt_cond (tmp, stmt);
11777       RECUR (WHILE_BODY (t));
11778       finish_while_stmt (stmt);
11779       break;
11780
11781     case DO_STMT:
11782       stmt = begin_do_stmt ();
11783       RECUR (DO_BODY (t));
11784       finish_do_body (stmt);
11785       tmp = RECUR (DO_COND (t));
11786       finish_do_stmt (tmp, stmt);
11787       break;
11788
11789     case IF_STMT:
11790       stmt = begin_if_stmt ();
11791       tmp = RECUR (IF_COND (t));
11792       finish_if_stmt_cond (tmp, stmt);
11793       RECUR (THEN_CLAUSE (t));
11794       finish_then_clause (stmt);
11795
11796       if (ELSE_CLAUSE (t))
11797         {
11798           begin_else_clause (stmt);
11799           RECUR (ELSE_CLAUSE (t));
11800           finish_else_clause (stmt);
11801         }
11802
11803       finish_if_stmt (stmt);
11804       break;
11805
11806     case BIND_EXPR:
11807       if (BIND_EXPR_BODY_BLOCK (t))
11808         stmt = begin_function_body ();
11809       else
11810         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
11811                                     ? BCS_TRY_BLOCK : 0);
11812
11813       RECUR (BIND_EXPR_BODY (t));
11814
11815       if (BIND_EXPR_BODY_BLOCK (t))
11816         finish_function_body (stmt);
11817       else
11818         finish_compound_stmt (stmt);
11819       break;
11820
11821     case BREAK_STMT:
11822       finish_break_stmt ();
11823       break;
11824
11825     case CONTINUE_STMT:
11826       finish_continue_stmt ();
11827       break;
11828
11829     case SWITCH_STMT:
11830       stmt = begin_switch_stmt ();
11831       tmp = RECUR (SWITCH_STMT_COND (t));
11832       finish_switch_cond (tmp, stmt);
11833       RECUR (SWITCH_STMT_BODY (t));
11834       finish_switch_stmt (stmt);
11835       break;
11836
11837     case CASE_LABEL_EXPR:
11838       finish_case_label (EXPR_LOCATION (t),
11839                          RECUR (CASE_LOW (t)),
11840                          RECUR (CASE_HIGH (t)));
11841       break;
11842
11843     case LABEL_EXPR:
11844       {
11845         tree decl = LABEL_EXPR_LABEL (t);
11846         tree label;
11847
11848         label = finish_label_stmt (DECL_NAME (decl));
11849         if (DECL_ATTRIBUTES (decl) != NULL_TREE)
11850           cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
11851       }
11852       break;
11853
11854     case GOTO_EXPR:
11855       tmp = GOTO_DESTINATION (t);
11856       if (TREE_CODE (tmp) != LABEL_DECL)
11857         /* Computed goto's must be tsubst'd into.  On the other hand,
11858            non-computed gotos must not be; the identifier in question
11859            will have no binding.  */
11860         tmp = RECUR (tmp);
11861       else
11862         tmp = DECL_NAME (tmp);
11863       finish_goto_stmt (tmp);
11864       break;
11865
11866     case ASM_EXPR:
11867       tmp = finish_asm_stmt
11868         (ASM_VOLATILE_P (t),
11869          RECUR (ASM_STRING (t)),
11870          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
11871          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
11872          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
11873          tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
11874       {
11875         tree asm_expr = tmp;
11876         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
11877           asm_expr = TREE_OPERAND (asm_expr, 0);
11878         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
11879       }
11880       break;
11881
11882     case TRY_BLOCK:
11883       if (CLEANUP_P (t))
11884         {
11885           stmt = begin_try_block ();
11886           RECUR (TRY_STMTS (t));
11887           finish_cleanup_try_block (stmt);
11888           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
11889         }
11890       else
11891         {
11892           tree compound_stmt = NULL_TREE;
11893
11894           if (FN_TRY_BLOCK_P (t))
11895             stmt = begin_function_try_block (&compound_stmt);
11896           else
11897             stmt = begin_try_block ();
11898
11899           RECUR (TRY_STMTS (t));
11900
11901           if (FN_TRY_BLOCK_P (t))
11902             finish_function_try_block (stmt);
11903           else
11904             finish_try_block (stmt);
11905
11906           RECUR (TRY_HANDLERS (t));
11907           if (FN_TRY_BLOCK_P (t))
11908             finish_function_handler_sequence (stmt, compound_stmt);
11909           else
11910             finish_handler_sequence (stmt);
11911         }
11912       break;
11913
11914     case HANDLER:
11915       {
11916         tree decl = HANDLER_PARMS (t);
11917
11918         if (decl)
11919           {
11920             decl = tsubst (decl, args, complain, in_decl);
11921             /* Prevent instantiate_decl from trying to instantiate
11922                this variable.  We've already done all that needs to be
11923                done.  */
11924             if (decl != error_mark_node)
11925               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
11926           }
11927         stmt = begin_handler ();
11928         finish_handler_parms (decl, stmt);
11929         RECUR (HANDLER_BODY (t));
11930         finish_handler (stmt);
11931       }
11932       break;
11933
11934     case TAG_DEFN:
11935       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
11936       break;
11937
11938     case STATIC_ASSERT:
11939       {
11940         tree condition = 
11941           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
11942                        args,
11943                        complain, in_decl,
11944                        /*integral_constant_expression_p=*/true);
11945         finish_static_assert (condition,
11946                               STATIC_ASSERT_MESSAGE (t),
11947                               STATIC_ASSERT_SOURCE_LOCATION (t),
11948                               /*member_p=*/false);
11949       }
11950       break;
11951
11952     case OMP_PARALLEL:
11953       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
11954                                 args, complain, in_decl);
11955       stmt = begin_omp_parallel ();
11956       RECUR (OMP_PARALLEL_BODY (t));
11957       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
11958         = OMP_PARALLEL_COMBINED (t);
11959       break;
11960
11961     case OMP_TASK:
11962       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
11963                                 args, complain, in_decl);
11964       stmt = begin_omp_task ();
11965       RECUR (OMP_TASK_BODY (t));
11966       finish_omp_task (tmp, stmt);
11967       break;
11968
11969     case OMP_FOR:
11970       {
11971         tree clauses, body, pre_body;
11972         tree declv, initv, condv, incrv;
11973         int i;
11974
11975         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
11976                                       args, complain, in_decl);
11977         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
11978         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
11979         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
11980         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
11981
11982         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
11983           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
11984                                    &clauses, args, complain, in_decl,
11985                                    integral_constant_expression_p);
11986
11987         stmt = begin_omp_structured_block ();
11988
11989         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
11990           if (TREE_VEC_ELT (initv, i) == NULL
11991               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
11992             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
11993           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
11994             {
11995               tree init = RECUR (TREE_VEC_ELT (initv, i));
11996               gcc_assert (init == TREE_VEC_ELT (declv, i));
11997               TREE_VEC_ELT (initv, i) = NULL_TREE;
11998             }
11999           else
12000             {
12001               tree decl_expr = TREE_VEC_ELT (initv, i);
12002               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
12003               gcc_assert (init != NULL);
12004               TREE_VEC_ELT (initv, i) = RECUR (init);
12005               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
12006               RECUR (decl_expr);
12007               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
12008             }
12009
12010         pre_body = push_stmt_list ();
12011         RECUR (OMP_FOR_PRE_BODY (t));
12012         pre_body = pop_stmt_list (pre_body);
12013
12014         body = push_stmt_list ();
12015         RECUR (OMP_FOR_BODY (t));
12016         body = pop_stmt_list (body);
12017
12018         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
12019                             body, pre_body, clauses);
12020
12021         add_stmt (finish_omp_structured_block (stmt));
12022       }
12023       break;
12024
12025     case OMP_SECTIONS:
12026     case OMP_SINGLE:
12027       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
12028       stmt = push_stmt_list ();
12029       RECUR (OMP_BODY (t));
12030       stmt = pop_stmt_list (stmt);
12031
12032       t = copy_node (t);
12033       OMP_BODY (t) = stmt;
12034       OMP_CLAUSES (t) = tmp;
12035       add_stmt (t);
12036       break;
12037
12038     case OMP_SECTION:
12039     case OMP_CRITICAL:
12040     case OMP_MASTER:
12041     case OMP_ORDERED:
12042       stmt = push_stmt_list ();
12043       RECUR (OMP_BODY (t));
12044       stmt = pop_stmt_list (stmt);
12045
12046       t = copy_node (t);
12047       OMP_BODY (t) = stmt;
12048       add_stmt (t);
12049       break;
12050
12051     case OMP_ATOMIC:
12052       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
12053       {
12054         tree op1 = TREE_OPERAND (t, 1);
12055         tree lhs = RECUR (TREE_OPERAND (op1, 0));
12056         tree rhs = RECUR (TREE_OPERAND (op1, 1));
12057         finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
12058       }
12059       break;
12060
12061     case EXPR_PACK_EXPANSION:
12062       error ("invalid use of pack expansion expression");
12063       return error_mark_node;
12064
12065     case NONTYPE_ARGUMENT_PACK:
12066       error ("use %<...%> to expand argument pack");
12067       return error_mark_node;
12068
12069     default:
12070       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
12071
12072       return tsubst_copy_and_build (t, args, complain, in_decl,
12073                                     /*function_p=*/false,
12074                                     integral_constant_expression_p);
12075     }
12076
12077   return NULL_TREE;
12078 #undef RECUR
12079 }
12080
12081 /* T is a postfix-expression that is not being used in a function
12082    call.  Return the substituted version of T.  */
12083
12084 static tree
12085 tsubst_non_call_postfix_expression (tree t, tree args,
12086                                     tsubst_flags_t complain,
12087                                     tree in_decl)
12088 {
12089   if (TREE_CODE (t) == SCOPE_REF)
12090     t = tsubst_qualified_id (t, args, complain, in_decl,
12091                              /*done=*/false, /*address_p=*/false);
12092   else
12093     t = tsubst_copy_and_build (t, args, complain, in_decl,
12094                                /*function_p=*/false,
12095                                /*integral_constant_expression_p=*/false);
12096
12097   return t;
12098 }
12099
12100 /* Like tsubst but deals with expressions and performs semantic
12101    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
12102
12103 tree
12104 tsubst_copy_and_build (tree t,
12105                        tree args,
12106                        tsubst_flags_t complain,
12107                        tree in_decl,
12108                        bool function_p,
12109                        bool integral_constant_expression_p)
12110 {
12111 #define RECUR(NODE)                                             \
12112   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
12113                          /*function_p=*/false,                  \
12114                          integral_constant_expression_p)
12115
12116   tree op1;
12117
12118   if (t == NULL_TREE || t == error_mark_node)
12119     return t;
12120
12121   switch (TREE_CODE (t))
12122     {
12123     case USING_DECL:
12124       t = DECL_NAME (t);
12125       /* Fall through.  */
12126     case IDENTIFIER_NODE:
12127       {
12128         tree decl;
12129         cp_id_kind idk;
12130         bool non_integral_constant_expression_p;
12131         const char *error_msg;
12132
12133         if (IDENTIFIER_TYPENAME_P (t))
12134           {
12135             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12136             t = mangle_conv_op_name_for_type (new_type);
12137           }
12138
12139         /* Look up the name.  */
12140         decl = lookup_name (t);
12141
12142         /* By convention, expressions use ERROR_MARK_NODE to indicate
12143            failure, not NULL_TREE.  */
12144         if (decl == NULL_TREE)
12145           decl = error_mark_node;
12146
12147         decl = finish_id_expression (t, decl, NULL_TREE,
12148                                      &idk,
12149                                      integral_constant_expression_p,
12150                                      /*allow_non_integral_constant_expression_p=*/false,
12151                                      &non_integral_constant_expression_p,
12152                                      /*template_p=*/false,
12153                                      /*done=*/true,
12154                                      /*address_p=*/false,
12155                                      /*template_arg_p=*/false,
12156                                      &error_msg,
12157                                      input_location);
12158         if (error_msg)
12159           error (error_msg);
12160         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
12161           decl = unqualified_name_lookup_error (decl);
12162         return decl;
12163       }
12164
12165     case TEMPLATE_ID_EXPR:
12166       {
12167         tree object;
12168         tree templ = RECUR (TREE_OPERAND (t, 0));
12169         tree targs = TREE_OPERAND (t, 1);
12170
12171         if (targs)
12172           targs = tsubst_template_args (targs, args, complain, in_decl);
12173
12174         if (TREE_CODE (templ) == COMPONENT_REF)
12175           {
12176             object = TREE_OPERAND (templ, 0);
12177             templ = TREE_OPERAND (templ, 1);
12178           }
12179         else
12180           object = NULL_TREE;
12181         templ = lookup_template_function (templ, targs);
12182
12183         if (object)
12184           return build3 (COMPONENT_REF, TREE_TYPE (templ),
12185                          object, templ, NULL_TREE);
12186         else
12187           return baselink_for_fns (templ);
12188       }
12189
12190     case INDIRECT_REF:
12191       {
12192         tree r = RECUR (TREE_OPERAND (t, 0));
12193
12194         if (REFERENCE_REF_P (t))
12195           {
12196             /* A type conversion to reference type will be enclosed in
12197                such an indirect ref, but the substitution of the cast
12198                will have also added such an indirect ref.  */
12199             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
12200               r = convert_from_reference (r);
12201           }
12202         else
12203           r = build_x_indirect_ref (r, RO_UNARY_STAR, complain);
12204         return r;
12205       }
12206
12207     case NOP_EXPR:
12208       return build_nop
12209         (tsubst (TREE_TYPE (t), args, complain, in_decl),
12210          RECUR (TREE_OPERAND (t, 0)));
12211
12212     case CAST_EXPR:
12213     case REINTERPRET_CAST_EXPR:
12214     case CONST_CAST_EXPR:
12215     case DYNAMIC_CAST_EXPR:
12216     case STATIC_CAST_EXPR:
12217       {
12218         tree type;
12219         tree op;
12220
12221         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12222         if (integral_constant_expression_p
12223             && !cast_valid_in_integral_constant_expression_p (type))
12224           {
12225             if (complain & tf_error)
12226               error ("a cast to a type other than an integral or "
12227                      "enumeration type cannot appear in a constant-expression");
12228             return error_mark_node; 
12229           }
12230
12231         op = RECUR (TREE_OPERAND (t, 0));
12232
12233         switch (TREE_CODE (t))
12234           {
12235           case CAST_EXPR:
12236             return build_functional_cast (type, op, complain);
12237           case REINTERPRET_CAST_EXPR:
12238             return build_reinterpret_cast (type, op, complain);
12239           case CONST_CAST_EXPR:
12240             return build_const_cast (type, op, complain);
12241           case DYNAMIC_CAST_EXPR:
12242             return build_dynamic_cast (type, op, complain);
12243           case STATIC_CAST_EXPR:
12244             return build_static_cast (type, op, complain);
12245           default:
12246             gcc_unreachable ();
12247           }
12248       }
12249
12250     case POSTDECREMENT_EXPR:
12251     case POSTINCREMENT_EXPR:
12252       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12253                                                 args, complain, in_decl);
12254       return build_x_unary_op (TREE_CODE (t), op1, complain);
12255
12256     case PREDECREMENT_EXPR:
12257     case PREINCREMENT_EXPR:
12258     case NEGATE_EXPR:
12259     case BIT_NOT_EXPR:
12260     case ABS_EXPR:
12261     case TRUTH_NOT_EXPR:
12262     case UNARY_PLUS_EXPR:  /* Unary + */
12263     case REALPART_EXPR:
12264     case IMAGPART_EXPR:
12265       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
12266                                complain);
12267
12268     case ADDR_EXPR:
12269       op1 = TREE_OPERAND (t, 0);
12270       if (TREE_CODE (op1) == LABEL_DECL)
12271         return finish_label_address_expr (DECL_NAME (op1),
12272                                           EXPR_LOCATION (op1));
12273       if (TREE_CODE (op1) == SCOPE_REF)
12274         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
12275                                    /*done=*/true, /*address_p=*/true);
12276       else
12277         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
12278                                                   in_decl);
12279       return build_x_unary_op (ADDR_EXPR, op1, complain);
12280
12281     case PLUS_EXPR:
12282     case MINUS_EXPR:
12283     case MULT_EXPR:
12284     case TRUNC_DIV_EXPR:
12285     case CEIL_DIV_EXPR:
12286     case FLOOR_DIV_EXPR:
12287     case ROUND_DIV_EXPR:
12288     case EXACT_DIV_EXPR:
12289     case BIT_AND_EXPR:
12290     case BIT_IOR_EXPR:
12291     case BIT_XOR_EXPR:
12292     case TRUNC_MOD_EXPR:
12293     case FLOOR_MOD_EXPR:
12294     case TRUTH_ANDIF_EXPR:
12295     case TRUTH_ORIF_EXPR:
12296     case TRUTH_AND_EXPR:
12297     case TRUTH_OR_EXPR:
12298     case RSHIFT_EXPR:
12299     case LSHIFT_EXPR:
12300     case RROTATE_EXPR:
12301     case LROTATE_EXPR:
12302     case EQ_EXPR:
12303     case NE_EXPR:
12304     case MAX_EXPR:
12305     case MIN_EXPR:
12306     case LE_EXPR:
12307     case GE_EXPR:
12308     case LT_EXPR:
12309     case GT_EXPR:
12310     case MEMBER_REF:
12311     case DOTSTAR_EXPR:
12312       return build_x_binary_op
12313         (TREE_CODE (t),
12314          RECUR (TREE_OPERAND (t, 0)),
12315          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
12316           ? ERROR_MARK
12317           : TREE_CODE (TREE_OPERAND (t, 0))),
12318          RECUR (TREE_OPERAND (t, 1)),
12319          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
12320           ? ERROR_MARK
12321           : TREE_CODE (TREE_OPERAND (t, 1))),
12322          /*overloaded_p=*/NULL,
12323          complain);
12324
12325     case SCOPE_REF:
12326       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
12327                                   /*address_p=*/false);
12328     case ARRAY_REF:
12329       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12330                                                 args, complain, in_decl);
12331       return build_x_array_ref (op1, RECUR (TREE_OPERAND (t, 1)), complain);
12332
12333     case SIZEOF_EXPR:
12334       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12335         return tsubst_copy (t, args, complain, in_decl);
12336       /* Fall through */
12337       
12338     case ALIGNOF_EXPR:
12339       op1 = TREE_OPERAND (t, 0);
12340       if (!args)
12341         {
12342           /* When there are no ARGS, we are trying to evaluate a
12343              non-dependent expression from the parser.  Trying to do
12344              the substitutions may not work.  */
12345           if (!TYPE_P (op1))
12346             op1 = TREE_TYPE (op1);
12347         }
12348       else
12349         {
12350           ++cp_unevaluated_operand;
12351           ++c_inhibit_evaluation_warnings;
12352           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
12353                                        /*function_p=*/false,
12354                                        /*integral_constant_expression_p=*/false);
12355           --cp_unevaluated_operand;
12356           --c_inhibit_evaluation_warnings;
12357         }
12358       if (TYPE_P (op1))
12359         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
12360                                            complain & tf_error);
12361       else
12362         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
12363                                            complain & tf_error);
12364
12365     case AT_ENCODE_EXPR:
12366       {
12367         op1 = TREE_OPERAND (t, 0);
12368         ++cp_unevaluated_operand;
12369         ++c_inhibit_evaluation_warnings;
12370         op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
12371                                      /*function_p=*/false,
12372                                      /*integral_constant_expression_p=*/false);
12373         --cp_unevaluated_operand;
12374         --c_inhibit_evaluation_warnings;
12375         return objc_build_encode_expr (op1);
12376       }
12377
12378     case NOEXCEPT_EXPR:
12379       op1 = TREE_OPERAND (t, 0);
12380       ++cp_unevaluated_operand;
12381       ++c_inhibit_evaluation_warnings;
12382       op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
12383                                    /*function_p=*/false,
12384                                    /*integral_constant_expression_p=*/false);
12385       --cp_unevaluated_operand;
12386       --c_inhibit_evaluation_warnings;
12387       return finish_noexcept_expr (op1, complain);
12388
12389     case MODOP_EXPR:
12390       {
12391         tree r = build_x_modify_expr
12392           (RECUR (TREE_OPERAND (t, 0)),
12393            TREE_CODE (TREE_OPERAND (t, 1)),
12394            RECUR (TREE_OPERAND (t, 2)),
12395            complain);
12396         /* TREE_NO_WARNING must be set if either the expression was
12397            parenthesized or it uses an operator such as >>= rather
12398            than plain assignment.  In the former case, it was already
12399            set and must be copied.  In the latter case,
12400            build_x_modify_expr sets it and it must not be reset
12401            here.  */
12402         if (TREE_NO_WARNING (t))
12403           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12404         return r;
12405       }
12406
12407     case ARROW_EXPR:
12408       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12409                                                 args, complain, in_decl);
12410       /* Remember that there was a reference to this entity.  */
12411       if (DECL_P (op1))
12412         mark_used (op1);
12413       return build_x_arrow (op1);
12414
12415     case NEW_EXPR:
12416       {
12417         tree placement = RECUR (TREE_OPERAND (t, 0));
12418         tree init = RECUR (TREE_OPERAND (t, 3));
12419         VEC(tree,gc) *placement_vec;
12420         VEC(tree,gc) *init_vec;
12421         tree ret;
12422
12423         if (placement == NULL_TREE)
12424           placement_vec = NULL;
12425         else
12426           {
12427             placement_vec = make_tree_vector ();
12428             for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
12429               VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement));
12430           }
12431
12432         /* If there was an initializer in the original tree, but it
12433            instantiated to an empty list, then we should pass a
12434            non-NULL empty vector to tell build_new that it was an
12435            empty initializer() rather than no initializer.  This can
12436            only happen when the initializer is a pack expansion whose
12437            parameter packs are of length zero.  */
12438         if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
12439           init_vec = NULL;
12440         else
12441           {
12442             init_vec = make_tree_vector ();
12443             if (init == void_zero_node)
12444               gcc_assert (init_vec != NULL);
12445             else
12446               {
12447                 for (; init != NULL_TREE; init = TREE_CHAIN (init))
12448                   VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init));
12449               }
12450           }
12451
12452         ret = build_new (&placement_vec,
12453                          tsubst (TREE_OPERAND (t, 1), args, complain, in_decl),
12454                          RECUR (TREE_OPERAND (t, 2)),
12455                          &init_vec,
12456                          NEW_EXPR_USE_GLOBAL (t),
12457                          complain);
12458
12459         if (placement_vec != NULL)
12460           release_tree_vector (placement_vec);
12461         if (init_vec != NULL)
12462           release_tree_vector (init_vec);
12463
12464         return ret;
12465       }
12466
12467     case DELETE_EXPR:
12468      return delete_sanity
12469        (RECUR (TREE_OPERAND (t, 0)),
12470         RECUR (TREE_OPERAND (t, 1)),
12471         DELETE_EXPR_USE_VEC (t),
12472         DELETE_EXPR_USE_GLOBAL (t));
12473
12474     case COMPOUND_EXPR:
12475       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
12476                                     RECUR (TREE_OPERAND (t, 1)),
12477                                     complain);
12478
12479     case CALL_EXPR:
12480       {
12481         tree function;
12482         VEC(tree,gc) *call_args;
12483         unsigned int nargs, i;
12484         bool qualified_p;
12485         bool koenig_p;
12486         tree ret;
12487
12488         function = CALL_EXPR_FN (t);
12489         /* When we parsed the expression,  we determined whether or
12490            not Koenig lookup should be performed.  */
12491         koenig_p = KOENIG_LOOKUP_P (t);
12492         if (TREE_CODE (function) == SCOPE_REF)
12493           {
12494             qualified_p = true;
12495             function = tsubst_qualified_id (function, args, complain, in_decl,
12496                                             /*done=*/false,
12497                                             /*address_p=*/false);
12498           }
12499         else
12500           {
12501             if (TREE_CODE (function) == COMPONENT_REF)
12502               {
12503                 tree op = TREE_OPERAND (function, 1);
12504
12505                 qualified_p = (TREE_CODE (op) == SCOPE_REF
12506                                || (BASELINK_P (op)
12507                                    && BASELINK_QUALIFIED_P (op)));
12508               }
12509             else
12510               qualified_p = false;
12511
12512             function = tsubst_copy_and_build (function, args, complain,
12513                                               in_decl,
12514                                               !qualified_p,
12515                                               integral_constant_expression_p);
12516
12517             if (BASELINK_P (function))
12518               qualified_p = true;
12519           }
12520
12521         nargs = call_expr_nargs (t);
12522         call_args = make_tree_vector ();
12523         for (i = 0; i < nargs; ++i)
12524           {
12525             tree arg = CALL_EXPR_ARG (t, i);
12526
12527             if (!PACK_EXPANSION_P (arg))
12528               VEC_safe_push (tree, gc, call_args,
12529                              RECUR (CALL_EXPR_ARG (t, i)));
12530             else
12531               {
12532                 /* Expand the pack expansion and push each entry onto
12533                    CALL_ARGS.  */
12534                 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
12535                 if (TREE_CODE (arg) == TREE_VEC)
12536                   {
12537                     unsigned int len, j;
12538
12539                     len = TREE_VEC_LENGTH (arg);
12540                     for (j = 0; j < len; ++j)
12541                       {
12542                         tree value = TREE_VEC_ELT (arg, j);
12543                         if (value != NULL_TREE)
12544                           value = convert_from_reference (value);
12545                         VEC_safe_push (tree, gc, call_args, value);
12546                       }
12547                   }
12548                 else
12549                   {
12550                     /* A partial substitution.  Add one entry.  */
12551                     VEC_safe_push (tree, gc, call_args, arg);
12552                   }
12553               }
12554           }
12555
12556         /* We do not perform argument-dependent lookup if normal
12557            lookup finds a non-function, in accordance with the
12558            expected resolution of DR 218.  */
12559         if (koenig_p
12560             && ((is_overloaded_fn (function)
12561                  /* If lookup found a member function, the Koenig lookup is
12562                     not appropriate, even if an unqualified-name was used
12563                     to denote the function.  */
12564                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
12565                 || TREE_CODE (function) == IDENTIFIER_NODE)
12566             /* Only do this when substitution turns a dependent call
12567                into a non-dependent call.  */
12568             && type_dependent_expression_p_push (t)
12569             && !any_type_dependent_arguments_p (call_args))
12570           function = perform_koenig_lookup (function, call_args, false);
12571
12572         if (TREE_CODE (function) == IDENTIFIER_NODE)
12573           {
12574             unqualified_name_lookup_error (function);
12575             release_tree_vector (call_args);
12576             return error_mark_node;
12577           }
12578
12579         /* Remember that there was a reference to this entity.  */
12580         if (DECL_P (function))
12581           mark_used (function);
12582
12583         if (TREE_CODE (function) == OFFSET_REF)
12584           ret = build_offset_ref_call_from_tree (function, &call_args);
12585         else if (TREE_CODE (function) == COMPONENT_REF)
12586           {
12587             tree instance = TREE_OPERAND (function, 0);
12588             tree fn = TREE_OPERAND (function, 1);
12589
12590             if (processing_template_decl
12591                 && (type_dependent_expression_p (instance)
12592                     || (!BASELINK_P (fn)
12593                         && TREE_CODE (fn) != FIELD_DECL)
12594                     || type_dependent_expression_p (fn)
12595                     || any_type_dependent_arguments_p (call_args)))
12596               ret = build_nt_call_vec (function, call_args);
12597             else if (!BASELINK_P (fn))
12598               ret = finish_call_expr (function, &call_args,
12599                                        /*disallow_virtual=*/false,
12600                                        /*koenig_p=*/false,
12601                                        complain);
12602             else
12603               ret = (build_new_method_call
12604                       (instance, fn,
12605                        &call_args, NULL_TREE,
12606                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
12607                        /*fn_p=*/NULL,
12608                        complain));
12609           }
12610         else
12611           ret = finish_call_expr (function, &call_args,
12612                                   /*disallow_virtual=*/qualified_p,
12613                                   koenig_p,
12614                                   complain);
12615
12616         release_tree_vector (call_args);
12617
12618         return ret;
12619       }
12620
12621     case COND_EXPR:
12622       return build_x_conditional_expr
12623         (RECUR (TREE_OPERAND (t, 0)),
12624          RECUR (TREE_OPERAND (t, 1)),
12625          RECUR (TREE_OPERAND (t, 2)),
12626          complain);
12627
12628     case PSEUDO_DTOR_EXPR:
12629       return finish_pseudo_destructor_expr
12630         (RECUR (TREE_OPERAND (t, 0)),
12631          RECUR (TREE_OPERAND (t, 1)),
12632          RECUR (TREE_OPERAND (t, 2)));
12633
12634     case TREE_LIST:
12635       {
12636         tree purpose, value, chain;
12637
12638         if (t == void_list_node)
12639           return t;
12640
12641         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
12642             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
12643           {
12644             /* We have pack expansions, so expand those and
12645                create a new list out of it.  */
12646             tree purposevec = NULL_TREE;
12647             tree valuevec = NULL_TREE;
12648             tree chain;
12649             int i, len = -1;
12650
12651             /* Expand the argument expressions.  */
12652             if (TREE_PURPOSE (t))
12653               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
12654                                                  complain, in_decl);
12655             if (TREE_VALUE (t))
12656               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
12657                                                complain, in_decl);
12658
12659             /* Build the rest of the list.  */
12660             chain = TREE_CHAIN (t);
12661             if (chain && chain != void_type_node)
12662               chain = RECUR (chain);
12663
12664             /* Determine the number of arguments.  */
12665             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
12666               {
12667                 len = TREE_VEC_LENGTH (purposevec);
12668                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
12669               }
12670             else if (TREE_CODE (valuevec) == TREE_VEC)
12671               len = TREE_VEC_LENGTH (valuevec);
12672             else
12673               {
12674                 /* Since we only performed a partial substitution into
12675                    the argument pack, we only return a single list
12676                    node.  */
12677                 if (purposevec == TREE_PURPOSE (t)
12678                     && valuevec == TREE_VALUE (t)
12679                     && chain == TREE_CHAIN (t))
12680                   return t;
12681
12682                 return tree_cons (purposevec, valuevec, chain);
12683               }
12684             
12685             /* Convert the argument vectors into a TREE_LIST */
12686             i = len;
12687             while (i > 0)
12688               {
12689                 /* Grab the Ith values.  */
12690                 i--;
12691                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
12692                                      : NULL_TREE;
12693                 value 
12694                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
12695                              : NULL_TREE;
12696
12697                 /* Build the list (backwards).  */
12698                 chain = tree_cons (purpose, value, chain);
12699               }
12700
12701             return chain;
12702           }
12703
12704         purpose = TREE_PURPOSE (t);
12705         if (purpose)
12706           purpose = RECUR (purpose);
12707         value = TREE_VALUE (t);
12708         if (value)
12709           value = RECUR (value);
12710         chain = TREE_CHAIN (t);
12711         if (chain && chain != void_type_node)
12712           chain = RECUR (chain);
12713         if (purpose == TREE_PURPOSE (t)
12714             && value == TREE_VALUE (t)
12715             && chain == TREE_CHAIN (t))
12716           return t;
12717         return tree_cons (purpose, value, chain);
12718       }
12719
12720     case COMPONENT_REF:
12721       {
12722         tree object;
12723         tree object_type;
12724         tree member;
12725
12726         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
12727                                                      args, complain, in_decl);
12728         /* Remember that there was a reference to this entity.  */
12729         if (DECL_P (object))
12730           mark_used (object);
12731         object_type = TREE_TYPE (object);
12732
12733         member = TREE_OPERAND (t, 1);
12734         if (BASELINK_P (member))
12735           member = tsubst_baselink (member,
12736                                     non_reference (TREE_TYPE (object)),
12737                                     args, complain, in_decl);
12738         else
12739           member = tsubst_copy (member, args, complain, in_decl);
12740         if (member == error_mark_node)
12741           return error_mark_node;
12742
12743         if (object_type && !CLASS_TYPE_P (object_type))
12744           {
12745             if (SCALAR_TYPE_P (object_type))
12746               {
12747                 tree s = NULL_TREE;
12748                 tree dtor = member;
12749
12750                 if (TREE_CODE (dtor) == SCOPE_REF)
12751                   {
12752                     s = TREE_OPERAND (dtor, 0);
12753                     dtor = TREE_OPERAND (dtor, 1);
12754                   }
12755                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
12756                   {
12757                     dtor = TREE_OPERAND (dtor, 0);
12758                     if (TYPE_P (dtor))
12759                       return finish_pseudo_destructor_expr (object, s, dtor);
12760                   }
12761               }
12762           }
12763         else if (TREE_CODE (member) == SCOPE_REF
12764                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
12765           {
12766             tree tmpl;
12767             tree args;
12768
12769             /* Lookup the template functions now that we know what the
12770                scope is.  */
12771             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
12772             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
12773             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
12774                                             /*is_type_p=*/false,
12775                                             /*complain=*/false);
12776             if (BASELINK_P (member))
12777               {
12778                 BASELINK_FUNCTIONS (member)
12779                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
12780                               args);
12781                 member = (adjust_result_of_qualified_name_lookup
12782                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
12783                            object_type));
12784               }
12785             else
12786               {
12787                 qualified_name_lookup_error (object_type, tmpl, member,
12788                                              input_location);
12789                 return error_mark_node;
12790               }
12791           }
12792         else if (TREE_CODE (member) == SCOPE_REF
12793                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
12794                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
12795           {
12796             if (complain & tf_error)
12797               {
12798                 if (TYPE_P (TREE_OPERAND (member, 0)))
12799                   error ("%qT is not a class or namespace",
12800                          TREE_OPERAND (member, 0));
12801                 else
12802                   error ("%qD is not a class or namespace",
12803                          TREE_OPERAND (member, 0));
12804               }
12805             return error_mark_node;
12806           }
12807         else if (TREE_CODE (member) == FIELD_DECL)
12808           return finish_non_static_data_member (member, object, NULL_TREE);
12809
12810         return finish_class_member_access_expr (object, member,
12811                                                 /*template_p=*/false,
12812                                                 complain);
12813       }
12814
12815     case THROW_EXPR:
12816       return build_throw
12817         (RECUR (TREE_OPERAND (t, 0)));
12818
12819     case CONSTRUCTOR:
12820       {
12821         VEC(constructor_elt,gc) *n;
12822         constructor_elt *ce;
12823         unsigned HOST_WIDE_INT idx;
12824         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12825         bool process_index_p;
12826         int newlen;
12827         bool need_copy_p = false;
12828         tree r;
12829
12830         if (type == error_mark_node)
12831           return error_mark_node;
12832
12833         /* digest_init will do the wrong thing if we let it.  */
12834         if (type && TYPE_PTRMEMFUNC_P (type))
12835           return t;
12836
12837         /* We do not want to process the index of aggregate
12838            initializers as they are identifier nodes which will be
12839            looked up by digest_init.  */
12840         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
12841
12842         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
12843         newlen = VEC_length (constructor_elt, n);
12844         FOR_EACH_VEC_ELT (constructor_elt, n, idx, ce)
12845           {
12846             if (ce->index && process_index_p)
12847               ce->index = RECUR (ce->index);
12848
12849             if (PACK_EXPANSION_P (ce->value))
12850               {
12851                 /* Substitute into the pack expansion.  */
12852                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
12853                                                   in_decl);
12854
12855                 if (ce->value == error_mark_node)
12856                   ;
12857                 else if (TREE_VEC_LENGTH (ce->value) == 1)
12858                   /* Just move the argument into place.  */
12859                   ce->value = TREE_VEC_ELT (ce->value, 0);
12860                 else
12861                   {
12862                     /* Update the length of the final CONSTRUCTOR
12863                        arguments vector, and note that we will need to
12864                        copy.*/
12865                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
12866                     need_copy_p = true;
12867                   }
12868               }
12869             else
12870               ce->value = RECUR (ce->value);
12871           }
12872
12873         if (need_copy_p)
12874           {
12875             VEC(constructor_elt,gc) *old_n = n;
12876
12877             n = VEC_alloc (constructor_elt, gc, newlen);
12878             FOR_EACH_VEC_ELT (constructor_elt, old_n, idx, ce)
12879               {
12880                 if (TREE_CODE (ce->value) == TREE_VEC)
12881                   {
12882                     int i, len = TREE_VEC_LENGTH (ce->value);
12883                     for (i = 0; i < len; ++i)
12884                       CONSTRUCTOR_APPEND_ELT (n, 0,
12885                                               TREE_VEC_ELT (ce->value, i));
12886                   }
12887                 else
12888                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
12889               }
12890           }
12891
12892         r = build_constructor (init_list_type_node, n);
12893         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
12894
12895         if (TREE_HAS_CONSTRUCTOR (t))
12896           return finish_compound_literal (type, r);
12897
12898         return r;
12899       }
12900
12901     case TYPEID_EXPR:
12902       {
12903         tree operand_0 = TREE_OPERAND (t, 0);
12904         if (TYPE_P (operand_0))
12905           {
12906             operand_0 = tsubst (operand_0, args, complain, in_decl);
12907             return get_typeid (operand_0);
12908           }
12909         else
12910           {
12911             operand_0 = RECUR (operand_0);
12912             return build_typeid (operand_0);
12913           }
12914       }
12915
12916     case VAR_DECL:
12917       if (!args)
12918         return t;
12919       /* Fall through */
12920
12921     case PARM_DECL:
12922       {
12923         tree r = tsubst_copy (t, args, complain, in_decl);
12924
12925         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
12926           /* If the original type was a reference, we'll be wrapped in
12927              the appropriate INDIRECT_REF.  */
12928           r = convert_from_reference (r);
12929         return r;
12930       }
12931
12932     case VA_ARG_EXPR:
12933       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
12934                              tsubst_copy (TREE_TYPE (t), args, complain,
12935                                           in_decl));
12936
12937     case OFFSETOF_EXPR:
12938       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
12939
12940     case TRAIT_EXPR:
12941       {
12942         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
12943                                   complain, in_decl);
12944
12945         tree type2 = TRAIT_EXPR_TYPE2 (t);
12946         if (type2)
12947           type2 = tsubst_copy (type2, args, complain, in_decl);
12948         
12949         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
12950       }
12951
12952     case STMT_EXPR:
12953       {
12954         tree old_stmt_expr = cur_stmt_expr;
12955         tree stmt_expr = begin_stmt_expr ();
12956
12957         cur_stmt_expr = stmt_expr;
12958         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
12959                      integral_constant_expression_p);
12960         stmt_expr = finish_stmt_expr (stmt_expr, false);
12961         cur_stmt_expr = old_stmt_expr;
12962
12963         /* If the resulting list of expression statement is empty,
12964            fold it further into void_zero_node.  */
12965         if (empty_expr_stmt_p (stmt_expr))
12966           stmt_expr = void_zero_node;
12967
12968         return stmt_expr;
12969       }
12970
12971     case CONST_DECL:
12972       t = tsubst_copy (t, args, complain, in_decl);
12973       /* As in finish_id_expression, we resolve enumeration constants
12974          to their underlying values.  */
12975       if (TREE_CODE (t) == CONST_DECL)
12976         {
12977           used_types_insert (TREE_TYPE (t));
12978           return DECL_INITIAL (t);
12979         }
12980       return t;
12981
12982     case LAMBDA_EXPR:
12983       {
12984         tree r = build_lambda_expr ();
12985
12986         tree type = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
12987         TREE_TYPE (r) = type;
12988         CLASSTYPE_LAMBDA_EXPR (type) = r;
12989
12990         LAMBDA_EXPR_LOCATION (r)
12991           = LAMBDA_EXPR_LOCATION (t);
12992         LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
12993           = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
12994         LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
12995         LAMBDA_EXPR_DISCRIMINATOR (r)
12996           = (LAMBDA_EXPR_DISCRIMINATOR (t));
12997         LAMBDA_EXPR_CAPTURE_LIST (r)
12998           = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
12999         LAMBDA_EXPR_THIS_CAPTURE (r)
13000           = RECUR (LAMBDA_EXPR_THIS_CAPTURE (t));
13001         LAMBDA_EXPR_EXTRA_SCOPE (r)
13002           = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
13003
13004         /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
13005         determine_visibility (TYPE_NAME (type));
13006         /* Now that we know visibility, instantiate the type so we have a
13007            declaration of the op() for later calls to lambda_function.  */
13008         complete_type (type);
13009
13010         type = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
13011         if (type)
13012           apply_lambda_return_type (r, type);
13013
13014         return build_lambda_object (r);
13015       }
13016
13017     default:
13018       /* Handle Objective-C++ constructs, if appropriate.  */
13019       {
13020         tree subst
13021           = objcp_tsubst_copy_and_build (t, args, complain,
13022                                          in_decl, /*function_p=*/false);
13023         if (subst)
13024           return subst;
13025       }
13026       return tsubst_copy (t, args, complain, in_decl);
13027     }
13028
13029 #undef RECUR
13030 }
13031
13032 /* Verify that the instantiated ARGS are valid. For type arguments,
13033    make sure that the type's linkage is ok. For non-type arguments,
13034    make sure they are constants if they are integral or enumerations.
13035    Emit an error under control of COMPLAIN, and return TRUE on error.  */
13036
13037 static bool
13038 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
13039 {
13040   if (ARGUMENT_PACK_P (t))
13041     {
13042       tree vec = ARGUMENT_PACK_ARGS (t);
13043       int len = TREE_VEC_LENGTH (vec);
13044       bool result = false;
13045       int i;
13046
13047       for (i = 0; i < len; ++i)
13048         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
13049           result = true;
13050       return result;
13051     }
13052   else if (TYPE_P (t))
13053     {
13054       /* [basic.link]: A name with no linkage (notably, the name
13055          of a class or enumeration declared in a local scope)
13056          shall not be used to declare an entity with linkage.
13057          This implies that names with no linkage cannot be used as
13058          template arguments
13059
13060          DR 757 relaxes this restriction for C++0x.  */
13061       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
13062                  : no_linkage_check (t, /*relaxed_p=*/false));
13063
13064       if (nt)
13065         {
13066           /* DR 488 makes use of a type with no linkage cause
13067              type deduction to fail.  */
13068           if (complain & tf_error)
13069             {
13070               if (TYPE_ANONYMOUS_P (nt))
13071                 error ("%qT is/uses anonymous type", t);
13072               else
13073                 error ("template argument for %qD uses local type %qT",
13074                        tmpl, t);
13075             }
13076           return true;
13077         }
13078       /* In order to avoid all sorts of complications, we do not
13079          allow variably-modified types as template arguments.  */
13080       else if (variably_modified_type_p (t, NULL_TREE))
13081         {
13082           if (complain & tf_error)
13083             error ("%qT is a variably modified type", t);
13084           return true;
13085         }
13086     }
13087   /* A non-type argument of integral or enumerated type must be a
13088      constant.  */
13089   else if (TREE_TYPE (t)
13090            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
13091            && !TREE_CONSTANT (t))
13092     {
13093       if (complain & tf_error)
13094         error ("integral expression %qE is not constant", t);
13095       return true;
13096     }
13097   return false;
13098 }
13099
13100 static bool
13101 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
13102 {
13103   int ix, len = DECL_NTPARMS (tmpl);
13104   bool result = false;
13105
13106   for (ix = 0; ix != len; ix++)
13107     {
13108       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
13109         result = true;
13110     }
13111   if (result && (complain & tf_error))
13112     error ("  trying to instantiate %qD", tmpl);
13113   return result;
13114 }
13115
13116 /* Instantiate the indicated variable or function template TMPL with
13117    the template arguments in TARG_PTR.  */
13118
13119 tree
13120 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
13121 {
13122   tree targ_ptr = orig_args;
13123   tree fndecl;
13124   tree gen_tmpl;
13125   tree spec;
13126   HOST_WIDE_INT saved_processing_template_decl;
13127
13128   if (tmpl == error_mark_node)
13129     return error_mark_node;
13130
13131   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
13132
13133   /* If this function is a clone, handle it specially.  */
13134   if (DECL_CLONED_FUNCTION_P (tmpl))
13135     {
13136       tree spec;
13137       tree clone;
13138
13139       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
13140          DECL_CLONED_FUNCTION.  */
13141       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
13142                                    targ_ptr, complain);
13143       if (spec == error_mark_node)
13144         return error_mark_node;
13145
13146       /* Look for the clone.  */
13147       FOR_EACH_CLONE (clone, spec)
13148         if (DECL_NAME (clone) == DECL_NAME (tmpl))
13149           return clone;
13150       /* We should always have found the clone by now.  */
13151       gcc_unreachable ();
13152       return NULL_TREE;
13153     }
13154
13155   /* Check to see if we already have this specialization.  */
13156   gen_tmpl = most_general_template (tmpl);
13157   if (tmpl != gen_tmpl)
13158     /* The TMPL is a partial instantiation.  To get a full set of
13159        arguments we must add the arguments used to perform the
13160        partial instantiation.  */
13161     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
13162                                             targ_ptr);
13163
13164   /* It would be nice to avoid hashing here and then again in tsubst_decl,
13165      but it doesn't seem to be on the hot path.  */
13166   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
13167
13168   gcc_assert (tmpl == gen_tmpl
13169               || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
13170                   == spec)
13171               || fndecl == NULL_TREE);
13172
13173   if (spec != NULL_TREE)
13174     return spec;
13175
13176   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
13177                                complain))
13178     return error_mark_node;
13179
13180   /* We are building a FUNCTION_DECL, during which the access of its
13181      parameters and return types have to be checked.  However this
13182      FUNCTION_DECL which is the desired context for access checking
13183      is not built yet.  We solve this chicken-and-egg problem by
13184      deferring all checks until we have the FUNCTION_DECL.  */
13185   push_deferring_access_checks (dk_deferred);
13186
13187   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
13188      (because, for example, we have encountered a non-dependent
13189      function call in the body of a template function and must now
13190      determine which of several overloaded functions will be called),
13191      within the instantiation itself we are not processing a
13192      template.  */  
13193   saved_processing_template_decl = processing_template_decl;
13194   processing_template_decl = 0;
13195   /* Substitute template parameters to obtain the specialization.  */
13196   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
13197                    targ_ptr, complain, gen_tmpl);
13198   processing_template_decl = saved_processing_template_decl;
13199   if (fndecl == error_mark_node)
13200     return error_mark_node;
13201
13202   /* Now we know the specialization, compute access previously
13203      deferred.  */
13204   push_access_scope (fndecl);
13205
13206   /* Some typedefs referenced from within the template code need to be access
13207      checked at template instantiation time, i.e now. These types were
13208      added to the template at parsing time. Let's get those and perfom
13209      the acces checks then.  */
13210   perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
13211   perform_deferred_access_checks ();
13212   pop_access_scope (fndecl);
13213   pop_deferring_access_checks ();
13214
13215   /* The DECL_TI_TEMPLATE should always be the immediate parent
13216      template, not the most general template.  */
13217   DECL_TI_TEMPLATE (fndecl) = tmpl;
13218
13219   /* If we've just instantiated the main entry point for a function,
13220      instantiate all the alternate entry points as well.  We do this
13221      by cloning the instantiation of the main entry point, not by
13222      instantiating the template clones.  */
13223   if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
13224     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
13225
13226   return fndecl;
13227 }
13228
13229 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
13230    NARGS elements of the arguments that are being used when calling
13231    it.  TARGS is a vector into which the deduced template arguments
13232    are placed.
13233
13234    Return zero for success, 2 for an incomplete match that doesn't resolve
13235    all the types, and 1 for complete failure.  An error message will be
13236    printed only for an incomplete match.
13237
13238    If FN is a conversion operator, or we are trying to produce a specific
13239    specialization, RETURN_TYPE is the return type desired.
13240
13241    The EXPLICIT_TARGS are explicit template arguments provided via a
13242    template-id.
13243
13244    The parameter STRICT is one of:
13245
13246    DEDUCE_CALL:
13247      We are deducing arguments for a function call, as in
13248      [temp.deduct.call].
13249
13250    DEDUCE_CONV:
13251      We are deducing arguments for a conversion function, as in
13252      [temp.deduct.conv].
13253
13254    DEDUCE_EXACT:
13255      We are deducing arguments when doing an explicit instantiation
13256      as in [temp.explicit], when determining an explicit specialization
13257      as in [temp.expl.spec], or when taking the address of a function
13258      template, as in [temp.deduct.funcaddr].  */
13259
13260 int
13261 fn_type_unification (tree fn,
13262                      tree explicit_targs,
13263                      tree targs,
13264                      const tree *args,
13265                      unsigned int nargs,
13266                      tree return_type,
13267                      unification_kind_t strict,
13268                      int flags)
13269 {
13270   tree parms;
13271   tree fntype;
13272   int result;
13273   bool incomplete_argument_packs_p = false;
13274
13275   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
13276
13277   fntype = TREE_TYPE (fn);
13278   if (explicit_targs)
13279     {
13280       /* [temp.deduct]
13281
13282          The specified template arguments must match the template
13283          parameters in kind (i.e., type, nontype, template), and there
13284          must not be more arguments than there are parameters;
13285          otherwise type deduction fails.
13286
13287          Nontype arguments must match the types of the corresponding
13288          nontype template parameters, or must be convertible to the
13289          types of the corresponding nontype parameters as specified in
13290          _temp.arg.nontype_, otherwise type deduction fails.
13291
13292          All references in the function type of the function template
13293          to the corresponding template parameters are replaced by the
13294          specified template argument values.  If a substitution in a
13295          template parameter or in the function type of the function
13296          template results in an invalid type, type deduction fails.  */
13297       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
13298       int i, len = TREE_VEC_LENGTH (tparms);
13299       tree converted_args;
13300       bool incomplete = false;
13301
13302       if (explicit_targs == error_mark_node)
13303         return 1;
13304
13305       converted_args
13306         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
13307                                   /*require_all_args=*/false,
13308                                   /*use_default_args=*/false));
13309       if (converted_args == error_mark_node)
13310         return 1;
13311
13312       /* Substitute the explicit args into the function type.  This is
13313          necessary so that, for instance, explicitly declared function
13314          arguments can match null pointed constants.  If we were given
13315          an incomplete set of explicit args, we must not do semantic
13316          processing during substitution as we could create partial
13317          instantiations.  */
13318       for (i = 0; i < len; i++)
13319         {
13320           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
13321           bool parameter_pack = false;
13322
13323           /* Dig out the actual parm.  */
13324           if (TREE_CODE (parm) == TYPE_DECL
13325               || TREE_CODE (parm) == TEMPLATE_DECL)
13326             {
13327               parm = TREE_TYPE (parm);
13328               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
13329             }
13330           else if (TREE_CODE (parm) == PARM_DECL)
13331             {
13332               parm = DECL_INITIAL (parm);
13333               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
13334             }
13335
13336           if (parameter_pack)
13337             {
13338               int level, idx;
13339               tree targ;
13340               template_parm_level_and_index (parm, &level, &idx);
13341
13342               /* Mark the argument pack as "incomplete". We could
13343                  still deduce more arguments during unification.  */
13344               targ = TMPL_ARG (converted_args, level, idx);
13345               if (targ)
13346                 {
13347                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
13348                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
13349                     = ARGUMENT_PACK_ARGS (targ);
13350                 }
13351
13352               /* We have some incomplete argument packs.  */
13353               incomplete_argument_packs_p = true;
13354             }
13355         }
13356
13357       if (incomplete_argument_packs_p)
13358         /* Any substitution is guaranteed to be incomplete if there
13359            are incomplete argument packs, because we can still deduce
13360            more arguments.  */
13361         incomplete = 1;
13362       else
13363         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
13364
13365       processing_template_decl += incomplete;
13366       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
13367       processing_template_decl -= incomplete;
13368
13369       if (fntype == error_mark_node)
13370         return 1;
13371
13372       /* Place the explicitly specified arguments in TARGS.  */
13373       for (i = NUM_TMPL_ARGS (converted_args); i--;)
13374         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
13375     }
13376
13377   /* Never do unification on the 'this' parameter.  */
13378   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
13379
13380   if (return_type)
13381     {
13382       tree *new_args;
13383
13384       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
13385       new_args = XALLOCAVEC (tree, nargs + 1);
13386       new_args[0] = return_type;
13387       memcpy (new_args + 1, args, nargs * sizeof (tree));
13388       args = new_args;
13389       ++nargs;
13390     }
13391
13392   /* We allow incomplete unification without an error message here
13393      because the standard doesn't seem to explicitly prohibit it.  Our
13394      callers must be ready to deal with unification failures in any
13395      event.  */
13396   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
13397                                   targs, parms, args, nargs, /*subr=*/0,
13398                                   strict, flags);
13399
13400   if (result == 0 && incomplete_argument_packs_p)
13401     {
13402       int i, len = NUM_TMPL_ARGS (targs);
13403
13404       /* Clear the "incomplete" flags on all argument packs.  */
13405       for (i = 0; i < len; i++)
13406         {
13407           tree arg = TREE_VEC_ELT (targs, i);
13408           if (ARGUMENT_PACK_P (arg))
13409             {
13410               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
13411               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
13412             }
13413         }
13414     }
13415
13416   /* Now that we have bindings for all of the template arguments,
13417      ensure that the arguments deduced for the template template
13418      parameters have compatible template parameter lists.  We cannot
13419      check this property before we have deduced all template
13420      arguments, because the template parameter types of a template
13421      template parameter might depend on prior template parameters
13422      deduced after the template template parameter.  The following
13423      ill-formed example illustrates this issue:
13424
13425        template<typename T, template<T> class C> void f(C<5>, T);
13426
13427        template<int N> struct X {};
13428
13429        void g() {
13430          f(X<5>(), 5l); // error: template argument deduction fails
13431        }
13432
13433      The template parameter list of 'C' depends on the template type
13434      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
13435      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
13436      time that we deduce 'C'.  */
13437   if (result == 0
13438       && !template_template_parm_bindings_ok_p 
13439            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
13440     return 1;
13441
13442   if (result == 0)
13443     /* All is well so far.  Now, check:
13444
13445        [temp.deduct]
13446
13447        When all template arguments have been deduced, all uses of
13448        template parameters in nondeduced contexts are replaced with
13449        the corresponding deduced argument values.  If the
13450        substitution results in an invalid type, as described above,
13451        type deduction fails.  */
13452     {
13453       tree substed = tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE);
13454       if (substed == error_mark_node)
13455         return 1;
13456
13457       /* If we're looking for an exact match, check that what we got
13458          is indeed an exact match.  It might not be if some template
13459          parameters are used in non-deduced contexts.  */
13460       if (strict == DEDUCE_EXACT)
13461         {
13462           unsigned int i;
13463
13464           tree sarg
13465             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
13466           if (return_type)
13467             sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
13468           for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
13469             if (!same_type_p (args[i], TREE_VALUE (sarg)))
13470               return 1;
13471         }
13472     }
13473
13474   return result;
13475 }
13476
13477 /* Adjust types before performing type deduction, as described in
13478    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
13479    sections are symmetric.  PARM is the type of a function parameter
13480    or the return type of the conversion function.  ARG is the type of
13481    the argument passed to the call, or the type of the value
13482    initialized with the result of the conversion function.
13483    ARG_EXPR is the original argument expression, which may be null.  */
13484
13485 static int
13486 maybe_adjust_types_for_deduction (unification_kind_t strict,
13487                                   tree* parm,
13488                                   tree* arg,
13489                                   tree arg_expr)
13490 {
13491   int result = 0;
13492
13493   switch (strict)
13494     {
13495     case DEDUCE_CALL:
13496       break;
13497
13498     case DEDUCE_CONV:
13499       {
13500         /* Swap PARM and ARG throughout the remainder of this
13501            function; the handling is precisely symmetric since PARM
13502            will initialize ARG rather than vice versa.  */
13503         tree* temp = parm;
13504         parm = arg;
13505         arg = temp;
13506         break;
13507       }
13508
13509     case DEDUCE_EXACT:
13510       /* Core issue #873: Do the DR606 thing (see below) for these cases,
13511          too, but here handle it by stripping the reference from PARM
13512          rather than by adding it to ARG.  */
13513       if (TREE_CODE (*parm) == REFERENCE_TYPE
13514           && TYPE_REF_IS_RVALUE (*parm)
13515           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
13516           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
13517           && TREE_CODE (*arg) == REFERENCE_TYPE
13518           && !TYPE_REF_IS_RVALUE (*arg))
13519         *parm = TREE_TYPE (*parm);
13520       /* Nothing else to do in this case.  */
13521       return 0;
13522
13523     default:
13524       gcc_unreachable ();
13525     }
13526
13527   if (TREE_CODE (*parm) != REFERENCE_TYPE)
13528     {
13529       /* [temp.deduct.call]
13530
13531          If P is not a reference type:
13532
13533          --If A is an array type, the pointer type produced by the
13534          array-to-pointer standard conversion (_conv.array_) is
13535          used in place of A for type deduction; otherwise,
13536
13537          --If A is a function type, the pointer type produced by
13538          the function-to-pointer standard conversion
13539          (_conv.func_) is used in place of A for type deduction;
13540          otherwise,
13541
13542          --If A is a cv-qualified type, the top level
13543          cv-qualifiers of A's type are ignored for type
13544          deduction.  */
13545       if (TREE_CODE (*arg) == ARRAY_TYPE)
13546         *arg = build_pointer_type (TREE_TYPE (*arg));
13547       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
13548         *arg = build_pointer_type (*arg);
13549       else
13550         *arg = TYPE_MAIN_VARIANT (*arg);
13551     }
13552
13553   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
13554      of the form T&&, where T is a template parameter, and the argument
13555      is an lvalue, T is deduced as A& */
13556   if (TREE_CODE (*parm) == REFERENCE_TYPE
13557       && TYPE_REF_IS_RVALUE (*parm)
13558       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
13559       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
13560       && arg_expr && real_lvalue_p (arg_expr))
13561     *arg = build_reference_type (*arg);
13562
13563   /* [temp.deduct.call]
13564
13565      If P is a cv-qualified type, the top level cv-qualifiers
13566      of P's type are ignored for type deduction.  If P is a
13567      reference type, the type referred to by P is used for
13568      type deduction.  */
13569   *parm = TYPE_MAIN_VARIANT (*parm);
13570   if (TREE_CODE (*parm) == REFERENCE_TYPE)
13571     {
13572       *parm = TREE_TYPE (*parm);
13573       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
13574     }
13575
13576   /* DR 322. For conversion deduction, remove a reference type on parm
13577      too (which has been swapped into ARG).  */
13578   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
13579     *arg = TREE_TYPE (*arg);
13580
13581   return result;
13582 }
13583
13584 /* Most parms like fn_type_unification.
13585
13586    If SUBR is 1, we're being called recursively (to unify the
13587    arguments of a function or method parameter of a function
13588    template). */
13589
13590 static int
13591 type_unification_real (tree tparms,
13592                        tree targs,
13593                        tree xparms,
13594                        const tree *xargs,
13595                        unsigned int xnargs,
13596                        int subr,
13597                        unification_kind_t strict,
13598                        int flags)
13599 {
13600   tree parm, arg, arg_expr;
13601   int i;
13602   int ntparms = TREE_VEC_LENGTH (tparms);
13603   int sub_strict;
13604   int saw_undeduced = 0;
13605   tree parms;
13606   const tree *args;
13607   unsigned int nargs;
13608   unsigned int ia;
13609
13610   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
13611   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
13612   gcc_assert (ntparms > 0);
13613
13614   /* Reset the number of non-defaulted template arguments contained
13615      in in TARGS.  */
13616   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
13617
13618   switch (strict)
13619     {
13620     case DEDUCE_CALL:
13621       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
13622                     | UNIFY_ALLOW_DERIVED);
13623       break;
13624
13625     case DEDUCE_CONV:
13626       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
13627       break;
13628
13629     case DEDUCE_EXACT:
13630       sub_strict = UNIFY_ALLOW_NONE;
13631       break;
13632
13633     default:
13634       gcc_unreachable ();
13635     }
13636
13637  again:
13638   parms = xparms;
13639   args = xargs;
13640   nargs = xnargs;
13641
13642   ia = 0;
13643   while (parms && parms != void_list_node
13644          && ia < nargs)
13645     {
13646       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
13647         break;
13648
13649       parm = TREE_VALUE (parms);
13650       parms = TREE_CHAIN (parms);
13651       arg = args[ia];
13652       ++ia;
13653       arg_expr = NULL;
13654
13655       if (arg == error_mark_node)
13656         return 1;
13657       if (arg == unknown_type_node)
13658         /* We can't deduce anything from this, but we might get all the
13659            template args from other function args.  */
13660         continue;
13661
13662       /* Conversions will be performed on a function argument that
13663          corresponds with a function parameter that contains only
13664          non-deducible template parameters and explicitly specified
13665          template parameters.  */
13666       if (!uses_template_parms (parm))
13667         {
13668           tree type;
13669
13670           if (!TYPE_P (arg))
13671             type = TREE_TYPE (arg);
13672           else
13673             type = arg;
13674
13675           if (same_type_p (parm, type))
13676             continue;
13677           if (strict != DEDUCE_EXACT
13678               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
13679                                   flags))
13680             continue;
13681
13682           return 1;
13683         }
13684
13685       if (!TYPE_P (arg))
13686         {
13687           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
13688           if (type_unknown_p (arg))
13689             {
13690               /* [temp.deduct.type] 
13691
13692                  A template-argument can be deduced from a pointer to
13693                  function or pointer to member function argument if
13694                  the set of overloaded functions does not contain
13695                  function templates and at most one of a set of
13696                  overloaded functions provides a unique match.  */
13697               if (resolve_overloaded_unification
13698                   (tparms, targs, parm, arg, strict, sub_strict))
13699                 continue;
13700
13701               return 1;
13702             }
13703           arg_expr = arg;
13704           arg = unlowered_expr_type (arg);
13705           if (arg == error_mark_node)
13706             return 1;
13707         }
13708
13709       {
13710         int arg_strict = sub_strict;
13711
13712         if (!subr)
13713           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
13714                                                           arg_expr);
13715
13716         if (arg == init_list_type_node && arg_expr)
13717           arg = arg_expr;
13718         if (unify (tparms, targs, parm, arg, arg_strict))
13719           return 1;
13720       }
13721     }
13722
13723
13724   if (parms 
13725       && parms != void_list_node
13726       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
13727     {
13728       /* Unify the remaining arguments with the pack expansion type.  */
13729       tree argvec;
13730       tree parmvec = make_tree_vec (1);
13731
13732       /* Allocate a TREE_VEC and copy in all of the arguments */ 
13733       argvec = make_tree_vec (nargs - ia);
13734       for (i = 0; ia < nargs; ++ia, ++i)
13735         TREE_VEC_ELT (argvec, i) = args[ia];
13736
13737       /* Copy the parameter into parmvec.  */
13738       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
13739       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
13740                                 /*call_args_p=*/true, /*subr=*/subr))
13741         return 1;
13742
13743       /* Advance to the end of the list of parameters.  */
13744       parms = TREE_CHAIN (parms);
13745     }
13746
13747   /* Fail if we've reached the end of the parm list, and more args
13748      are present, and the parm list isn't variadic.  */
13749   if (ia < nargs && parms == void_list_node)
13750     return 1;
13751   /* Fail if parms are left and they don't have default values.  */
13752   if (parms && parms != void_list_node
13753       && TREE_PURPOSE (parms) == NULL_TREE)
13754     return 1;
13755
13756   if (!subr)
13757     for (i = 0; i < ntparms; i++)
13758       if (!TREE_VEC_ELT (targs, i))
13759         {
13760           tree tparm;
13761
13762           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
13763             continue;
13764
13765           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
13766
13767           /* If this is an undeduced nontype parameter that depends on
13768              a type parameter, try another pass; its type may have been
13769              deduced from a later argument than the one from which
13770              this parameter can be deduced.  */
13771           if (TREE_CODE (tparm) == PARM_DECL
13772               && uses_template_parms (TREE_TYPE (tparm))
13773               && !saw_undeduced++)
13774             goto again;
13775
13776           /* Core issue #226 (C++0x) [temp.deduct]:
13777
13778                If a template argument has not been deduced, its
13779                default template argument, if any, is used. 
13780
13781              When we are in C++98 mode, TREE_PURPOSE will either
13782              be NULL_TREE or ERROR_MARK_NODE, so we do not need
13783              to explicitly check cxx_dialect here.  */
13784           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
13785             {
13786               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
13787               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
13788               arg = tsubst_template_arg (arg, targs, tf_none, NULL_TREE);
13789               arg = convert_template_argument (parm, arg, targs, tf_none,
13790                                                i, NULL_TREE);
13791               if (arg == error_mark_node)
13792                 return 1;
13793               else
13794                 {
13795                   TREE_VEC_ELT (targs, i) = arg;
13796                   /* The position of the first default template argument,
13797                      is also the number of non-defaulted arguments in TARGS.
13798                      Record that.  */
13799                   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
13800                     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
13801                   continue;
13802                 }
13803             }
13804
13805           /* If the type parameter is a parameter pack, then it will
13806              be deduced to an empty parameter pack.  */
13807           if (template_parameter_pack_p (tparm))
13808             {
13809               tree arg;
13810
13811               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
13812                 {
13813                   arg = make_node (NONTYPE_ARGUMENT_PACK);
13814                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
13815                   TREE_CONSTANT (arg) = 1;
13816                 }
13817               else
13818                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
13819
13820               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
13821
13822               TREE_VEC_ELT (targs, i) = arg;
13823               continue;
13824             }
13825
13826           return 2;
13827         }
13828 #ifdef ENABLE_CHECKING
13829   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
13830     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
13831 #endif
13832
13833   return 0;
13834 }
13835
13836 /* Subroutine of type_unification_real.  Args are like the variables
13837    at the call site.  ARG is an overloaded function (or template-id);
13838    we try deducing template args from each of the overloads, and if
13839    only one succeeds, we go with that.  Modifies TARGS and returns
13840    true on success.  */
13841
13842 static bool
13843 resolve_overloaded_unification (tree tparms,
13844                                 tree targs,
13845                                 tree parm,
13846                                 tree arg,
13847                                 unification_kind_t strict,
13848                                 int sub_strict)
13849 {
13850   tree tempargs = copy_node (targs);
13851   int good = 0;
13852   tree goodfn = NULL_TREE;
13853   bool addr_p;
13854
13855   if (TREE_CODE (arg) == ADDR_EXPR)
13856     {
13857       arg = TREE_OPERAND (arg, 0);
13858       addr_p = true;
13859     }
13860   else
13861     addr_p = false;
13862
13863   if (TREE_CODE (arg) == COMPONENT_REF)
13864     /* Handle `&x' where `x' is some static or non-static member
13865        function name.  */
13866     arg = TREE_OPERAND (arg, 1);
13867
13868   if (TREE_CODE (arg) == OFFSET_REF)
13869     arg = TREE_OPERAND (arg, 1);
13870
13871   /* Strip baselink information.  */
13872   if (BASELINK_P (arg))
13873     arg = BASELINK_FUNCTIONS (arg);
13874
13875   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
13876     {
13877       /* If we got some explicit template args, we need to plug them into
13878          the affected templates before we try to unify, in case the
13879          explicit args will completely resolve the templates in question.  */
13880
13881       tree expl_subargs = TREE_OPERAND (arg, 1);
13882       arg = TREE_OPERAND (arg, 0);
13883
13884       for (; arg; arg = OVL_NEXT (arg))
13885         {
13886           tree fn = OVL_CURRENT (arg);
13887           tree subargs, elem;
13888
13889           if (TREE_CODE (fn) != TEMPLATE_DECL)
13890             continue;
13891
13892           ++processing_template_decl;
13893           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
13894                                   expl_subargs, /*check_ret=*/false);
13895           if (subargs)
13896             {
13897               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
13898               if (try_one_overload (tparms, targs, tempargs, parm,
13899                                     elem, strict, sub_strict, addr_p)
13900                   && (!goodfn || !decls_match (goodfn, elem)))
13901                 {
13902                   goodfn = elem;
13903                   ++good;
13904                 }
13905             }
13906           --processing_template_decl;
13907         }
13908     }
13909   else if (TREE_CODE (arg) != OVERLOAD
13910            && TREE_CODE (arg) != FUNCTION_DECL)
13911     /* If ARG is, for example, "(0, &f)" then its type will be unknown
13912        -- but the deduction does not succeed because the expression is
13913        not just the function on its own.  */
13914     return false;
13915   else
13916     for (; arg; arg = OVL_NEXT (arg))
13917       if (try_one_overload (tparms, targs, tempargs, parm,
13918                             TREE_TYPE (OVL_CURRENT (arg)),
13919                             strict, sub_strict, addr_p)
13920           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
13921         {
13922           goodfn = OVL_CURRENT (arg);
13923           ++good;
13924         }
13925
13926   /* [temp.deduct.type] A template-argument can be deduced from a pointer
13927      to function or pointer to member function argument if the set of
13928      overloaded functions does not contain function templates and at most
13929      one of a set of overloaded functions provides a unique match.
13930
13931      So if we found multiple possibilities, we return success but don't
13932      deduce anything.  */
13933
13934   if (good == 1)
13935     {
13936       int i = TREE_VEC_LENGTH (targs);
13937       for (; i--; )
13938         if (TREE_VEC_ELT (tempargs, i))
13939           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
13940     }
13941   if (good)
13942     return true;
13943
13944   return false;
13945 }
13946
13947 /* Core DR 115: In contexts where deduction is done and fails, or in
13948    contexts where deduction is not done, if a template argument list is
13949    specified and it, along with any default template arguments, identifies
13950    a single function template specialization, then the template-id is an
13951    lvalue for the function template specialization.  */
13952
13953 tree
13954 resolve_nondeduced_context (tree orig_expr)
13955 {
13956   tree expr, offset, baselink;
13957   bool addr;
13958
13959   if (!type_unknown_p (orig_expr))
13960     return orig_expr;
13961
13962   expr = orig_expr;
13963   addr = false;
13964   offset = NULL_TREE;
13965   baselink = NULL_TREE;
13966
13967   if (TREE_CODE (expr) == ADDR_EXPR)
13968     {
13969       expr = TREE_OPERAND (expr, 0);
13970       addr = true;
13971     }
13972   if (TREE_CODE (expr) == OFFSET_REF)
13973     {
13974       offset = expr;
13975       expr = TREE_OPERAND (expr, 1);
13976     }
13977   if (TREE_CODE (expr) == BASELINK)
13978     {
13979       baselink = expr;
13980       expr = BASELINK_FUNCTIONS (expr);
13981     }
13982
13983   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
13984     {
13985       int good = 0;
13986       tree goodfn = NULL_TREE;
13987
13988       /* If we got some explicit template args, we need to plug them into
13989          the affected templates before we try to unify, in case the
13990          explicit args will completely resolve the templates in question.  */
13991
13992       tree expl_subargs = TREE_OPERAND (expr, 1);
13993       tree arg = TREE_OPERAND (expr, 0);
13994       tree badfn = NULL_TREE;
13995       tree badargs = NULL_TREE;
13996
13997       for (; arg; arg = OVL_NEXT (arg))
13998         {
13999           tree fn = OVL_CURRENT (arg);
14000           tree subargs, elem;
14001
14002           if (TREE_CODE (fn) != TEMPLATE_DECL)
14003             continue;
14004
14005           ++processing_template_decl;
14006           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
14007                                   expl_subargs, /*check_ret=*/false);
14008           if (subargs && !any_dependent_template_arguments_p (subargs))
14009             {
14010               elem = instantiate_template (fn, subargs, tf_none);
14011               if (elem == error_mark_node)
14012                 {
14013                   badfn = fn;
14014                   badargs = subargs;
14015                 }
14016               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
14017                 {
14018                   goodfn = elem;
14019                   ++good;
14020                 }
14021             }
14022           --processing_template_decl;
14023         }
14024       if (good == 1)
14025         {
14026           expr = goodfn;
14027           if (baselink)
14028             expr = build_baselink (BASELINK_BINFO (baselink),
14029                                    BASELINK_ACCESS_BINFO (baselink),
14030                                    expr, BASELINK_OPTYPE (baselink));
14031           if (offset)
14032             expr = build2 (OFFSET_REF, TREE_TYPE (expr),
14033                            TREE_OPERAND (offset, 0), expr);
14034           if (addr)
14035             expr = build_address (expr);
14036           return expr;
14037         }
14038       else if (good == 0 && badargs)
14039         /* There were no good options and at least one bad one, so let the
14040            user know what the problem is.  */
14041         instantiate_template (badfn, badargs, tf_warning_or_error);
14042     }
14043   return orig_expr;
14044 }
14045
14046 /* Subroutine of resolve_overloaded_unification; does deduction for a single
14047    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
14048    different overloads deduce different arguments for a given parm.
14049    ADDR_P is true if the expression for which deduction is being
14050    performed was of the form "& fn" rather than simply "fn".
14051
14052    Returns 1 on success.  */
14053
14054 static int
14055 try_one_overload (tree tparms,
14056                   tree orig_targs,
14057                   tree targs,
14058                   tree parm,
14059                   tree arg,
14060                   unification_kind_t strict,
14061                   int sub_strict,
14062                   bool addr_p)
14063 {
14064   int nargs;
14065   tree tempargs;
14066   int i;
14067
14068   /* [temp.deduct.type] A template-argument can be deduced from a pointer
14069      to function or pointer to member function argument if the set of
14070      overloaded functions does not contain function templates and at most
14071      one of a set of overloaded functions provides a unique match.
14072
14073      So if this is a template, just return success.  */
14074
14075   if (uses_template_parms (arg))
14076     return 1;
14077
14078   if (TREE_CODE (arg) == METHOD_TYPE)
14079     arg = build_ptrmemfunc_type (build_pointer_type (arg));
14080   else if (addr_p)
14081     arg = build_pointer_type (arg);
14082
14083   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
14084
14085   /* We don't copy orig_targs for this because if we have already deduced
14086      some template args from previous args, unify would complain when we
14087      try to deduce a template parameter for the same argument, even though
14088      there isn't really a conflict.  */
14089   nargs = TREE_VEC_LENGTH (targs);
14090   tempargs = make_tree_vec (nargs);
14091
14092   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
14093     return 0;
14094
14095   /* First make sure we didn't deduce anything that conflicts with
14096      explicitly specified args.  */
14097   for (i = nargs; i--; )
14098     {
14099       tree elt = TREE_VEC_ELT (tempargs, i);
14100       tree oldelt = TREE_VEC_ELT (orig_targs, i);
14101
14102       if (!elt)
14103         /*NOP*/;
14104       else if (uses_template_parms (elt))
14105         /* Since we're unifying against ourselves, we will fill in
14106            template args used in the function parm list with our own
14107            template parms.  Discard them.  */
14108         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
14109       else if (oldelt && !template_args_equal (oldelt, elt))
14110         return 0;
14111     }
14112
14113   for (i = nargs; i--; )
14114     {
14115       tree elt = TREE_VEC_ELT (tempargs, i);
14116
14117       if (elt)
14118         TREE_VEC_ELT (targs, i) = elt;
14119     }
14120
14121   return 1;
14122 }
14123
14124 /* PARM is a template class (perhaps with unbound template
14125    parameters).  ARG is a fully instantiated type.  If ARG can be
14126    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
14127    TARGS are as for unify.  */
14128
14129 static tree
14130 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
14131 {
14132   tree copy_of_targs;
14133
14134   if (!CLASSTYPE_TEMPLATE_INFO (arg)
14135       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
14136           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
14137     return NULL_TREE;
14138
14139   /* We need to make a new template argument vector for the call to
14140      unify.  If we used TARGS, we'd clutter it up with the result of
14141      the attempted unification, even if this class didn't work out.
14142      We also don't want to commit ourselves to all the unifications
14143      we've already done, since unification is supposed to be done on
14144      an argument-by-argument basis.  In other words, consider the
14145      following pathological case:
14146
14147        template <int I, int J, int K>
14148        struct S {};
14149
14150        template <int I, int J>
14151        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
14152
14153        template <int I, int J, int K>
14154        void f(S<I, J, K>, S<I, I, I>);
14155
14156        void g() {
14157          S<0, 0, 0> s0;
14158          S<0, 1, 2> s2;
14159
14160          f(s0, s2);
14161        }
14162
14163      Now, by the time we consider the unification involving `s2', we
14164      already know that we must have `f<0, 0, 0>'.  But, even though
14165      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
14166      because there are two ways to unify base classes of S<0, 1, 2>
14167      with S<I, I, I>.  If we kept the already deduced knowledge, we
14168      would reject the possibility I=1.  */
14169   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
14170
14171   /* If unification failed, we're done.  */
14172   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
14173              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
14174     return NULL_TREE;
14175
14176   return arg;
14177 }
14178
14179 /* Given a template type PARM and a class type ARG, find the unique
14180    base type in ARG that is an instance of PARM.  We do not examine
14181    ARG itself; only its base-classes.  If there is not exactly one
14182    appropriate base class, return NULL_TREE.  PARM may be the type of
14183    a partial specialization, as well as a plain template type.  Used
14184    by unify.  */
14185
14186 static tree
14187 get_template_base (tree tparms, tree targs, tree parm, tree arg)
14188 {
14189   tree rval = NULL_TREE;
14190   tree binfo;
14191
14192   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
14193
14194   binfo = TYPE_BINFO (complete_type (arg));
14195   if (!binfo)
14196     /* The type could not be completed.  */
14197     return NULL_TREE;
14198
14199   /* Walk in inheritance graph order.  The search order is not
14200      important, and this avoids multiple walks of virtual bases.  */
14201   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
14202     {
14203       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
14204
14205       if (r)
14206         {
14207           /* If there is more than one satisfactory baseclass, then:
14208
14209                [temp.deduct.call]
14210
14211               If they yield more than one possible deduced A, the type
14212               deduction fails.
14213
14214              applies.  */
14215           if (rval && !same_type_p (r, rval))
14216             return NULL_TREE;
14217
14218           rval = r;
14219         }
14220     }
14221
14222   return rval;
14223 }
14224
14225 /* Returns the level of DECL, which declares a template parameter.  */
14226
14227 static int
14228 template_decl_level (tree decl)
14229 {
14230   switch (TREE_CODE (decl))
14231     {
14232     case TYPE_DECL:
14233     case TEMPLATE_DECL:
14234       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
14235
14236     case PARM_DECL:
14237       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
14238
14239     default:
14240       gcc_unreachable ();
14241     }
14242   return 0;
14243 }
14244
14245 /* Decide whether ARG can be unified with PARM, considering only the
14246    cv-qualifiers of each type, given STRICT as documented for unify.
14247    Returns nonzero iff the unification is OK on that basis.  */
14248
14249 static int
14250 check_cv_quals_for_unify (int strict, tree arg, tree parm)
14251 {
14252   int arg_quals = cp_type_quals (arg);
14253   int parm_quals = cp_type_quals (parm);
14254
14255   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14256       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
14257     {
14258       /*  Although a CVR qualifier is ignored when being applied to a
14259           substituted template parameter ([8.3.2]/1 for example), that
14260           does not allow us to unify "const T" with "int&" because both
14261           types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
14262           It is ok when we're allowing additional CV qualifiers
14263           at the outer level [14.8.2.1]/3,1st bullet.  */
14264       if ((TREE_CODE (arg) == REFERENCE_TYPE
14265            || TREE_CODE (arg) == FUNCTION_TYPE
14266            || TREE_CODE (arg) == METHOD_TYPE)
14267           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
14268         return 0;
14269
14270       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
14271           && (parm_quals & TYPE_QUAL_RESTRICT))
14272         return 0;
14273     }
14274
14275   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
14276       && (arg_quals & parm_quals) != parm_quals)
14277     return 0;
14278
14279   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
14280       && (parm_quals & arg_quals) != arg_quals)
14281     return 0;
14282
14283   return 1;
14284 }
14285
14286 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
14287 void 
14288 template_parm_level_and_index (tree parm, int* level, int* index)
14289 {
14290   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14291       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
14292       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
14293     {
14294       *index = TEMPLATE_TYPE_IDX (parm);
14295       *level = TEMPLATE_TYPE_LEVEL (parm);
14296     }
14297   else
14298     {
14299       *index = TEMPLATE_PARM_IDX (parm);
14300       *level = TEMPLATE_PARM_LEVEL (parm);
14301     }
14302 }
14303
14304 /* Unifies the remaining arguments in PACKED_ARGS with the pack
14305    expansion at the end of PACKED_PARMS. Returns 0 if the type
14306    deduction succeeds, 1 otherwise. STRICT is the same as in
14307    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
14308    call argument list. We'll need to adjust the arguments to make them
14309    types. SUBR tells us if this is from a recursive call to
14310    type_unification_real.  */
14311 int
14312 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
14313                       tree packed_args, int strict, bool call_args_p,
14314                       bool subr)
14315 {
14316   tree parm 
14317     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
14318   tree pattern = PACK_EXPANSION_PATTERN (parm);
14319   tree pack, packs = NULL_TREE;
14320   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
14321   int len = TREE_VEC_LENGTH (packed_args);
14322
14323   /* Determine the parameter packs we will be deducing from the
14324      pattern, and record their current deductions.  */
14325   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
14326        pack; pack = TREE_CHAIN (pack))
14327     {
14328       tree parm_pack = TREE_VALUE (pack);
14329       int idx, level;
14330
14331       /* Determine the index and level of this parameter pack.  */
14332       template_parm_level_and_index (parm_pack, &level, &idx);
14333
14334       /* Keep track of the parameter packs and their corresponding
14335          argument packs.  */
14336       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
14337       TREE_TYPE (packs) = make_tree_vec (len - start);
14338     }
14339   
14340   /* Loop through all of the arguments that have not yet been
14341      unified and unify each with the pattern.  */
14342   for (i = start; i < len; i++)
14343     {
14344       tree parm = pattern;
14345
14346       /* For each parameter pack, clear out the deduced value so that
14347          we can deduce it again.  */
14348       for (pack = packs; pack; pack = TREE_CHAIN (pack))
14349         {
14350           int idx, level;
14351           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14352
14353           TMPL_ARG (targs, level, idx) = NULL_TREE;
14354         }
14355
14356       /* Unify the pattern with the current argument.  */
14357       {
14358         tree arg = TREE_VEC_ELT (packed_args, i);
14359         tree arg_expr = NULL_TREE;
14360         int arg_strict = strict;
14361         bool skip_arg_p = false;
14362
14363         if (call_args_p)
14364           {
14365             int sub_strict;
14366
14367             /* This mirrors what we do in type_unification_real.  */
14368             switch (strict)
14369               {
14370               case DEDUCE_CALL:
14371                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
14372                               | UNIFY_ALLOW_MORE_CV_QUAL
14373                               | UNIFY_ALLOW_DERIVED);
14374                 break;
14375                 
14376               case DEDUCE_CONV:
14377                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
14378                 break;
14379                 
14380               case DEDUCE_EXACT:
14381                 sub_strict = UNIFY_ALLOW_NONE;
14382                 break;
14383                 
14384               default:
14385                 gcc_unreachable ();
14386               }
14387
14388             if (!TYPE_P (arg))
14389               {
14390                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
14391                 if (type_unknown_p (arg))
14392                   {
14393                     /* [temp.deduct.type] A template-argument can be
14394                        deduced from a pointer to function or pointer
14395                        to member function argument if the set of
14396                        overloaded functions does not contain function
14397                        templates and at most one of a set of
14398                        overloaded functions provides a unique
14399                        match.  */
14400
14401                     if (resolve_overloaded_unification
14402                         (tparms, targs, parm, arg,
14403                          (unification_kind_t) strict,
14404                          sub_strict)
14405                         != 0)
14406                       return 1;
14407                     skip_arg_p = true;
14408                   }
14409
14410                 if (!skip_arg_p)
14411                   {
14412                     arg_expr = arg;
14413                     arg = unlowered_expr_type (arg);
14414                     if (arg == error_mark_node)
14415                       return 1;
14416                   }
14417               }
14418       
14419             arg_strict = sub_strict;
14420
14421             if (!subr)
14422               arg_strict |= 
14423                 maybe_adjust_types_for_deduction ((unification_kind_t) strict,
14424                                                   &parm, &arg, arg_expr);
14425           }
14426
14427         if (!skip_arg_p)
14428           {
14429             /* For deduction from an init-list we need the actual list.  */
14430             if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
14431               arg = arg_expr;
14432             if (unify (tparms, targs, parm, arg, arg_strict))
14433               return 1;
14434           }
14435       }
14436
14437       /* For each parameter pack, collect the deduced value.  */
14438       for (pack = packs; pack; pack = TREE_CHAIN (pack))
14439         {
14440           int idx, level;
14441           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14442
14443           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
14444             TMPL_ARG (targs, level, idx);
14445         }
14446     }
14447
14448   /* Verify that the results of unification with the parameter packs
14449      produce results consistent with what we've seen before, and make
14450      the deduced argument packs available.  */
14451   for (pack = packs; pack; pack = TREE_CHAIN (pack))
14452     {
14453       tree old_pack = TREE_VALUE (pack);
14454       tree new_args = TREE_TYPE (pack);
14455       int i, len = TREE_VEC_LENGTH (new_args);
14456       int idx, level;
14457       bool nondeduced_p = false;
14458
14459       /* By default keep the original deduced argument pack.
14460          If necessary, more specific code is going to update the
14461          resulting deduced argument later down in this function.  */
14462       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
14463       TMPL_ARG (targs, level, idx) = old_pack;
14464
14465       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
14466          actually deduce anything.  */
14467       for (i = 0; i < len && !nondeduced_p; ++i)
14468         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
14469           nondeduced_p = true;
14470       if (nondeduced_p)
14471         continue;
14472
14473       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
14474         {
14475           /* Prepend the explicit arguments onto NEW_ARGS.  */
14476           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
14477           tree old_args = new_args;
14478           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
14479           int len = explicit_len + TREE_VEC_LENGTH (old_args);
14480
14481           /* Copy the explicit arguments.  */
14482           new_args = make_tree_vec (len);
14483           for (i = 0; i < explicit_len; i++)
14484             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
14485
14486           /* Copy the deduced arguments.  */
14487           for (; i < len; i++)
14488             TREE_VEC_ELT (new_args, i) =
14489               TREE_VEC_ELT (old_args, i - explicit_len);
14490         }
14491
14492       if (!old_pack)
14493         {
14494           tree result;
14495           /* Build the deduced *_ARGUMENT_PACK.  */
14496           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
14497             {
14498               result = make_node (NONTYPE_ARGUMENT_PACK);
14499               TREE_TYPE (result) = 
14500                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
14501               TREE_CONSTANT (result) = 1;
14502             }
14503           else
14504             result = cxx_make_type (TYPE_ARGUMENT_PACK);
14505
14506           SET_ARGUMENT_PACK_ARGS (result, new_args);
14507
14508           /* Note the deduced argument packs for this parameter
14509              pack.  */
14510           TMPL_ARG (targs, level, idx) = result;
14511         }
14512       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
14513                && (ARGUMENT_PACK_ARGS (old_pack) 
14514                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
14515         {
14516           /* We only had the explicitly-provided arguments before, but
14517              now we have a complete set of arguments.  */
14518           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
14519
14520           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
14521           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
14522           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
14523         }
14524       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
14525                                     new_args))
14526         /* Inconsistent unification of this parameter pack.  */
14527         return 1;
14528     }
14529
14530   return 0;
14531 }
14532
14533 /* Deduce the value of template parameters.  TPARMS is the (innermost)
14534    set of template parameters to a template.  TARGS is the bindings
14535    for those template parameters, as determined thus far; TARGS may
14536    include template arguments for outer levels of template parameters
14537    as well.  PARM is a parameter to a template function, or a
14538    subcomponent of that parameter; ARG is the corresponding argument.
14539    This function attempts to match PARM with ARG in a manner
14540    consistent with the existing assignments in TARGS.  If more values
14541    are deduced, then TARGS is updated.
14542
14543    Returns 0 if the type deduction succeeds, 1 otherwise.  The
14544    parameter STRICT is a bitwise or of the following flags:
14545
14546      UNIFY_ALLOW_NONE:
14547        Require an exact match between PARM and ARG.
14548      UNIFY_ALLOW_MORE_CV_QUAL:
14549        Allow the deduced ARG to be more cv-qualified (by qualification
14550        conversion) than ARG.
14551      UNIFY_ALLOW_LESS_CV_QUAL:
14552        Allow the deduced ARG to be less cv-qualified than ARG.
14553      UNIFY_ALLOW_DERIVED:
14554        Allow the deduced ARG to be a template base class of ARG,
14555        or a pointer to a template base class of the type pointed to by
14556        ARG.
14557      UNIFY_ALLOW_INTEGER:
14558        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
14559        case for more information.
14560      UNIFY_ALLOW_OUTER_LEVEL:
14561        This is the outermost level of a deduction. Used to determine validity
14562        of qualification conversions. A valid qualification conversion must
14563        have const qualified pointers leading up to the inner type which
14564        requires additional CV quals, except at the outer level, where const
14565        is not required [conv.qual]. It would be normal to set this flag in
14566        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
14567      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
14568        This is the outermost level of a deduction, and PARM can be more CV
14569        qualified at this point.
14570      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
14571        This is the outermost level of a deduction, and PARM can be less CV
14572        qualified at this point.  */
14573
14574 static int
14575 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
14576 {
14577   int idx;
14578   tree targ;
14579   tree tparm;
14580   int strict_in = strict;
14581
14582   /* I don't think this will do the right thing with respect to types.
14583      But the only case I've seen it in so far has been array bounds, where
14584      signedness is the only information lost, and I think that will be
14585      okay.  */
14586   while (TREE_CODE (parm) == NOP_EXPR)
14587     parm = TREE_OPERAND (parm, 0);
14588
14589   if (arg == error_mark_node)
14590     return 1;
14591   if (arg == unknown_type_node
14592       || arg == init_list_type_node)
14593     /* We can't deduce anything from this, but we might get all the
14594        template args from other function args.  */
14595     return 0;
14596
14597   /* If PARM uses template parameters, then we can't bail out here,
14598      even if ARG == PARM, since we won't record unifications for the
14599      template parameters.  We might need them if we're trying to
14600      figure out which of two things is more specialized.  */
14601   if (arg == parm && !uses_template_parms (parm))
14602     return 0;
14603
14604   /* Handle init lists early, so the rest of the function can assume
14605      we're dealing with a type. */
14606   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
14607     {
14608       tree elt, elttype;
14609       unsigned i;
14610       tree orig_parm = parm;
14611
14612       /* Replace T with std::initializer_list<T> for deduction.  */
14613       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14614           && flag_deduce_init_list)
14615         parm = listify (parm);
14616
14617       if (!is_std_init_list (parm))
14618         /* We can only deduce from an initializer list argument if the
14619            parameter is std::initializer_list; otherwise this is a
14620            non-deduced context. */
14621         return 0;
14622
14623       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
14624
14625       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
14626         {
14627           int elt_strict = strict;
14628
14629           if (elt == error_mark_node)
14630             return 1;
14631
14632           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
14633             {
14634               tree type = TREE_TYPE (elt);
14635               /* It should only be possible to get here for a call.  */
14636               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
14637               elt_strict |= maybe_adjust_types_for_deduction
14638                 (DEDUCE_CALL, &elttype, &type, elt);
14639               elt = type;
14640             }
14641
14642           if (unify (tparms, targs, elttype, elt, elt_strict))
14643             return 1;
14644         }
14645
14646       /* If the std::initializer_list<T> deduction worked, replace the
14647          deduced A with std::initializer_list<A>.  */
14648       if (orig_parm != parm)
14649         {
14650           idx = TEMPLATE_TYPE_IDX (orig_parm);
14651           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
14652           targ = listify (targ);
14653           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
14654         }
14655       return 0;
14656     }
14657
14658   /* Immediately reject some pairs that won't unify because of
14659      cv-qualification mismatches.  */
14660   if (TREE_CODE (arg) == TREE_CODE (parm)
14661       && TYPE_P (arg)
14662       /* It is the elements of the array which hold the cv quals of an array
14663          type, and the elements might be template type parms. We'll check
14664          when we recurse.  */
14665       && TREE_CODE (arg) != ARRAY_TYPE
14666       /* We check the cv-qualifiers when unifying with template type
14667          parameters below.  We want to allow ARG `const T' to unify with
14668          PARM `T' for example, when computing which of two templates
14669          is more specialized, for example.  */
14670       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
14671       && !check_cv_quals_for_unify (strict_in, arg, parm))
14672     return 1;
14673
14674   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
14675       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
14676     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
14677   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
14678   strict &= ~UNIFY_ALLOW_DERIVED;
14679   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
14680   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
14681
14682   switch (TREE_CODE (parm))
14683     {
14684     case TYPENAME_TYPE:
14685     case SCOPE_REF:
14686     case UNBOUND_CLASS_TEMPLATE:
14687       /* In a type which contains a nested-name-specifier, template
14688          argument values cannot be deduced for template parameters used
14689          within the nested-name-specifier.  */
14690       return 0;
14691
14692     case TEMPLATE_TYPE_PARM:
14693     case TEMPLATE_TEMPLATE_PARM:
14694     case BOUND_TEMPLATE_TEMPLATE_PARM:
14695       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
14696       if (tparm == error_mark_node)
14697         return 1;
14698
14699       if (TEMPLATE_TYPE_LEVEL (parm)
14700           != template_decl_level (tparm))
14701         /* The PARM is not one we're trying to unify.  Just check
14702            to see if it matches ARG.  */
14703         return (TREE_CODE (arg) == TREE_CODE (parm)
14704                 && same_type_p (parm, arg)) ? 0 : 1;
14705       idx = TEMPLATE_TYPE_IDX (parm);
14706       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
14707       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
14708
14709       /* Check for mixed types and values.  */
14710       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
14711            && TREE_CODE (tparm) != TYPE_DECL)
14712           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
14713               && TREE_CODE (tparm) != TEMPLATE_DECL))
14714         return 1;
14715
14716       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
14717         {
14718           /* ARG must be constructed from a template class or a template
14719              template parameter.  */
14720           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
14721               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
14722             return 1;
14723
14724           {
14725             tree parmvec = TYPE_TI_ARGS (parm);
14726             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
14727             tree parm_parms 
14728               = DECL_INNERMOST_TEMPLATE_PARMS
14729                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
14730             int i, len;
14731             int parm_variadic_p = 0;
14732
14733             /* The resolution to DR150 makes clear that default
14734                arguments for an N-argument may not be used to bind T
14735                to a template template parameter with fewer than N
14736                parameters.  It is not safe to permit the binding of
14737                default arguments as an extension, as that may change
14738                the meaning of a conforming program.  Consider:
14739
14740                   struct Dense { static const unsigned int dim = 1; };
14741
14742                   template <template <typename> class View,
14743                             typename Block>
14744                   void operator+(float, View<Block> const&);
14745
14746                   template <typename Block,
14747                             unsigned int Dim = Block::dim>
14748                   struct Lvalue_proxy { operator float() const; };
14749
14750                   void
14751                   test_1d (void) {
14752                     Lvalue_proxy<Dense> p;
14753                     float b;
14754                     b + p;
14755                   }
14756
14757               Here, if Lvalue_proxy is permitted to bind to View, then
14758               the global operator+ will be used; if they are not, the
14759               Lvalue_proxy will be converted to float.  */
14760             if (coerce_template_parms (parm_parms,
14761                                        argvec,
14762                                        TYPE_TI_TEMPLATE (parm),
14763                                        tf_none,
14764                                        /*require_all_args=*/true,
14765                                        /*use_default_args=*/false)
14766                 == error_mark_node)
14767               return 1;
14768
14769             /* Deduce arguments T, i from TT<T> or TT<i>.
14770                We check each element of PARMVEC and ARGVEC individually
14771                rather than the whole TREE_VEC since they can have
14772                different number of elements.  */
14773
14774             parmvec = expand_template_argument_pack (parmvec);
14775             argvec = expand_template_argument_pack (argvec);
14776
14777             len = TREE_VEC_LENGTH (parmvec);
14778
14779             /* Check if the parameters end in a pack, making them
14780                variadic.  */
14781             if (len > 0
14782                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
14783               parm_variadic_p = 1;
14784             
14785             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
14786               return 1;
14787
14788              for (i = 0; i < len - parm_variadic_p; ++i)
14789               {
14790                 if (unify (tparms, targs,
14791                            TREE_VEC_ELT (parmvec, i),
14792                            TREE_VEC_ELT (argvec, i),
14793                            UNIFY_ALLOW_NONE))
14794                   return 1;
14795               }
14796
14797             if (parm_variadic_p
14798                 && unify_pack_expansion (tparms, targs,
14799                                          parmvec, argvec,
14800                                          UNIFY_ALLOW_NONE,
14801                                          /*call_args_p=*/false,
14802                                          /*subr=*/false))
14803               return 1;
14804           }
14805           arg = TYPE_TI_TEMPLATE (arg);
14806
14807           /* Fall through to deduce template name.  */
14808         }
14809
14810       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
14811           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
14812         {
14813           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
14814
14815           /* Simple cases: Value already set, does match or doesn't.  */
14816           if (targ != NULL_TREE && template_args_equal (targ, arg))
14817             return 0;
14818           else if (targ)
14819             return 1;
14820         }
14821       else
14822         {
14823           /* If PARM is `const T' and ARG is only `int', we don't have
14824              a match unless we are allowing additional qualification.
14825              If ARG is `const int' and PARM is just `T' that's OK;
14826              that binds `const int' to `T'.  */
14827           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
14828                                          arg, parm))
14829             return 1;
14830
14831           /* Consider the case where ARG is `const volatile int' and
14832              PARM is `const T'.  Then, T should be `volatile int'.  */
14833           arg = cp_build_qualified_type_real
14834             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
14835           if (arg == error_mark_node)
14836             return 1;
14837
14838           /* Simple cases: Value already set, does match or doesn't.  */
14839           if (targ != NULL_TREE && same_type_p (targ, arg))
14840             return 0;
14841           else if (targ)
14842             return 1;
14843
14844           /* Make sure that ARG is not a variable-sized array.  (Note
14845              that were talking about variable-sized arrays (like
14846              `int[n]'), rather than arrays of unknown size (like
14847              `int[]').)  We'll get very confused by such a type since
14848              the bound of the array will not be computable in an
14849              instantiation.  Besides, such types are not allowed in
14850              ISO C++, so we can do as we please here.  */
14851           if (variably_modified_type_p (arg, NULL_TREE))
14852             return 1;
14853
14854           /* Strip typedefs as in convert_template_argument.  */
14855           arg = strip_typedefs (arg);
14856         }
14857
14858       /* If ARG is a parameter pack or an expansion, we cannot unify
14859          against it unless PARM is also a parameter pack.  */
14860       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
14861           && !template_parameter_pack_p (parm))
14862         return 1;
14863
14864       /* If the argument deduction results is a METHOD_TYPE,
14865          then there is a problem.
14866          METHOD_TYPE doesn't map to any real C++ type the result of
14867          the deduction can not be of that type.  */
14868       if (TREE_CODE (arg) == METHOD_TYPE)
14869         return 1;
14870
14871       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
14872       return 0;
14873
14874     case TEMPLATE_PARM_INDEX:
14875       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
14876       if (tparm == error_mark_node)
14877         return 1;
14878
14879       if (TEMPLATE_PARM_LEVEL (parm)
14880           != template_decl_level (tparm))
14881         /* The PARM is not one we're trying to unify.  Just check
14882            to see if it matches ARG.  */
14883         return !(TREE_CODE (arg) == TREE_CODE (parm)
14884                  && cp_tree_equal (parm, arg));
14885
14886       idx = TEMPLATE_PARM_IDX (parm);
14887       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
14888
14889       if (targ)
14890         return !cp_tree_equal (targ, arg);
14891
14892       /* [temp.deduct.type] If, in the declaration of a function template
14893          with a non-type template-parameter, the non-type
14894          template-parameter is used in an expression in the function
14895          parameter-list and, if the corresponding template-argument is
14896          deduced, the template-argument type shall match the type of the
14897          template-parameter exactly, except that a template-argument
14898          deduced from an array bound may be of any integral type.
14899          The non-type parameter might use already deduced type parameters.  */
14900       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
14901       if (!TREE_TYPE (arg))
14902         /* Template-parameter dependent expression.  Just accept it for now.
14903            It will later be processed in convert_template_argument.  */
14904         ;
14905       else if (same_type_p (TREE_TYPE (arg), tparm))
14906         /* OK */;
14907       else if ((strict & UNIFY_ALLOW_INTEGER)
14908                && (TREE_CODE (tparm) == INTEGER_TYPE
14909                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
14910         /* Convert the ARG to the type of PARM; the deduced non-type
14911            template argument must exactly match the types of the
14912            corresponding parameter.  */
14913         arg = fold (build_nop (tparm, arg));
14914       else if (uses_template_parms (tparm))
14915         /* We haven't deduced the type of this parameter yet.  Try again
14916            later.  */
14917         return 0;
14918       else
14919         return 1;
14920
14921       /* If ARG is a parameter pack or an expansion, we cannot unify
14922          against it unless PARM is also a parameter pack.  */
14923       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
14924           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
14925         return 1;
14926
14927       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
14928       return 0;
14929
14930     case PTRMEM_CST:
14931      {
14932         /* A pointer-to-member constant can be unified only with
14933          another constant.  */
14934       if (TREE_CODE (arg) != PTRMEM_CST)
14935         return 1;
14936
14937       /* Just unify the class member. It would be useless (and possibly
14938          wrong, depending on the strict flags) to unify also
14939          PTRMEM_CST_CLASS, because we want to be sure that both parm and
14940          arg refer to the same variable, even if through different
14941          classes. For instance:
14942
14943          struct A { int x; };
14944          struct B : A { };
14945
14946          Unification of &A::x and &B::x must succeed.  */
14947       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
14948                     PTRMEM_CST_MEMBER (arg), strict);
14949      }
14950
14951     case POINTER_TYPE:
14952       {
14953         if (TREE_CODE (arg) != POINTER_TYPE)
14954           return 1;
14955
14956         /* [temp.deduct.call]
14957
14958            A can be another pointer or pointer to member type that can
14959            be converted to the deduced A via a qualification
14960            conversion (_conv.qual_).
14961
14962            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
14963            This will allow for additional cv-qualification of the
14964            pointed-to types if appropriate.  */
14965
14966         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
14967           /* The derived-to-base conversion only persists through one
14968              level of pointers.  */
14969           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
14970
14971         return unify (tparms, targs, TREE_TYPE (parm),
14972                       TREE_TYPE (arg), strict);
14973       }
14974
14975     case REFERENCE_TYPE:
14976       if (TREE_CODE (arg) != REFERENCE_TYPE)
14977         return 1;
14978       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
14979                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
14980
14981     case ARRAY_TYPE:
14982       if (TREE_CODE (arg) != ARRAY_TYPE)
14983         return 1;
14984       if ((TYPE_DOMAIN (parm) == NULL_TREE)
14985           != (TYPE_DOMAIN (arg) == NULL_TREE))
14986         return 1;
14987       if (TYPE_DOMAIN (parm) != NULL_TREE)
14988         {
14989           tree parm_max;
14990           tree arg_max;
14991           bool parm_cst;
14992           bool arg_cst;
14993
14994           /* Our representation of array types uses "N - 1" as the
14995              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
14996              not an integer constant.  We cannot unify arbitrarily
14997              complex expressions, so we eliminate the MINUS_EXPRs
14998              here.  */
14999           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
15000           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
15001           if (!parm_cst)
15002             {
15003               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
15004               parm_max = TREE_OPERAND (parm_max, 0);
15005             }
15006           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
15007           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
15008           if (!arg_cst)
15009             {
15010               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
15011                  trying to unify the type of a variable with the type
15012                  of a template parameter.  For example:
15013
15014                    template <unsigned int N>
15015                    void f (char (&) [N]);
15016                    int g(); 
15017                    void h(int i) {
15018                      char a[g(i)];
15019                      f(a); 
15020                    }
15021
15022                 Here, the type of the ARG will be "int [g(i)]", and
15023                 may be a SAVE_EXPR, etc.  */
15024               if (TREE_CODE (arg_max) != MINUS_EXPR)
15025                 return 1;
15026               arg_max = TREE_OPERAND (arg_max, 0);
15027             }
15028
15029           /* If only one of the bounds used a MINUS_EXPR, compensate
15030              by adding one to the other bound.  */
15031           if (parm_cst && !arg_cst)
15032             parm_max = fold_build2_loc (input_location, PLUS_EXPR,
15033                                     integer_type_node,
15034                                     parm_max,
15035                                     integer_one_node);
15036           else if (arg_cst && !parm_cst)
15037             arg_max = fold_build2_loc (input_location, PLUS_EXPR,
15038                                    integer_type_node,
15039                                    arg_max,
15040                                    integer_one_node);
15041
15042           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
15043             return 1;
15044         }
15045       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15046                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
15047
15048     case REAL_TYPE:
15049     case COMPLEX_TYPE:
15050     case VECTOR_TYPE:
15051     case INTEGER_TYPE:
15052     case BOOLEAN_TYPE:
15053     case ENUMERAL_TYPE:
15054     case VOID_TYPE:
15055       if (TREE_CODE (arg) != TREE_CODE (parm))
15056         return 1;
15057
15058       /* We have already checked cv-qualification at the top of the
15059          function.  */
15060       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
15061         return 1;
15062
15063       /* As far as unification is concerned, this wins.  Later checks
15064          will invalidate it if necessary.  */
15065       return 0;
15066
15067       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
15068       /* Type INTEGER_CST can come from ordinary constant template args.  */
15069     case INTEGER_CST:
15070       while (TREE_CODE (arg) == NOP_EXPR)
15071         arg = TREE_OPERAND (arg, 0);
15072
15073       if (TREE_CODE (arg) != INTEGER_CST)
15074         return 1;
15075       return !tree_int_cst_equal (parm, arg);
15076
15077     case TREE_VEC:
15078       {
15079         int i;
15080         if (TREE_CODE (arg) != TREE_VEC)
15081           return 1;
15082         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
15083           return 1;
15084         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
15085           if (unify (tparms, targs,
15086                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
15087                      UNIFY_ALLOW_NONE))
15088             return 1;
15089         return 0;
15090       }
15091
15092     case RECORD_TYPE:
15093     case UNION_TYPE:
15094       if (TREE_CODE (arg) != TREE_CODE (parm))
15095         return 1;
15096
15097       if (TYPE_PTRMEMFUNC_P (parm))
15098         {
15099           if (!TYPE_PTRMEMFUNC_P (arg))
15100             return 1;
15101
15102           return unify (tparms, targs,
15103                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
15104                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
15105                         strict);
15106         }
15107
15108       if (CLASSTYPE_TEMPLATE_INFO (parm))
15109         {
15110           tree t = NULL_TREE;
15111
15112           if (strict_in & UNIFY_ALLOW_DERIVED)
15113             {
15114               /* First, we try to unify the PARM and ARG directly.  */
15115               t = try_class_unification (tparms, targs,
15116                                          parm, arg);
15117
15118               if (!t)
15119                 {
15120                   /* Fallback to the special case allowed in
15121                      [temp.deduct.call]:
15122
15123                        If P is a class, and P has the form
15124                        template-id, then A can be a derived class of
15125                        the deduced A.  Likewise, if P is a pointer to
15126                        a class of the form template-id, A can be a
15127                        pointer to a derived class pointed to by the
15128                        deduced A.  */
15129                   t = get_template_base (tparms, targs, parm, arg);
15130
15131                   if (!t)
15132                     return 1;
15133                 }
15134             }
15135           else if (CLASSTYPE_TEMPLATE_INFO (arg)
15136                    && (CLASSTYPE_TI_TEMPLATE (parm)
15137                        == CLASSTYPE_TI_TEMPLATE (arg)))
15138             /* Perhaps PARM is something like S<U> and ARG is S<int>.
15139                Then, we should unify `int' and `U'.  */
15140             t = arg;
15141           else
15142             /* There's no chance of unification succeeding.  */
15143             return 1;
15144
15145           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
15146                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
15147         }
15148       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
15149         return 1;
15150       return 0;
15151
15152     case METHOD_TYPE:
15153     case FUNCTION_TYPE:
15154       {
15155         unsigned int nargs;
15156         tree *args;
15157         tree a;
15158         unsigned int i;
15159
15160         if (TREE_CODE (arg) != TREE_CODE (parm))
15161           return 1;
15162
15163         /* CV qualifications for methods can never be deduced, they must
15164            match exactly.  We need to check them explicitly here,
15165            because type_unification_real treats them as any other
15166            cv-qualified parameter.  */
15167         if (TREE_CODE (parm) == METHOD_TYPE
15168             && (!check_cv_quals_for_unify
15169                 (UNIFY_ALLOW_NONE,
15170                  TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
15171                  TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
15172           return 1;
15173
15174         if (unify (tparms, targs, TREE_TYPE (parm),
15175                    TREE_TYPE (arg), UNIFY_ALLOW_NONE))
15176           return 1;
15177
15178         nargs = list_length (TYPE_ARG_TYPES (arg));
15179         args = XALLOCAVEC (tree, nargs);
15180         for (a = TYPE_ARG_TYPES (arg), i = 0;
15181              a != NULL_TREE && a != void_list_node;
15182              a = TREE_CHAIN (a), ++i)
15183           args[i] = TREE_VALUE (a);
15184         nargs = i;
15185
15186         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
15187                                       args, nargs, 1, DEDUCE_EXACT,
15188                                       LOOKUP_NORMAL);
15189       }
15190
15191     case OFFSET_TYPE:
15192       /* Unify a pointer to member with a pointer to member function, which
15193          deduces the type of the member as a function type. */
15194       if (TYPE_PTRMEMFUNC_P (arg))
15195         {
15196           tree method_type;
15197           tree fntype;
15198
15199           /* Check top-level cv qualifiers */
15200           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
15201             return 1;
15202
15203           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
15204                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
15205             return 1;
15206
15207           /* Determine the type of the function we are unifying against. */
15208           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
15209           fntype =
15210             build_function_type (TREE_TYPE (method_type),
15211                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
15212
15213           /* Extract the cv-qualifiers of the member function from the
15214              implicit object parameter and place them on the function
15215              type to be restored later. */
15216           fntype = apply_memfn_quals (fntype, type_memfn_quals (method_type));
15217           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
15218         }
15219
15220       if (TREE_CODE (arg) != OFFSET_TYPE)
15221         return 1;
15222       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
15223                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
15224         return 1;
15225       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
15226                     strict);
15227
15228     case CONST_DECL:
15229       if (DECL_TEMPLATE_PARM_P (parm))
15230         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
15231       if (arg != integral_constant_value (parm))
15232         return 1;
15233       return 0;
15234
15235     case FIELD_DECL:
15236     case TEMPLATE_DECL:
15237       /* Matched cases are handled by the ARG == PARM test above.  */
15238       return 1;
15239
15240     case VAR_DECL:
15241       /* A non-type template parameter that is a variable should be a
15242          an integral constant, in which case, it whould have been
15243          folded into its (constant) value. So we should not be getting
15244          a variable here.  */
15245       gcc_unreachable ();
15246
15247     case TYPE_ARGUMENT_PACK:
15248     case NONTYPE_ARGUMENT_PACK:
15249       {
15250         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
15251         tree packed_args = ARGUMENT_PACK_ARGS (arg);
15252         int i, len = TREE_VEC_LENGTH (packed_parms);
15253         int argslen = TREE_VEC_LENGTH (packed_args);
15254         int parm_variadic_p = 0;
15255
15256         for (i = 0; i < len; ++i)
15257           {
15258             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
15259               {
15260                 if (i == len - 1)
15261                   /* We can unify against something with a trailing
15262                      parameter pack.  */
15263                   parm_variadic_p = 1;
15264                 else
15265                   /* Since there is something following the pack
15266                      expansion, we cannot unify this template argument
15267                      list.  */
15268                   return 0;
15269               }
15270           }
15271           
15272
15273         /* If we don't have enough arguments to satisfy the parameters
15274            (not counting the pack expression at the end), or we have
15275            too many arguments for a parameter list that doesn't end in
15276            a pack expression, we can't unify.  */
15277         if (argslen < (len - parm_variadic_p)
15278             || (argslen > len && !parm_variadic_p))
15279           return 1;
15280
15281         /* Unify all of the parameters that precede the (optional)
15282            pack expression.  */
15283         for (i = 0; i < len - parm_variadic_p; ++i)
15284           {
15285             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
15286                        TREE_VEC_ELT (packed_args, i), strict))
15287               return 1;
15288           }
15289
15290         if (parm_variadic_p)
15291           return unify_pack_expansion (tparms, targs, 
15292                                        packed_parms, packed_args,
15293                                        strict, /*call_args_p=*/false,
15294                                        /*subr=*/false);
15295         return 0;
15296       }
15297
15298       break;
15299
15300     case TYPEOF_TYPE:
15301     case DECLTYPE_TYPE:
15302       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
15303          nodes.  */
15304       return 0;
15305
15306     case ERROR_MARK:
15307       /* Unification fails if we hit an error node.  */
15308       return 1;
15309
15310     default:
15311       gcc_assert (EXPR_P (parm));
15312
15313       /* We must be looking at an expression.  This can happen with
15314          something like:
15315
15316            template <int I>
15317            void foo(S<I>, S<I + 2>);
15318
15319          This is a "nondeduced context":
15320
15321            [deduct.type]
15322
15323            The nondeduced contexts are:
15324
15325            --A type that is a template-id in which one or more of
15326              the template-arguments is an expression that references
15327              a template-parameter.
15328
15329          In these cases, we assume deduction succeeded, but don't
15330          actually infer any unifications.  */
15331
15332       if (!uses_template_parms (parm)
15333           && !template_args_equal (parm, arg))
15334         return 1;
15335       else
15336         return 0;
15337     }
15338 }
15339 \f
15340 /* Note that DECL can be defined in this translation unit, if
15341    required.  */
15342
15343 static void
15344 mark_definable (tree decl)
15345 {
15346   tree clone;
15347   DECL_NOT_REALLY_EXTERN (decl) = 1;
15348   FOR_EACH_CLONE (clone, decl)
15349     DECL_NOT_REALLY_EXTERN (clone) = 1;
15350 }
15351
15352 /* Called if RESULT is explicitly instantiated, or is a member of an
15353    explicitly instantiated class.  */
15354
15355 void
15356 mark_decl_instantiated (tree result, int extern_p)
15357 {
15358   SET_DECL_EXPLICIT_INSTANTIATION (result);
15359
15360   /* If this entity has already been written out, it's too late to
15361      make any modifications.  */
15362   if (TREE_ASM_WRITTEN (result))
15363     return;
15364
15365   if (TREE_CODE (result) != FUNCTION_DECL)
15366     /* The TREE_PUBLIC flag for function declarations will have been
15367        set correctly by tsubst.  */
15368     TREE_PUBLIC (result) = 1;
15369
15370   /* This might have been set by an earlier implicit instantiation.  */
15371   DECL_COMDAT (result) = 0;
15372
15373   if (extern_p)
15374     DECL_NOT_REALLY_EXTERN (result) = 0;
15375   else
15376     {
15377       mark_definable (result);
15378       /* Always make artificials weak.  */
15379       if (DECL_ARTIFICIAL (result) && flag_weak)
15380         comdat_linkage (result);
15381       /* For WIN32 we also want to put explicit instantiations in
15382          linkonce sections.  */
15383       else if (TREE_PUBLIC (result))
15384         maybe_make_one_only (result);
15385     }
15386
15387   /* If EXTERN_P, then this function will not be emitted -- unless
15388      followed by an explicit instantiation, at which point its linkage
15389      will be adjusted.  If !EXTERN_P, then this function will be
15390      emitted here.  In neither circumstance do we want
15391      import_export_decl to adjust the linkage.  */
15392   DECL_INTERFACE_KNOWN (result) = 1;
15393 }
15394
15395 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
15396    important template arguments.  If any are missing, we check whether
15397    they're important by using error_mark_node for substituting into any
15398    args that were used for partial ordering (the ones between ARGS and END)
15399    and seeing if it bubbles up.  */
15400
15401 static bool
15402 check_undeduced_parms (tree targs, tree args, tree end)
15403 {
15404   bool found = false;
15405   int i;
15406   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
15407     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
15408       {
15409         found = true;
15410         TREE_VEC_ELT (targs, i) = error_mark_node;
15411       }
15412   if (found)
15413     {
15414       for (; args != end; args = TREE_CHAIN (args))
15415         {
15416           tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
15417           if (substed == error_mark_node)
15418             return true;
15419         }
15420     }
15421   return false;
15422 }
15423
15424 /* Given two function templates PAT1 and PAT2, return:
15425
15426    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
15427    -1 if PAT2 is more specialized than PAT1.
15428    0 if neither is more specialized.
15429
15430    LEN indicates the number of parameters we should consider
15431    (defaulted parameters should not be considered).
15432
15433    The 1998 std underspecified function template partial ordering, and
15434    DR214 addresses the issue.  We take pairs of arguments, one from
15435    each of the templates, and deduce them against each other.  One of
15436    the templates will be more specialized if all the *other*
15437    template's arguments deduce against its arguments and at least one
15438    of its arguments *does* *not* deduce against the other template's
15439    corresponding argument.  Deduction is done as for class templates.
15440    The arguments used in deduction have reference and top level cv
15441    qualifiers removed.  Iff both arguments were originally reference
15442    types *and* deduction succeeds in both directions, the template
15443    with the more cv-qualified argument wins for that pairing (if
15444    neither is more cv-qualified, they both are equal).  Unlike regular
15445    deduction, after all the arguments have been deduced in this way,
15446    we do *not* verify the deduced template argument values can be
15447    substituted into non-deduced contexts.
15448
15449    The logic can be a bit confusing here, because we look at deduce1 and
15450    targs1 to see if pat2 is at least as specialized, and vice versa; if we
15451    can find template arguments for pat1 to make arg1 look like arg2, that
15452    means that arg2 is at least as specialized as arg1.  */
15453
15454 int
15455 more_specialized_fn (tree pat1, tree pat2, int len)
15456 {
15457   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
15458   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
15459   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
15460   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
15461   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
15462   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
15463   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
15464   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
15465   tree origs1, origs2;
15466   bool lose1 = false;
15467   bool lose2 = false;
15468
15469   /* Remove the this parameter from non-static member functions.  If
15470      one is a non-static member function and the other is not a static
15471      member function, remove the first parameter from that function
15472      also.  This situation occurs for operator functions where we
15473      locate both a member function (with this pointer) and non-member
15474      operator (with explicit first operand).  */
15475   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
15476     {
15477       len--; /* LEN is the number of significant arguments for DECL1 */
15478       args1 = TREE_CHAIN (args1);
15479       if (!DECL_STATIC_FUNCTION_P (decl2))
15480         args2 = TREE_CHAIN (args2);
15481     }
15482   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
15483     {
15484       args2 = TREE_CHAIN (args2);
15485       if (!DECL_STATIC_FUNCTION_P (decl1))
15486         {
15487           len--;
15488           args1 = TREE_CHAIN (args1);
15489         }
15490     }
15491
15492   /* If only one is a conversion operator, they are unordered.  */
15493   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
15494     return 0;
15495
15496   /* Consider the return type for a conversion function */
15497   if (DECL_CONV_FN_P (decl1))
15498     {
15499       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
15500       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
15501       len++;
15502     }
15503
15504   processing_template_decl++;
15505
15506   origs1 = args1;
15507   origs2 = args2;
15508
15509   while (len--
15510          /* Stop when an ellipsis is seen.  */
15511          && args1 != NULL_TREE && args2 != NULL_TREE)
15512     {
15513       tree arg1 = TREE_VALUE (args1);
15514       tree arg2 = TREE_VALUE (args2);
15515       int deduce1, deduce2;
15516       int quals1 = -1;
15517       int quals2 = -1;
15518
15519       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
15520           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15521         {
15522           /* When both arguments are pack expansions, we need only
15523              unify the patterns themselves.  */
15524           arg1 = PACK_EXPANSION_PATTERN (arg1);
15525           arg2 = PACK_EXPANSION_PATTERN (arg2);
15526
15527           /* This is the last comparison we need to do.  */
15528           len = 0;
15529         }
15530
15531       if (TREE_CODE (arg1) == REFERENCE_TYPE)
15532         {
15533           arg1 = TREE_TYPE (arg1);
15534           quals1 = cp_type_quals (arg1);
15535         }
15536
15537       if (TREE_CODE (arg2) == REFERENCE_TYPE)
15538         {
15539           arg2 = TREE_TYPE (arg2);
15540           quals2 = cp_type_quals (arg2);
15541         }
15542
15543       if ((quals1 < 0) != (quals2 < 0))
15544         {
15545           /* Only of the args is a reference, see if we should apply
15546              array/function pointer decay to it.  This is not part of
15547              DR214, but is, IMHO, consistent with the deduction rules
15548              for the function call itself, and with our earlier
15549              implementation of the underspecified partial ordering
15550              rules.  (nathan).  */
15551           if (quals1 >= 0)
15552             {
15553               switch (TREE_CODE (arg1))
15554                 {
15555                 case ARRAY_TYPE:
15556                   arg1 = TREE_TYPE (arg1);
15557                   /* FALLTHROUGH. */
15558                 case FUNCTION_TYPE:
15559                   arg1 = build_pointer_type (arg1);
15560                   break;
15561
15562                 default:
15563                   break;
15564                 }
15565             }
15566           else
15567             {
15568               switch (TREE_CODE (arg2))
15569                 {
15570                 case ARRAY_TYPE:
15571                   arg2 = TREE_TYPE (arg2);
15572                   /* FALLTHROUGH. */
15573                 case FUNCTION_TYPE:
15574                   arg2 = build_pointer_type (arg2);
15575                   break;
15576
15577                 default:
15578                   break;
15579                 }
15580             }
15581         }
15582
15583       arg1 = TYPE_MAIN_VARIANT (arg1);
15584       arg2 = TYPE_MAIN_VARIANT (arg2);
15585
15586       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
15587         {
15588           int i, len2 = list_length (args2);
15589           tree parmvec = make_tree_vec (1);
15590           tree argvec = make_tree_vec (len2);
15591           tree ta = args2;
15592
15593           /* Setup the parameter vector, which contains only ARG1.  */
15594           TREE_VEC_ELT (parmvec, 0) = arg1;
15595
15596           /* Setup the argument vector, which contains the remaining
15597              arguments.  */
15598           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
15599             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
15600
15601           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
15602                                            argvec, UNIFY_ALLOW_NONE, 
15603                                            /*call_args_p=*/false, 
15604                                            /*subr=*/0);
15605
15606           /* We cannot deduce in the other direction, because ARG1 is
15607              a pack expansion but ARG2 is not.  */
15608           deduce2 = 0;
15609         }
15610       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15611         {
15612           int i, len1 = list_length (args1);
15613           tree parmvec = make_tree_vec (1);
15614           tree argvec = make_tree_vec (len1);
15615           tree ta = args1;
15616
15617           /* Setup the parameter vector, which contains only ARG1.  */
15618           TREE_VEC_ELT (parmvec, 0) = arg2;
15619
15620           /* Setup the argument vector, which contains the remaining
15621              arguments.  */
15622           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
15623             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
15624
15625           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
15626                                            argvec, UNIFY_ALLOW_NONE, 
15627                                            /*call_args_p=*/false, 
15628                                            /*subr=*/0);
15629
15630           /* We cannot deduce in the other direction, because ARG2 is
15631              a pack expansion but ARG1 is not.*/
15632           deduce1 = 0;
15633         }
15634
15635       else
15636         {
15637           /* The normal case, where neither argument is a pack
15638              expansion.  */
15639           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
15640           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
15641         }
15642
15643       /* If we couldn't deduce arguments for tparms1 to make arg1 match
15644          arg2, then arg2 is not as specialized as arg1.  */
15645       if (!deduce1)
15646         lose2 = true;
15647       if (!deduce2)
15648         lose1 = true;
15649
15650       /* "If, for a given type, deduction succeeds in both directions
15651          (i.e., the types are identical after the transformations above)
15652          and if the type from the argument template is more cv-qualified
15653          than the type from the parameter template (as described above)
15654          that type is considered to be more specialized than the other. If
15655          neither type is more cv-qualified than the other then neither type
15656          is more specialized than the other."  */
15657
15658       if (deduce1 && deduce2
15659           && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
15660         {
15661           if ((quals1 & quals2) == quals2)
15662             lose2 = true;
15663           if ((quals1 & quals2) == quals1)
15664             lose1 = true;
15665         }
15666
15667       if (lose1 && lose2)
15668         /* We've failed to deduce something in either direction.
15669            These must be unordered.  */
15670         break;
15671
15672       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
15673           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
15674         /* We have already processed all of the arguments in our
15675            handing of the pack expansion type.  */
15676         len = 0;
15677
15678       args1 = TREE_CHAIN (args1);
15679       args2 = TREE_CHAIN (args2);
15680     }
15681
15682   /* "In most cases, all template parameters must have values in order for
15683      deduction to succeed, but for partial ordering purposes a template
15684      parameter may remain without a value provided it is not used in the
15685      types being used for partial ordering."
15686
15687      Thus, if we are missing any of the targs1 we need to substitute into
15688      origs1, then pat2 is not as specialized as pat1.  This can happen when
15689      there is a nondeduced context.  */
15690   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
15691     lose2 = true;
15692   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
15693     lose1 = true;
15694
15695   processing_template_decl--;
15696
15697   /* All things being equal, if the next argument is a pack expansion
15698      for one function but not for the other, prefer the
15699      non-variadic function.  FIXME this is bogus; see c++/41958.  */
15700   if (lose1 == lose2
15701       && args1 && TREE_VALUE (args1)
15702       && args2 && TREE_VALUE (args2))
15703     {
15704       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
15705       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
15706     }
15707
15708   if (lose1 == lose2)
15709     return 0;
15710   else if (!lose1)
15711     return 1;
15712   else
15713     return -1;
15714 }
15715
15716 /* Determine which of two partial specializations is more specialized.
15717
15718    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
15719    to the first partial specialization.  The TREE_VALUE is the
15720    innermost set of template parameters for the partial
15721    specialization.  PAT2 is similar, but for the second template.
15722
15723    Return 1 if the first partial specialization is more specialized;
15724    -1 if the second is more specialized; 0 if neither is more
15725    specialized.
15726
15727    See [temp.class.order] for information about determining which of
15728    two templates is more specialized.  */
15729
15730 static int
15731 more_specialized_class (tree pat1, tree pat2)
15732 {
15733   tree targs;
15734   tree tmpl1, tmpl2;
15735   int winner = 0;
15736   bool any_deductions = false;
15737
15738   tmpl1 = TREE_TYPE (pat1);
15739   tmpl2 = TREE_TYPE (pat2);
15740
15741   /* Just like what happens for functions, if we are ordering between
15742      different class template specializations, we may encounter dependent
15743      types in the arguments, and we need our dependency check functions
15744      to behave correctly.  */
15745   ++processing_template_decl;
15746   targs = get_class_bindings (TREE_VALUE (pat1),
15747                               CLASSTYPE_TI_ARGS (tmpl1),
15748                               CLASSTYPE_TI_ARGS (tmpl2));
15749   if (targs)
15750     {
15751       --winner;
15752       any_deductions = true;
15753     }
15754
15755   targs = get_class_bindings (TREE_VALUE (pat2),
15756                               CLASSTYPE_TI_ARGS (tmpl2),
15757                               CLASSTYPE_TI_ARGS (tmpl1));
15758   if (targs)
15759     {
15760       ++winner;
15761       any_deductions = true;
15762     }
15763   --processing_template_decl;
15764
15765   /* In the case of a tie where at least one of the class templates
15766      has a parameter pack at the end, the template with the most
15767      non-packed parameters wins.  */
15768   if (winner == 0
15769       && any_deductions
15770       && (template_args_variadic_p (TREE_PURPOSE (pat1))
15771           || template_args_variadic_p (TREE_PURPOSE (pat2))))
15772     {
15773       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
15774       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
15775       int len1 = TREE_VEC_LENGTH (args1);
15776       int len2 = TREE_VEC_LENGTH (args2);
15777
15778       /* We don't count the pack expansion at the end.  */
15779       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
15780         --len1;
15781       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
15782         --len2;
15783
15784       if (len1 > len2)
15785         return 1;
15786       else if (len1 < len2)
15787         return -1;
15788     }
15789
15790   return winner;
15791 }
15792
15793 /* Return the template arguments that will produce the function signature
15794    DECL from the function template FN, with the explicit template
15795    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
15796    also match.  Return NULL_TREE if no satisfactory arguments could be
15797    found.  */
15798
15799 static tree
15800 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
15801 {
15802   int ntparms = DECL_NTPARMS (fn);
15803   tree targs = make_tree_vec (ntparms);
15804   tree decl_type;
15805   tree decl_arg_types;
15806   tree *args;
15807   unsigned int nargs, ix;
15808   tree arg;
15809
15810   /* Substitute the explicit template arguments into the type of DECL.
15811      The call to fn_type_unification will handle substitution into the
15812      FN.  */
15813   decl_type = TREE_TYPE (decl);
15814   if (explicit_args && uses_template_parms (decl_type))
15815     {
15816       tree tmpl;
15817       tree converted_args;
15818
15819       if (DECL_TEMPLATE_INFO (decl))
15820         tmpl = DECL_TI_TEMPLATE (decl);
15821       else
15822         /* We can get here for some invalid specializations.  */
15823         return NULL_TREE;
15824
15825       converted_args
15826         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
15827                                  explicit_args, NULL_TREE,
15828                                  tf_none,
15829                                  /*require_all_args=*/false,
15830                                  /*use_default_args=*/false);
15831       if (converted_args == error_mark_node)
15832         return NULL_TREE;
15833
15834       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
15835       if (decl_type == error_mark_node)
15836         return NULL_TREE;
15837     }
15838
15839   /* Never do unification on the 'this' parameter.  */
15840   decl_arg_types = skip_artificial_parms_for (decl, 
15841                                               TYPE_ARG_TYPES (decl_type));
15842
15843   nargs = list_length (decl_arg_types);
15844   args = XALLOCAVEC (tree, nargs);
15845   for (arg = decl_arg_types, ix = 0;
15846        arg != NULL_TREE && arg != void_list_node;
15847        arg = TREE_CHAIN (arg), ++ix)
15848     args[ix] = TREE_VALUE (arg);
15849
15850   if (fn_type_unification (fn, explicit_args, targs,
15851                            args, ix,
15852                            (check_rettype || DECL_CONV_FN_P (fn)
15853                             ? TREE_TYPE (decl_type) : NULL_TREE),
15854                            DEDUCE_EXACT, LOOKUP_NORMAL))
15855     return NULL_TREE;
15856
15857   return targs;
15858 }
15859
15860 /* Return the innermost template arguments that, when applied to a
15861    template specialization whose innermost template parameters are
15862    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
15863    ARGS.
15864
15865    For example, suppose we have:
15866
15867      template <class T, class U> struct S {};
15868      template <class T> struct S<T*, int> {};
15869
15870    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
15871    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
15872    int}.  The resulting vector will be {double}, indicating that `T'
15873    is bound to `double'.  */
15874
15875 static tree
15876 get_class_bindings (tree tparms, tree spec_args, tree args)
15877 {
15878   int i, ntparms = TREE_VEC_LENGTH (tparms);
15879   tree deduced_args;
15880   tree innermost_deduced_args;
15881
15882   innermost_deduced_args = make_tree_vec (ntparms);
15883   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
15884     {
15885       deduced_args = copy_node (args);
15886       SET_TMPL_ARGS_LEVEL (deduced_args,
15887                            TMPL_ARGS_DEPTH (deduced_args),
15888                            innermost_deduced_args);
15889     }
15890   else
15891     deduced_args = innermost_deduced_args;
15892
15893   if (unify (tparms, deduced_args,
15894              INNERMOST_TEMPLATE_ARGS (spec_args),
15895              INNERMOST_TEMPLATE_ARGS (args),
15896              UNIFY_ALLOW_NONE))
15897     return NULL_TREE;
15898
15899   for (i =  0; i < ntparms; ++i)
15900     if (! TREE_VEC_ELT (innermost_deduced_args, i))
15901       return NULL_TREE;
15902
15903   /* Verify that nondeduced template arguments agree with the type
15904      obtained from argument deduction.
15905
15906      For example:
15907
15908        struct A { typedef int X; };
15909        template <class T, class U> struct C {};
15910        template <class T> struct C<T, typename T::X> {};
15911
15912      Then with the instantiation `C<A, int>', we can deduce that
15913      `T' is `A' but unify () does not check whether `typename T::X'
15914      is `int'.  */
15915   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
15916   if (spec_args == error_mark_node
15917       /* We only need to check the innermost arguments; the other
15918          arguments will always agree.  */
15919       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
15920                               INNERMOST_TEMPLATE_ARGS (args)))
15921     return NULL_TREE;
15922
15923   /* Now that we have bindings for all of the template arguments,
15924      ensure that the arguments deduced for the template template
15925      parameters have compatible template parameter lists.  See the use
15926      of template_template_parm_bindings_ok_p in fn_type_unification
15927      for more information.  */
15928   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
15929     return NULL_TREE;
15930
15931   return deduced_args;
15932 }
15933
15934 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
15935    Return the TREE_LIST node with the most specialized template, if
15936    any.  If there is no most specialized template, the error_mark_node
15937    is returned.
15938
15939    Note that this function does not look at, or modify, the
15940    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
15941    returned is one of the elements of INSTANTIATIONS, callers may
15942    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
15943    and retrieve it from the value returned.  */
15944
15945 tree
15946 most_specialized_instantiation (tree templates)
15947 {
15948   tree fn, champ;
15949
15950   ++processing_template_decl;
15951
15952   champ = templates;
15953   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
15954     {
15955       int fate = 0;
15956
15957       if (get_bindings (TREE_VALUE (champ),
15958                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
15959                         NULL_TREE, /*check_ret=*/false))
15960         fate--;
15961
15962       if (get_bindings (TREE_VALUE (fn),
15963                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
15964                         NULL_TREE, /*check_ret=*/false))
15965         fate++;
15966
15967       if (fate == -1)
15968         champ = fn;
15969       else if (!fate)
15970         {
15971           /* Equally specialized, move to next function.  If there
15972              is no next function, nothing's most specialized.  */
15973           fn = TREE_CHAIN (fn);
15974           champ = fn;
15975           if (!fn)
15976             break;
15977         }
15978     }
15979
15980   if (champ)
15981     /* Now verify that champ is better than everything earlier in the
15982        instantiation list.  */
15983     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
15984       if (get_bindings (TREE_VALUE (champ),
15985                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
15986                         NULL_TREE, /*check_ret=*/false)
15987           || !get_bindings (TREE_VALUE (fn),
15988                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
15989                             NULL_TREE, /*check_ret=*/false))
15990         {
15991           champ = NULL_TREE;
15992           break;
15993         }
15994
15995   processing_template_decl--;
15996
15997   if (!champ)
15998     return error_mark_node;
15999
16000   return champ;
16001 }
16002
16003 /* If DECL is a specialization of some template, return the most
16004    general such template.  Otherwise, returns NULL_TREE.
16005
16006    For example, given:
16007
16008      template <class T> struct S { template <class U> void f(U); };
16009
16010    if TMPL is `template <class U> void S<int>::f(U)' this will return
16011    the full template.  This function will not trace past partial
16012    specializations, however.  For example, given in addition:
16013
16014      template <class T> struct S<T*> { template <class U> void f(U); };
16015
16016    if TMPL is `template <class U> void S<int*>::f(U)' this will return
16017    `template <class T> template <class U> S<T*>::f(U)'.  */
16018
16019 tree
16020 most_general_template (tree decl)
16021 {
16022   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
16023      an immediate specialization.  */
16024   if (TREE_CODE (decl) == FUNCTION_DECL)
16025     {
16026       if (DECL_TEMPLATE_INFO (decl)) {
16027         decl = DECL_TI_TEMPLATE (decl);
16028
16029         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
16030            template friend.  */
16031         if (TREE_CODE (decl) != TEMPLATE_DECL)
16032           return NULL_TREE;
16033       } else
16034         return NULL_TREE;
16035     }
16036
16037   /* Look for more and more general templates.  */
16038   while (DECL_TEMPLATE_INFO (decl))
16039     {
16040       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
16041          (See cp-tree.h for details.)  */
16042       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
16043         break;
16044
16045       if (CLASS_TYPE_P (TREE_TYPE (decl))
16046           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
16047         break;
16048
16049       /* Stop if we run into an explicitly specialized class template.  */
16050       if (!DECL_NAMESPACE_SCOPE_P (decl)
16051           && DECL_CONTEXT (decl)
16052           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
16053         break;
16054
16055       decl = DECL_TI_TEMPLATE (decl);
16056     }
16057
16058   return decl;
16059 }
16060
16061 /* Return the most specialized of the class template partial
16062    specializations of TMPL which can produce TYPE, a specialization of
16063    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
16064    a _TYPE node corresponding to the partial specialization, while the
16065    TREE_PURPOSE is the set of template arguments that must be
16066    substituted into the TREE_TYPE in order to generate TYPE.
16067
16068    If the choice of partial specialization is ambiguous, a diagnostic
16069    is issued, and the error_mark_node is returned.  If there are no
16070    partial specializations of TMPL matching TYPE, then NULL_TREE is
16071    returned.  */
16072
16073 static tree
16074 most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
16075 {
16076   tree list = NULL_TREE;
16077   tree t;
16078   tree champ;
16079   int fate;
16080   bool ambiguous_p;
16081   tree args;
16082   tree outer_args = NULL_TREE;
16083
16084   tmpl = most_general_template (tmpl);
16085   args = CLASSTYPE_TI_ARGS (type);
16086
16087   /* For determining which partial specialization to use, only the
16088      innermost args are interesting.  */
16089   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
16090     {
16091       outer_args = strip_innermost_template_args (args, 1);
16092       args = INNERMOST_TEMPLATE_ARGS (args);
16093     }
16094
16095   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
16096     {
16097       tree partial_spec_args;
16098       tree spec_args;
16099       tree parms = TREE_VALUE (t);
16100
16101       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
16102
16103       ++processing_template_decl;
16104
16105       if (outer_args)
16106         {
16107           int i;
16108
16109           /* Discard the outer levels of args, and then substitute in the
16110              template args from the enclosing class.  */
16111           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
16112           partial_spec_args = tsubst_template_args
16113             (partial_spec_args, outer_args, tf_none, NULL_TREE);
16114
16115           /* PARMS already refers to just the innermost parms, but the
16116              template parms in partial_spec_args had their levels lowered
16117              by tsubst, so we need to do the same for the parm list.  We
16118              can't just tsubst the TREE_VEC itself, as tsubst wants to
16119              treat a TREE_VEC as an argument vector.  */
16120           parms = copy_node (parms);
16121           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
16122             TREE_VEC_ELT (parms, i) =
16123               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
16124
16125         }
16126
16127       partial_spec_args =
16128           coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
16129                                  add_to_template_args (outer_args,
16130                                                        partial_spec_args),
16131                                  tmpl, tf_none,
16132                                  /*require_all_args=*/true,
16133                                  /*use_default_args=*/true);
16134
16135       --processing_template_decl;
16136
16137       if (partial_spec_args == error_mark_node)
16138         return error_mark_node;
16139
16140       spec_args = get_class_bindings (parms,
16141                                       partial_spec_args,
16142                                       args);
16143       if (spec_args)
16144         {
16145           if (outer_args)
16146             spec_args = add_to_template_args (outer_args, spec_args);
16147           list = tree_cons (spec_args, TREE_VALUE (t), list);
16148           TREE_TYPE (list) = TREE_TYPE (t);
16149         }
16150     }
16151
16152   if (! list)
16153     return NULL_TREE;
16154
16155   ambiguous_p = false;
16156   t = list;
16157   champ = t;
16158   t = TREE_CHAIN (t);
16159   for (; t; t = TREE_CHAIN (t))
16160     {
16161       fate = more_specialized_class (champ, t);
16162       if (fate == 1)
16163         ;
16164       else
16165         {
16166           if (fate == 0)
16167             {
16168               t = TREE_CHAIN (t);
16169               if (! t)
16170                 {
16171                   ambiguous_p = true;
16172                   break;
16173                 }
16174             }
16175           champ = t;
16176         }
16177     }
16178
16179   if (!ambiguous_p)
16180     for (t = list; t && t != champ; t = TREE_CHAIN (t))
16181       {
16182         fate = more_specialized_class (champ, t);
16183         if (fate != 1)
16184           {
16185             ambiguous_p = true;
16186             break;
16187           }
16188       }
16189
16190   if (ambiguous_p)
16191     {
16192       const char *str;
16193       char *spaces = NULL;
16194       if (!(complain & tf_error))
16195         return error_mark_node;
16196       error ("ambiguous class template instantiation for %q#T", type);
16197       str = TREE_CHAIN (list) ? _("candidates are:") : _("candidate is:");
16198       for (t = list; t; t = TREE_CHAIN (t))
16199         {
16200           error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
16201           spaces = spaces ? spaces : get_spaces (str);
16202         }
16203       free (spaces);
16204       return error_mark_node;
16205     }
16206
16207   return champ;
16208 }
16209
16210 /* Explicitly instantiate DECL.  */
16211
16212 void
16213 do_decl_instantiation (tree decl, tree storage)
16214 {
16215   tree result = NULL_TREE;
16216   int extern_p = 0;
16217
16218   if (!decl || decl == error_mark_node)
16219     /* An error occurred, for which grokdeclarator has already issued
16220        an appropriate message.  */
16221     return;
16222   else if (! DECL_LANG_SPECIFIC (decl))
16223     {
16224       error ("explicit instantiation of non-template %q#D", decl);
16225       return;
16226     }
16227   else if (TREE_CODE (decl) == VAR_DECL)
16228     {
16229       /* There is an asymmetry here in the way VAR_DECLs and
16230          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
16231          the latter, the DECL we get back will be marked as a
16232          template instantiation, and the appropriate
16233          DECL_TEMPLATE_INFO will be set up.  This does not happen for
16234          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
16235          should handle VAR_DECLs as it currently handles
16236          FUNCTION_DECLs.  */
16237       if (!DECL_CLASS_SCOPE_P (decl))
16238         {
16239           error ("%qD is not a static data member of a class template", decl);
16240           return;
16241         }
16242       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
16243       if (!result || TREE_CODE (result) != VAR_DECL)
16244         {
16245           error ("no matching template for %qD found", decl);
16246           return;
16247         }
16248       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
16249         {
16250           error ("type %qT for explicit instantiation %qD does not match "
16251                  "declared type %qT", TREE_TYPE (result), decl,
16252                  TREE_TYPE (decl));
16253           return;
16254         }
16255     }
16256   else if (TREE_CODE (decl) != FUNCTION_DECL)
16257     {
16258       error ("explicit instantiation of %q#D", decl);
16259       return;
16260     }
16261   else
16262     result = decl;
16263
16264   /* Check for various error cases.  Note that if the explicit
16265      instantiation is valid the RESULT will currently be marked as an
16266      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
16267      until we get here.  */
16268
16269   if (DECL_TEMPLATE_SPECIALIZATION (result))
16270     {
16271       /* DR 259 [temp.spec].
16272
16273          Both an explicit instantiation and a declaration of an explicit
16274          specialization shall not appear in a program unless the explicit
16275          instantiation follows a declaration of the explicit specialization.
16276
16277          For a given set of template parameters, if an explicit
16278          instantiation of a template appears after a declaration of an
16279          explicit specialization for that template, the explicit
16280          instantiation has no effect.  */
16281       return;
16282     }
16283   else if (DECL_EXPLICIT_INSTANTIATION (result))
16284     {
16285       /* [temp.spec]
16286
16287          No program shall explicitly instantiate any template more
16288          than once.
16289
16290          We check DECL_NOT_REALLY_EXTERN so as not to complain when
16291          the first instantiation was `extern' and the second is not,
16292          and EXTERN_P for the opposite case.  */
16293       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
16294         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
16295       /* If an "extern" explicit instantiation follows an ordinary
16296          explicit instantiation, the template is instantiated.  */
16297       if (extern_p)
16298         return;
16299     }
16300   else if (!DECL_IMPLICIT_INSTANTIATION (result))
16301     {
16302       error ("no matching template for %qD found", result);
16303       return;
16304     }
16305   else if (!DECL_TEMPLATE_INFO (result))
16306     {
16307       permerror (input_location, "explicit instantiation of non-template %q#D", result);
16308       return;
16309     }
16310
16311   if (storage == NULL_TREE)
16312     ;
16313   else if (storage == ridpointers[(int) RID_EXTERN])
16314     {
16315       if (!in_system_header && (cxx_dialect == cxx98))
16316         pedwarn (input_location, OPT_pedantic, 
16317                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
16318                  "instantiations");
16319       extern_p = 1;
16320     }
16321   else
16322     error ("storage class %qD applied to template instantiation", storage);
16323
16324   check_explicit_instantiation_namespace (result);
16325   mark_decl_instantiated (result, extern_p);
16326   if (! extern_p)
16327     instantiate_decl (result, /*defer_ok=*/1,
16328                       /*expl_inst_class_mem_p=*/false);
16329 }
16330
16331 static void
16332 mark_class_instantiated (tree t, int extern_p)
16333 {
16334   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
16335   SET_CLASSTYPE_INTERFACE_KNOWN (t);
16336   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
16337   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
16338   if (! extern_p)
16339     {
16340       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
16341       rest_of_type_compilation (t, 1);
16342     }
16343 }
16344
16345 /* Called from do_type_instantiation through binding_table_foreach to
16346    do recursive instantiation for the type bound in ENTRY.  */
16347 static void
16348 bt_instantiate_type_proc (binding_entry entry, void *data)
16349 {
16350   tree storage = *(tree *) data;
16351
16352   if (MAYBE_CLASS_TYPE_P (entry->type)
16353       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
16354     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
16355 }
16356
16357 /* Called from do_type_instantiation to instantiate a member
16358    (a member function or a static member variable) of an
16359    explicitly instantiated class template.  */
16360 static void
16361 instantiate_class_member (tree decl, int extern_p)
16362 {
16363   mark_decl_instantiated (decl, extern_p);
16364   if (! extern_p)
16365     instantiate_decl (decl, /*defer_ok=*/1,
16366                       /*expl_inst_class_mem_p=*/true);
16367 }
16368
16369 /* Perform an explicit instantiation of template class T.  STORAGE, if
16370    non-null, is the RID for extern, inline or static.  COMPLAIN is
16371    nonzero if this is called from the parser, zero if called recursively,
16372    since the standard is unclear (as detailed below).  */
16373
16374 void
16375 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
16376 {
16377   int extern_p = 0;
16378   int nomem_p = 0;
16379   int static_p = 0;
16380   int previous_instantiation_extern_p = 0;
16381
16382   if (TREE_CODE (t) == TYPE_DECL)
16383     t = TREE_TYPE (t);
16384
16385   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
16386     {
16387       error ("explicit instantiation of non-template type %qT", t);
16388       return;
16389     }
16390
16391   complete_type (t);
16392
16393   if (!COMPLETE_TYPE_P (t))
16394     {
16395       if (complain & tf_error)
16396         error ("explicit instantiation of %q#T before definition of template",
16397                t);
16398       return;
16399     }
16400
16401   if (storage != NULL_TREE)
16402     {
16403       if (!in_system_header)
16404         {
16405           if (storage == ridpointers[(int) RID_EXTERN])
16406             {
16407               if (cxx_dialect == cxx98)
16408                 pedwarn (input_location, OPT_pedantic, 
16409                          "ISO C++ 1998 forbids the use of %<extern%> on "
16410                          "explicit instantiations");
16411             }
16412           else
16413             pedwarn (input_location, OPT_pedantic, 
16414                      "ISO C++ forbids the use of %qE"
16415                      " on explicit instantiations", storage);
16416         }
16417
16418       if (storage == ridpointers[(int) RID_INLINE])
16419         nomem_p = 1;
16420       else if (storage == ridpointers[(int) RID_EXTERN])
16421         extern_p = 1;
16422       else if (storage == ridpointers[(int) RID_STATIC])
16423         static_p = 1;
16424       else
16425         {
16426           error ("storage class %qD applied to template instantiation",
16427                  storage);
16428           extern_p = 0;
16429         }
16430     }
16431
16432   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
16433     {
16434       /* DR 259 [temp.spec].
16435
16436          Both an explicit instantiation and a declaration of an explicit
16437          specialization shall not appear in a program unless the explicit
16438          instantiation follows a declaration of the explicit specialization.
16439
16440          For a given set of template parameters, if an explicit
16441          instantiation of a template appears after a declaration of an
16442          explicit specialization for that template, the explicit
16443          instantiation has no effect.  */
16444       return;
16445     }
16446   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
16447     {
16448       /* [temp.spec]
16449
16450          No program shall explicitly instantiate any template more
16451          than once.
16452
16453          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
16454          instantiation was `extern'.  If EXTERN_P then the second is.
16455          These cases are OK.  */
16456       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
16457
16458       if (!previous_instantiation_extern_p && !extern_p
16459           && (complain & tf_error))
16460         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
16461
16462       /* If we've already instantiated the template, just return now.  */
16463       if (!CLASSTYPE_INTERFACE_ONLY (t))
16464         return;
16465     }
16466
16467   check_explicit_instantiation_namespace (TYPE_NAME (t));
16468   mark_class_instantiated (t, extern_p);
16469
16470   if (nomem_p)
16471     return;
16472
16473   {
16474     tree tmp;
16475
16476     /* In contrast to implicit instantiation, where only the
16477        declarations, and not the definitions, of members are
16478        instantiated, we have here:
16479
16480          [temp.explicit]
16481
16482          The explicit instantiation of a class template specialization
16483          implies the instantiation of all of its members not
16484          previously explicitly specialized in the translation unit
16485          containing the explicit instantiation.
16486
16487        Of course, we can't instantiate member template classes, since
16488        we don't have any arguments for them.  Note that the standard
16489        is unclear on whether the instantiation of the members are
16490        *explicit* instantiations or not.  However, the most natural
16491        interpretation is that it should be an explicit instantiation.  */
16492
16493     if (! static_p)
16494       for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
16495         if (TREE_CODE (tmp) == FUNCTION_DECL
16496             && DECL_TEMPLATE_INSTANTIATION (tmp))
16497           instantiate_class_member (tmp, extern_p);
16498
16499     for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
16500       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
16501         instantiate_class_member (tmp, extern_p);
16502
16503     if (CLASSTYPE_NESTED_UTDS (t))
16504       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
16505                              bt_instantiate_type_proc, &storage);
16506   }
16507 }
16508
16509 /* Given a function DECL, which is a specialization of TMPL, modify
16510    DECL to be a re-instantiation of TMPL with the same template
16511    arguments.  TMPL should be the template into which tsubst'ing
16512    should occur for DECL, not the most general template.
16513
16514    One reason for doing this is a scenario like this:
16515
16516      template <class T>
16517      void f(const T&, int i);
16518
16519      void g() { f(3, 7); }
16520
16521      template <class T>
16522      void f(const T& t, const int i) { }
16523
16524    Note that when the template is first instantiated, with
16525    instantiate_template, the resulting DECL will have no name for the
16526    first parameter, and the wrong type for the second.  So, when we go
16527    to instantiate the DECL, we regenerate it.  */
16528
16529 static void
16530 regenerate_decl_from_template (tree decl, tree tmpl)
16531 {
16532   /* The arguments used to instantiate DECL, from the most general
16533      template.  */
16534   tree args;
16535   tree code_pattern;
16536
16537   args = DECL_TI_ARGS (decl);
16538   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
16539
16540   /* Make sure that we can see identifiers, and compute access
16541      correctly.  */
16542   push_access_scope (decl);
16543
16544   if (TREE_CODE (decl) == FUNCTION_DECL)
16545     {
16546       tree decl_parm;
16547       tree pattern_parm;
16548       tree specs;
16549       int args_depth;
16550       int parms_depth;
16551
16552       args_depth = TMPL_ARGS_DEPTH (args);
16553       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
16554       if (args_depth > parms_depth)
16555         args = get_innermost_template_args (args, parms_depth);
16556
16557       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
16558                                               args, tf_error, NULL_TREE);
16559       if (specs)
16560         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
16561                                                     specs);
16562
16563       /* Merge parameter declarations.  */
16564       decl_parm = skip_artificial_parms_for (decl,
16565                                              DECL_ARGUMENTS (decl));
16566       pattern_parm
16567         = skip_artificial_parms_for (code_pattern,
16568                                      DECL_ARGUMENTS (code_pattern));
16569       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
16570         {
16571           tree parm_type;
16572           tree attributes;
16573           
16574           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
16575             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
16576           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
16577                               NULL_TREE);
16578           parm_type = type_decays_to (parm_type);
16579           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
16580             TREE_TYPE (decl_parm) = parm_type;
16581           attributes = DECL_ATTRIBUTES (pattern_parm);
16582           if (DECL_ATTRIBUTES (decl_parm) != attributes)
16583             {
16584               DECL_ATTRIBUTES (decl_parm) = attributes;
16585               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
16586             }
16587           decl_parm = DECL_CHAIN (decl_parm);
16588           pattern_parm = DECL_CHAIN (pattern_parm);
16589         }
16590       /* Merge any parameters that match with the function parameter
16591          pack.  */
16592       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
16593         {
16594           int i, len;
16595           tree expanded_types;
16596           /* Expand the TYPE_PACK_EXPANSION that provides the types for
16597              the parameters in this function parameter pack.  */
16598           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
16599                                                  args, tf_error, NULL_TREE);
16600           len = TREE_VEC_LENGTH (expanded_types);
16601           for (i = 0; i < len; i++)
16602             {
16603               tree parm_type;
16604               tree attributes;
16605           
16606               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
16607                 /* Rename the parameter to include the index.  */
16608                 DECL_NAME (decl_parm) = 
16609                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
16610               parm_type = TREE_VEC_ELT (expanded_types, i);
16611               parm_type = type_decays_to (parm_type);
16612               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
16613                 TREE_TYPE (decl_parm) = parm_type;
16614               attributes = DECL_ATTRIBUTES (pattern_parm);
16615               if (DECL_ATTRIBUTES (decl_parm) != attributes)
16616                 {
16617                   DECL_ATTRIBUTES (decl_parm) = attributes;
16618                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
16619                 }
16620               decl_parm = DECL_CHAIN (decl_parm);
16621             }
16622         }
16623       /* Merge additional specifiers from the CODE_PATTERN.  */
16624       if (DECL_DECLARED_INLINE_P (code_pattern)
16625           && !DECL_DECLARED_INLINE_P (decl))
16626         DECL_DECLARED_INLINE_P (decl) = 1;
16627     }
16628   else if (TREE_CODE (decl) == VAR_DECL)
16629     {
16630       DECL_INITIAL (decl) =
16631         tsubst_expr (DECL_INITIAL (code_pattern), args,
16632                      tf_error, DECL_TI_TEMPLATE (decl),
16633                      /*integral_constant_expression_p=*/false);
16634       if (VAR_HAD_UNKNOWN_BOUND (decl))
16635         TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
16636                                    tf_error, DECL_TI_TEMPLATE (decl));
16637     }
16638   else
16639     gcc_unreachable ();
16640
16641   pop_access_scope (decl);
16642 }
16643
16644 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
16645    substituted to get DECL.  */
16646
16647 tree
16648 template_for_substitution (tree decl)
16649 {
16650   tree tmpl = DECL_TI_TEMPLATE (decl);
16651
16652   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
16653      for the instantiation.  This is not always the most general
16654      template.  Consider, for example:
16655
16656         template <class T>
16657         struct S { template <class U> void f();
16658                    template <> void f<int>(); };
16659
16660      and an instantiation of S<double>::f<int>.  We want TD to be the
16661      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
16662   while (/* An instantiation cannot have a definition, so we need a
16663             more general template.  */
16664          DECL_TEMPLATE_INSTANTIATION (tmpl)
16665            /* We must also deal with friend templates.  Given:
16666
16667                 template <class T> struct S {
16668                   template <class U> friend void f() {};
16669                 };
16670
16671               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
16672               so far as the language is concerned, but that's still
16673               where we get the pattern for the instantiation from.  On
16674               other hand, if the definition comes outside the class, say:
16675
16676                 template <class T> struct S {
16677                   template <class U> friend void f();
16678                 };
16679                 template <class U> friend void f() {}
16680
16681               we don't need to look any further.  That's what the check for
16682               DECL_INITIAL is for.  */
16683           || (TREE_CODE (decl) == FUNCTION_DECL
16684               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
16685               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
16686     {
16687       /* The present template, TD, should not be a definition.  If it
16688          were a definition, we should be using it!  Note that we
16689          cannot restructure the loop to just keep going until we find
16690          a template with a definition, since that might go too far if
16691          a specialization was declared, but not defined.  */
16692       gcc_assert (TREE_CODE (decl) != VAR_DECL
16693                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
16694
16695       /* Fetch the more general template.  */
16696       tmpl = DECL_TI_TEMPLATE (tmpl);
16697     }
16698
16699   return tmpl;
16700 }
16701
16702 /* Returns true if we need to instantiate this template instance even if we
16703    know we aren't going to emit it..  */
16704
16705 bool
16706 always_instantiate_p (tree decl)
16707 {
16708   /* We always instantiate inline functions so that we can inline them.  An
16709      explicit instantiation declaration prohibits implicit instantiation of
16710      non-inline functions.  With high levels of optimization, we would
16711      normally inline non-inline functions -- but we're not allowed to do
16712      that for "extern template" functions.  Therefore, we check
16713      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
16714   return ((TREE_CODE (decl) == FUNCTION_DECL
16715            && DECL_DECLARED_INLINE_P (decl))
16716           /* And we need to instantiate static data members so that
16717              their initializers are available in integral constant
16718              expressions.  */
16719           || (TREE_CODE (decl) == VAR_DECL
16720               && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl)));
16721 }
16722
16723 /* Produce the definition of D, a _DECL generated from a template.  If
16724    DEFER_OK is nonzero, then we don't have to actually do the
16725    instantiation now; we just have to do it sometime.  Normally it is
16726    an error if this is an explicit instantiation but D is undefined.
16727    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
16728    explicitly instantiated class template.  */
16729
16730 tree
16731 instantiate_decl (tree d, int defer_ok,
16732                   bool expl_inst_class_mem_p)
16733 {
16734   tree tmpl = DECL_TI_TEMPLATE (d);
16735   tree gen_args;
16736   tree args;
16737   tree td;
16738   tree code_pattern;
16739   tree spec;
16740   tree gen_tmpl;
16741   bool pattern_defined;
16742   int need_push;
16743   location_t saved_loc = input_location;
16744   bool external_p;
16745
16746   /* This function should only be used to instantiate templates for
16747      functions and static member variables.  */
16748   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
16749               || TREE_CODE (d) == VAR_DECL);
16750
16751   /* Variables are never deferred; if instantiation is required, they
16752      are instantiated right away.  That allows for better code in the
16753      case that an expression refers to the value of the variable --
16754      if the variable has a constant value the referring expression can
16755      take advantage of that fact.  */
16756   if (TREE_CODE (d) == VAR_DECL)
16757     defer_ok = 0;
16758
16759   /* Don't instantiate cloned functions.  Instead, instantiate the
16760      functions they cloned.  */
16761   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
16762     d = DECL_CLONED_FUNCTION (d);
16763
16764   if (DECL_TEMPLATE_INSTANTIATED (d)
16765       || DECL_TEMPLATE_SPECIALIZATION (d))
16766     /* D has already been instantiated or explicitly specialized, so
16767        there's nothing for us to do here.
16768
16769        It might seem reasonable to check whether or not D is an explicit
16770        instantiation, and, if so, stop here.  But when an explicit
16771        instantiation is deferred until the end of the compilation,
16772        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
16773        the instantiation.  */
16774     return d;
16775
16776   /* Check to see whether we know that this template will be
16777      instantiated in some other file, as with "extern template"
16778      extension.  */
16779   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
16780
16781   /* In general, we do not instantiate such templates.  */
16782   if (external_p && !always_instantiate_p (d))
16783     return d;
16784
16785   gen_tmpl = most_general_template (tmpl);
16786   gen_args = DECL_TI_ARGS (d);
16787
16788   if (tmpl != gen_tmpl)
16789     /* We should already have the extra args.  */
16790     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
16791                 == TMPL_ARGS_DEPTH (gen_args));
16792   /* And what's in the hash table should match D.  */
16793   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
16794               || spec == NULL_TREE);
16795
16796   /* This needs to happen before any tsubsting.  */
16797   if (! push_tinst_level (d))
16798     return d;
16799
16800   timevar_push (TV_PARSE);
16801
16802   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
16803      for the instantiation.  */
16804   td = template_for_substitution (d);
16805   code_pattern = DECL_TEMPLATE_RESULT (td);
16806
16807   /* We should never be trying to instantiate a member of a class
16808      template or partial specialization.  */
16809   gcc_assert (d != code_pattern);
16810
16811   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
16812       || DECL_TEMPLATE_SPECIALIZATION (td))
16813     /* In the case of a friend template whose definition is provided
16814        outside the class, we may have too many arguments.  Drop the
16815        ones we don't need.  The same is true for specializations.  */
16816     args = get_innermost_template_args
16817       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
16818   else
16819     args = gen_args;
16820
16821   if (TREE_CODE (d) == FUNCTION_DECL)
16822     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
16823   else
16824     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
16825
16826   /* We may be in the middle of deferred access check.  Disable it now.  */
16827   push_deferring_access_checks (dk_no_deferred);
16828
16829   /* Unless an explicit instantiation directive has already determined
16830      the linkage of D, remember that a definition is available for
16831      this entity.  */
16832   if (pattern_defined
16833       && !DECL_INTERFACE_KNOWN (d)
16834       && !DECL_NOT_REALLY_EXTERN (d))
16835     mark_definable (d);
16836
16837   input_location = DECL_SOURCE_LOCATION (d);
16838
16839   /* If D is a member of an explicitly instantiated class template,
16840      and no definition is available, treat it like an implicit
16841      instantiation.  */
16842   if (!pattern_defined && expl_inst_class_mem_p
16843       && DECL_EXPLICIT_INSTANTIATION (d))
16844     {
16845       DECL_NOT_REALLY_EXTERN (d) = 0;
16846       DECL_INTERFACE_KNOWN (d) = 0;
16847       SET_DECL_IMPLICIT_INSTANTIATION (d);
16848     }
16849
16850   /* Recheck the substitutions to obtain any warning messages
16851      about ignoring cv qualifiers.  Don't do this for artificial decls,
16852      as it breaks the context-sensitive substitution for lambda op(). */
16853   if (!defer_ok && !DECL_ARTIFICIAL (d))
16854     {
16855       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
16856       tree type = TREE_TYPE (gen);
16857
16858       /* Make sure that we can see identifiers, and compute access
16859          correctly.  D is already the target FUNCTION_DECL with the
16860          right context.  */
16861       push_access_scope (d);
16862
16863       if (TREE_CODE (gen) == FUNCTION_DECL)
16864         {
16865           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
16866           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
16867                                           d);
16868           /* Don't simply tsubst the function type, as that will give
16869              duplicate warnings about poor parameter qualifications.
16870              The function arguments are the same as the decl_arguments
16871              without the top level cv qualifiers.  */
16872           type = TREE_TYPE (type);
16873         }
16874       tsubst (type, gen_args, tf_warning_or_error, d);
16875
16876       pop_access_scope (d);
16877     }
16878
16879   /* Defer all other templates, unless we have been explicitly
16880      forbidden from doing so.  */
16881   if (/* If there is no definition, we cannot instantiate the
16882          template.  */
16883       ! pattern_defined
16884       /* If it's OK to postpone instantiation, do so.  */
16885       || defer_ok
16886       /* If this is a static data member that will be defined
16887          elsewhere, we don't want to instantiate the entire data
16888          member, but we do want to instantiate the initializer so that
16889          we can substitute that elsewhere.  */
16890       || (external_p && TREE_CODE (d) == VAR_DECL))
16891     {
16892       /* The definition of the static data member is now required so
16893          we must substitute the initializer.  */
16894       if (TREE_CODE (d) == VAR_DECL
16895           && !DECL_INITIAL (d)
16896           && DECL_INITIAL (code_pattern))
16897         {
16898           tree ns;
16899           tree init;
16900
16901           ns = decl_namespace_context (d);
16902           push_nested_namespace (ns);
16903           push_nested_class (DECL_CONTEXT (d));
16904           init = tsubst_expr (DECL_INITIAL (code_pattern),
16905                               args,
16906                               tf_warning_or_error, NULL_TREE,
16907                               /*integral_constant_expression_p=*/false);
16908           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
16909                           /*asmspec_tree=*/NULL_TREE,
16910                           LOOKUP_ONLYCONVERTING);
16911           pop_nested_class ();
16912           pop_nested_namespace (ns);
16913         }
16914
16915       /* We restore the source position here because it's used by
16916          add_pending_template.  */
16917       input_location = saved_loc;
16918
16919       if (at_eof && !pattern_defined
16920           && DECL_EXPLICIT_INSTANTIATION (d)
16921           && DECL_NOT_REALLY_EXTERN (d))
16922         /* [temp.explicit]
16923
16924            The definition of a non-exported function template, a
16925            non-exported member function template, or a non-exported
16926            member function or static data member of a class template
16927            shall be present in every translation unit in which it is
16928            explicitly instantiated.  */
16929         permerror (input_location,  "explicit instantiation of %qD "
16930                    "but no definition available", d);
16931
16932       /* ??? Historically, we have instantiated inline functions, even
16933          when marked as "extern template".  */
16934       if (!(external_p && TREE_CODE (d) == VAR_DECL))
16935         add_pending_template (d);
16936       goto out;
16937     }
16938   /* Tell the repository that D is available in this translation unit
16939      -- and see if it is supposed to be instantiated here.  */
16940   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
16941     {
16942       /* In a PCH file, despite the fact that the repository hasn't
16943          requested instantiation in the PCH it is still possible that
16944          an instantiation will be required in a file that includes the
16945          PCH.  */
16946       if (pch_file)
16947         add_pending_template (d);
16948       /* Instantiate inline functions so that the inliner can do its
16949          job, even though we'll not be emitting a copy of this
16950          function.  */
16951       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
16952         goto out;
16953     }
16954
16955   need_push = !cfun || !global_bindings_p ();
16956   if (need_push)
16957     push_to_top_level ();
16958
16959   /* Mark D as instantiated so that recursive calls to
16960      instantiate_decl do not try to instantiate it again.  */
16961   DECL_TEMPLATE_INSTANTIATED (d) = 1;
16962
16963   /* Regenerate the declaration in case the template has been modified
16964      by a subsequent redeclaration.  */
16965   regenerate_decl_from_template (d, td);
16966
16967   /* We already set the file and line above.  Reset them now in case
16968      they changed as a result of calling regenerate_decl_from_template.  */
16969   input_location = DECL_SOURCE_LOCATION (d);
16970
16971   if (TREE_CODE (d) == VAR_DECL)
16972     {
16973       tree init;
16974
16975       /* Clear out DECL_RTL; whatever was there before may not be right
16976          since we've reset the type of the declaration.  */
16977       SET_DECL_RTL (d, NULL);
16978       DECL_IN_AGGR_P (d) = 0;
16979
16980       /* The initializer is placed in DECL_INITIAL by
16981          regenerate_decl_from_template.  Pull it out so that
16982          cp_finish_decl can process it.  */
16983       init = DECL_INITIAL (d);
16984       DECL_INITIAL (d) = NULL_TREE;
16985       DECL_INITIALIZED_P (d) = 0;
16986
16987       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
16988          initializer.  That function will defer actual emission until
16989          we have a chance to determine linkage.  */
16990       DECL_EXTERNAL (d) = 0;
16991
16992       /* Enter the scope of D so that access-checking works correctly.  */
16993       push_nested_class (DECL_CONTEXT (d));
16994       cp_finish_decl (d, init, false, NULL_TREE, 0);
16995       pop_nested_class ();
16996     }
16997   else if (TREE_CODE (d) == FUNCTION_DECL)
16998     {
16999       htab_t saved_local_specializations;
17000       tree subst_decl;
17001       tree tmpl_parm;
17002       tree spec_parm;
17003
17004       /* Save away the current list, in case we are instantiating one
17005          template from within the body of another.  */
17006       saved_local_specializations = local_specializations;
17007
17008       /* Set up the list of local specializations.  */
17009       local_specializations = htab_create (37,
17010                                            hash_local_specialization,
17011                                            eq_local_specializations,
17012                                            NULL);
17013
17014       /* Set up context.  */
17015       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
17016
17017       /* Create substitution entries for the parameters.  */
17018       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
17019       tmpl_parm = DECL_ARGUMENTS (subst_decl);
17020       spec_parm = DECL_ARGUMENTS (d);
17021       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
17022         {
17023           register_local_specialization (spec_parm, tmpl_parm);
17024           spec_parm = skip_artificial_parms_for (d, spec_parm);
17025           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
17026         }
17027       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
17028         {
17029           register_local_specialization (spec_parm, tmpl_parm);
17030           tmpl_parm = DECL_CHAIN (tmpl_parm);
17031           spec_parm = DECL_CHAIN (spec_parm);
17032         }
17033       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
17034         {
17035           /* Register the (value) argument pack as a specialization of
17036              TMPL_PARM, then move on.  */
17037           tree argpack = make_fnparm_pack (spec_parm);
17038           register_local_specialization (argpack, tmpl_parm);
17039           tmpl_parm = DECL_CHAIN (tmpl_parm);
17040           spec_parm = NULL_TREE;
17041         }
17042       gcc_assert (!spec_parm);
17043
17044       /* Substitute into the body of the function.  */
17045       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
17046                    tf_warning_or_error, tmpl,
17047                    /*integral_constant_expression_p=*/false);
17048
17049       /* Set the current input_location to the end of the function
17050          so that finish_function knows where we are.  */
17051       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
17052
17053       /* We don't need the local specializations any more.  */
17054       htab_delete (local_specializations);
17055       local_specializations = saved_local_specializations;
17056
17057       /* Finish the function.  */
17058       d = finish_function (0);
17059       expand_or_defer_fn (d);
17060     }
17061
17062   /* We're not deferring instantiation any more.  */
17063   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
17064
17065   if (need_push)
17066     pop_from_top_level ();
17067
17068 out:
17069   input_location = saved_loc;
17070   pop_deferring_access_checks ();
17071   pop_tinst_level ();
17072
17073   timevar_pop (TV_PARSE);
17074
17075   return d;
17076 }
17077
17078 /* Run through the list of templates that we wish we could
17079    instantiate, and instantiate any we can.  RETRIES is the
17080    number of times we retry pending template instantiation.  */
17081
17082 void
17083 instantiate_pending_templates (int retries)
17084 {
17085   int reconsider;
17086   location_t saved_loc = input_location;
17087
17088   /* Instantiating templates may trigger vtable generation.  This in turn
17089      may require further template instantiations.  We place a limit here
17090      to avoid infinite loop.  */
17091   if (pending_templates && retries >= max_tinst_depth)
17092     {
17093       tree decl = pending_templates->tinst->decl;
17094
17095       error ("template instantiation depth exceeds maximum of %d"
17096              " instantiating %q+D, possibly from virtual table generation"
17097              " (use -ftemplate-depth= to increase the maximum)",
17098              max_tinst_depth, decl);
17099       if (TREE_CODE (decl) == FUNCTION_DECL)
17100         /* Pretend that we defined it.  */
17101         DECL_INITIAL (decl) = error_mark_node;
17102       return;
17103     }
17104
17105   do
17106     {
17107       struct pending_template **t = &pending_templates;
17108       struct pending_template *last = NULL;
17109       reconsider = 0;
17110       while (*t)
17111         {
17112           tree instantiation = reopen_tinst_level ((*t)->tinst);
17113           bool complete = false;
17114
17115           if (TYPE_P (instantiation))
17116             {
17117               tree fn;
17118
17119               if (!COMPLETE_TYPE_P (instantiation))
17120                 {
17121                   instantiate_class_template (instantiation);
17122                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
17123                     for (fn = TYPE_METHODS (instantiation);
17124                          fn;
17125                          fn = TREE_CHAIN (fn))
17126                       if (! DECL_ARTIFICIAL (fn))
17127                         instantiate_decl (fn,
17128                                           /*defer_ok=*/0,
17129                                           /*expl_inst_class_mem_p=*/false);
17130                   if (COMPLETE_TYPE_P (instantiation))
17131                     reconsider = 1;
17132                 }
17133
17134               complete = COMPLETE_TYPE_P (instantiation);
17135             }
17136           else
17137             {
17138               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
17139                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
17140                 {
17141                   instantiation
17142                     = instantiate_decl (instantiation,
17143                                         /*defer_ok=*/0,
17144                                         /*expl_inst_class_mem_p=*/false);
17145                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
17146                     reconsider = 1;
17147                 }
17148
17149               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
17150                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
17151             }
17152
17153           if (complete)
17154             /* If INSTANTIATION has been instantiated, then we don't
17155                need to consider it again in the future.  */
17156             *t = (*t)->next;
17157           else
17158             {
17159               last = *t;
17160               t = &(*t)->next;
17161             }
17162           tinst_depth = 0;
17163           current_tinst_level = NULL;
17164         }
17165       last_pending_template = last;
17166     }
17167   while (reconsider);
17168
17169   input_location = saved_loc;
17170 }
17171
17172 /* Substitute ARGVEC into T, which is a list of initializers for
17173    either base class or a non-static data member.  The TREE_PURPOSEs
17174    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
17175    instantiate_decl.  */
17176
17177 static tree
17178 tsubst_initializer_list (tree t, tree argvec)
17179 {
17180   tree inits = NULL_TREE;
17181
17182   for (; t; t = TREE_CHAIN (t))
17183     {
17184       tree decl;
17185       tree init;
17186       tree expanded_bases = NULL_TREE;
17187       tree expanded_arguments = NULL_TREE;
17188       int i, len = 1;
17189
17190       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
17191         {
17192           tree expr;
17193           tree arg;
17194
17195           /* Expand the base class expansion type into separate base
17196              classes.  */
17197           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
17198                                                  tf_warning_or_error,
17199                                                  NULL_TREE);
17200           if (expanded_bases == error_mark_node)
17201             continue;
17202           
17203           /* We'll be building separate TREE_LISTs of arguments for
17204              each base.  */
17205           len = TREE_VEC_LENGTH (expanded_bases);
17206           expanded_arguments = make_tree_vec (len);
17207           for (i = 0; i < len; i++)
17208             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
17209
17210           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
17211              expand each argument in the TREE_VALUE of t.  */
17212           expr = make_node (EXPR_PACK_EXPANSION);
17213           PACK_EXPANSION_PARAMETER_PACKS (expr) =
17214             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
17215
17216           if (TREE_VALUE (t) == void_type_node)
17217             /* VOID_TYPE_NODE is used to indicate
17218                value-initialization.  */
17219             {
17220               for (i = 0; i < len; i++)
17221                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
17222             }
17223           else
17224             {
17225               /* Substitute parameter packs into each argument in the
17226                  TREE_LIST.  */
17227               in_base_initializer = 1;
17228               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
17229                 {
17230                   tree expanded_exprs;
17231
17232                   /* Expand the argument.  */
17233                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
17234                   expanded_exprs 
17235                     = tsubst_pack_expansion (expr, argvec,
17236                                              tf_warning_or_error,
17237                                              NULL_TREE);
17238                   if (expanded_exprs == error_mark_node)
17239                     continue;
17240
17241                   /* Prepend each of the expanded expressions to the
17242                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
17243                   for (i = 0; i < len; i++)
17244                     {
17245                       TREE_VEC_ELT (expanded_arguments, i) = 
17246                         tree_cons (NULL_TREE, 
17247                                    TREE_VEC_ELT (expanded_exprs, i),
17248                                    TREE_VEC_ELT (expanded_arguments, i));
17249                     }
17250                 }
17251               in_base_initializer = 0;
17252
17253               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
17254                  since we built them backwards.  */
17255               for (i = 0; i < len; i++)
17256                 {
17257                   TREE_VEC_ELT (expanded_arguments, i) = 
17258                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
17259                 }
17260             }
17261         }
17262
17263       for (i = 0; i < len; ++i)
17264         {
17265           if (expanded_bases)
17266             {
17267               decl = TREE_VEC_ELT (expanded_bases, i);
17268               decl = expand_member_init (decl);
17269               init = TREE_VEC_ELT (expanded_arguments, i);
17270             }
17271           else
17272             {
17273               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
17274                                   tf_warning_or_error, NULL_TREE);
17275
17276               decl = expand_member_init (decl);
17277               if (decl && !DECL_P (decl))
17278                 in_base_initializer = 1;
17279
17280               init = TREE_VALUE (t);
17281               if (init != void_type_node)
17282                 init = tsubst_expr (init, argvec,
17283                                     tf_warning_or_error, NULL_TREE,
17284                                     /*integral_constant_expression_p=*/false);
17285               in_base_initializer = 0;
17286             }
17287
17288           if (decl)
17289             {
17290               init = build_tree_list (decl, init);
17291               TREE_CHAIN (init) = inits;
17292               inits = init;
17293             }
17294         }
17295     }
17296   return inits;
17297 }
17298
17299 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
17300
17301 static void
17302 set_current_access_from_decl (tree decl)
17303 {
17304   if (TREE_PRIVATE (decl))
17305     current_access_specifier = access_private_node;
17306   else if (TREE_PROTECTED (decl))
17307     current_access_specifier = access_protected_node;
17308   else
17309     current_access_specifier = access_public_node;
17310 }
17311
17312 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
17313    is the instantiation (which should have been created with
17314    start_enum) and ARGS are the template arguments to use.  */
17315
17316 static void
17317 tsubst_enum (tree tag, tree newtag, tree args)
17318 {
17319   tree e;
17320
17321   if (SCOPED_ENUM_P (newtag))
17322     begin_scope (sk_scoped_enum, newtag);
17323
17324   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
17325     {
17326       tree value;
17327       tree decl;
17328
17329       decl = TREE_VALUE (e);
17330       /* Note that in a template enum, the TREE_VALUE is the
17331          CONST_DECL, not the corresponding INTEGER_CST.  */
17332       value = tsubst_expr (DECL_INITIAL (decl),
17333                            args, tf_warning_or_error, NULL_TREE,
17334                            /*integral_constant_expression_p=*/true);
17335
17336       /* Give this enumeration constant the correct access.  */
17337       set_current_access_from_decl (decl);
17338
17339       /* Actually build the enumerator itself.  */
17340       build_enumerator
17341         (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
17342     }
17343
17344   if (SCOPED_ENUM_P (newtag))
17345     finish_scope ();
17346
17347   finish_enum_value_list (newtag);
17348   finish_enum (newtag);
17349
17350   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
17351     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
17352 }
17353
17354 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
17355    its type -- but without substituting the innermost set of template
17356    arguments.  So, innermost set of template parameters will appear in
17357    the type.  */
17358
17359 tree
17360 get_mostly_instantiated_function_type (tree decl)
17361 {
17362   tree fn_type;
17363   tree tmpl;
17364   tree targs;
17365   tree tparms;
17366   int parm_depth;
17367
17368   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
17369   targs = DECL_TI_ARGS (decl);
17370   tparms = DECL_TEMPLATE_PARMS (tmpl);
17371   parm_depth = TMPL_PARMS_DEPTH (tparms);
17372
17373   /* There should be as many levels of arguments as there are levels
17374      of parameters.  */
17375   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
17376
17377   fn_type = TREE_TYPE (tmpl);
17378
17379   if (parm_depth == 1)
17380     /* No substitution is necessary.  */
17381     ;
17382   else
17383     {
17384       int i, save_access_control;
17385       tree partial_args;
17386
17387       /* Replace the innermost level of the TARGS with NULL_TREEs to
17388          let tsubst know not to substitute for those parameters.  */
17389       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
17390       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
17391         SET_TMPL_ARGS_LEVEL (partial_args, i,
17392                              TMPL_ARGS_LEVEL (targs, i));
17393       SET_TMPL_ARGS_LEVEL (partial_args,
17394                            TMPL_ARGS_DEPTH (targs),
17395                            make_tree_vec (DECL_NTPARMS (tmpl)));
17396
17397       /* Disable access control as this function is used only during
17398          name-mangling.  */
17399       save_access_control = flag_access_control;
17400       flag_access_control = 0;
17401
17402       ++processing_template_decl;
17403       /* Now, do the (partial) substitution to figure out the
17404          appropriate function type.  */
17405       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
17406       --processing_template_decl;
17407
17408       /* Substitute into the template parameters to obtain the real
17409          innermost set of parameters.  This step is important if the
17410          innermost set of template parameters contains value
17411          parameters whose types depend on outer template parameters.  */
17412       TREE_VEC_LENGTH (partial_args)--;
17413       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
17414
17415       flag_access_control = save_access_control;
17416     }
17417
17418   return fn_type;
17419 }
17420
17421 /* Return truthvalue if we're processing a template different from
17422    the last one involved in diagnostics.  */
17423 int
17424 problematic_instantiation_changed (void)
17425 {
17426   return last_template_error_tick != tinst_level_tick;
17427 }
17428
17429 /* Remember current template involved in diagnostics.  */
17430 void
17431 record_last_problematic_instantiation (void)
17432 {
17433   last_template_error_tick = tinst_level_tick;
17434 }
17435
17436 struct tinst_level *
17437 current_instantiation (void)
17438 {
17439   return current_tinst_level;
17440 }
17441
17442 /* [temp.param] Check that template non-type parm TYPE is of an allowable
17443    type. Return zero for ok, nonzero for disallowed. Issue error and
17444    warning messages under control of COMPLAIN.  */
17445
17446 static int
17447 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
17448 {
17449   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
17450     return 0;
17451   else if (POINTER_TYPE_P (type))
17452     return 0;
17453   else if (TYPE_PTR_TO_MEMBER_P (type))
17454     return 0;
17455   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
17456     return 0;
17457   else if (TREE_CODE (type) == TYPENAME_TYPE)
17458     return 0;
17459
17460   if (complain & tf_error)
17461     error ("%q#T is not a valid type for a template constant parameter", type);
17462   return 1;
17463 }
17464
17465 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
17466    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
17467
17468 static bool
17469 dependent_type_p_r (tree type)
17470 {
17471   tree scope;
17472
17473   /* [temp.dep.type]
17474
17475      A type is dependent if it is:
17476
17477      -- a template parameter. Template template parameters are types
17478         for us (since TYPE_P holds true for them) so we handle
17479         them here.  */
17480   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
17481       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
17482     return true;
17483   /* -- a qualified-id with a nested-name-specifier which contains a
17484         class-name that names a dependent type or whose unqualified-id
17485         names a dependent type.  */
17486   if (TREE_CODE (type) == TYPENAME_TYPE)
17487     return true;
17488   /* -- a cv-qualified type where the cv-unqualified type is
17489         dependent.  */
17490   type = TYPE_MAIN_VARIANT (type);
17491   /* -- a compound type constructed from any dependent type.  */
17492   if (TYPE_PTR_TO_MEMBER_P (type))
17493     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
17494             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
17495                                            (type)));
17496   else if (TREE_CODE (type) == POINTER_TYPE
17497            || TREE_CODE (type) == REFERENCE_TYPE)
17498     return dependent_type_p (TREE_TYPE (type));
17499   else if (TREE_CODE (type) == FUNCTION_TYPE
17500            || TREE_CODE (type) == METHOD_TYPE)
17501     {
17502       tree arg_type;
17503
17504       if (dependent_type_p (TREE_TYPE (type)))
17505         return true;
17506       for (arg_type = TYPE_ARG_TYPES (type);
17507            arg_type;
17508            arg_type = TREE_CHAIN (arg_type))
17509         if (dependent_type_p (TREE_VALUE (arg_type)))
17510           return true;
17511       return false;
17512     }
17513   /* -- an array type constructed from any dependent type or whose
17514         size is specified by a constant expression that is
17515         value-dependent.
17516
17517         We checked for type- and value-dependence of the bounds in
17518         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
17519   if (TREE_CODE (type) == ARRAY_TYPE)
17520     {
17521       if (TYPE_DOMAIN (type)
17522           && dependent_type_p (TYPE_DOMAIN (type)))
17523         return true;
17524       return dependent_type_p (TREE_TYPE (type));
17525     }
17526
17527   /* -- a template-id in which either the template name is a template
17528      parameter ...  */
17529   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
17530     return true;
17531   /* ... or any of the template arguments is a dependent type or
17532         an expression that is type-dependent or value-dependent.  */
17533   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
17534            && (any_dependent_template_arguments_p
17535                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
17536     return true;
17537
17538   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
17539      argument of the `typeof' expression is not type-dependent, then
17540      it should already been have resolved.  */
17541   if (TREE_CODE (type) == TYPEOF_TYPE
17542       || TREE_CODE (type) == DECLTYPE_TYPE)
17543     return true;
17544
17545   /* A template argument pack is dependent if any of its packed
17546      arguments are.  */
17547   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
17548     {
17549       tree args = ARGUMENT_PACK_ARGS (type);
17550       int i, len = TREE_VEC_LENGTH (args);
17551       for (i = 0; i < len; ++i)
17552         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
17553           return true;
17554     }
17555
17556   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
17557      be template parameters.  */
17558   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
17559     return true;
17560
17561   /* The standard does not specifically mention types that are local
17562      to template functions or local classes, but they should be
17563      considered dependent too.  For example:
17564
17565        template <int I> void f() {
17566          enum E { a = I };
17567          S<sizeof (E)> s;
17568        }
17569
17570      The size of `E' cannot be known until the value of `I' has been
17571      determined.  Therefore, `E' must be considered dependent.  */
17572   scope = TYPE_CONTEXT (type);
17573   if (scope && TYPE_P (scope))
17574     return dependent_type_p (scope);
17575   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
17576     return type_dependent_expression_p (scope);
17577
17578   /* Other types are non-dependent.  */
17579   return false;
17580 }
17581
17582 /* Returns TRUE if TYPE is dependent, in the sense of
17583    [temp.dep.type].  */
17584
17585 bool
17586 dependent_type_p (tree type)
17587 {
17588   /* If there are no template parameters in scope, then there can't be
17589      any dependent types.  */
17590   if (!processing_template_decl)
17591     {
17592       /* If we are not processing a template, then nobody should be
17593          providing us with a dependent type.  */
17594       gcc_assert (type);
17595       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
17596       return false;
17597     }
17598
17599   /* If the type is NULL, we have not computed a type for the entity
17600      in question; in that case, the type is dependent.  */
17601   if (!type)
17602     return true;
17603
17604   /* Erroneous types can be considered non-dependent.  */
17605   if (type == error_mark_node)
17606     return false;
17607
17608   /* If we have not already computed the appropriate value for TYPE,
17609      do so now.  */
17610   if (!TYPE_DEPENDENT_P_VALID (type))
17611     {
17612       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
17613       TYPE_DEPENDENT_P_VALID (type) = 1;
17614     }
17615
17616   return TYPE_DEPENDENT_P (type);
17617 }
17618
17619 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
17620    lookup.  In other words, a dependent type that is not the current
17621    instantiation.  */
17622
17623 bool
17624 dependent_scope_p (tree scope)
17625 {
17626   return (scope && TYPE_P (scope) && dependent_type_p (scope)
17627           && !currently_open_class (scope));
17628 }
17629
17630 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
17631    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
17632    expression.  */
17633
17634 bool
17635 value_dependent_expression_p (tree expression)
17636 {
17637   if (!processing_template_decl)
17638     return false;
17639
17640   /* A name declared with a dependent type.  */
17641   if (DECL_P (expression) && type_dependent_expression_p (expression))
17642     return true;
17643
17644   switch (TREE_CODE (expression))
17645     {
17646     case IDENTIFIER_NODE:
17647       /* A name that has not been looked up -- must be dependent.  */
17648       return true;
17649
17650     case TEMPLATE_PARM_INDEX:
17651       /* A non-type template parm.  */
17652       return true;
17653
17654     case CONST_DECL:
17655       /* A non-type template parm.  */
17656       if (DECL_TEMPLATE_PARM_P (expression))
17657         return true;
17658       return value_dependent_expression_p (DECL_INITIAL (expression));
17659
17660     case VAR_DECL:
17661        /* A constant with integral or enumeration type and is initialized
17662           with an expression that is value-dependent.  */
17663       if (DECL_INITIAL (expression)
17664           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
17665           && value_dependent_expression_p (DECL_INITIAL (expression)))
17666         return true;
17667       return false;
17668
17669     case DYNAMIC_CAST_EXPR:
17670     case STATIC_CAST_EXPR:
17671     case CONST_CAST_EXPR:
17672     case REINTERPRET_CAST_EXPR:
17673     case CAST_EXPR:
17674       /* These expressions are value-dependent if the type to which
17675          the cast occurs is dependent or the expression being casted
17676          is value-dependent.  */
17677       {
17678         tree type = TREE_TYPE (expression);
17679
17680         if (dependent_type_p (type))
17681           return true;
17682
17683         /* A functional cast has a list of operands.  */
17684         expression = TREE_OPERAND (expression, 0);
17685         if (!expression)
17686           {
17687             /* If there are no operands, it must be an expression such
17688                as "int()". This should not happen for aggregate types
17689                because it would form non-constant expressions.  */
17690             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
17691
17692             return false;
17693           }
17694
17695         if (TREE_CODE (expression) == TREE_LIST)
17696           return any_value_dependent_elements_p (expression);
17697
17698         return value_dependent_expression_p (expression);
17699       }
17700
17701     case SIZEOF_EXPR:
17702     case ALIGNOF_EXPR:
17703       /* A `sizeof' expression is value-dependent if the operand is
17704          type-dependent or is a pack expansion.  */
17705       expression = TREE_OPERAND (expression, 0);
17706       if (PACK_EXPANSION_P (expression))
17707         return true;
17708       else if (TYPE_P (expression))
17709         return dependent_type_p (expression);
17710       return type_dependent_expression_p (expression);
17711
17712     case AT_ENCODE_EXPR:
17713       /* An 'encode' expression is value-dependent if the operand is
17714          type-dependent.  */
17715       expression = TREE_OPERAND (expression, 0);
17716       return dependent_type_p (expression);
17717
17718     case NOEXCEPT_EXPR:
17719       expression = TREE_OPERAND (expression, 0);
17720       /* FIXME why check value-dependency?  */
17721       return (type_dependent_expression_p (expression)
17722               || value_dependent_expression_p (expression));
17723
17724     case SCOPE_REF:
17725       {
17726         tree name = TREE_OPERAND (expression, 1);
17727         return value_dependent_expression_p (name);
17728       }
17729
17730     case COMPONENT_REF:
17731       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
17732               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
17733
17734     case CALL_EXPR:
17735       /* A CALL_EXPR may appear in a constant expression if it is a
17736          call to a builtin function, e.g., __builtin_constant_p.  All
17737          such calls are value-dependent.  */
17738       return true;
17739
17740     case NONTYPE_ARGUMENT_PACK:
17741       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
17742          is value-dependent.  */
17743       {
17744         tree values = ARGUMENT_PACK_ARGS (expression);
17745         int i, len = TREE_VEC_LENGTH (values);
17746         
17747         for (i = 0; i < len; ++i)
17748           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
17749             return true;
17750         
17751         return false;
17752       }
17753
17754     case TRAIT_EXPR:
17755       {
17756         tree type2 = TRAIT_EXPR_TYPE2 (expression);
17757         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
17758                 || (type2 ? dependent_type_p (type2) : false));
17759       }
17760
17761     case MODOP_EXPR:
17762       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
17763               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
17764
17765     case ADDR_EXPR:
17766       {
17767         tree op = TREE_OPERAND (expression, 0);
17768         return (value_dependent_expression_p (op)
17769                 || has_value_dependent_address (op));
17770       }
17771
17772     default:
17773       /* A constant expression is value-dependent if any subexpression is
17774          value-dependent.  */
17775       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
17776         {
17777         case tcc_reference:
17778         case tcc_unary:
17779           return (value_dependent_expression_p
17780                   (TREE_OPERAND (expression, 0)));
17781
17782         case tcc_comparison:
17783         case tcc_binary:
17784           return ((value_dependent_expression_p
17785                    (TREE_OPERAND (expression, 0)))
17786                   || (value_dependent_expression_p
17787                       (TREE_OPERAND (expression, 1))));
17788
17789         case tcc_expression:
17790         case tcc_vl_exp:
17791           {
17792             int i;
17793             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
17794               /* In some cases, some of the operands may be missing.
17795                  (For example, in the case of PREDECREMENT_EXPR, the
17796                  amount to increment by may be missing.)  That doesn't
17797                  make the expression dependent.  */
17798               if (TREE_OPERAND (expression, i)
17799                   && (value_dependent_expression_p
17800                       (TREE_OPERAND (expression, i))))
17801                 return true;
17802             return false;
17803           }
17804
17805         default:
17806           break;
17807         }
17808     }
17809
17810   /* The expression is not value-dependent.  */
17811   return false;
17812 }
17813
17814 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
17815    [temp.dep.expr].  */
17816
17817 bool
17818 type_dependent_expression_p (tree expression)
17819 {
17820   if (!processing_template_decl)
17821     return false;
17822
17823   if (expression == error_mark_node)
17824     return false;
17825
17826   /* An unresolved name is always dependent.  */
17827   if (TREE_CODE (expression) == IDENTIFIER_NODE
17828       || TREE_CODE (expression) == USING_DECL)
17829     return true;
17830
17831   /* Some expression forms are never type-dependent.  */
17832   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
17833       || TREE_CODE (expression) == SIZEOF_EXPR
17834       || TREE_CODE (expression) == ALIGNOF_EXPR
17835       || TREE_CODE (expression) == AT_ENCODE_EXPR
17836       || TREE_CODE (expression) == NOEXCEPT_EXPR
17837       || TREE_CODE (expression) == TRAIT_EXPR
17838       || TREE_CODE (expression) == TYPEID_EXPR
17839       || TREE_CODE (expression) == DELETE_EXPR
17840       || TREE_CODE (expression) == VEC_DELETE_EXPR
17841       || TREE_CODE (expression) == THROW_EXPR)
17842     return false;
17843
17844   /* The types of these expressions depends only on the type to which
17845      the cast occurs.  */
17846   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
17847       || TREE_CODE (expression) == STATIC_CAST_EXPR
17848       || TREE_CODE (expression) == CONST_CAST_EXPR
17849       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
17850       || TREE_CODE (expression) == CAST_EXPR)
17851     return dependent_type_p (TREE_TYPE (expression));
17852
17853   /* The types of these expressions depends only on the type created
17854      by the expression.  */
17855   if (TREE_CODE (expression) == NEW_EXPR
17856       || TREE_CODE (expression) == VEC_NEW_EXPR)
17857     {
17858       /* For NEW_EXPR tree nodes created inside a template, either
17859          the object type itself or a TREE_LIST may appear as the
17860          operand 1.  */
17861       tree type = TREE_OPERAND (expression, 1);
17862       if (TREE_CODE (type) == TREE_LIST)
17863         /* This is an array type.  We need to check array dimensions
17864            as well.  */
17865         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
17866                || value_dependent_expression_p
17867                     (TREE_OPERAND (TREE_VALUE (type), 1));
17868       else
17869         return dependent_type_p (type);
17870     }
17871
17872   if (TREE_CODE (expression) == SCOPE_REF)
17873     {
17874       tree scope = TREE_OPERAND (expression, 0);
17875       tree name = TREE_OPERAND (expression, 1);
17876
17877       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
17878          contains an identifier associated by name lookup with one or more
17879          declarations declared with a dependent type, or...a
17880          nested-name-specifier or qualified-id that names a member of an
17881          unknown specialization.  */
17882       return (type_dependent_expression_p (name)
17883               || dependent_scope_p (scope));
17884     }
17885
17886   if (TREE_CODE (expression) == FUNCTION_DECL
17887       && DECL_LANG_SPECIFIC (expression)
17888       && DECL_TEMPLATE_INFO (expression)
17889       && (any_dependent_template_arguments_p
17890           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
17891     return true;
17892
17893   if (TREE_CODE (expression) == TEMPLATE_DECL
17894       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
17895     return false;
17896
17897   if (TREE_CODE (expression) == STMT_EXPR)
17898     expression = stmt_expr_value_expr (expression);
17899
17900   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
17901     {
17902       tree elt;
17903       unsigned i;
17904
17905       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
17906         {
17907           if (type_dependent_expression_p (elt))
17908             return true;
17909         }
17910       return false;
17911     }
17912
17913   /* A static data member of the current instantiation with incomplete
17914      array type is type-dependent, as the definition and specializations
17915      can have different bounds.  */
17916   if (TREE_CODE (expression) == VAR_DECL
17917       && DECL_CLASS_SCOPE_P (expression)
17918       && dependent_type_p (DECL_CONTEXT (expression))
17919       && VAR_HAD_UNKNOWN_BOUND (expression))
17920     return true;
17921
17922   if (TREE_TYPE (expression) == unknown_type_node)
17923     {
17924       if (TREE_CODE (expression) == ADDR_EXPR)
17925         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
17926       if (TREE_CODE (expression) == COMPONENT_REF
17927           || TREE_CODE (expression) == OFFSET_REF)
17928         {
17929           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
17930             return true;
17931           expression = TREE_OPERAND (expression, 1);
17932           if (TREE_CODE (expression) == IDENTIFIER_NODE)
17933             return false;
17934         }
17935       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
17936       if (TREE_CODE (expression) == SCOPE_REF)
17937         return false;
17938
17939       if (TREE_CODE (expression) == BASELINK)
17940         expression = BASELINK_FUNCTIONS (expression);
17941
17942       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
17943         {
17944           if (any_dependent_template_arguments_p
17945               (TREE_OPERAND (expression, 1)))
17946             return true;
17947           expression = TREE_OPERAND (expression, 0);
17948         }
17949       gcc_assert (TREE_CODE (expression) == OVERLOAD
17950                   || TREE_CODE (expression) == FUNCTION_DECL);
17951
17952       while (expression)
17953         {
17954           if (type_dependent_expression_p (OVL_CURRENT (expression)))
17955             return true;
17956           expression = OVL_NEXT (expression);
17957         }
17958       return false;
17959     }
17960
17961   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
17962
17963   return (dependent_type_p (TREE_TYPE (expression)));
17964 }
17965
17966 /* Like type_dependent_expression_p, but it also works while not processing
17967    a template definition, i.e. during substitution or mangling.  */
17968
17969 bool
17970 type_dependent_expression_p_push (tree expr)
17971 {
17972   bool b;
17973   ++processing_template_decl;
17974   b = type_dependent_expression_p (expr);
17975   --processing_template_decl;
17976   return b;
17977 }
17978
17979 /* Returns TRUE if ARGS contains a type-dependent expression.  */
17980
17981 bool
17982 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
17983 {
17984   unsigned int i;
17985   tree arg;
17986
17987   FOR_EACH_VEC_ELT (tree, args, i, arg)
17988     {
17989       if (type_dependent_expression_p (arg))
17990         return true;
17991     }
17992   return false;
17993 }
17994
17995 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
17996    expressions) contains any value-dependent expressions.  */
17997
17998 bool
17999 any_value_dependent_elements_p (const_tree list)
18000 {
18001   for (; list; list = TREE_CHAIN (list))
18002     if (value_dependent_expression_p (TREE_VALUE (list)))
18003       return true;
18004
18005   return false;
18006 }
18007
18008 /* Returns TRUE if the ARG (a template argument) is dependent.  */
18009
18010 bool
18011 dependent_template_arg_p (tree arg)
18012 {
18013   if (!processing_template_decl)
18014     return false;
18015
18016   if (TREE_CODE (arg) == TEMPLATE_DECL
18017       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
18018     return dependent_template_p (arg);
18019   else if (ARGUMENT_PACK_P (arg))
18020     {
18021       tree args = ARGUMENT_PACK_ARGS (arg);
18022       int i, len = TREE_VEC_LENGTH (args);
18023       for (i = 0; i < len; ++i)
18024         {
18025           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
18026             return true;
18027         }
18028
18029       return false;
18030     }
18031   else if (TYPE_P (arg))
18032     return dependent_type_p (arg);
18033   else
18034     return (type_dependent_expression_p (arg)
18035             || value_dependent_expression_p (arg));
18036 }
18037
18038 /* Returns true if ARGS (a collection of template arguments) contains
18039    any types that require structural equality testing.  */
18040
18041 bool
18042 any_template_arguments_need_structural_equality_p (tree args)
18043 {
18044   int i;
18045   int j;
18046
18047   if (!args)
18048     return false;
18049   if (args == error_mark_node)
18050     return true;
18051
18052   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
18053     {
18054       tree level = TMPL_ARGS_LEVEL (args, i + 1);
18055       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
18056         {
18057           tree arg = TREE_VEC_ELT (level, j);
18058           tree packed_args = NULL_TREE;
18059           int k, len = 1;
18060
18061           if (ARGUMENT_PACK_P (arg))
18062             {
18063               /* Look inside the argument pack.  */
18064               packed_args = ARGUMENT_PACK_ARGS (arg);
18065               len = TREE_VEC_LENGTH (packed_args);
18066             }
18067
18068           for (k = 0; k < len; ++k)
18069             {
18070               if (packed_args)
18071                 arg = TREE_VEC_ELT (packed_args, k);
18072
18073               if (error_operand_p (arg))
18074                 return true;
18075               else if (TREE_CODE (arg) == TEMPLATE_DECL
18076                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
18077                 continue;
18078               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
18079                 return true;
18080               else if (!TYPE_P (arg) && TREE_TYPE (arg)
18081                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
18082                 return true;
18083             }
18084         }
18085     }
18086
18087   return false;
18088 }
18089
18090 /* Returns true if ARGS (a collection of template arguments) contains
18091    any dependent arguments.  */
18092
18093 bool
18094 any_dependent_template_arguments_p (const_tree args)
18095 {
18096   int i;
18097   int j;
18098
18099   if (!args)
18100     return false;
18101   if (args == error_mark_node)
18102     return true;
18103
18104   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
18105     {
18106       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
18107       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
18108         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
18109           return true;
18110     }
18111
18112   return false;
18113 }
18114
18115 /* Returns TRUE if the template TMPL is dependent.  */
18116
18117 bool
18118 dependent_template_p (tree tmpl)
18119 {
18120   if (TREE_CODE (tmpl) == OVERLOAD)
18121     {
18122       while (tmpl)
18123         {
18124           if (dependent_template_p (OVL_FUNCTION (tmpl)))
18125             return true;
18126           tmpl = OVL_CHAIN (tmpl);
18127         }
18128       return false;
18129     }
18130
18131   /* Template template parameters are dependent.  */
18132   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
18133       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
18134     return true;
18135   /* So are names that have not been looked up.  */
18136   if (TREE_CODE (tmpl) == SCOPE_REF
18137       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
18138     return true;
18139   /* So are member templates of dependent classes.  */
18140   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
18141     return dependent_type_p (DECL_CONTEXT (tmpl));
18142   return false;
18143 }
18144
18145 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
18146
18147 bool
18148 dependent_template_id_p (tree tmpl, tree args)
18149 {
18150   return (dependent_template_p (tmpl)
18151           || any_dependent_template_arguments_p (args));
18152 }
18153
18154 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
18155    is dependent.  */
18156
18157 bool
18158 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
18159 {
18160   int i;
18161
18162   if (!processing_template_decl)
18163     return false;
18164
18165   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
18166     {
18167       tree decl = TREE_VEC_ELT (declv, i);
18168       tree init = TREE_VEC_ELT (initv, i);
18169       tree cond = TREE_VEC_ELT (condv, i);
18170       tree incr = TREE_VEC_ELT (incrv, i);
18171
18172       if (type_dependent_expression_p (decl))
18173         return true;
18174
18175       if (init && type_dependent_expression_p (init))
18176         return true;
18177
18178       if (type_dependent_expression_p (cond))
18179         return true;
18180
18181       if (COMPARISON_CLASS_P (cond)
18182           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
18183               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
18184         return true;
18185
18186       if (TREE_CODE (incr) == MODOP_EXPR)
18187         {
18188           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
18189               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
18190             return true;
18191         }
18192       else if (type_dependent_expression_p (incr))
18193         return true;
18194       else if (TREE_CODE (incr) == MODIFY_EXPR)
18195         {
18196           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
18197             return true;
18198           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
18199             {
18200               tree t = TREE_OPERAND (incr, 1);
18201               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
18202                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
18203                 return true;
18204             }
18205         }
18206     }
18207
18208   return false;
18209 }
18210
18211 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
18212    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
18213    no such TYPE can be found.  Note that this function peers inside
18214    uninstantiated templates and therefore should be used only in
18215    extremely limited situations.  ONLY_CURRENT_P restricts this
18216    peering to the currently open classes hierarchy (which is required
18217    when comparing types).  */
18218
18219 tree
18220 resolve_typename_type (tree type, bool only_current_p)
18221 {
18222   tree scope;
18223   tree name;
18224   tree decl;
18225   int quals;
18226   tree pushed_scope;
18227   tree result;
18228
18229   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
18230
18231   scope = TYPE_CONTEXT (type);
18232   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
18233      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
18234      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
18235      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
18236      identifier  of the TYPENAME_TYPE anymore.
18237      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
18238      TYPENAME_TYPE instead, we avoid messing up with a possible
18239      typedef variant case.  */
18240   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
18241
18242   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
18243      it first before we can figure out what NAME refers to.  */
18244   if (TREE_CODE (scope) == TYPENAME_TYPE)
18245     scope = resolve_typename_type (scope, only_current_p);
18246   /* If we don't know what SCOPE refers to, then we cannot resolve the
18247      TYPENAME_TYPE.  */
18248   if (TREE_CODE (scope) == TYPENAME_TYPE)
18249     return type;
18250   /* If the SCOPE is a template type parameter, we have no way of
18251      resolving the name.  */
18252   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
18253     return type;
18254   /* If the SCOPE is not the current instantiation, there's no reason
18255      to look inside it.  */
18256   if (only_current_p && !currently_open_class (scope))
18257     return type;
18258   /* If this is a typedef, we don't want to look inside (c++/11987).  */
18259   if (typedef_variant_p (type))
18260     return type;
18261   /* If SCOPE isn't the template itself, it will not have a valid
18262      TYPE_FIELDS list.  */
18263   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
18264     /* scope is either the template itself or a compatible instantiation
18265        like X<T>, so look up the name in the original template.  */
18266     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
18267   else
18268     /* scope is a partial instantiation, so we can't do the lookup or we
18269        will lose the template arguments.  */
18270     return type;
18271   /* Enter the SCOPE so that name lookup will be resolved as if we
18272      were in the class definition.  In particular, SCOPE will no
18273      longer be considered a dependent type.  */
18274   pushed_scope = push_scope (scope);
18275   /* Look up the declaration.  */
18276   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
18277
18278   result = NULL_TREE;
18279   
18280   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
18281      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
18282   if (!decl)
18283     /*nop*/;
18284   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
18285            && TREE_CODE (decl) == TYPE_DECL)
18286     {
18287       result = TREE_TYPE (decl);
18288       if (result == error_mark_node)
18289         result = NULL_TREE;
18290     }
18291   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
18292            && DECL_CLASS_TEMPLATE_P (decl))
18293     {
18294       tree tmpl;
18295       tree args;
18296       /* Obtain the template and the arguments.  */
18297       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
18298       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
18299       /* Instantiate the template.  */
18300       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
18301                                       /*entering_scope=*/0,
18302                                       tf_error | tf_user);
18303       if (result == error_mark_node)
18304         result = NULL_TREE;
18305     }
18306   
18307   /* Leave the SCOPE.  */
18308   if (pushed_scope)
18309     pop_scope (pushed_scope);
18310
18311   /* If we failed to resolve it, return the original typename.  */
18312   if (!result)
18313     return type;
18314   
18315   /* If lookup found a typename type, resolve that too.  */
18316   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
18317     {
18318       /* Ill-formed programs can cause infinite recursion here, so we
18319          must catch that.  */
18320       TYPENAME_IS_RESOLVING_P (type) = 1;
18321       result = resolve_typename_type (result, only_current_p);
18322       TYPENAME_IS_RESOLVING_P (type) = 0;
18323     }
18324   
18325   /* Qualify the resulting type.  */
18326   quals = cp_type_quals (type);
18327   if (quals)
18328     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
18329
18330   return result;
18331 }
18332
18333 /* EXPR is an expression which is not type-dependent.  Return a proxy
18334    for EXPR that can be used to compute the types of larger
18335    expressions containing EXPR.  */
18336
18337 tree
18338 build_non_dependent_expr (tree expr)
18339 {
18340   tree inner_expr;
18341
18342   /* Preserve null pointer constants so that the type of things like
18343      "p == 0" where "p" is a pointer can be determined.  */
18344   if (null_ptr_cst_p (expr))
18345     return expr;
18346   /* Preserve OVERLOADs; the functions must be available to resolve
18347      types.  */
18348   inner_expr = expr;
18349   if (TREE_CODE (inner_expr) == STMT_EXPR)
18350     inner_expr = stmt_expr_value_expr (inner_expr);
18351   if (TREE_CODE (inner_expr) == ADDR_EXPR)
18352     inner_expr = TREE_OPERAND (inner_expr, 0);
18353   if (TREE_CODE (inner_expr) == COMPONENT_REF)
18354     inner_expr = TREE_OPERAND (inner_expr, 1);
18355   if (is_overloaded_fn (inner_expr)
18356       || TREE_CODE (inner_expr) == OFFSET_REF)
18357     return expr;
18358   /* There is no need to return a proxy for a variable.  */
18359   if (TREE_CODE (expr) == VAR_DECL)
18360     return expr;
18361   /* Preserve string constants; conversions from string constants to
18362      "char *" are allowed, even though normally a "const char *"
18363      cannot be used to initialize a "char *".  */
18364   if (TREE_CODE (expr) == STRING_CST)
18365     return expr;
18366   /* Preserve arithmetic constants, as an optimization -- there is no
18367      reason to create a new node.  */
18368   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
18369     return expr;
18370   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
18371      There is at least one place where we want to know that a
18372      particular expression is a throw-expression: when checking a ?:
18373      expression, there are special rules if the second or third
18374      argument is a throw-expression.  */
18375   if (TREE_CODE (expr) == THROW_EXPR)
18376     return expr;
18377
18378   if (TREE_CODE (expr) == COND_EXPR)
18379     return build3 (COND_EXPR,
18380                    TREE_TYPE (expr),
18381                    TREE_OPERAND (expr, 0),
18382                    (TREE_OPERAND (expr, 1)
18383                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
18384                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
18385                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
18386   if (TREE_CODE (expr) == COMPOUND_EXPR
18387       && !COMPOUND_EXPR_OVERLOADED (expr))
18388     return build2 (COMPOUND_EXPR,
18389                    TREE_TYPE (expr),
18390                    TREE_OPERAND (expr, 0),
18391                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
18392
18393   /* If the type is unknown, it can't really be non-dependent */
18394   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
18395
18396   /* Otherwise, build a NON_DEPENDENT_EXPR.
18397
18398      REFERENCE_TYPEs are not stripped for expressions in templates
18399      because doing so would play havoc with mangling.  Consider, for
18400      example:
18401
18402        template <typename T> void f<T& g>() { g(); }
18403
18404      In the body of "f", the expression for "g" will have
18405      REFERENCE_TYPE, even though the standard says that it should
18406      not.  The reason is that we must preserve the syntactic form of
18407      the expression so that mangling (say) "f<g>" inside the body of
18408      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
18409      stripped here.  */
18410   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
18411 }
18412
18413 /* ARGS is a vector of expressions as arguments to a function call.
18414    Replace the arguments with equivalent non-dependent expressions.
18415    This modifies ARGS in place.  */
18416
18417 void
18418 make_args_non_dependent (VEC(tree,gc) *args)
18419 {
18420   unsigned int ix;
18421   tree arg;
18422
18423   FOR_EACH_VEC_ELT (tree, args, ix, arg)
18424     {
18425       tree newarg = build_non_dependent_expr (arg);
18426       if (newarg != arg)
18427         VEC_replace (tree, args, ix, newarg);
18428     }
18429 }
18430
18431 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
18432    with a level one deeper than the actual template parms.  */
18433
18434 tree
18435 make_auto (void)
18436 {
18437   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
18438   TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
18439                                TYPE_DECL, get_identifier ("auto"), au);
18440   TYPE_STUB_DECL (au) = TYPE_NAME (au);
18441   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
18442     (0, processing_template_decl + 1, processing_template_decl + 1,
18443      TYPE_NAME (au), NULL_TREE);
18444   TYPE_CANONICAL (au) = canonical_type_parameter (au);
18445   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
18446   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
18447
18448   return au;
18449 }
18450
18451 /* Given type ARG, return std::initializer_list<ARG>.  */
18452
18453 static tree
18454 listify (tree arg)
18455 {
18456   tree std_init_list = namespace_binding
18457     (get_identifier ("initializer_list"), std_node);
18458   tree argvec;
18459   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
18460     {    
18461       error ("deducing from brace-enclosed initializer list requires "
18462              "#include <initializer_list>");
18463       return error_mark_node;
18464     }
18465   argvec = make_tree_vec (1);
18466   TREE_VEC_ELT (argvec, 0) = arg;
18467   return lookup_template_class (std_init_list, argvec, NULL_TREE,
18468                                 NULL_TREE, 0, tf_warning_or_error);
18469 }
18470
18471 /* Replace auto in TYPE with std::initializer_list<auto>.  */
18472
18473 static tree
18474 listify_autos (tree type, tree auto_node)
18475 {
18476   tree init_auto = listify (auto_node);
18477   tree argvec = make_tree_vec (1);
18478   TREE_VEC_ELT (argvec, 0) = init_auto;
18479   if (processing_template_decl)
18480     argvec = add_to_template_args (current_template_args (), argvec);
18481   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
18482 }
18483
18484 /* walk_tree helper for do_auto_deduction.  */
18485
18486 static tree
18487 contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
18488                  void *type)
18489 {
18490   /* Is this a variable with the type we're looking for?  */
18491   if (DECL_P (*tp)
18492       && TREE_TYPE (*tp) == type)
18493     return *tp;
18494   else
18495     return NULL_TREE;
18496 }
18497
18498 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
18499    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
18500
18501 tree
18502 do_auto_deduction (tree type, tree init, tree auto_node)
18503 {
18504   tree parms, tparms, targs;
18505   tree args[1];
18506   tree decl;
18507   int val;
18508
18509   /* The name of the object being declared shall not appear in the
18510      initializer expression.  */
18511   decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
18512   if (decl)
18513     {
18514       error ("variable %q#D with %<auto%> type used in its own "
18515              "initializer", decl);
18516       return error_mark_node;
18517     }
18518
18519   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
18520      with either a new invented type template parameter U or, if the
18521      initializer is a braced-init-list (8.5.4), with
18522      std::initializer_list<U>.  */
18523   if (BRACE_ENCLOSED_INITIALIZER_P (init))
18524     type = listify_autos (type, auto_node);
18525
18526   parms = build_tree_list (NULL_TREE, type);
18527   args[0] = init;
18528   tparms = make_tree_vec (1);
18529   targs = make_tree_vec (1);
18530   TREE_VEC_ELT (tparms, 0)
18531     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
18532   val = type_unification_real (tparms, targs, parms, args, 1, 0,
18533                                DEDUCE_CALL, LOOKUP_NORMAL);
18534   if (val > 0)
18535     {
18536       error ("unable to deduce %qT from %qE", type, init);
18537       return error_mark_node;
18538     }
18539
18540   /* If the list of declarators contains more than one declarator, the type
18541      of each declared variable is determined as described above. If the
18542      type deduced for the template parameter U is not the same in each
18543      deduction, the program is ill-formed.  */
18544   if (TREE_TYPE (auto_node)
18545       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
18546     {
18547       error ("inconsistent deduction for %qT: %qT and then %qT",
18548              auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
18549       return error_mark_node;
18550     }
18551   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
18552
18553   if (processing_template_decl)
18554     targs = add_to_template_args (current_template_args (), targs);
18555   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
18556 }
18557
18558 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
18559    result.  */
18560
18561 tree
18562 splice_late_return_type (tree type, tree late_return_type)
18563 {
18564   tree argvec;
18565
18566   if (late_return_type == NULL_TREE)
18567     return type;
18568   argvec = make_tree_vec (1);
18569   TREE_VEC_ELT (argvec, 0) = late_return_type;
18570   if (processing_template_decl)
18571     argvec = add_to_template_args (current_template_args (), argvec);
18572   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
18573 }
18574
18575 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
18576
18577 bool
18578 is_auto (const_tree type)
18579 {
18580   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
18581       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
18582     return true;
18583   else
18584     return false;
18585 }
18586
18587 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
18588    appear as a type-specifier for the declaration in question, we don't
18589    have to look through the whole type.  */
18590
18591 tree
18592 type_uses_auto (tree type)
18593 {
18594   enum tree_code code;
18595   if (is_auto (type))
18596     return type;
18597
18598   code = TREE_CODE (type);
18599
18600   if (code == POINTER_TYPE || code == REFERENCE_TYPE
18601       || code == OFFSET_TYPE || code == FUNCTION_TYPE
18602       || code == METHOD_TYPE || code == ARRAY_TYPE)
18603     return type_uses_auto (TREE_TYPE (type));
18604
18605   if (TYPE_PTRMEMFUNC_P (type))
18606     return type_uses_auto (TREE_TYPE (TREE_TYPE
18607                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
18608
18609   return NULL_TREE;
18610 }
18611
18612 /* For a given template T, return the vector of typedefs referenced
18613    in T for which access check is needed at T instantiation time.
18614    T is either  a FUNCTION_DECL or a RECORD_TYPE.
18615    Those typedefs were added to T by the function
18616    append_type_to_template_for_access_check.  */
18617
18618 VEC(qualified_typedef_usage_t,gc)*
18619 get_types_needing_access_check (tree t)
18620 {
18621   tree ti;
18622   VEC(qualified_typedef_usage_t,gc) *result = NULL;
18623
18624   if (!t || t == error_mark_node)
18625     return NULL;
18626
18627   if (!(ti = get_template_info (t)))
18628     return NULL;
18629
18630   if (CLASS_TYPE_P (t)
18631       || TREE_CODE (t) == FUNCTION_DECL)
18632     {
18633       if (!TI_TEMPLATE (ti))
18634         return NULL;
18635
18636       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
18637     }
18638
18639   return result;
18640 }
18641
18642 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
18643    tied to T. That list of typedefs will be access checked at
18644    T instantiation time.
18645    T is either a FUNCTION_DECL or a RECORD_TYPE.
18646    TYPE_DECL is a TYPE_DECL node representing a typedef.
18647    SCOPE is the scope through which TYPE_DECL is accessed.
18648    LOCATION is the location of the usage point of TYPE_DECL.
18649
18650    This function is a subroutine of
18651    append_type_to_template_for_access_check.  */
18652
18653 static void
18654 append_type_to_template_for_access_check_1 (tree t,
18655                                             tree type_decl,
18656                                             tree scope,
18657                                             location_t location)
18658 {
18659   qualified_typedef_usage_t typedef_usage;
18660   tree ti;
18661
18662   if (!t || t == error_mark_node)
18663     return;
18664
18665   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
18666                || CLASS_TYPE_P (t))
18667               && type_decl
18668               && TREE_CODE (type_decl) == TYPE_DECL
18669               && scope);
18670
18671   if (!(ti = get_template_info (t)))
18672     return;
18673
18674   gcc_assert (TI_TEMPLATE (ti));
18675
18676   typedef_usage.typedef_decl = type_decl;
18677   typedef_usage.context = scope;
18678   typedef_usage.locus = location;
18679
18680   VEC_safe_push (qualified_typedef_usage_t, gc,
18681                  TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
18682                  &typedef_usage);
18683 }
18684
18685 /* Append TYPE_DECL to the template TEMPL.
18686    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
18687    At TEMPL instanciation time, TYPE_DECL will be checked to see
18688    if it can be accessed through SCOPE.
18689    LOCATION is the location of the usage point of TYPE_DECL.
18690
18691    e.g. consider the following code snippet:
18692
18693      class C
18694      {
18695        typedef int myint;
18696      };
18697
18698      template<class U> struct S
18699      {
18700        C::myint mi; // <-- usage point of the typedef C::myint
18701      };
18702
18703      S<char> s;
18704
18705    At S<char> instantiation time, we need to check the access of C::myint
18706    In other words, we need to check the access of the myint typedef through
18707    the C scope. For that purpose, this function will add the myint typedef
18708    and the scope C through which its being accessed to a list of typedefs
18709    tied to the template S. That list will be walked at template instantiation
18710    time and access check performed on each typedefs it contains.
18711    Note that this particular code snippet should yield an error because
18712    myint is private to C.  */
18713
18714 void
18715 append_type_to_template_for_access_check (tree templ,
18716                                           tree type_decl,
18717                                           tree scope,
18718                                           location_t location)
18719 {
18720   qualified_typedef_usage_t *iter;
18721   int i;
18722
18723   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
18724
18725   /* Make sure we don't append the type to the template twice.  */
18726   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
18727                     get_types_needing_access_check (templ),
18728                     i, iter)
18729     if (iter->typedef_decl == type_decl && scope == iter->context)
18730       return;
18731
18732   append_type_to_template_for_access_check_1 (templ, type_decl,
18733                                               scope, location);
18734 }
18735
18736 /* Set up the hash tables for template instantiations.  */
18737
18738 void
18739 init_template_processing (void)
18740 {
18741   decl_specializations = htab_create_ggc (37,
18742                                           hash_specialization,
18743                                           eq_specializations,
18744                                           ggc_free);
18745   type_specializations = htab_create_ggc (37,
18746                                           hash_specialization,
18747                                           eq_specializations,
18748                                           ggc_free);
18749 }
18750
18751 /* Print stats about the template hash tables for -fstats.  */
18752
18753 void
18754 print_template_statistics (void)
18755 {
18756   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
18757            "%f collisions\n", (long) htab_size (decl_specializations),
18758            (long) htab_elements (decl_specializations),
18759            htab_collisions (decl_specializations));
18760   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
18761            "%f collisions\n", (long) htab_size (type_specializations),
18762            (long) htab_elements (type_specializations),
18763            htab_collisions (type_specializations));
18764 }
18765
18766 #include "gt-cp-pt.h"