OSDN Git Service

2008-08-18 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
[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  Free Software Foundation, Inc.
4    Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
5    Rewritten by Jason Merrill (jason@cygnus.com).
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
13
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23 /* Known bugs or deficiencies include:
24
25      all methods must be provided in header files; can't use a source
26      file that contains only the method templates and "just win".  */
27
28 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "tm.h"
32 #include "obstack.h"
33 #include "tree.h"
34 #include "pointer-set.h"
35 #include "flags.h"
36 #include "c-common.h"
37 #include "cp-tree.h"
38 #include "cp-objcp-common.h"
39 #include "tree-inline.h"
40 #include "decl.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "rtl.h"
45 #include "timevar.h"
46 #include "tree-iterator.h"
47 #include "vecprim.h"
48
49 /* The type of functions taking a tree, and some additional data, and
50    returning an int.  */
51 typedef int (*tree_fn_t) (tree, void*);
52
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54    instantiations have been deferred, either because their definitions
55    were not yet available, or because we were putting off doing the work.  */
56 struct pending_template GTY (()) {
57   struct pending_template *next;
58   struct tinst_level *tinst;
59 };
60
61 static GTY(()) struct pending_template *pending_templates;
62 static GTY(()) struct pending_template *last_pending_template;
63
64 int processing_template_parmlist;
65 static int template_header_count;
66
67 static GTY(()) tree saved_trees;
68 static VEC(int,heap) *inline_parm_levels;
69
70 static GTY(()) struct tinst_level *current_tinst_level;
71
72 static GTY(()) tree saved_access_scope;
73
74 /* Live only within one (recursive) call to tsubst_expr.  We use
75    this to pass the statement expression node from the STMT_EXPR
76    to the EXPR_STMT that is its result.  */
77 static tree cur_stmt_expr;
78
79 /* A map from local variable declarations in the body of the template
80    presently being instantiated to the corresponding instantiated
81    local variables.  */
82 static htab_t local_specializations;
83
84 /* Contains canonical template parameter types. The vector is indexed by
85    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
86    TREE_LIST, whose TREE_VALUEs contain the canonical template
87    parameters of various types and levels.  */
88 static GTY(()) VEC(tree,gc) *canonical_template_parms;
89
90 #define UNIFY_ALLOW_NONE 0
91 #define UNIFY_ALLOW_MORE_CV_QUAL 1
92 #define UNIFY_ALLOW_LESS_CV_QUAL 2
93 #define UNIFY_ALLOW_DERIVED 4
94 #define UNIFY_ALLOW_INTEGER 8
95 #define UNIFY_ALLOW_OUTER_LEVEL 16
96 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
97 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
98
99 static void push_access_scope (tree);
100 static void pop_access_scope (tree);
101 static bool resolve_overloaded_unification (tree, tree, tree, tree,
102                                             unification_kind_t, int);
103 static int try_one_overload (tree, tree, tree, tree, tree,
104                              unification_kind_t, int, bool);
105 static int unify (tree, tree, tree, tree, int);
106 static void add_pending_template (tree);
107 static int push_tinst_level (tree);
108 static void pop_tinst_level (void);
109 static tree reopen_tinst_level (struct tinst_level *);
110 static tree tsubst_initializer_list (tree, tree);
111 static tree get_class_bindings (tree, tree, tree);
112 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
113                                    bool, bool);
114 static void tsubst_enum (tree, tree, tree);
115 static tree add_to_template_args (tree, tree);
116 static tree add_outermost_template_args (tree, tree);
117 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
118 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
119                                              tree);
120 static int  type_unification_real (tree, tree, tree, tree,
121                                    int, unification_kind_t, int);
122 static void note_template_header (int);
123 static tree convert_nontype_argument_function (tree, tree);
124 static tree convert_nontype_argument (tree, tree);
125 static tree convert_template_argument (tree, tree, tree,
126                                        tsubst_flags_t, int, tree);
127 static int for_each_template_parm (tree, tree_fn_t, void*,
128                                    struct pointer_set_t*, bool);
129 static tree expand_template_argument_pack (tree);
130 static tree build_template_parm_index (int, int, int, tree, tree);
131 static bool inline_needs_template_parms (tree);
132 static void push_inline_template_parms_recursive (tree, int);
133 static tree retrieve_local_specialization (tree);
134 static void register_local_specialization (tree, tree);
135 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
136 static int mark_template_parm (tree, void *);
137 static int template_parm_this_level_p (tree, void *);
138 static tree tsubst_friend_function (tree, tree);
139 static tree tsubst_friend_class (tree, tree);
140 static int can_complete_type_without_circularity (tree);
141 static tree get_bindings (tree, tree, tree, bool);
142 static int template_decl_level (tree);
143 static int check_cv_quals_for_unify (int, tree, tree);
144 static void template_parm_level_and_index (tree, int*, int*);
145 static int unify_pack_expansion (tree, tree, tree, tree, int, bool, bool);
146 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
147 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
148 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
149 static void regenerate_decl_from_template (tree, tree);
150 static tree most_specialized_class (tree, tree);
151 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
152 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
153 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
154 static bool check_specialization_scope (void);
155 static tree process_partial_specialization (tree);
156 static void set_current_access_from_decl (tree);
157 static tree get_template_base (tree, tree, tree, tree);
158 static tree try_class_unification (tree, tree, tree, tree);
159 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
160                                            tree, tree);
161 static bool template_template_parm_bindings_ok_p (tree, tree);
162 static int template_args_equal (tree, tree);
163 static void tsubst_default_arguments (tree);
164 static tree for_each_template_parm_r (tree *, int *, void *);
165 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
166 static void copy_default_args_to_explicit_spec (tree);
167 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
168 static int eq_local_specializations (const void *, const void *);
169 static bool dependent_template_arg_p (tree);
170 static bool any_template_arguments_need_structural_equality_p (tree);
171 static bool dependent_type_p_r (tree);
172 static tree tsubst (tree, tree, tsubst_flags_t, tree);
173 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
174 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
175 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
176
177 /* Make the current scope suitable for access checking when we are
178    processing T.  T can be FUNCTION_DECL for instantiated function
179    template, or VAR_DECL for static member variable (need by
180    instantiate_decl).  */
181
182 static void
183 push_access_scope (tree t)
184 {
185   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
186               || TREE_CODE (t) == VAR_DECL);
187
188   if (DECL_FRIEND_CONTEXT (t))
189     push_nested_class (DECL_FRIEND_CONTEXT (t));
190   else if (DECL_CLASS_SCOPE_P (t))
191     push_nested_class (DECL_CONTEXT (t));
192   else
193     push_to_top_level ();
194
195   if (TREE_CODE (t) == FUNCTION_DECL)
196     {
197       saved_access_scope = tree_cons
198         (NULL_TREE, current_function_decl, saved_access_scope);
199       current_function_decl = t;
200     }
201 }
202
203 /* Restore the scope set up by push_access_scope.  T is the node we
204    are processing.  */
205
206 static void
207 pop_access_scope (tree t)
208 {
209   if (TREE_CODE (t) == FUNCTION_DECL)
210     {
211       current_function_decl = TREE_VALUE (saved_access_scope);
212       saved_access_scope = TREE_CHAIN (saved_access_scope);
213     }
214
215   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
216     pop_nested_class ();
217   else
218     pop_from_top_level ();
219 }
220
221 /* Do any processing required when DECL (a member template
222    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
223    to DECL, unless it is a specialization, in which case the DECL
224    itself is returned.  */
225
226 tree
227 finish_member_template_decl (tree decl)
228 {
229   if (decl == error_mark_node)
230     return error_mark_node;
231
232   gcc_assert (DECL_P (decl));
233
234   if (TREE_CODE (decl) == TYPE_DECL)
235     {
236       tree type;
237
238       type = TREE_TYPE (decl);
239       if (type == error_mark_node)
240         return error_mark_node;
241       if (MAYBE_CLASS_TYPE_P (type)
242           && CLASSTYPE_TEMPLATE_INFO (type)
243           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
244         {
245           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
246           check_member_template (tmpl);
247           return tmpl;
248         }
249       return NULL_TREE;
250     }
251   else if (TREE_CODE (decl) == FIELD_DECL)
252     error ("data member %qD cannot be a member template", decl);
253   else if (DECL_TEMPLATE_INFO (decl))
254     {
255       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
256         {
257           check_member_template (DECL_TI_TEMPLATE (decl));
258           return DECL_TI_TEMPLATE (decl);
259         }
260       else
261         return decl;
262     }
263   else
264     error ("invalid member template declaration %qD", decl);
265
266   return error_mark_node;
267 }
268
269 /* Return the template info node corresponding to T, whatever T is.  */
270
271 tree
272 get_template_info (tree t)
273 {
274   tree tinfo = NULL_TREE;
275
276   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
277     tinfo = DECL_TEMPLATE_INFO (t);
278
279   if (!tinfo && TREE_CODE (t) == TYPE_DECL)
280     t = TREE_TYPE (t);
281
282   if (TAGGED_TYPE_P (t))
283     tinfo = TYPE_TEMPLATE_INFO (t);
284
285   return tinfo;
286 }
287
288 /* Returns the template nesting level of the indicated class TYPE.
289
290    For example, in:
291      template <class T>
292      struct A
293      {
294        template <class U>
295        struct B {};
296      };
297
298    A<T>::B<U> has depth two, while A<T> has depth one.
299    Both A<T>::B<int> and A<int>::B<U> have depth one, if
300    they are instantiations, not specializations.
301
302    This function is guaranteed to return 0 if passed NULL_TREE so
303    that, for example, `template_class_depth (current_class_type)' is
304    always safe.  */
305
306 int
307 template_class_depth (tree type)
308 {
309   int depth;
310
311   for (depth = 0;
312        type && TREE_CODE (type) != NAMESPACE_DECL;
313        type = (TREE_CODE (type) == FUNCTION_DECL)
314          ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
315     {
316       tree tinfo = get_template_info (type);
317
318       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
319           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
320         ++depth;
321     }
322
323   return depth;
324 }
325
326 /* Subroutine of maybe_begin_member_template_processing.
327    Returns true if processing DECL needs us to push template parms.  */
328
329 static bool
330 inline_needs_template_parms (tree decl)
331 {
332   if (! DECL_TEMPLATE_INFO (decl))
333     return false;
334
335   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
336           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
337 }
338
339 /* Subroutine of maybe_begin_member_template_processing.
340    Push the template parms in PARMS, starting from LEVELS steps into the
341    chain, and ending at the beginning, since template parms are listed
342    innermost first.  */
343
344 static void
345 push_inline_template_parms_recursive (tree parmlist, int levels)
346 {
347   tree parms = TREE_VALUE (parmlist);
348   int i;
349
350   if (levels > 1)
351     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
352
353   ++processing_template_decl;
354   current_template_parms
355     = tree_cons (size_int (processing_template_decl),
356                  parms, current_template_parms);
357   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
358
359   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
360                NULL);
361   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
362     {
363       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
364
365       if (parm == error_mark_node)
366         continue;
367
368       gcc_assert (DECL_P (parm));
369
370       switch (TREE_CODE (parm))
371         {
372         case TYPE_DECL:
373         case TEMPLATE_DECL:
374           pushdecl (parm);
375           break;
376
377         case PARM_DECL:
378           {
379             /* Make a CONST_DECL as is done in process_template_parm.
380                It is ugly that we recreate this here; the original
381                version built in process_template_parm is no longer
382                available.  */
383             tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
384                                     TREE_TYPE (parm));
385             DECL_ARTIFICIAL (decl) = 1;
386             TREE_CONSTANT (decl) = 1;
387             TREE_READONLY (decl) = 1;
388             DECL_INITIAL (decl) = DECL_INITIAL (parm);
389             SET_DECL_TEMPLATE_PARM_P (decl);
390             pushdecl (decl);
391           }
392           break;
393
394         default:
395           gcc_unreachable ();
396         }
397     }
398 }
399
400 /* Restore the template parameter context for a member template or
401    a friend template defined in a class definition.  */
402
403 void
404 maybe_begin_member_template_processing (tree decl)
405 {
406   tree parms;
407   int levels = 0;
408
409   if (inline_needs_template_parms (decl))
410     {
411       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
412       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
413
414       if (DECL_TEMPLATE_SPECIALIZATION (decl))
415         {
416           --levels;
417           parms = TREE_CHAIN (parms);
418         }
419
420       push_inline_template_parms_recursive (parms, levels);
421     }
422
423   /* Remember how many levels of template parameters we pushed so that
424      we can pop them later.  */
425   VEC_safe_push (int, heap, inline_parm_levels, levels);
426 }
427
428 /* Undo the effects of maybe_begin_member_template_processing.  */
429
430 void
431 maybe_end_member_template_processing (void)
432 {
433   int i;
434   int last;
435
436   if (VEC_length (int, inline_parm_levels) == 0)
437     return;
438
439   last = VEC_pop (int, inline_parm_levels);
440   for (i = 0; i < last; ++i)
441     {
442       --processing_template_decl;
443       current_template_parms = TREE_CHAIN (current_template_parms);
444       poplevel (0, 0, 0);
445     }
446 }
447
448 /* Return a new template argument vector which contains all of ARGS,
449    but has as its innermost set of arguments the EXTRA_ARGS.  */
450
451 static tree
452 add_to_template_args (tree args, tree extra_args)
453 {
454   tree new_args;
455   int extra_depth;
456   int i;
457   int j;
458
459   extra_depth = TMPL_ARGS_DEPTH (extra_args);
460   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
461
462   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
463     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
464
465   for (j = 1; j <= extra_depth; ++j, ++i)
466     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
467
468   return new_args;
469 }
470
471 /* Like add_to_template_args, but only the outermost ARGS are added to
472    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
473    (EXTRA_ARGS) levels are added.  This function is used to combine
474    the template arguments from a partial instantiation with the
475    template arguments used to attain the full instantiation from the
476    partial instantiation.  */
477
478 static tree
479 add_outermost_template_args (tree args, tree extra_args)
480 {
481   tree new_args;
482
483   /* If there are more levels of EXTRA_ARGS than there are ARGS,
484      something very fishy is going on.  */
485   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
486
487   /* If *all* the new arguments will be the EXTRA_ARGS, just return
488      them.  */
489   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
490     return extra_args;
491
492   /* For the moment, we make ARGS look like it contains fewer levels.  */
493   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
494
495   new_args = add_to_template_args (args, extra_args);
496
497   /* Now, we restore ARGS to its full dimensions.  */
498   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
499
500   return new_args;
501 }
502
503 /* Return the N levels of innermost template arguments from the ARGS.  */
504
505 tree
506 get_innermost_template_args (tree args, int n)
507 {
508   tree new_args;
509   int extra_levels;
510   int i;
511
512   gcc_assert (n >= 0);
513
514   /* If N is 1, just return the innermost set of template arguments.  */
515   if (n == 1)
516     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
517
518   /* If we're not removing anything, just return the arguments we were
519      given.  */
520   extra_levels = TMPL_ARGS_DEPTH (args) - n;
521   gcc_assert (extra_levels >= 0);
522   if (extra_levels == 0)
523     return args;
524
525   /* Make a new set of arguments, not containing the outer arguments.  */
526   new_args = make_tree_vec (n);
527   for (i = 1; i <= n; ++i)
528     SET_TMPL_ARGS_LEVEL (new_args, i,
529                          TMPL_ARGS_LEVEL (args, i + extra_levels));
530
531   return new_args;
532 }
533
534 /* The inverse of get_innermost_template_args: Return all but the innermost
535    EXTRA_LEVELS levels of template arguments from the ARGS.  */
536
537 static tree
538 strip_innermost_template_args (tree args, int extra_levels)
539 {
540   tree new_args;
541   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
542   int i;
543
544   gcc_assert (n >= 0);
545
546   /* If N is 1, just return the outermost set of template arguments.  */
547   if (n == 1)
548     return TMPL_ARGS_LEVEL (args, 1);
549
550   /* If we're not removing anything, just return the arguments we were
551      given.  */
552   gcc_assert (extra_levels >= 0);
553   if (extra_levels == 0)
554     return args;
555
556   /* Make a new set of arguments, not containing the inner arguments.  */
557   new_args = make_tree_vec (n);
558   for (i = 1; i <= n; ++i)
559     SET_TMPL_ARGS_LEVEL (new_args, i,
560                          TMPL_ARGS_LEVEL (args, i));
561
562   return new_args;
563 }
564
565 /* We've got a template header coming up; push to a new level for storing
566    the parms.  */
567
568 void
569 begin_template_parm_list (void)
570 {
571   /* We use a non-tag-transparent scope here, which causes pushtag to
572      put tags in this scope, rather than in the enclosing class or
573      namespace scope.  This is the right thing, since we want
574      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
575      global template class, push_template_decl handles putting the
576      TEMPLATE_DECL into top-level scope.  For a nested template class,
577      e.g.:
578
579        template <class T> struct S1 {
580          template <class T> struct S2 {};
581        };
582
583      pushtag contains special code to call pushdecl_with_scope on the
584      TEMPLATE_DECL for S2.  */
585   begin_scope (sk_template_parms, NULL);
586   ++processing_template_decl;
587   ++processing_template_parmlist;
588   note_template_header (0);
589 }
590
591 /* This routine is called when a specialization is declared.  If it is
592    invalid to declare a specialization here, an error is reported and
593    false is returned, otherwise this routine will return true.  */
594
595 static bool
596 check_specialization_scope (void)
597 {
598   tree scope = current_scope ();
599
600   /* [temp.expl.spec]
601
602      An explicit specialization shall be declared in the namespace of
603      which the template is a member, or, for member templates, in the
604      namespace of which the enclosing class or enclosing class
605      template is a member.  An explicit specialization of a member
606      function, member class or static data member of a class template
607      shall be declared in the namespace of which the class template
608      is a member.  */
609   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
610     {
611       error ("explicit specialization in non-namespace scope %qD", scope);
612       return false;
613     }
614
615   /* [temp.expl.spec]
616
617      In an explicit specialization declaration for a member of a class
618      template or a member template that appears in namespace scope,
619      the member template and some of its enclosing class templates may
620      remain unspecialized, except that the declaration shall not
621      explicitly specialize a class member template if its enclosing
622      class templates are not explicitly specialized as well.  */
623   if (current_template_parms)
624     {
625       error ("enclosing class templates are not explicitly specialized");
626       return false;
627     }
628
629   return true;
630 }
631
632 /* We've just seen template <>.  */
633
634 bool
635 begin_specialization (void)
636 {
637   begin_scope (sk_template_spec, NULL);
638   note_template_header (1);
639   return check_specialization_scope ();
640 }
641
642 /* Called at then end of processing a declaration preceded by
643    template<>.  */
644
645 void
646 end_specialization (void)
647 {
648   finish_scope ();
649   reset_specialization ();
650 }
651
652 /* Any template <>'s that we have seen thus far are not referring to a
653    function specialization.  */
654
655 void
656 reset_specialization (void)
657 {
658   processing_specialization = 0;
659   template_header_count = 0;
660 }
661
662 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
663    it was of the form template <>.  */
664
665 static void
666 note_template_header (int specialization)
667 {
668   processing_specialization = specialization;
669   template_header_count++;
670 }
671
672 /* We're beginning an explicit instantiation.  */
673
674 void
675 begin_explicit_instantiation (void)
676 {
677   gcc_assert (!processing_explicit_instantiation);
678   processing_explicit_instantiation = true;
679 }
680
681
682 void
683 end_explicit_instantiation (void)
684 {
685   gcc_assert (processing_explicit_instantiation);
686   processing_explicit_instantiation = false;
687 }
688
689 /* An explicit specialization or partial specialization TMPL is being
690    declared.  Check that the namespace in which the specialization is
691    occurring is permissible.  Returns false iff it is invalid to
692    specialize TMPL in the current namespace.  */
693
694 static bool
695 check_specialization_namespace (tree tmpl)
696 {
697   tree tpl_ns = decl_namespace_context (tmpl);
698
699   /* [tmpl.expl.spec]
700
701      An explicit specialization shall be declared in the namespace of
702      which the template is a member, or, for member templates, in the
703      namespace of which the enclosing class or enclosing class
704      template is a member.  An explicit specialization of a member
705      function, member class or static data member of a class template
706      shall be declared in the namespace of which the class template is
707      a member.  */
708   if (is_associated_namespace (current_namespace, tpl_ns))
709     /* Same or super-using namespace.  */
710     return true;
711   else
712     {
713       permerror (input_location, "specialization of %qD in different namespace", tmpl);
714       permerror (input_location, "  from definition of %q+#D", tmpl);
715       return false;
716     }
717 }
718
719 /* SPEC is an explicit instantiation.  Check that it is valid to
720    perform this explicit instantiation in the current namespace.  */
721
722 static void
723 check_explicit_instantiation_namespace (tree spec)
724 {
725   tree ns;
726
727   /* DR 275: An explicit instantiation shall appear in an enclosing
728      namespace of its template.  */
729   ns = decl_namespace_context (spec);
730   if (!is_ancestor (current_namespace, ns))
731     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
732                "(which does not enclose namespace %qD)",
733                spec, current_namespace, ns);
734 }
735
736 /* The TYPE is being declared.  If it is a template type, that means it
737    is a partial specialization.  Do appropriate error-checking.  */
738
739 tree
740 maybe_process_partial_specialization (tree type)
741 {
742   tree context;
743
744   if (type == error_mark_node)
745     return error_mark_node;
746
747   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
748     {
749       error ("name of class shadows template template parameter %qD",
750              TYPE_NAME (type));
751       return error_mark_node;
752     }
753
754   context = TYPE_CONTEXT (type);
755
756   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
757     {
758       /* This is for ordinary explicit specialization and partial
759          specialization of a template class such as:
760
761            template <> class C<int>;
762
763          or:
764
765            template <class T> class C<T*>;
766
767          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
768
769       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
770           && !COMPLETE_TYPE_P (type))
771         {
772           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
773           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
774           if (processing_template_decl)
775             {
776               if (push_template_decl (TYPE_MAIN_DECL (type))
777                   == error_mark_node)
778                 return error_mark_node;
779             }
780         }
781       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
782         error ("specialization of %qT after instantiation", type);
783     }
784   else if (CLASS_TYPE_P (type)
785            && !CLASSTYPE_USE_TEMPLATE (type)
786            && CLASSTYPE_TEMPLATE_INFO (type)
787            && context && CLASS_TYPE_P (context)
788            && CLASSTYPE_TEMPLATE_INFO (context))
789     {
790       /* This is for an explicit specialization of member class
791          template according to [temp.expl.spec/18]:
792
793            template <> template <class U> class C<int>::D;
794
795          The context `C<int>' must be an implicit instantiation.
796          Otherwise this is just a member class template declared
797          earlier like:
798
799            template <> class C<int> { template <class U> class D; };
800            template <> template <class U> class C<int>::D;
801
802          In the first case, `C<int>::D' is a specialization of `C<T>::D'
803          while in the second case, `C<int>::D' is a primary template
804          and `C<T>::D' may not exist.  */
805
806       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
807           && !COMPLETE_TYPE_P (type))
808         {
809           tree t;
810
811           if (current_namespace
812               != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
813             {
814               permerror (input_location, "specializing %q#T in different namespace", type);
815               permerror (input_location, "  from definition of %q+#D",
816                          CLASSTYPE_TI_TEMPLATE (type));
817             }
818
819           /* Check for invalid specialization after instantiation:
820
821                template <> template <> class C<int>::D<int>;
822                template <> template <class U> class C<int>::D;  */
823
824           for (t = DECL_TEMPLATE_INSTANTIATIONS
825                  (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
826                t; t = TREE_CHAIN (t))
827             if (TREE_VALUE (t) != type
828                 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
829               error ("specialization %qT after instantiation %qT",
830                      type, TREE_VALUE (t));
831
832           /* Mark TYPE as a specialization.  And as a result, we only
833              have one level of template argument for the innermost
834              class template.  */
835           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
836           CLASSTYPE_TI_ARGS (type)
837             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
838         }
839     }
840   else if (processing_specialization)
841     {
842       error ("explicit specialization of non-template %qT", type);
843       return error_mark_node;
844     }
845
846   return type;
847 }
848
849 /* Returns nonzero if we can optimize the retrieval of specializations
850    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
851    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
852
853 static inline bool
854 optimize_specialization_lookup_p (tree tmpl)
855 {
856   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
857           && DECL_CLASS_SCOPE_P (tmpl)
858           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
859              parameter.  */
860           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
861           /* The optimized lookup depends on the fact that the
862              template arguments for the member function template apply
863              purely to the containing class, which is not true if the
864              containing class is an explicit or partial
865              specialization.  */
866           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
867           && !DECL_MEMBER_TEMPLATE_P (tmpl)
868           && !DECL_CONV_FN_P (tmpl)
869           /* It is possible to have a template that is not a member
870              template and is not a member of a template class:
871
872              template <typename T>
873              struct S { friend A::f(); };
874
875              Here, the friend function is a template, but the context does
876              not have template information.  The optimized lookup relies
877              on having ARGS be the template arguments for both the class
878              and the function template.  */
879           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
880 }
881
882 /* Retrieve the specialization (in the sense of [temp.spec] - a
883    specialization is either an instantiation or an explicit
884    specialization) of TMPL for the given template ARGS.  If there is
885    no such specialization, return NULL_TREE.  The ARGS are a vector of
886    arguments, or a vector of vectors of arguments, in the case of
887    templates with more than one level of parameters.
888
889    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
890    then we search for a partial specialization matching ARGS.  This
891    parameter is ignored if TMPL is not a class template.  */
892
893 static tree
894 retrieve_specialization (tree tmpl, tree args,
895                          bool class_specializations_p)
896 {
897   if (args == error_mark_node)
898     return NULL_TREE;
899
900   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
901
902   /* There should be as many levels of arguments as there are
903      levels of parameters.  */
904   gcc_assert (TMPL_ARGS_DEPTH (args)
905               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
906
907   if (optimize_specialization_lookup_p (tmpl))
908     {
909       tree class_template;
910       tree class_specialization;
911       VEC(tree,gc) *methods;
912       tree fns;
913       int idx;
914
915       /* The template arguments actually apply to the containing
916          class.  Find the class specialization with those
917          arguments.  */
918       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
919       class_specialization
920         = retrieve_specialization (class_template, args,
921                                    /*class_specializations_p=*/false);
922       if (!class_specialization)
923         return NULL_TREE;
924       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
925          for the specialization.  */
926       idx = class_method_index_for_fn (class_specialization, tmpl);
927       if (idx == -1)
928         return NULL_TREE;
929       /* Iterate through the methods with the indicated name, looking
930          for the one that has an instance of TMPL.  */
931       methods = CLASSTYPE_METHOD_VEC (class_specialization);
932       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
933         {
934           tree fn = OVL_CURRENT (fns);
935           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
936             return fn;
937         }
938       return NULL_TREE;
939     }
940   else
941     {
942       tree *sp;
943       tree *head;
944
945       /* Class templates store their instantiations on the
946          DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
947          DECL_TEMPLATE_SPECIALIZATIONS list.  */
948       if (!class_specializations_p
949           && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL
950           && TAGGED_TYPE_P (TREE_TYPE (tmpl)))
951         sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
952       else
953         sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
954       head = sp;
955       /* Iterate through the list until we find a matching template.  */
956       while (*sp != NULL_TREE)
957         {
958           tree spec = *sp;
959
960           if (comp_template_args (TREE_PURPOSE (spec), args))
961             {
962               /* Use the move-to-front heuristic to speed up future
963                  searches.  */
964               if (spec != *head)
965                 {
966                   *sp = TREE_CHAIN (*sp);
967                   TREE_CHAIN (spec) = *head;
968                   *head = spec;
969                 }
970               return TREE_VALUE (spec);
971             }
972           sp = &TREE_CHAIN (spec);
973         }
974     }
975
976   return NULL_TREE;
977 }
978
979 /* Like retrieve_specialization, but for local declarations.  */
980
981 static tree
982 retrieve_local_specialization (tree tmpl)
983 {
984   tree spec;
985
986   if (local_specializations == NULL)
987     return NULL_TREE;
988
989   spec = (tree) htab_find_with_hash (local_specializations, tmpl,
990                                      htab_hash_pointer (tmpl));
991   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
992 }
993
994 /* Returns nonzero iff DECL is a specialization of TMPL.  */
995
996 int
997 is_specialization_of (tree decl, tree tmpl)
998 {
999   tree t;
1000
1001   if (TREE_CODE (decl) == FUNCTION_DECL)
1002     {
1003       for (t = decl;
1004            t != NULL_TREE;
1005            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1006         if (t == tmpl)
1007           return 1;
1008     }
1009   else
1010     {
1011       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1012
1013       for (t = TREE_TYPE (decl);
1014            t != NULL_TREE;
1015            t = CLASSTYPE_USE_TEMPLATE (t)
1016              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1017         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1018           return 1;
1019     }
1020
1021   return 0;
1022 }
1023
1024 /* Returns nonzero iff DECL is a specialization of friend declaration
1025    FRIEND_DECL according to [temp.friend].  */
1026
1027 bool
1028 is_specialization_of_friend (tree decl, tree friend_decl)
1029 {
1030   bool need_template = true;
1031   int template_depth;
1032
1033   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1034               || TREE_CODE (decl) == TYPE_DECL);
1035
1036   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1037      of a template class, we want to check if DECL is a specialization
1038      if this.  */
1039   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1040       && DECL_TEMPLATE_INFO (friend_decl)
1041       && !DECL_USE_TEMPLATE (friend_decl))
1042     {
1043       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1044       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1045       need_template = false;
1046     }
1047   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1048            && !PRIMARY_TEMPLATE_P (friend_decl))
1049     need_template = false;
1050
1051   /* There is nothing to do if this is not a template friend.  */
1052   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1053     return false;
1054
1055   if (is_specialization_of (decl, friend_decl))
1056     return true;
1057
1058   /* [temp.friend/6]
1059      A member of a class template may be declared to be a friend of a
1060      non-template class.  In this case, the corresponding member of
1061      every specialization of the class template is a friend of the
1062      class granting friendship.
1063
1064      For example, given a template friend declaration
1065
1066        template <class T> friend void A<T>::f();
1067
1068      the member function below is considered a friend
1069
1070        template <> struct A<int> {
1071          void f();
1072        };
1073
1074      For this type of template friend, TEMPLATE_DEPTH below will be
1075      nonzero.  To determine if DECL is a friend of FRIEND, we first
1076      check if the enclosing class is a specialization of another.  */
1077
1078   template_depth = template_class_depth (DECL_CONTEXT (friend_decl));
1079   if (template_depth
1080       && DECL_CLASS_SCOPE_P (decl)
1081       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1082                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1083     {
1084       /* Next, we check the members themselves.  In order to handle
1085          a few tricky cases, such as when FRIEND_DECL's are
1086
1087            template <class T> friend void A<T>::g(T t);
1088            template <class T> template <T t> friend void A<T>::h();
1089
1090          and DECL's are
1091
1092            void A<int>::g(int);
1093            template <int> void A<int>::h();
1094
1095          we need to figure out ARGS, the template arguments from
1096          the context of DECL.  This is required for template substitution
1097          of `T' in the function parameter of `g' and template parameter
1098          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1099
1100       tree context = DECL_CONTEXT (decl);
1101       tree args = NULL_TREE;
1102       int current_depth = 0;
1103
1104       while (current_depth < template_depth)
1105         {
1106           if (CLASSTYPE_TEMPLATE_INFO (context))
1107             {
1108               if (current_depth == 0)
1109                 args = TYPE_TI_ARGS (context);
1110               else
1111                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1112               current_depth++;
1113             }
1114           context = TYPE_CONTEXT (context);
1115         }
1116
1117       if (TREE_CODE (decl) == FUNCTION_DECL)
1118         {
1119           bool is_template;
1120           tree friend_type;
1121           tree decl_type;
1122           tree friend_args_type;
1123           tree decl_args_type;
1124
1125           /* Make sure that both DECL and FRIEND_DECL are templates or
1126              non-templates.  */
1127           is_template = DECL_TEMPLATE_INFO (decl)
1128                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1129           if (need_template ^ is_template)
1130             return false;
1131           else if (is_template)
1132             {
1133               /* If both are templates, check template parameter list.  */
1134               tree friend_parms
1135                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1136                                          args, tf_none);
1137               if (!comp_template_parms
1138                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1139                       friend_parms))
1140                 return false;
1141
1142               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1143             }
1144           else
1145             decl_type = TREE_TYPE (decl);
1146
1147           friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1148                                               tf_none, NULL_TREE);
1149           if (friend_type == error_mark_node)
1150             return false;
1151
1152           /* Check if return types match.  */
1153           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1154             return false;
1155
1156           /* Check if function parameter types match, ignoring the
1157              `this' parameter.  */
1158           friend_args_type = TYPE_ARG_TYPES (friend_type);
1159           decl_args_type = TYPE_ARG_TYPES (decl_type);
1160           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1161             friend_args_type = TREE_CHAIN (friend_args_type);
1162           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1163             decl_args_type = TREE_CHAIN (decl_args_type);
1164
1165           return compparms (decl_args_type, friend_args_type);
1166         }
1167       else
1168         {
1169           /* DECL is a TYPE_DECL */
1170           bool is_template;
1171           tree decl_type = TREE_TYPE (decl);
1172
1173           /* Make sure that both DECL and FRIEND_DECL are templates or
1174              non-templates.  */
1175           is_template
1176             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1177               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1178
1179           if (need_template ^ is_template)
1180             return false;
1181           else if (is_template)
1182             {
1183               tree friend_parms;
1184               /* If both are templates, check the name of the two
1185                  TEMPLATE_DECL's first because is_friend didn't.  */
1186               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1187                   != DECL_NAME (friend_decl))
1188                 return false;
1189
1190               /* Now check template parameter list.  */
1191               friend_parms
1192                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1193                                          args, tf_none);
1194               return comp_template_parms
1195                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1196                  friend_parms);
1197             }
1198           else
1199             return (DECL_NAME (decl)
1200                     == DECL_NAME (friend_decl));
1201         }
1202     }
1203   return false;
1204 }
1205
1206 /* Register the specialization SPEC as a specialization of TMPL with
1207    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1208    is actually just a friend declaration.  Returns SPEC, or an
1209    equivalent prior declaration, if available.  */
1210
1211 static tree
1212 register_specialization (tree spec, tree tmpl, tree args, bool is_friend)
1213 {
1214   tree fn;
1215
1216   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1217
1218   if (TREE_CODE (spec) == FUNCTION_DECL
1219       && uses_template_parms (DECL_TI_ARGS (spec)))
1220     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1221        register it; we want the corresponding TEMPLATE_DECL instead.
1222        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1223        the more obvious `uses_template_parms (spec)' to avoid problems
1224        with default function arguments.  In particular, given
1225        something like this:
1226
1227           template <class T> void f(T t1, T t = T())
1228
1229        the default argument expression is not substituted for in an
1230        instantiation unless and until it is actually needed.  */
1231     return spec;
1232
1233   fn = retrieve_specialization (tmpl, args,
1234                                 /*class_specializations_p=*/false);
1235   /* We can sometimes try to re-register a specialization that we've
1236      already got.  In particular, regenerate_decl_from_template calls
1237      duplicate_decls which will update the specialization list.  But,
1238      we'll still get called again here anyhow.  It's more convenient
1239      to simply allow this than to try to prevent it.  */
1240   if (fn == spec)
1241     return spec;
1242   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1243     {
1244       if (DECL_TEMPLATE_INSTANTIATION (fn))
1245         {
1246           if (TREE_USED (fn)
1247               || DECL_EXPLICIT_INSTANTIATION (fn))
1248             {
1249               error ("specialization of %qD after instantiation",
1250                      fn);
1251               return error_mark_node;
1252             }
1253           else
1254             {
1255               tree clone;
1256               /* This situation should occur only if the first
1257                  specialization is an implicit instantiation, the
1258                  second is an explicit specialization, and the
1259                  implicit instantiation has not yet been used.  That
1260                  situation can occur if we have implicitly
1261                  instantiated a member function and then specialized
1262                  it later.
1263
1264                  We can also wind up here if a friend declaration that
1265                  looked like an instantiation turns out to be a
1266                  specialization:
1267
1268                    template <class T> void foo(T);
1269                    class S { friend void foo<>(int) };
1270                    template <> void foo(int);
1271
1272                  We transform the existing DECL in place so that any
1273                  pointers to it become pointers to the updated
1274                  declaration.
1275
1276                  If there was a definition for the template, but not
1277                  for the specialization, we want this to look as if
1278                  there were no definition, and vice versa.  */
1279               DECL_INITIAL (fn) = NULL_TREE;
1280               duplicate_decls (spec, fn, is_friend);
1281               /* The call to duplicate_decls will have applied
1282                  [temp.expl.spec]:
1283
1284                    An explicit specialization of a function template
1285                    is inline only if it is explicitly declared to be,
1286                    and independently of whether its function template
1287                    is.
1288
1289                 to the primary function; now copy the inline bits to
1290                 the various clones.  */
1291               FOR_EACH_CLONE (clone, fn)
1292                 DECL_DECLARED_INLINE_P (clone)
1293                   = DECL_DECLARED_INLINE_P (fn);
1294               check_specialization_namespace (fn);
1295
1296               return fn;
1297             }
1298         }
1299       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1300         {
1301           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1302             /* Dup decl failed, but this is a new definition. Set the
1303                line number so any errors match this new
1304                definition.  */
1305             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1306
1307           return fn;
1308         }
1309     }
1310
1311   /* A specialization must be declared in the same namespace as the
1312      template it is specializing.  */
1313   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1314       && !check_specialization_namespace (tmpl))
1315     DECL_CONTEXT (spec) = FROB_CONTEXT (decl_namespace_context (tmpl));
1316
1317   if (!optimize_specialization_lookup_p (tmpl))
1318     DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1319       = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1320
1321   return spec;
1322 }
1323
1324 /* Unregister the specialization SPEC as a specialization of TMPL.
1325    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1326    if the SPEC was listed as a specialization of TMPL.  */
1327
1328 bool
1329 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1330 {
1331   tree* s;
1332
1333   for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1334        *s != NULL_TREE;
1335        s = &TREE_CHAIN (*s))
1336     if (TREE_VALUE (*s) == spec)
1337       {
1338         if (!new_spec)
1339           *s = TREE_CHAIN (*s);
1340         else
1341           TREE_VALUE (*s) = new_spec;
1342         return 1;
1343       }
1344
1345   return 0;
1346 }
1347
1348 /* Compare an entry in the local specializations hash table P1 (which
1349    is really a pointer to a TREE_LIST) with P2 (which is really a
1350    DECL).  */
1351
1352 static int
1353 eq_local_specializations (const void *p1, const void *p2)
1354 {
1355   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1356 }
1357
1358 /* Hash P1, an entry in the local specializations table.  */
1359
1360 static hashval_t
1361 hash_local_specialization (const void* p1)
1362 {
1363   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1364 }
1365
1366 /* Like register_specialization, but for local declarations.  We are
1367    registering SPEC, an instantiation of TMPL.  */
1368
1369 static void
1370 register_local_specialization (tree spec, tree tmpl)
1371 {
1372   void **slot;
1373
1374   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1375                                    htab_hash_pointer (tmpl), INSERT);
1376   *slot = build_tree_list (spec, tmpl);
1377 }
1378
1379 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1380    specialized class.  */
1381
1382 bool
1383 explicit_class_specialization_p (tree type)
1384 {
1385   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1386     return false;
1387   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1388 }
1389
1390 /* Print the list of candidate FNS in an error message.  */
1391
1392 void
1393 print_candidates (tree fns)
1394 {
1395   tree fn;
1396
1397   const char *str = "candidates are:";
1398
1399   for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1400     {
1401       tree f;
1402
1403       for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1404         error ("%s %+#D", str, OVL_CURRENT (f));
1405       str = "               ";
1406     }
1407 }
1408
1409 /* Returns the template (one of the functions given by TEMPLATE_ID)
1410    which can be specialized to match the indicated DECL with the
1411    explicit template args given in TEMPLATE_ID.  The DECL may be
1412    NULL_TREE if none is available.  In that case, the functions in
1413    TEMPLATE_ID are non-members.
1414
1415    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1416    specialization of a member template.
1417
1418    The TEMPLATE_COUNT is the number of references to qualifying
1419    template classes that appeared in the name of the function. See
1420    check_explicit_specialization for a more accurate description.
1421
1422    TSK indicates what kind of template declaration (if any) is being
1423    declared.  TSK_TEMPLATE indicates that the declaration given by
1424    DECL, though a FUNCTION_DECL, has template parameters, and is
1425    therefore a template function.
1426
1427    The template args (those explicitly specified and those deduced)
1428    are output in a newly created vector *TARGS_OUT.
1429
1430    If it is impossible to determine the result, an error message is
1431    issued.  The error_mark_node is returned to indicate failure.  */
1432
1433 static tree
1434 determine_specialization (tree template_id,
1435                           tree decl,
1436                           tree* targs_out,
1437                           int need_member_template,
1438                           int template_count,
1439                           tmpl_spec_kind tsk)
1440 {
1441   tree fns;
1442   tree targs;
1443   tree explicit_targs;
1444   tree candidates = NULL_TREE;
1445   /* A TREE_LIST of templates of which DECL may be a specialization.
1446      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1447      corresponding TREE_PURPOSE is the set of template arguments that,
1448      when used to instantiate the template, would produce a function
1449      with the signature of DECL.  */
1450   tree templates = NULL_TREE;
1451   int header_count;
1452   struct cp_binding_level *b;
1453
1454   *targs_out = NULL_TREE;
1455
1456   if (template_id == error_mark_node || decl == error_mark_node)
1457     return error_mark_node;
1458
1459   fns = TREE_OPERAND (template_id, 0);
1460   explicit_targs = TREE_OPERAND (template_id, 1);
1461
1462   if (fns == error_mark_node)
1463     return error_mark_node;
1464
1465   /* Check for baselinks.  */
1466   if (BASELINK_P (fns))
1467     fns = BASELINK_FUNCTIONS (fns);
1468
1469   if (!is_overloaded_fn (fns))
1470     {
1471       error ("%qD is not a function template", fns);
1472       return error_mark_node;
1473     }
1474
1475   /* Count the number of template headers specified for this
1476      specialization.  */
1477   header_count = 0;
1478   for (b = current_binding_level;
1479        b->kind == sk_template_parms;
1480        b = b->level_chain)
1481     ++header_count;
1482
1483   for (; fns; fns = OVL_NEXT (fns))
1484     {
1485       tree fn = OVL_CURRENT (fns);
1486
1487       if (TREE_CODE (fn) == TEMPLATE_DECL)
1488         {
1489           tree decl_arg_types;
1490           tree fn_arg_types;
1491
1492           /* In case of explicit specialization, we need to check if
1493              the number of template headers appearing in the specialization
1494              is correct. This is usually done in check_explicit_specialization,
1495              but the check done there cannot be exhaustive when specializing
1496              member functions. Consider the following code:
1497
1498              template <> void A<int>::f(int);
1499              template <> template <> void A<int>::f(int);
1500
1501              Assuming that A<int> is not itself an explicit specialization
1502              already, the first line specializes "f" which is a non-template
1503              member function, whilst the second line specializes "f" which
1504              is a template member function. So both lines are syntactically
1505              correct, and check_explicit_specialization does not reject
1506              them.
1507
1508              Here, we can do better, as we are matching the specialization
1509              against the declarations. We count the number of template
1510              headers, and we check if they match TEMPLATE_COUNT + 1
1511              (TEMPLATE_COUNT is the number of qualifying template classes,
1512              plus there must be another header for the member template
1513              itself).
1514
1515              Notice that if header_count is zero, this is not a
1516              specialization but rather a template instantiation, so there
1517              is no check we can perform here.  */
1518           if (header_count && header_count != template_count + 1)
1519             continue;
1520
1521           /* Check that the number of template arguments at the
1522              innermost level for DECL is the same as for FN.  */
1523           if (current_binding_level->kind == sk_template_parms
1524               && !current_binding_level->explicit_spec_p
1525               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1526                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1527                                       (current_template_parms))))
1528             continue;
1529
1530           /* DECL might be a specialization of FN.  */
1531           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1532           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1533
1534           /* For a non-static member function, we need to make sure
1535              that the const qualification is the same.  Since
1536              get_bindings does not try to merge the "this" parameter,
1537              we must do the comparison explicitly.  */
1538           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1539               && !same_type_p (TREE_VALUE (fn_arg_types),
1540                                TREE_VALUE (decl_arg_types)))
1541             continue;
1542
1543           /* Skip the "this" parameter and, for constructors of
1544              classes with virtual bases, the VTT parameter.  A
1545              full specialization of a constructor will have a VTT
1546              parameter, but a template never will.  */ 
1547           decl_arg_types 
1548             = skip_artificial_parms_for (decl, decl_arg_types);
1549           fn_arg_types 
1550             = skip_artificial_parms_for (fn, fn_arg_types);
1551
1552           /* Check that the number of function parameters matches.
1553              For example,
1554                template <class T> void f(int i = 0);
1555                template <> void f<int>();
1556              The specialization f<int> is invalid but is not caught
1557              by get_bindings below.  */
1558           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1559             continue;
1560
1561           /* Function templates cannot be specializations; there are
1562              no partial specializations of functions.  Therefore, if
1563              the type of DECL does not match FN, there is no
1564              match.  */
1565           if (tsk == tsk_template)
1566             {
1567               if (compparms (fn_arg_types, decl_arg_types))
1568                 candidates = tree_cons (NULL_TREE, fn, candidates);
1569               continue;
1570             }
1571
1572           /* See whether this function might be a specialization of this
1573              template.  */
1574           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1575
1576           if (!targs)
1577             /* We cannot deduce template arguments that when used to
1578                specialize TMPL will produce DECL.  */
1579             continue;
1580
1581           /* Save this template, and the arguments deduced.  */
1582           templates = tree_cons (targs, fn, templates);
1583         }
1584       else if (need_member_template)
1585         /* FN is an ordinary member function, and we need a
1586            specialization of a member template.  */
1587         ;
1588       else if (TREE_CODE (fn) != FUNCTION_DECL)
1589         /* We can get IDENTIFIER_NODEs here in certain erroneous
1590            cases.  */
1591         ;
1592       else if (!DECL_FUNCTION_MEMBER_P (fn))
1593         /* This is just an ordinary non-member function.  Nothing can
1594            be a specialization of that.  */
1595         ;
1596       else if (DECL_ARTIFICIAL (fn))
1597         /* Cannot specialize functions that are created implicitly.  */
1598         ;
1599       else
1600         {
1601           tree decl_arg_types;
1602
1603           /* This is an ordinary member function.  However, since
1604              we're here, we can assume it's enclosing class is a
1605              template class.  For example,
1606
1607                template <typename T> struct S { void f(); };
1608                template <> void S<int>::f() {}
1609
1610              Here, S<int>::f is a non-template, but S<int> is a
1611              template class.  If FN has the same type as DECL, we
1612              might be in business.  */
1613
1614           if (!DECL_TEMPLATE_INFO (fn))
1615             /* Its enclosing class is an explicit specialization
1616                of a template class.  This is not a candidate.  */
1617             continue;
1618
1619           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1620                             TREE_TYPE (TREE_TYPE (fn))))
1621             /* The return types differ.  */
1622             continue;
1623
1624           /* Adjust the type of DECL in case FN is a static member.  */
1625           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1626           if (DECL_STATIC_FUNCTION_P (fn)
1627               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1628             decl_arg_types = TREE_CHAIN (decl_arg_types);
1629
1630           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1631                          decl_arg_types))
1632             /* They match!  */
1633             candidates = tree_cons (NULL_TREE, fn, candidates);
1634         }
1635     }
1636
1637   if (templates && TREE_CHAIN (templates))
1638     {
1639       /* We have:
1640
1641            [temp.expl.spec]
1642
1643            It is possible for a specialization with a given function
1644            signature to be instantiated from more than one function
1645            template.  In such cases, explicit specification of the
1646            template arguments must be used to uniquely identify the
1647            function template specialization being specialized.
1648
1649          Note that here, there's no suggestion that we're supposed to
1650          determine which of the candidate templates is most
1651          specialized.  However, we, also have:
1652
1653            [temp.func.order]
1654
1655            Partial ordering of overloaded function template
1656            declarations is used in the following contexts to select
1657            the function template to which a function template
1658            specialization refers:
1659
1660            -- when an explicit specialization refers to a function
1661               template.
1662
1663          So, we do use the partial ordering rules, at least for now.
1664          This extension can only serve to make invalid programs valid,
1665          so it's safe.  And, there is strong anecdotal evidence that
1666          the committee intended the partial ordering rules to apply;
1667          the EDG front end has that behavior, and John Spicer claims
1668          that the committee simply forgot to delete the wording in
1669          [temp.expl.spec].  */
1670       tree tmpl = most_specialized_instantiation (templates);
1671       if (tmpl != error_mark_node)
1672         {
1673           templates = tmpl;
1674           TREE_CHAIN (templates) = NULL_TREE;
1675         }
1676     }
1677
1678   if (templates == NULL_TREE && candidates == NULL_TREE)
1679     {
1680       error ("template-id %qD for %q+D does not match any template "
1681              "declaration", template_id, decl);
1682       return error_mark_node;
1683     }
1684   else if ((templates && TREE_CHAIN (templates))
1685            || (candidates && TREE_CHAIN (candidates))
1686            || (templates && candidates))
1687     {
1688       error ("ambiguous template specialization %qD for %q+D",
1689              template_id, decl);
1690       chainon (candidates, templates);
1691       print_candidates (candidates);
1692       return error_mark_node;
1693     }
1694
1695   /* We have one, and exactly one, match.  */
1696   if (candidates)
1697     {
1698       tree fn = TREE_VALUE (candidates);
1699       /* DECL is a re-declaration of a template function.  */
1700       if (TREE_CODE (fn) == TEMPLATE_DECL)
1701         return fn;
1702       /* It was a specialization of an ordinary member function in a
1703          template class.  */
1704       *targs_out = copy_node (DECL_TI_ARGS (fn));
1705       return DECL_TI_TEMPLATE (fn);
1706     }
1707
1708   /* It was a specialization of a template.  */
1709   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1710   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1711     {
1712       *targs_out = copy_node (targs);
1713       SET_TMPL_ARGS_LEVEL (*targs_out,
1714                            TMPL_ARGS_DEPTH (*targs_out),
1715                            TREE_PURPOSE (templates));
1716     }
1717   else
1718     *targs_out = TREE_PURPOSE (templates);
1719   return TREE_VALUE (templates);
1720 }
1721
1722 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1723    but with the default argument values filled in from those in the
1724    TMPL_TYPES.  */
1725
1726 static tree
1727 copy_default_args_to_explicit_spec_1 (tree spec_types,
1728                                       tree tmpl_types)
1729 {
1730   tree new_spec_types;
1731
1732   if (!spec_types)
1733     return NULL_TREE;
1734
1735   if (spec_types == void_list_node)
1736     return void_list_node;
1737
1738   /* Substitute into the rest of the list.  */
1739   new_spec_types =
1740     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1741                                           TREE_CHAIN (tmpl_types));
1742
1743   /* Add the default argument for this parameter.  */
1744   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1745                          TREE_VALUE (spec_types),
1746                          new_spec_types);
1747 }
1748
1749 /* DECL is an explicit specialization.  Replicate default arguments
1750    from the template it specializes.  (That way, code like:
1751
1752      template <class T> void f(T = 3);
1753      template <> void f(double);
1754      void g () { f (); }
1755
1756    works, as required.)  An alternative approach would be to look up
1757    the correct default arguments at the call-site, but this approach
1758    is consistent with how implicit instantiations are handled.  */
1759
1760 static void
1761 copy_default_args_to_explicit_spec (tree decl)
1762 {
1763   tree tmpl;
1764   tree spec_types;
1765   tree tmpl_types;
1766   tree new_spec_types;
1767   tree old_type;
1768   tree new_type;
1769   tree t;
1770   tree object_type = NULL_TREE;
1771   tree in_charge = NULL_TREE;
1772   tree vtt = NULL_TREE;
1773
1774   /* See if there's anything we need to do.  */
1775   tmpl = DECL_TI_TEMPLATE (decl);
1776   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1777   for (t = tmpl_types; t; t = TREE_CHAIN (t))
1778     if (TREE_PURPOSE (t))
1779       break;
1780   if (!t)
1781     return;
1782
1783   old_type = TREE_TYPE (decl);
1784   spec_types = TYPE_ARG_TYPES (old_type);
1785
1786   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1787     {
1788       /* Remove the this pointer, but remember the object's type for
1789          CV quals.  */
1790       object_type = TREE_TYPE (TREE_VALUE (spec_types));
1791       spec_types = TREE_CHAIN (spec_types);
1792       tmpl_types = TREE_CHAIN (tmpl_types);
1793
1794       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1795         {
1796           /* DECL may contain more parameters than TMPL due to the extra
1797              in-charge parameter in constructors and destructors.  */
1798           in_charge = spec_types;
1799           spec_types = TREE_CHAIN (spec_types);
1800         }
1801       if (DECL_HAS_VTT_PARM_P (decl))
1802         {
1803           vtt = spec_types;
1804           spec_types = TREE_CHAIN (spec_types);
1805         }
1806     }
1807
1808   /* Compute the merged default arguments.  */
1809   new_spec_types =
1810     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1811
1812   /* Compute the new FUNCTION_TYPE.  */
1813   if (object_type)
1814     {
1815       if (vtt)
1816         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1817                                          TREE_VALUE (vtt),
1818                                          new_spec_types);
1819
1820       if (in_charge)
1821         /* Put the in-charge parameter back.  */
1822         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1823                                          TREE_VALUE (in_charge),
1824                                          new_spec_types);
1825
1826       new_type = build_method_type_directly (object_type,
1827                                              TREE_TYPE (old_type),
1828                                              new_spec_types);
1829     }
1830   else
1831     new_type = build_function_type (TREE_TYPE (old_type),
1832                                     new_spec_types);
1833   new_type = cp_build_type_attribute_variant (new_type,
1834                                               TYPE_ATTRIBUTES (old_type));
1835   new_type = build_exception_variant (new_type,
1836                                       TYPE_RAISES_EXCEPTIONS (old_type));
1837   TREE_TYPE (decl) = new_type;
1838 }
1839
1840 /* Check to see if the function just declared, as indicated in
1841    DECLARATOR, and in DECL, is a specialization of a function
1842    template.  We may also discover that the declaration is an explicit
1843    instantiation at this point.
1844
1845    Returns DECL, or an equivalent declaration that should be used
1846    instead if all goes well.  Issues an error message if something is
1847    amiss.  Returns error_mark_node if the error is not easily
1848    recoverable.
1849
1850    FLAGS is a bitmask consisting of the following flags:
1851
1852    2: The function has a definition.
1853    4: The function is a friend.
1854
1855    The TEMPLATE_COUNT is the number of references to qualifying
1856    template classes that appeared in the name of the function.  For
1857    example, in
1858
1859      template <class T> struct S { void f(); };
1860      void S<int>::f();
1861
1862    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
1863    classes are not counted in the TEMPLATE_COUNT, so that in
1864
1865      template <class T> struct S {};
1866      template <> struct S<int> { void f(); }
1867      template <> void S<int>::f();
1868
1869    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
1870    invalid; there should be no template <>.)
1871
1872    If the function is a specialization, it is marked as such via
1873    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
1874    is set up correctly, and it is added to the list of specializations
1875    for that template.  */
1876
1877 tree
1878 check_explicit_specialization (tree declarator,
1879                                tree decl,
1880                                int template_count,
1881                                int flags)
1882 {
1883   int have_def = flags & 2;
1884   int is_friend = flags & 4;
1885   int specialization = 0;
1886   int explicit_instantiation = 0;
1887   int member_specialization = 0;
1888   tree ctype = DECL_CLASS_CONTEXT (decl);
1889   tree dname = DECL_NAME (decl);
1890   tmpl_spec_kind tsk;
1891
1892   if (is_friend)
1893     {
1894       if (!processing_specialization)
1895         tsk = tsk_none;
1896       else
1897         tsk = tsk_excessive_parms;
1898     }
1899   else
1900     tsk = current_tmpl_spec_kind (template_count);
1901
1902   switch (tsk)
1903     {
1904     case tsk_none:
1905       if (processing_specialization)
1906         {
1907           specialization = 1;
1908           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1909         }
1910       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1911         {
1912           if (is_friend)
1913             /* This could be something like:
1914
1915                template <class T> void f(T);
1916                class S { friend void f<>(int); }  */
1917             specialization = 1;
1918           else
1919             {
1920               /* This case handles bogus declarations like template <>
1921                  template <class T> void f<int>(); */
1922
1923               error ("template-id %qD in declaration of primary template",
1924                      declarator);
1925               return decl;
1926             }
1927         }
1928       break;
1929
1930     case tsk_invalid_member_spec:
1931       /* The error has already been reported in
1932          check_specialization_scope.  */
1933       return error_mark_node;
1934
1935     case tsk_invalid_expl_inst:
1936       error ("template parameter list used in explicit instantiation");
1937
1938       /* Fall through.  */
1939
1940     case tsk_expl_inst:
1941       if (have_def)
1942         error ("definition provided for explicit instantiation");
1943
1944       explicit_instantiation = 1;
1945       break;
1946
1947     case tsk_excessive_parms:
1948     case tsk_insufficient_parms:
1949       if (tsk == tsk_excessive_parms)
1950         error ("too many template parameter lists in declaration of %qD",
1951                decl);
1952       else if (template_header_count)
1953         error("too few template parameter lists in declaration of %qD", decl);
1954       else
1955         error("explicit specialization of %qD must be introduced by "
1956               "%<template <>%>", decl);
1957
1958       /* Fall through.  */
1959     case tsk_expl_spec:
1960       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1961       if (ctype)
1962         member_specialization = 1;
1963       else
1964         specialization = 1;
1965       break;
1966
1967     case tsk_template:
1968       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1969         {
1970           /* This case handles bogus declarations like template <>
1971              template <class T> void f<int>(); */
1972
1973           if (uses_template_parms (declarator))
1974             error ("function template partial specialization %qD "
1975                    "is not allowed", declarator);
1976           else
1977             error ("template-id %qD in declaration of primary template",
1978                    declarator);
1979           return decl;
1980         }
1981
1982       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1983         /* This is a specialization of a member template, without
1984            specialization the containing class.  Something like:
1985
1986              template <class T> struct S {
1987                template <class U> void f (U);
1988              };
1989              template <> template <class U> void S<int>::f(U) {}
1990
1991            That's a specialization -- but of the entire template.  */
1992         specialization = 1;
1993       break;
1994
1995     default:
1996       gcc_unreachable ();
1997     }
1998
1999   if (specialization || member_specialization)
2000     {
2001       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2002       for (; t; t = TREE_CHAIN (t))
2003         if (TREE_PURPOSE (t))
2004           {
2005             permerror (input_location, 
2006                        "default argument specified in explicit specialization");
2007             break;
2008           }
2009     }
2010
2011   if (specialization || member_specialization || explicit_instantiation)
2012     {
2013       tree tmpl = NULL_TREE;
2014       tree targs = NULL_TREE;
2015
2016       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2017       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2018         {
2019           tree fns;
2020
2021           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2022           if (ctype)
2023             fns = dname;
2024           else
2025             {
2026               /* If there is no class context, the explicit instantiation
2027                  must be at namespace scope.  */
2028               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2029
2030               /* Find the namespace binding, using the declaration
2031                  context.  */
2032               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2033                                            false, true);
2034               if (fns == error_mark_node || !is_overloaded_fn (fns))
2035                 {
2036                   error ("%qD is not a template function", dname);
2037                   fns = error_mark_node;
2038                 }
2039               else
2040                 {
2041                   tree fn = OVL_CURRENT (fns);
2042                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2043                                                 CP_DECL_CONTEXT (fn)))
2044                     error ("%qD is not declared in %qD",
2045                            decl, current_namespace);
2046                 }
2047             }
2048
2049           declarator = lookup_template_function (fns, NULL_TREE);
2050         }
2051
2052       if (declarator == error_mark_node)
2053         return error_mark_node;
2054
2055       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2056         {
2057           if (!explicit_instantiation)
2058             /* A specialization in class scope.  This is invalid,
2059                but the error will already have been flagged by
2060                check_specialization_scope.  */
2061             return error_mark_node;
2062           else
2063             {
2064               /* It's not valid to write an explicit instantiation in
2065                  class scope, e.g.:
2066
2067                    class C { template void f(); }
2068
2069                    This case is caught by the parser.  However, on
2070                    something like:
2071
2072                    template class C { void f(); };
2073
2074                    (which is invalid) we can get here.  The error will be
2075                    issued later.  */
2076               ;
2077             }
2078
2079           return decl;
2080         }
2081       else if (ctype != NULL_TREE
2082                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2083                    IDENTIFIER_NODE))
2084         {
2085           /* Find the list of functions in ctype that have the same
2086              name as the declared function.  */
2087           tree name = TREE_OPERAND (declarator, 0);
2088           tree fns = NULL_TREE;
2089           int idx;
2090
2091           if (constructor_name_p (name, ctype))
2092             {
2093               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2094
2095               if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2096                   : !CLASSTYPE_DESTRUCTORS (ctype))
2097                 {
2098                   /* From [temp.expl.spec]:
2099
2100                      If such an explicit specialization for the member
2101                      of a class template names an implicitly-declared
2102                      special member function (clause _special_), the
2103                      program is ill-formed.
2104
2105                      Similar language is found in [temp.explicit].  */
2106                   error ("specialization of implicitly-declared special member function");
2107                   return error_mark_node;
2108                 }
2109
2110               name = is_constructor ? ctor_identifier : dtor_identifier;
2111             }
2112
2113           if (!DECL_CONV_FN_P (decl))
2114             {
2115               idx = lookup_fnfields_1 (ctype, name);
2116               if (idx >= 0)
2117                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2118             }
2119           else
2120             {
2121               VEC(tree,gc) *methods;
2122               tree ovl;
2123
2124               /* For a type-conversion operator, we cannot do a
2125                  name-based lookup.  We might be looking for `operator
2126                  int' which will be a specialization of `operator T'.
2127                  So, we find *all* the conversion operators, and then
2128                  select from them.  */
2129               fns = NULL_TREE;
2130
2131               methods = CLASSTYPE_METHOD_VEC (ctype);
2132               if (methods)
2133                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2134                      VEC_iterate (tree, methods, idx, ovl);
2135                      ++idx)
2136                   {
2137                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2138                       /* There are no more conversion functions.  */
2139                       break;
2140
2141                     /* Glue all these conversion functions together
2142                        with those we already have.  */
2143                     for (; ovl; ovl = OVL_NEXT (ovl))
2144                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2145                   }
2146             }
2147
2148           if (fns == NULL_TREE)
2149             {
2150               error ("no member function %qD declared in %qT", name, ctype);
2151               return error_mark_node;
2152             }
2153           else
2154             TREE_OPERAND (declarator, 0) = fns;
2155         }
2156
2157       /* Figure out what exactly is being specialized at this point.
2158          Note that for an explicit instantiation, even one for a
2159          member function, we cannot tell apriori whether the
2160          instantiation is for a member template, or just a member
2161          function of a template class.  Even if a member template is
2162          being instantiated, the member template arguments may be
2163          elided if they can be deduced from the rest of the
2164          declaration.  */
2165       tmpl = determine_specialization (declarator, decl,
2166                                        &targs,
2167                                        member_specialization,
2168                                        template_count,
2169                                        tsk);
2170
2171       if (!tmpl || tmpl == error_mark_node)
2172         /* We couldn't figure out what this declaration was
2173            specializing.  */
2174         return error_mark_node;
2175       else
2176         {
2177           tree gen_tmpl = most_general_template (tmpl);
2178
2179           if (explicit_instantiation)
2180             {
2181               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2182                  is done by do_decl_instantiation later.  */
2183
2184               int arg_depth = TMPL_ARGS_DEPTH (targs);
2185               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2186
2187               if (arg_depth > parm_depth)
2188                 {
2189                   /* If TMPL is not the most general template (for
2190                      example, if TMPL is a friend template that is
2191                      injected into namespace scope), then there will
2192                      be too many levels of TARGS.  Remove some of them
2193                      here.  */
2194                   int i;
2195                   tree new_targs;
2196
2197                   new_targs = make_tree_vec (parm_depth);
2198                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2199                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2200                       = TREE_VEC_ELT (targs, i);
2201                   targs = new_targs;
2202                 }
2203
2204               return instantiate_template (tmpl, targs, tf_error);
2205             }
2206
2207           /* If we thought that the DECL was a member function, but it
2208              turns out to be specializing a static member function,
2209              make DECL a static member function as well.  */
2210           if (DECL_STATIC_FUNCTION_P (tmpl)
2211               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2212             revert_static_member_fn (decl);
2213
2214           /* If this is a specialization of a member template of a
2215              template class, we want to return the TEMPLATE_DECL, not
2216              the specialization of it.  */
2217           if (tsk == tsk_template)
2218             {
2219               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2220               DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2221               if (have_def)
2222                 {
2223                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2224                   DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2225                     = DECL_SOURCE_LOCATION (decl);
2226                   /* We want to use the argument list specified in the
2227                      definition, not in the original declaration.  */
2228                   DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2229                     = DECL_ARGUMENTS (decl);
2230                 }
2231               return tmpl;
2232             }
2233
2234           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2235           DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2236
2237           /* Inherit default function arguments from the template
2238              DECL is specializing.  */
2239           copy_default_args_to_explicit_spec (decl);
2240
2241           /* This specialization has the same protection as the
2242              template it specializes.  */
2243           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2244           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2245
2246           /* 7.1.1-1 [dcl.stc]
2247
2248              A storage-class-specifier shall not be specified in an
2249              explicit specialization...
2250
2251              The parser rejects these, so unless action is taken here,
2252              explicit function specializations will always appear with
2253              global linkage.
2254
2255              The action recommended by the C++ CWG in response to C++
2256              defect report 605 is to make the storage class and linkage
2257              of the explicit specialization match the templated function:
2258
2259              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2260            */
2261           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2262             {
2263               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2264               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2265
2266               /* This specialization has the same linkage and visibility as
2267                  the function template it specializes.  */
2268               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2269               if (! TREE_PUBLIC (decl))
2270                 {
2271                   DECL_INTERFACE_KNOWN (decl) = 1;
2272                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2273                 }
2274               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2275               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2276                 {
2277                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2278                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2279                 }
2280             }
2281
2282           /* If DECL is a friend declaration, declared using an
2283              unqualified name, the namespace associated with DECL may
2284              have been set incorrectly.  For example, in:
2285
2286                template <typename T> void f(T);
2287                namespace N {
2288                  struct S { friend void f<int>(int); }
2289                }
2290
2291              we will have set the DECL_CONTEXT for the friend
2292              declaration to N, rather than to the global namespace.  */
2293           if (DECL_NAMESPACE_SCOPE_P (decl))
2294             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2295
2296           if (is_friend && !have_def)
2297             /* This is not really a declaration of a specialization.
2298                It's just the name of an instantiation.  But, it's not
2299                a request for an instantiation, either.  */
2300             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2301           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2302             /* This is indeed a specialization.  In case of constructors
2303                and destructors, we need in-charge and not-in-charge
2304                versions in V3 ABI.  */
2305             clone_function_decl (decl, /*update_method_vec_p=*/0);
2306
2307           /* Register this specialization so that we can find it
2308              again.  */
2309           decl = register_specialization (decl, gen_tmpl, targs, is_friend);
2310         }
2311     }
2312
2313   return decl;
2314 }
2315
2316 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2317    parameters.  These are represented in the same format used for
2318    DECL_TEMPLATE_PARMS.  */
2319
2320 int
2321 comp_template_parms (const_tree parms1, const_tree parms2)
2322 {
2323   const_tree p1;
2324   const_tree p2;
2325
2326   if (parms1 == parms2)
2327     return 1;
2328
2329   for (p1 = parms1, p2 = parms2;
2330        p1 != NULL_TREE && p2 != NULL_TREE;
2331        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2332     {
2333       tree t1 = TREE_VALUE (p1);
2334       tree t2 = TREE_VALUE (p2);
2335       int i;
2336
2337       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2338       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2339
2340       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2341         return 0;
2342
2343       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2344         {
2345           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2346           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2347
2348           /* If either of the template parameters are invalid, assume
2349              they match for the sake of error recovery. */
2350           if (parm1 == error_mark_node || parm2 == error_mark_node)
2351             return 1;
2352
2353           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2354             return 0;
2355
2356           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2357               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2358                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2359             continue;
2360           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2361             return 0;
2362         }
2363     }
2364
2365   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2366     /* One set of parameters has more parameters lists than the
2367        other.  */
2368     return 0;
2369
2370   return 1;
2371 }
2372
2373 /* Determine whether PARM is a parameter pack.  */
2374 bool 
2375 template_parameter_pack_p (const_tree parm)
2376 {
2377   /* Determine if we have a non-type template parameter pack.  */
2378   if (TREE_CODE (parm) == PARM_DECL)
2379     return (DECL_TEMPLATE_PARM_P (parm) 
2380             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2381
2382   /* If this is a list of template parameters, we could get a
2383      TYPE_DECL or a TEMPLATE_DECL.  */ 
2384   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2385     parm = TREE_TYPE (parm);
2386
2387   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2388            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2389           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2390 }
2391
2392 /* Determine whether ARGS describes a variadic template args list,
2393    i.e., one that is terminated by a template argument pack.  */
2394 static bool 
2395 template_args_variadic_p (tree args)
2396 {
2397   int nargs;
2398   tree last_parm;
2399
2400   if (args == NULL_TREE)
2401     return false;
2402
2403   args = INNERMOST_TEMPLATE_ARGS (args);
2404   nargs = TREE_VEC_LENGTH (args);
2405
2406   if (nargs == 0)
2407     return false;
2408
2409   last_parm = TREE_VEC_ELT (args, nargs - 1);
2410
2411   return ARGUMENT_PACK_P (last_parm);
2412 }
2413
2414 /* Generate a new name for the parameter pack name NAME (an
2415    IDENTIFIER_NODE) that incorporates its */
2416 static tree
2417 make_ith_pack_parameter_name (tree name, int i)
2418 {
2419   /* Munge the name to include the parameter index.  */
2420   char numbuf[128];
2421   char* newname;
2422   
2423   sprintf(numbuf, "%i", i);
2424   newname = (char*)alloca (IDENTIFIER_LENGTH (name) + strlen(numbuf) + 2);
2425   sprintf(newname, "%s#%i", IDENTIFIER_POINTER (name), i);
2426   return get_identifier (newname);
2427 }
2428
2429 /* Structure used to track the progress of find_parameter_packs_r.  */
2430 struct find_parameter_pack_data 
2431 {
2432   /* TREE_LIST that will contain all of the parameter packs found by
2433      the traversal.  */
2434   tree* parameter_packs;
2435
2436   /* Set of AST nodes that have been visited by the traversal.  */
2437   struct pointer_set_t *visited;
2438 };
2439
2440 /* Identifies all of the argument packs that occur in a template
2441    argument and appends them to the TREE_LIST inside DATA, which is a
2442    find_parameter_pack_data structure. This is a subroutine of
2443    make_pack_expansion and uses_parameter_packs.  */
2444 static tree
2445 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2446 {
2447   tree t = *tp;
2448   struct find_parameter_pack_data* ppd = 
2449     (struct find_parameter_pack_data*)data;
2450   bool parameter_pack_p = false;
2451
2452   /* Identify whether this is a parameter pack or not.  */
2453   switch (TREE_CODE (t))
2454     {
2455     case TEMPLATE_PARM_INDEX:
2456       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2457         parameter_pack_p = true;
2458       break;
2459
2460     case TEMPLATE_TYPE_PARM:
2461     case TEMPLATE_TEMPLATE_PARM:
2462       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2463         parameter_pack_p = true;
2464       break;
2465
2466     case PARM_DECL:
2467       if (FUNCTION_PARAMETER_PACK_P (t))
2468         {
2469           /* We don't want to walk into the type of a PARM_DECL,
2470              because we don't want to see the type parameter pack.  */
2471           *walk_subtrees = 0;
2472           parameter_pack_p = true;
2473         }
2474       break;
2475
2476     default:
2477       /* Not a parameter pack.  */
2478       break;
2479     }
2480
2481   if (parameter_pack_p)
2482     {
2483       /* Add this parameter pack to the list.  */
2484       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2485     }
2486
2487   if (TYPE_P (t))
2488     cp_walk_tree (&TYPE_CONTEXT (t), 
2489                   &find_parameter_packs_r, ppd, ppd->visited);
2490
2491   /* This switch statement will return immediately if we don't find a
2492      parameter pack.  */
2493   switch (TREE_CODE (t)) 
2494     {
2495     case TEMPLATE_PARM_INDEX:
2496       return NULL_TREE;
2497
2498     case BOUND_TEMPLATE_TEMPLATE_PARM:
2499       /* Check the template itself.  */
2500       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
2501                     &find_parameter_packs_r, ppd, ppd->visited);
2502       /* Check the template arguments.  */
2503       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
2504                     ppd->visited);
2505       *walk_subtrees = 0;
2506       return NULL_TREE;
2507
2508     case TEMPLATE_TYPE_PARM:
2509     case TEMPLATE_TEMPLATE_PARM:
2510       return NULL_TREE;
2511
2512     case PARM_DECL:
2513       return NULL_TREE;
2514
2515     case RECORD_TYPE:
2516       if (TYPE_PTRMEMFUNC_P (t))
2517         return NULL_TREE;
2518       /* Fall through.  */
2519
2520     case UNION_TYPE:
2521     case ENUMERAL_TYPE:
2522       if (TYPE_TEMPLATE_INFO (t))
2523         cp_walk_tree (&TREE_VALUE (TYPE_TEMPLATE_INFO (t)), 
2524                       &find_parameter_packs_r, ppd, ppd->visited);
2525
2526       *walk_subtrees = 0;
2527       return NULL_TREE;
2528
2529     case TEMPLATE_DECL:
2530       cp_walk_tree (&TREE_TYPE (t),
2531                     &find_parameter_packs_r, ppd, ppd->visited);
2532       return NULL_TREE;
2533  
2534     case TYPENAME_TYPE:
2535       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
2536                    ppd, ppd->visited);
2537       *walk_subtrees = 0;
2538       return NULL_TREE;
2539       
2540     case TYPE_PACK_EXPANSION:
2541     case EXPR_PACK_EXPANSION:
2542       *walk_subtrees = 0;
2543       return NULL_TREE;
2544
2545     case INTEGER_TYPE:
2546       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
2547                     ppd, ppd->visited);
2548       *walk_subtrees = 0;
2549       return NULL_TREE;
2550
2551     case IDENTIFIER_NODE:
2552       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
2553                     ppd->visited);
2554       *walk_subtrees = 0;
2555       return NULL_TREE;
2556
2557     default:
2558       return NULL_TREE;
2559     }
2560
2561   return NULL_TREE;
2562 }
2563
2564 /* Determines if the expression or type T uses any parameter packs.  */
2565 bool
2566 uses_parameter_packs (tree t)
2567 {
2568   tree parameter_packs = NULL_TREE;
2569   struct find_parameter_pack_data ppd;
2570   ppd.parameter_packs = &parameter_packs;
2571   ppd.visited = pointer_set_create ();
2572   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2573   pointer_set_destroy (ppd.visited);
2574   return parameter_packs != NULL_TREE;
2575 }
2576
2577 /* Turn ARG, which may be an expression, type, or a TREE_LIST
2578    representation a base-class initializer into a parameter pack
2579    expansion. If all goes well, the resulting node will be an
2580    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
2581    respectively.  */
2582 tree 
2583 make_pack_expansion (tree arg)
2584 {
2585   tree result;
2586   tree parameter_packs = NULL_TREE;
2587   bool for_types = false;
2588   struct find_parameter_pack_data ppd;
2589
2590   if (!arg || arg == error_mark_node)
2591     return arg;
2592
2593   if (TREE_CODE (arg) == TREE_LIST)
2594     {
2595       /* The only time we will see a TREE_LIST here is for a base
2596          class initializer.  In this case, the TREE_PURPOSE will be a
2597          _TYPE node (representing the base class expansion we're
2598          initializing) and the TREE_VALUE will be a TREE_LIST
2599          containing the initialization arguments. 
2600
2601          The resulting expansion looks somewhat different from most
2602          expansions. Rather than returning just one _EXPANSION, we
2603          return a TREE_LIST whose TREE_PURPOSE is a
2604          TYPE_PACK_EXPANSION containing the bases that will be
2605          initialized.  The TREE_VALUE will be identical to the
2606          original TREE_VALUE, which is a list of arguments that will
2607          be passed to each base.  We do not introduce any new pack
2608          expansion nodes into the TREE_VALUE (although it is possible
2609          that some already exist), because the TREE_PURPOSE and
2610          TREE_VALUE all need to be expanded together with the same
2611          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
2612          resulting TREE_PURPOSE will mention the parameter packs in
2613          both the bases and the arguments to the bases.  */
2614       tree purpose;
2615       tree value;
2616       tree parameter_packs = NULL_TREE;
2617
2618       /* Determine which parameter packs will be used by the base
2619          class expansion.  */
2620       ppd.visited = pointer_set_create ();
2621       ppd.parameter_packs = &parameter_packs;
2622       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
2623                     &ppd, ppd.visited);
2624
2625       if (parameter_packs == NULL_TREE)
2626         {
2627           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
2628           pointer_set_destroy (ppd.visited);
2629           return error_mark_node;
2630         }
2631
2632       if (TREE_VALUE (arg) != void_type_node)
2633         {
2634           /* Collect the sets of parameter packs used in each of the
2635              initialization arguments.  */
2636           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
2637             {
2638               /* Determine which parameter packs will be expanded in this
2639                  argument.  */
2640               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
2641                             &ppd, ppd.visited);
2642             }
2643         }
2644
2645       pointer_set_destroy (ppd.visited);
2646
2647       /* Create the pack expansion type for the base type.  */
2648       purpose = make_node (TYPE_PACK_EXPANSION);
2649       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
2650       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
2651
2652       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2653          they will rarely be compared to anything.  */
2654       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
2655
2656       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
2657     }
2658
2659   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
2660     for_types = true;
2661
2662   /* Build the PACK_EXPANSION_* node.  */
2663   result = make_node (for_types ? TYPE_PACK_EXPANSION : EXPR_PACK_EXPANSION);
2664   SET_PACK_EXPANSION_PATTERN (result, arg);
2665   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
2666     {
2667       /* Propagate type and const-expression information.  */
2668       TREE_TYPE (result) = TREE_TYPE (arg);
2669       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
2670     }
2671   else
2672     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2673        they will rarely be compared to anything.  */
2674     SET_TYPE_STRUCTURAL_EQUALITY (result);
2675
2676   /* Determine which parameter packs will be expanded.  */
2677   ppd.parameter_packs = &parameter_packs;
2678   ppd.visited = pointer_set_create ();
2679   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
2680   pointer_set_destroy (ppd.visited);
2681
2682   /* Make sure we found some parameter packs.  */
2683   if (parameter_packs == NULL_TREE)
2684     {
2685       if (TYPE_P (arg))
2686         error ("expansion pattern %<%T%> contains no argument packs", arg);
2687       else
2688         error ("expansion pattern %<%E%> contains no argument packs", arg);
2689       return error_mark_node;
2690     }
2691   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
2692
2693   return result;
2694 }
2695
2696 /* Checks T for any "bare" parameter packs, which have not yet been
2697    expanded, and issues an error if any are found. This operation can
2698    only be done on full expressions or types (e.g., an expression
2699    statement, "if" condition, etc.), because we could have expressions like:
2700
2701      foo(f(g(h(args)))...)
2702
2703    where "args" is a parameter pack. check_for_bare_parameter_packs
2704    should not be called for the subexpressions args, h(args),
2705    g(h(args)), or f(g(h(args))), because we would produce erroneous
2706    error messages. 
2707
2708    Returns TRUE and emits an error if there were bare parameter packs,
2709    returns FALSE otherwise.  */
2710 bool 
2711 check_for_bare_parameter_packs (tree t)
2712 {
2713   tree parameter_packs = NULL_TREE;
2714   struct find_parameter_pack_data ppd;
2715
2716   if (!processing_template_decl || !t || t == error_mark_node)
2717     return false;
2718
2719   if (TREE_CODE (t) == TYPE_DECL)
2720     t = TREE_TYPE (t);
2721
2722   ppd.parameter_packs = &parameter_packs;
2723   ppd.visited = pointer_set_create ();
2724   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2725   pointer_set_destroy (ppd.visited);
2726
2727   if (parameter_packs) 
2728     {
2729       error ("parameter packs not expanded with %<...%>:");
2730       while (parameter_packs)
2731         {
2732           tree pack = TREE_VALUE (parameter_packs);
2733           tree name = NULL_TREE;
2734
2735           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
2736               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
2737             name = TYPE_NAME (pack);
2738           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
2739             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
2740           else
2741             name = DECL_NAME (pack);
2742
2743           if (name)
2744             inform ("        %qD", name);
2745           else
2746             inform ("        <anonymous>");
2747
2748           parameter_packs = TREE_CHAIN (parameter_packs);
2749         }
2750
2751       return true;
2752     }
2753
2754   return false;
2755 }
2756
2757 /* Expand any parameter packs that occur in the template arguments in
2758    ARGS.  */
2759 tree
2760 expand_template_argument_pack (tree args)
2761 {
2762   tree result_args = NULL_TREE;
2763   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
2764   int num_result_args = -1;
2765
2766   /* First, determine if we need to expand anything, and the number of
2767      slots we'll need.  */
2768   for (in_arg = 0; in_arg < nargs; ++in_arg)
2769     {
2770       tree arg = TREE_VEC_ELT (args, in_arg);
2771       if (ARGUMENT_PACK_P (arg))
2772         {
2773           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
2774           if (num_result_args < 0)
2775             num_result_args = in_arg + num_packed;
2776           else
2777             num_result_args += num_packed;
2778         }
2779       else
2780         {
2781           if (num_result_args >= 0)
2782             num_result_args++;
2783         }
2784     }
2785
2786   /* If no expansion is necessary, we're done.  */
2787   if (num_result_args < 0)
2788     return args;
2789
2790   /* Expand arguments.  */
2791   result_args = make_tree_vec (num_result_args);
2792   for (in_arg = 0; in_arg < nargs; ++in_arg)
2793     {
2794       tree arg = TREE_VEC_ELT (args, in_arg);
2795       if (ARGUMENT_PACK_P (arg))
2796         {
2797           tree packed = ARGUMENT_PACK_ARGS (arg);
2798           int i, num_packed = TREE_VEC_LENGTH (packed);
2799           for (i = 0; i < num_packed; ++i, ++out_arg)
2800             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
2801         }
2802       else
2803         {
2804           TREE_VEC_ELT (result_args, out_arg) = arg;
2805           ++out_arg;
2806         }
2807     }
2808
2809   return result_args;
2810 }
2811
2812 /* Checks if DECL shadows a template parameter.
2813
2814    [temp.local]: A template-parameter shall not be redeclared within its
2815    scope (including nested scopes).
2816
2817    Emits an error and returns TRUE if the DECL shadows a parameter,
2818    returns FALSE otherwise.  */
2819
2820 bool
2821 check_template_shadow (tree decl)
2822 {
2823   tree olddecl;
2824
2825   /* If we're not in a template, we can't possibly shadow a template
2826      parameter.  */
2827   if (!current_template_parms)
2828     return true;
2829
2830   /* Figure out what we're shadowing.  */
2831   if (TREE_CODE (decl) == OVERLOAD)
2832     decl = OVL_CURRENT (decl);
2833   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2834
2835   /* If there's no previous binding for this name, we're not shadowing
2836      anything, let alone a template parameter.  */
2837   if (!olddecl)
2838     return true;
2839
2840   /* If we're not shadowing a template parameter, we're done.  Note
2841      that OLDDECL might be an OVERLOAD (or perhaps even an
2842      ERROR_MARK), so we can't just blithely assume it to be a _DECL
2843      node.  */
2844   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2845     return true;
2846
2847   /* We check for decl != olddecl to avoid bogus errors for using a
2848      name inside a class.  We check TPFI to avoid duplicate errors for
2849      inline member templates.  */
2850   if (decl == olddecl
2851       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2852     return true;
2853
2854   error ("declaration of %q+#D", decl);
2855   error (" shadows template parm %q+#D", olddecl);
2856   return false;
2857 }
2858
2859 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2860    ORIG_LEVEL, DECL, and TYPE.  */
2861
2862 static tree
2863 build_template_parm_index (int index,
2864                            int level,
2865                            int orig_level,
2866                            tree decl,
2867                            tree type)
2868 {
2869   tree t = make_node (TEMPLATE_PARM_INDEX);
2870   TEMPLATE_PARM_IDX (t) = index;
2871   TEMPLATE_PARM_LEVEL (t) = level;
2872   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2873   TEMPLATE_PARM_DECL (t) = decl;
2874   TREE_TYPE (t) = type;
2875   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2876   TREE_READONLY (t) = TREE_READONLY (decl);
2877
2878   return t;
2879 }
2880
2881 /* Find the canonical type parameter for the given template type
2882    parameter.  Returns the canonical type parameter, which may be TYPE
2883    if no such parameter existed.  */
2884 static tree
2885 canonical_type_parameter (tree type)
2886 {
2887   tree list;
2888   int idx = TEMPLATE_TYPE_IDX (type);
2889   if (!canonical_template_parms)
2890     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
2891
2892   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
2893     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
2894
2895   list = VEC_index (tree, canonical_template_parms, idx);
2896   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
2897     list = TREE_CHAIN (list);
2898
2899   if (list)
2900     return TREE_VALUE (list);
2901   else
2902     {
2903       VEC_replace(tree, canonical_template_parms, idx,
2904                   tree_cons (NULL_TREE, type, 
2905                              VEC_index (tree, canonical_template_parms, idx)));
2906       return type;
2907     }
2908 }
2909
2910 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2911    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
2912    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2913    new one is created.  */
2914
2915 static tree
2916 reduce_template_parm_level (tree index, tree type, int levels, tree args,
2917                             tsubst_flags_t complain)
2918 {
2919   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2920       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2921           != TEMPLATE_PARM_LEVEL (index) - levels))
2922     {
2923       tree orig_decl = TEMPLATE_PARM_DECL (index);
2924       tree decl, t;
2925
2926       decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2927       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2928       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2929       DECL_ARTIFICIAL (decl) = 1;
2930       SET_DECL_TEMPLATE_PARM_P (decl);
2931
2932       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2933                                      TEMPLATE_PARM_LEVEL (index) - levels,
2934                                      TEMPLATE_PARM_ORIG_LEVEL (index),
2935                                      decl, type);
2936       TEMPLATE_PARM_DESCENDANTS (index) = t;
2937       TEMPLATE_PARM_PARAMETER_PACK (t) 
2938         = TEMPLATE_PARM_PARAMETER_PACK (index);
2939
2940         /* Template template parameters need this.  */
2941       if (TREE_CODE (decl) == TEMPLATE_DECL)
2942         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
2943           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
2944            args, complain);
2945     }
2946
2947   return TEMPLATE_PARM_DESCENDANTS (index);
2948 }
2949
2950 /* Process information from new template parameter PARM and append it to the
2951    LIST being built.  This new parameter is a non-type parameter iff
2952    IS_NON_TYPE is true. This new parameter is a parameter
2953    pack iff IS_PARAMETER_PACK is true.  */
2954
2955 tree
2956 process_template_parm (tree list, tree parm, bool is_non_type, 
2957                        bool is_parameter_pack)
2958 {
2959   tree decl = 0;
2960   tree defval;
2961   tree err_parm_list;
2962   int idx = 0;
2963
2964   gcc_assert (TREE_CODE (parm) == TREE_LIST);
2965   defval = TREE_PURPOSE (parm);
2966
2967   if (list)
2968     {
2969       tree p = tree_last (list);
2970
2971       if (p && TREE_VALUE (p) != error_mark_node)
2972         {
2973           p = TREE_VALUE (p);
2974           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2975             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2976           else
2977             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2978         }
2979
2980       ++idx;
2981     }
2982   else
2983     idx = 0;
2984
2985   if (is_non_type)
2986     {
2987       parm = TREE_VALUE (parm);
2988
2989       SET_DECL_TEMPLATE_PARM_P (parm);
2990
2991       if (TREE_TYPE (parm) == error_mark_node)
2992         {
2993           err_parm_list = build_tree_list (defval, parm);
2994           TREE_VALUE (err_parm_list) = error_mark_node;
2995            return chainon (list, err_parm_list);
2996         }
2997       else
2998       {
2999         /* [temp.param]
3000
3001            The top-level cv-qualifiers on the template-parameter are
3002            ignored when determining its type.  */
3003         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3004         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3005           {
3006             err_parm_list = build_tree_list (defval, parm);
3007             TREE_VALUE (err_parm_list) = error_mark_node;
3008              return chainon (list, err_parm_list);
3009           }
3010
3011         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3012           {
3013             /* This template parameter is not a parameter pack, but it
3014                should be. Complain about "bare" parameter packs.  */
3015             check_for_bare_parameter_packs (TREE_TYPE (parm));
3016             
3017             /* Recover by calling this a parameter pack.  */
3018             is_parameter_pack = true;
3019           }
3020       }
3021
3022       /* A template parameter is not modifiable.  */
3023       TREE_CONSTANT (parm) = 1;
3024       TREE_READONLY (parm) = 1;
3025       decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3026       TREE_CONSTANT (decl) = 1;
3027       TREE_READONLY (decl) = 1;
3028       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3029         = build_template_parm_index (idx, processing_template_decl,
3030                                      processing_template_decl,
3031                                      decl, TREE_TYPE (parm));
3032
3033       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3034         = is_parameter_pack;
3035     }
3036   else
3037     {
3038       tree t;
3039       parm = TREE_VALUE (TREE_VALUE (parm));
3040
3041       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3042         {
3043           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3044           /* This is for distinguishing between real templates and template
3045              template parameters */
3046           TREE_TYPE (parm) = t;
3047           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3048           decl = parm;
3049         }
3050       else
3051         {
3052           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3053           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3054           decl = build_decl (TYPE_DECL, parm, t);
3055         }
3056
3057       TYPE_NAME (t) = decl;
3058       TYPE_STUB_DECL (t) = decl;
3059       parm = decl;
3060       TEMPLATE_TYPE_PARM_INDEX (t)
3061         = build_template_parm_index (idx, processing_template_decl,
3062                                      processing_template_decl,
3063                                      decl, TREE_TYPE (parm));
3064       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3065       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3066     }
3067   DECL_ARTIFICIAL (decl) = 1;
3068   SET_DECL_TEMPLATE_PARM_P (decl);
3069   pushdecl (decl);
3070   parm = build_tree_list (defval, parm);
3071   return chainon (list, parm);
3072 }
3073
3074 /* The end of a template parameter list has been reached.  Process the
3075    tree list into a parameter vector, converting each parameter into a more
3076    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3077    as PARM_DECLs.  */
3078
3079 tree
3080 end_template_parm_list (tree parms)
3081 {
3082   int nparms;
3083   tree parm, next;
3084   tree saved_parmlist = make_tree_vec (list_length (parms));
3085
3086   current_template_parms
3087     = tree_cons (size_int (processing_template_decl),
3088                  saved_parmlist, current_template_parms);
3089
3090   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3091     {
3092       next = TREE_CHAIN (parm);
3093       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3094       TREE_CHAIN (parm) = NULL_TREE;
3095     }
3096
3097   --processing_template_parmlist;
3098
3099   return saved_parmlist;
3100 }
3101
3102 /* end_template_decl is called after a template declaration is seen.  */
3103
3104 void
3105 end_template_decl (void)
3106 {
3107   reset_specialization ();
3108
3109   if (! processing_template_decl)
3110     return;
3111
3112   /* This matches the pushlevel in begin_template_parm_list.  */
3113   finish_scope ();
3114
3115   --processing_template_decl;
3116   current_template_parms = TREE_CHAIN (current_template_parms);
3117 }
3118
3119 /* Within the declaration of a template, return all levels of template
3120    parameters that apply.  The template parameters are represented as
3121    a TREE_VEC, in the form documented in cp-tree.h for template
3122    arguments.  */
3123
3124 static tree
3125 current_template_args (void)
3126 {
3127   tree header;
3128   tree args = NULL_TREE;
3129   int length = TMPL_PARMS_DEPTH (current_template_parms);
3130   int l = length;
3131
3132   /* If there is only one level of template parameters, we do not
3133      create a TREE_VEC of TREE_VECs.  Instead, we return a single
3134      TREE_VEC containing the arguments.  */
3135   if (length > 1)
3136     args = make_tree_vec (length);
3137
3138   for (header = current_template_parms; header; header = TREE_CHAIN (header))
3139     {
3140       tree a = copy_node (TREE_VALUE (header));
3141       int i;
3142
3143       TREE_TYPE (a) = NULL_TREE;
3144       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3145         {
3146           tree t = TREE_VEC_ELT (a, i);
3147
3148           /* T will be a list if we are called from within a
3149              begin/end_template_parm_list pair, but a vector directly
3150              if within a begin/end_member_template_processing pair.  */
3151           if (TREE_CODE (t) == TREE_LIST)
3152             {
3153               t = TREE_VALUE (t);
3154
3155               if (!error_operand_p (t))
3156                 {
3157                   if (TREE_CODE (t) == TYPE_DECL
3158                       || TREE_CODE (t) == TEMPLATE_DECL)
3159                     {
3160                       t = TREE_TYPE (t);
3161                       
3162                       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3163                         {
3164                           /* Turn this argument into a TYPE_ARGUMENT_PACK
3165                              with a single element, which expands T.  */
3166                           tree vec = make_tree_vec (1);
3167                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3168                           
3169                           t = make_node (TYPE_ARGUMENT_PACK);
3170                           SET_ARGUMENT_PACK_ARGS (t, vec);
3171                         }
3172                     }
3173                   else
3174                     {
3175                       t = DECL_INITIAL (t);
3176                       
3177                       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3178                         {
3179                           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3180                              with a single element, which expands T.  */
3181                           tree vec = make_tree_vec (1);
3182                           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3183                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3184                           
3185                           t  = make_node (NONTYPE_ARGUMENT_PACK);
3186                           SET_ARGUMENT_PACK_ARGS (t, vec);
3187                           TREE_TYPE (t) = type;
3188                         }
3189                     }
3190                   TREE_VEC_ELT (a, i) = t;
3191                 }
3192             }
3193         }
3194
3195       if (length > 1)
3196         TREE_VEC_ELT (args, --l) = a;
3197       else
3198         args = a;
3199     }
3200
3201   return args;
3202 }
3203
3204 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3205    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
3206    a member template.  Used by push_template_decl below.  */
3207
3208 static tree
3209 build_template_decl (tree decl, tree parms, bool member_template_p)
3210 {
3211   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3212   DECL_TEMPLATE_PARMS (tmpl) = parms;
3213   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3214   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3215   if (DECL_LANG_SPECIFIC (decl))
3216     {
3217       DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
3218       DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
3219       DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
3220       DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
3221       DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
3222       if (DECL_OVERLOADED_OPERATOR_P (decl))
3223         SET_OVERLOADED_OPERATOR_CODE (tmpl,
3224                                       DECL_OVERLOADED_OPERATOR_P (decl));
3225     }
3226
3227   return tmpl;
3228 }
3229
3230 struct template_parm_data
3231 {
3232   /* The level of the template parameters we are currently
3233      processing.  */
3234   int level;
3235
3236   /* The index of the specialization argument we are currently
3237      processing.  */
3238   int current_arg;
3239
3240   /* An array whose size is the number of template parameters.  The
3241      elements are nonzero if the parameter has been used in any one
3242      of the arguments processed so far.  */
3243   int* parms;
3244
3245   /* An array whose size is the number of template arguments.  The
3246      elements are nonzero if the argument makes use of template
3247      parameters of this level.  */
3248   int* arg_uses_template_parms;
3249 };
3250
3251 /* Subroutine of push_template_decl used to see if each template
3252    parameter in a partial specialization is used in the explicit
3253    argument list.  If T is of the LEVEL given in DATA (which is
3254    treated as a template_parm_data*), then DATA->PARMS is marked
3255    appropriately.  */
3256
3257 static int
3258 mark_template_parm (tree t, void* data)
3259 {
3260   int level;
3261   int idx;
3262   struct template_parm_data* tpd = (struct template_parm_data*) data;
3263
3264   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3265     {
3266       level = TEMPLATE_PARM_LEVEL (t);
3267       idx = TEMPLATE_PARM_IDX (t);
3268     }
3269   else
3270     {
3271       level = TEMPLATE_TYPE_LEVEL (t);
3272       idx = TEMPLATE_TYPE_IDX (t);
3273     }
3274
3275   if (level == tpd->level)
3276     {
3277       tpd->parms[idx] = 1;
3278       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3279     }
3280
3281   /* Return zero so that for_each_template_parm will continue the
3282      traversal of the tree; we want to mark *every* template parm.  */
3283   return 0;
3284 }
3285
3286 /* Process the partial specialization DECL.  */
3287
3288 static tree
3289 process_partial_specialization (tree decl)
3290 {
3291   tree type = TREE_TYPE (decl);
3292   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3293   tree specargs = CLASSTYPE_TI_ARGS (type);
3294   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3295   tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3296   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3297   int nargs = TREE_VEC_LENGTH (inner_args);
3298   int ntparms = TREE_VEC_LENGTH (inner_parms);
3299   int  i;
3300   int did_error_intro = 0;
3301   struct template_parm_data tpd;
3302   struct template_parm_data tpd2;
3303
3304   /* We check that each of the template parameters given in the
3305      partial specialization is used in the argument list to the
3306      specialization.  For example:
3307
3308        template <class T> struct S;
3309        template <class T> struct S<T*>;
3310
3311      The second declaration is OK because `T*' uses the template
3312      parameter T, whereas
3313
3314        template <class T> struct S<int>;
3315
3316      is no good.  Even trickier is:
3317
3318        template <class T>
3319        struct S1
3320        {
3321           template <class U>
3322           struct S2;
3323           template <class U>
3324           struct S2<T>;
3325        };
3326
3327      The S2<T> declaration is actually invalid; it is a
3328      full-specialization.  Of course,
3329
3330           template <class U>
3331           struct S2<T (*)(U)>;
3332
3333      or some such would have been OK.  */
3334   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3335   tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3336   memset (tpd.parms, 0, sizeof (int) * ntparms);
3337
3338   tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3339   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3340   for (i = 0; i < nargs; ++i)
3341     {
3342       tpd.current_arg = i;
3343       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3344                               &mark_template_parm,
3345                               &tpd,
3346                               NULL,
3347                               /*include_nondeduced_p=*/false);
3348     }
3349   for (i = 0; i < ntparms; ++i)
3350     if (tpd.parms[i] == 0)
3351       {
3352         /* One of the template parms was not used in the
3353            specialization.  */
3354         if (!did_error_intro)
3355           {
3356             error ("template parameters not used in partial specialization:");
3357             did_error_intro = 1;
3358           }
3359
3360         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3361       }
3362
3363   /* [temp.class.spec]
3364
3365      The argument list of the specialization shall not be identical to
3366      the implicit argument list of the primary template.  */
3367   if (comp_template_args
3368       (inner_args,
3369        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3370                                                    (maintmpl)))))
3371     error ("partial specialization %qT does not specialize any template arguments", type);
3372
3373   /* [temp.class.spec]
3374
3375      A partially specialized non-type argument expression shall not
3376      involve template parameters of the partial specialization except
3377      when the argument expression is a simple identifier.
3378
3379      The type of a template parameter corresponding to a specialized
3380      non-type argument shall not be dependent on a parameter of the
3381      specialization. 
3382
3383      Also, we verify that pack expansions only occur at the
3384      end of the argument list.  */
3385   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3386   tpd2.parms = 0;
3387   for (i = 0; i < nargs; ++i)
3388     {
3389       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3390       tree arg = TREE_VEC_ELT (inner_args, i);
3391       tree packed_args = NULL_TREE;
3392       int j, len = 1;
3393
3394       if (ARGUMENT_PACK_P (arg))
3395         {
3396           /* Extract the arguments from the argument pack. We'll be
3397              iterating over these in the following loop.  */
3398           packed_args = ARGUMENT_PACK_ARGS (arg);
3399           len = TREE_VEC_LENGTH (packed_args);
3400         }
3401
3402       for (j = 0; j < len; j++)
3403         {
3404           if (packed_args)
3405             /* Get the Jth argument in the parameter pack.  */
3406             arg = TREE_VEC_ELT (packed_args, j);
3407
3408           if (PACK_EXPANSION_P (arg))
3409             {
3410               /* Pack expansions must come at the end of the
3411                  argument list.  */
3412               if ((packed_args && j < len - 1)
3413                   || (!packed_args && i < nargs - 1))
3414                 {
3415                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3416                     error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3417                   else
3418                     error ("parameter pack argument %qT must be at the end of the template argument list", arg);
3419
3420                   if (packed_args)
3421                     TREE_VEC_ELT (packed_args, j) = error_mark_node;
3422                 }
3423             }
3424
3425           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3426             /* We only care about the pattern.  */
3427             arg = PACK_EXPANSION_PATTERN (arg);
3428
3429           if (/* These first two lines are the `non-type' bit.  */
3430               !TYPE_P (arg)
3431               && TREE_CODE (arg) != TEMPLATE_DECL
3432               /* This next line is the `argument expression is not just a
3433                  simple identifier' condition and also the `specialized
3434                  non-type argument' bit.  */
3435               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3436             {
3437               if ((!packed_args && tpd.arg_uses_template_parms[i])
3438                   || (packed_args && uses_template_parms (arg)))
3439                 error ("template argument %qE involves template parameter(s)",
3440                        arg);
3441               else 
3442                 {
3443                   /* Look at the corresponding template parameter,
3444                      marking which template parameters its type depends
3445                      upon.  */
3446                   tree type = TREE_TYPE (parm);
3447
3448                   if (!tpd2.parms)
3449                     {
3450                       /* We haven't yet initialized TPD2.  Do so now.  */
3451                       tpd2.arg_uses_template_parms 
3452                         = (int *) alloca (sizeof (int) * nargs);
3453                       /* The number of parameters here is the number in the
3454                          main template, which, as checked in the assertion
3455                          above, is NARGS.  */
3456                       tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3457                       tpd2.level = 
3458                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3459                     }
3460
3461                   /* Mark the template parameters.  But this time, we're
3462                      looking for the template parameters of the main
3463                      template, not in the specialization.  */
3464                   tpd2.current_arg = i;
3465                   tpd2.arg_uses_template_parms[i] = 0;
3466                   memset (tpd2.parms, 0, sizeof (int) * nargs);
3467                   for_each_template_parm (type,
3468                                           &mark_template_parm,
3469                                           &tpd2,
3470                                           NULL,
3471                                           /*include_nondeduced_p=*/false);
3472
3473                   if (tpd2.arg_uses_template_parms [i])
3474                     {
3475                       /* The type depended on some template parameters.
3476                          If they are fully specialized in the
3477                          specialization, that's OK.  */
3478                       int j;
3479                       for (j = 0; j < nargs; ++j)
3480                         if (tpd2.parms[j] != 0
3481                             && tpd.arg_uses_template_parms [j])
3482                           {
3483                             error ("type %qT of template argument %qE depends "
3484                                    "on template parameter(s)", 
3485                                    type,
3486                                    arg);
3487                             break;
3488                           }
3489                     }
3490                 }
3491             }
3492         }
3493     }
3494
3495   if (retrieve_specialization (maintmpl, specargs,
3496                                /*class_specializations_p=*/true))
3497     /* We've already got this specialization.  */
3498     return decl;
3499
3500   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
3501     = tree_cons (specargs, inner_parms,
3502                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
3503   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3504   return decl;
3505 }
3506
3507 /* Check that a template declaration's use of default arguments and
3508    parameter packs is not invalid.  Here, PARMS are the template
3509    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
3510    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
3511    specialization.
3512    
3513
3514    IS_FRIEND_DECL is nonzero if DECL is a friend function template
3515    declaration (but not a definition); 1 indicates a declaration, 2
3516    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3517    emitted for extraneous default arguments.
3518
3519    Returns TRUE if there were no errors found, FALSE otherwise. */
3520
3521 bool
3522 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
3523                          int is_partial, int is_friend_decl)
3524 {
3525   const char *msg;
3526   int last_level_to_check;
3527   tree parm_level;
3528   bool no_errors = true;
3529
3530   /* [temp.param]
3531
3532      A default template-argument shall not be specified in a
3533      function template declaration or a function template definition, nor
3534      in the template-parameter-list of the definition of a member of a
3535      class template.  */
3536
3537   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
3538     /* You can't have a function template declaration in a local
3539        scope, nor you can you define a member of a class template in a
3540        local scope.  */
3541     return true;
3542
3543   if (current_class_type
3544       && !TYPE_BEING_DEFINED (current_class_type)
3545       && DECL_LANG_SPECIFIC (decl)
3546       /* If this is either a friend defined in the scope of the class
3547          or a member function.  */
3548       && (DECL_FUNCTION_MEMBER_P (decl)
3549           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3550           : DECL_FRIEND_CONTEXT (decl)
3551           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3552           : false)
3553       /* And, if it was a member function, it really was defined in
3554          the scope of the class.  */
3555       && (!DECL_FUNCTION_MEMBER_P (decl)
3556           || DECL_INITIALIZED_IN_CLASS_P (decl)))
3557     /* We already checked these parameters when the template was
3558        declared, so there's no need to do it again now.  This function
3559        was defined in class scope, but we're processing it's body now
3560        that the class is complete.  */
3561     return true;
3562
3563   /* Core issue 226 (C++0x only): the following only applies to class
3564      templates.  */
3565   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
3566     {
3567       /* [temp.param]
3568
3569          If a template-parameter has a default template-argument, all
3570          subsequent template-parameters shall have a default
3571          template-argument supplied.  */
3572       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3573         {
3574           tree inner_parms = TREE_VALUE (parm_level);
3575           int ntparms = TREE_VEC_LENGTH (inner_parms);
3576           int seen_def_arg_p = 0;
3577           int i;
3578
3579           for (i = 0; i < ntparms; ++i)
3580             {
3581               tree parm = TREE_VEC_ELT (inner_parms, i);
3582
3583               if (parm == error_mark_node)
3584                 continue;
3585
3586               if (TREE_PURPOSE (parm))
3587                 seen_def_arg_p = 1;
3588               else if (seen_def_arg_p)
3589                 {
3590                   error ("no default argument for %qD", TREE_VALUE (parm));
3591                   /* For better subsequent error-recovery, we indicate that
3592                      there should have been a default argument.  */
3593                   TREE_PURPOSE (parm) = error_mark_node;
3594                   no_errors = false;
3595                 }
3596               else if (is_primary
3597                        && !is_partial
3598                        && !is_friend_decl
3599                        && TREE_CODE (decl) == TYPE_DECL
3600                        && i < ntparms - 1
3601                        && template_parameter_pack_p (TREE_VALUE (parm)))
3602                 {
3603                   /* A primary class template can only have one
3604                      parameter pack, at the end of the template
3605                      parameter list.  */
3606
3607                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
3608                     error ("parameter pack %qE must be at the end of the"
3609                            " template parameter list", TREE_VALUE (parm));
3610                   else
3611                     error ("parameter pack %qT must be at the end of the"
3612                            " template parameter list", 
3613                            TREE_TYPE (TREE_VALUE (parm)));
3614
3615                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
3616                     = error_mark_node;
3617                   no_errors = false;
3618                 }
3619             }
3620         }
3621     }
3622
3623   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
3624       || is_partial 
3625       || !is_primary
3626       || is_friend_decl)
3627     /* For an ordinary class template, default template arguments are
3628        allowed at the innermost level, e.g.:
3629          template <class T = int>
3630          struct S {};
3631        but, in a partial specialization, they're not allowed even
3632        there, as we have in [temp.class.spec]:
3633
3634          The template parameter list of a specialization shall not
3635          contain default template argument values.
3636
3637        So, for a partial specialization, or for a function template
3638        (in C++98/C++03), we look at all of them.  */
3639     ;
3640   else
3641     /* But, for a primary class template that is not a partial
3642        specialization we look at all template parameters except the
3643        innermost ones.  */
3644     parms = TREE_CHAIN (parms);
3645
3646   /* Figure out what error message to issue.  */
3647   if (is_friend_decl == 2)
3648     msg = "default template arguments may not be used in function template friend re-declaration";
3649   else if (is_friend_decl)
3650     msg = "default template arguments may not be used in function template friend declarations";
3651   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
3652     msg = "default template arguments may not be used in function templates";
3653   else if (is_partial)
3654     msg = "default template arguments may not be used in partial specializations";
3655   else
3656     msg = "default argument for template parameter for class enclosing %qD";
3657
3658   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
3659     /* If we're inside a class definition, there's no need to
3660        examine the parameters to the class itself.  On the one
3661        hand, they will be checked when the class is defined, and,
3662        on the other, default arguments are valid in things like:
3663          template <class T = double>
3664          struct S { template <class U> void f(U); };
3665        Here the default argument for `S' has no bearing on the
3666        declaration of `f'.  */
3667     last_level_to_check = template_class_depth (current_class_type) + 1;
3668   else
3669     /* Check everything.  */
3670     last_level_to_check = 0;
3671
3672   for (parm_level = parms;
3673        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
3674        parm_level = TREE_CHAIN (parm_level))
3675     {
3676       tree inner_parms = TREE_VALUE (parm_level);
3677       int i;
3678       int ntparms;
3679
3680       ntparms = TREE_VEC_LENGTH (inner_parms);
3681       for (i = 0; i < ntparms; ++i)
3682         {
3683           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
3684             continue;
3685
3686           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
3687             {
3688               if (msg)
3689                 {
3690                   no_errors = false;
3691                   if (is_friend_decl == 2)
3692                     return no_errors;
3693
3694                   error (msg, decl);
3695                   msg = 0;
3696                 }
3697
3698               /* Clear out the default argument so that we are not
3699                  confused later.  */
3700               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
3701             }
3702         }
3703
3704       /* At this point, if we're still interested in issuing messages,
3705          they must apply to classes surrounding the object declared.  */
3706       if (msg)
3707         msg = "default argument for template parameter for class enclosing %qD";
3708     }
3709
3710   return no_errors;
3711 }
3712
3713 /* Worker for push_template_decl_real, called via
3714    for_each_template_parm.  DATA is really an int, indicating the
3715    level of the parameters we are interested in.  If T is a template
3716    parameter of that level, return nonzero.  */
3717
3718 static int
3719 template_parm_this_level_p (tree t, void* data)
3720 {
3721   int this_level = *(int *)data;
3722   int level;
3723
3724   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3725     level = TEMPLATE_PARM_LEVEL (t);
3726   else
3727     level = TEMPLATE_TYPE_LEVEL (t);
3728   return level == this_level;
3729 }
3730
3731 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
3732    parameters given by current_template_args, or reuses a
3733    previously existing one, if appropriate.  Returns the DECL, or an
3734    equivalent one, if it is replaced via a call to duplicate_decls.
3735
3736    If IS_FRIEND is true, DECL is a friend declaration.  */
3737
3738 tree
3739 push_template_decl_real (tree decl, bool is_friend)
3740 {
3741   tree tmpl;
3742   tree args;
3743   tree info;
3744   tree ctx;
3745   int primary;
3746   int is_partial;
3747   int new_template_p = 0;
3748   /* True if the template is a member template, in the sense of
3749      [temp.mem].  */
3750   bool member_template_p = false;
3751
3752   if (decl == error_mark_node)
3753     return decl;
3754
3755   /* See if this is a partial specialization.  */
3756   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
3757                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3758                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
3759
3760   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
3761     is_friend = true;
3762
3763   if (is_friend)
3764     /* For a friend, we want the context of the friend function, not
3765        the type of which it is a friend.  */
3766     ctx = DECL_CONTEXT (decl);
3767   else if (CP_DECL_CONTEXT (decl)
3768            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
3769     /* In the case of a virtual function, we want the class in which
3770        it is defined.  */
3771     ctx = CP_DECL_CONTEXT (decl);
3772   else
3773     /* Otherwise, if we're currently defining some class, the DECL
3774        is assumed to be a member of the class.  */
3775     ctx = current_scope ();
3776
3777   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
3778     ctx = NULL_TREE;
3779
3780   if (!DECL_CONTEXT (decl))
3781     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
3782
3783   /* See if this is a primary template.  */
3784   if (is_friend && ctx)
3785     /* A friend template that specifies a class context, i.e.
3786          template <typename T> friend void A<T>::f();
3787        is not primary.  */
3788     primary = 0;
3789   else
3790     primary = template_parm_scope_p ();
3791
3792   if (primary)
3793     {
3794       if (DECL_CLASS_SCOPE_P (decl))
3795         member_template_p = true;
3796       if (TREE_CODE (decl) == TYPE_DECL
3797           && ANON_AGGRNAME_P (DECL_NAME (decl)))
3798         {
3799           error ("template class without a name");
3800           return error_mark_node;
3801         }
3802       else if (TREE_CODE (decl) == FUNCTION_DECL)
3803         {
3804           if (DECL_DESTRUCTOR_P (decl))
3805             {
3806               /* [temp.mem]
3807
3808                  A destructor shall not be a member template.  */
3809               error ("destructor %qD declared as member template", decl);
3810               return error_mark_node;
3811             }
3812           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3813               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3814                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3815                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3816                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3817                       == void_list_node)))
3818             {
3819               /* [basic.stc.dynamic.allocation]
3820
3821                  An allocation function can be a function
3822                  template. ... Template allocation functions shall
3823                  have two or more parameters.  */
3824               error ("invalid template declaration of %qD", decl);
3825               return error_mark_node;
3826             }
3827         }
3828       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3829                && CLASS_TYPE_P (TREE_TYPE (decl)))
3830         /* OK */;
3831       else
3832         {
3833           error ("template declaration of %q#D", decl);
3834           return error_mark_node;
3835         }
3836     }
3837
3838   /* Check to see that the rules regarding the use of default
3839      arguments are not being violated.  */
3840   check_default_tmpl_args (decl, current_template_parms,
3841                            primary, is_partial, /*is_friend_decl=*/0);
3842
3843   /* Ensure that there are no parameter packs in the type of this
3844      declaration that have not been expanded.  */
3845   if (TREE_CODE (decl) == FUNCTION_DECL)
3846     {
3847       /* Check each of the arguments individually to see if there are
3848          any bare parameter packs.  */
3849       tree type = TREE_TYPE (decl);
3850       tree arg = DECL_ARGUMENTS (decl);
3851       tree argtype = TYPE_ARG_TYPES (type);
3852
3853       while (arg && argtype)
3854         {
3855           if (!FUNCTION_PARAMETER_PACK_P (arg)
3856               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
3857             {
3858             /* This is a PARM_DECL that contains unexpanded parameter
3859                packs. We have already complained about this in the
3860                check_for_bare_parameter_packs call, so just replace
3861                these types with ERROR_MARK_NODE.  */
3862               TREE_TYPE (arg) = error_mark_node;
3863               TREE_VALUE (argtype) = error_mark_node;
3864             }
3865
3866           arg = TREE_CHAIN (arg);
3867           argtype = TREE_CHAIN (argtype);
3868         }
3869
3870       /* Check for bare parameter packs in the return type and the
3871          exception specifiers.  */
3872       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
3873         /* Errors were already issued, set return type to int
3874            as the frontend doesn't expect error_mark_node as
3875            the return type.  */
3876         TREE_TYPE (type) = integer_type_node;
3877       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
3878         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
3879     }
3880   else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
3881     {
3882       TREE_TYPE (decl) = error_mark_node;
3883       return error_mark_node;
3884     }
3885
3886   if (is_partial)
3887     return process_partial_specialization (decl);
3888
3889   args = current_template_args ();
3890
3891   if (!ctx
3892       || TREE_CODE (ctx) == FUNCTION_DECL
3893       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3894       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3895     {
3896       if (DECL_LANG_SPECIFIC (decl)
3897           && DECL_TEMPLATE_INFO (decl)
3898           && DECL_TI_TEMPLATE (decl))
3899         tmpl = DECL_TI_TEMPLATE (decl);
3900       /* If DECL is a TYPE_DECL for a class-template, then there won't
3901          be DECL_LANG_SPECIFIC.  The information equivalent to
3902          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
3903       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3904                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3905                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3906         {
3907           /* Since a template declaration already existed for this
3908              class-type, we must be redeclaring it here.  Make sure
3909              that the redeclaration is valid.  */
3910           redeclare_class_template (TREE_TYPE (decl),
3911                                     current_template_parms);
3912           /* We don't need to create a new TEMPLATE_DECL; just use the
3913              one we already had.  */
3914           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3915         }
3916       else
3917         {
3918           tmpl = build_template_decl (decl, current_template_parms,
3919                                       member_template_p);
3920           new_template_p = 1;
3921
3922           if (DECL_LANG_SPECIFIC (decl)
3923               && DECL_TEMPLATE_SPECIALIZATION (decl))
3924             {
3925               /* A specialization of a member template of a template
3926                  class.  */
3927               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3928               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3929               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3930             }
3931         }
3932     }
3933   else
3934     {
3935       tree a, t, current, parms;
3936       int i;
3937       tree tinfo = get_template_info (decl);
3938
3939       if (!tinfo)
3940         {
3941           error ("template definition of non-template %q#D", decl);
3942           return error_mark_node;
3943         }
3944
3945       tmpl = TI_TEMPLATE (tinfo);
3946
3947       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3948           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3949           && DECL_TEMPLATE_SPECIALIZATION (decl)
3950           && DECL_MEMBER_TEMPLATE_P (tmpl))
3951         {
3952           tree new_tmpl;
3953
3954           /* The declaration is a specialization of a member
3955              template, declared outside the class.  Therefore, the
3956              innermost template arguments will be NULL, so we
3957              replace them with the arguments determined by the
3958              earlier call to check_explicit_specialization.  */
3959           args = DECL_TI_ARGS (decl);
3960
3961           new_tmpl
3962             = build_template_decl (decl, current_template_parms,
3963                                    member_template_p);
3964           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3965           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3966           DECL_TI_TEMPLATE (decl) = new_tmpl;
3967           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3968           DECL_TEMPLATE_INFO (new_tmpl)
3969             = tree_cons (tmpl, args, NULL_TREE);
3970
3971           register_specialization (new_tmpl,
3972                                    most_general_template (tmpl),
3973                                    args,
3974                                    is_friend);
3975           return decl;
3976         }
3977
3978       /* Make sure the template headers we got make sense.  */
3979
3980       parms = DECL_TEMPLATE_PARMS (tmpl);
3981       i = TMPL_PARMS_DEPTH (parms);
3982       if (TMPL_ARGS_DEPTH (args) != i)
3983         {
3984           error ("expected %d levels of template parms for %q#D, got %d",
3985                  i, decl, TMPL_ARGS_DEPTH (args));
3986         }
3987       else
3988         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3989           {
3990             a = TMPL_ARGS_LEVEL (args, i);
3991             t = INNERMOST_TEMPLATE_PARMS (parms);
3992
3993             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3994               {
3995                 if (current == decl)
3996                   error ("got %d template parameters for %q#D",
3997                          TREE_VEC_LENGTH (a), decl);
3998                 else
3999                   error ("got %d template parameters for %q#T",
4000                          TREE_VEC_LENGTH (a), current);
4001                 error ("  but %d required", TREE_VEC_LENGTH (t));
4002                 return error_mark_node;
4003               }
4004
4005             if (current == decl)
4006               current = ctx;
4007             else
4008               current = (TYPE_P (current)
4009                          ? TYPE_CONTEXT (current)
4010                          : DECL_CONTEXT (current));
4011           }
4012
4013       /* Check that the parms are used in the appropriate qualifying scopes
4014          in the declarator.  */
4015       if (!comp_template_args
4016           (TI_ARGS (tinfo),
4017            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4018         {
4019           error ("\
4020 template arguments to %qD do not match original template %qD",
4021                  decl, DECL_TEMPLATE_RESULT (tmpl));
4022           if (!uses_template_parms (TI_ARGS (tinfo)))
4023             inform ("use template<> for an explicit specialization");
4024           /* Avoid crash in import_export_decl.  */
4025           DECL_INTERFACE_KNOWN (decl) = 1;
4026           return error_mark_node;
4027         }
4028     }
4029
4030   DECL_TEMPLATE_RESULT (tmpl) = decl;
4031   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4032
4033   /* Push template declarations for global functions and types.  Note
4034      that we do not try to push a global template friend declared in a
4035      template class; such a thing may well depend on the template
4036      parameters of the class.  */
4037   if (new_template_p && !ctx
4038       && !(is_friend && template_class_depth (current_class_type) > 0))
4039     {
4040       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4041       if (tmpl == error_mark_node)
4042         return error_mark_node;
4043
4044       /* Hide template friend classes that haven't been declared yet.  */
4045       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4046         {
4047           DECL_ANTICIPATED (tmpl) = 1;
4048           DECL_FRIEND_P (tmpl) = 1;
4049         }
4050     }
4051
4052   if (primary)
4053     {
4054       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4055       int i;
4056
4057       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4058       if (DECL_CONV_FN_P (tmpl))
4059         {
4060           int depth = TMPL_PARMS_DEPTH (parms);
4061
4062           /* It is a conversion operator. See if the type converted to
4063              depends on innermost template operands.  */
4064
4065           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4066                                          depth))
4067             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4068         }
4069
4070       /* Give template template parms a DECL_CONTEXT of the template
4071          for which they are a parameter.  */
4072       parms = INNERMOST_TEMPLATE_PARMS (parms);
4073       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
4074         {
4075           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4076           if (TREE_CODE (parm) == TEMPLATE_DECL)
4077             DECL_CONTEXT (parm) = tmpl;
4078         }
4079     }
4080
4081   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4082      back to its most general template.  If TMPL is a specialization,
4083      ARGS may only have the innermost set of arguments.  Add the missing
4084      argument levels if necessary.  */
4085   if (DECL_TEMPLATE_INFO (tmpl))
4086     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4087
4088   info = tree_cons (tmpl, args, NULL_TREE);
4089
4090   if (DECL_IMPLICIT_TYPEDEF_P (decl))
4091     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4092   else if (DECL_LANG_SPECIFIC (decl))
4093     DECL_TEMPLATE_INFO (decl) = info;
4094
4095   return DECL_TEMPLATE_RESULT (tmpl);
4096 }
4097
4098 tree
4099 push_template_decl (tree decl)
4100 {
4101   return push_template_decl_real (decl, false);
4102 }
4103
4104 /* Called when a class template TYPE is redeclared with the indicated
4105    template PARMS, e.g.:
4106
4107      template <class T> struct S;
4108      template <class T> struct S {};  */
4109
4110 bool
4111 redeclare_class_template (tree type, tree parms)
4112 {
4113   tree tmpl;
4114   tree tmpl_parms;
4115   int i;
4116
4117   if (!TYPE_TEMPLATE_INFO (type))
4118     {
4119       error ("%qT is not a template type", type);
4120       return false;
4121     }
4122
4123   tmpl = TYPE_TI_TEMPLATE (type);
4124   if (!PRIMARY_TEMPLATE_P (tmpl))
4125     /* The type is nested in some template class.  Nothing to worry
4126        about here; there are no new template parameters for the nested
4127        type.  */
4128     return true;
4129
4130   if (!parms)
4131     {
4132       error ("template specifiers not specified in declaration of %qD",
4133              tmpl);
4134       return false;
4135     }
4136
4137   parms = INNERMOST_TEMPLATE_PARMS (parms);
4138   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4139
4140   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4141     {
4142       error ("redeclared with %d template parameter(s)", 
4143              TREE_VEC_LENGTH (parms));
4144       inform ("previous declaration %q+D used %d template parameter(s)", 
4145              tmpl, TREE_VEC_LENGTH (tmpl_parms));
4146       return false;
4147     }
4148
4149   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4150     {
4151       tree tmpl_parm;
4152       tree parm;
4153       tree tmpl_default;
4154       tree parm_default;
4155
4156       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4157           || TREE_VEC_ELT (parms, i) == error_mark_node)
4158         continue;
4159
4160       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4161       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4162       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4163       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4164
4165       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4166          TEMPLATE_DECL.  */
4167       if (tmpl_parm != error_mark_node
4168           && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4169               || (TREE_CODE (tmpl_parm) != TYPE_DECL
4170                   && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
4171               || (TREE_CODE (tmpl_parm) != PARM_DECL
4172                   && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
4173                       != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
4174               || (TREE_CODE (tmpl_parm) == PARM_DECL
4175                   && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
4176                       != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))))))
4177         {
4178           error ("template parameter %q+#D", tmpl_parm);
4179           error ("redeclared here as %q#D", parm);
4180           return false;
4181         }
4182
4183       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4184         {
4185           /* We have in [temp.param]:
4186
4187              A template-parameter may not be given default arguments
4188              by two different declarations in the same scope.  */
4189           error ("redefinition of default argument for %q#D", parm);
4190           inform ("%Joriginal definition appeared here", tmpl_parm);
4191           return false;
4192         }
4193
4194       if (parm_default != NULL_TREE)
4195         /* Update the previous template parameters (which are the ones
4196            that will really count) with the new default value.  */
4197         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4198       else if (tmpl_default != NULL_TREE)
4199         /* Update the new parameters, too; they'll be used as the
4200            parameters for any members.  */
4201         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4202     }
4203
4204     return true;
4205 }
4206
4207 /* Simplify EXPR if it is a non-dependent expression.  Returns the
4208    (possibly simplified) expression.  */
4209
4210 tree
4211 fold_non_dependent_expr (tree expr)
4212 {
4213   if (expr == NULL_TREE)
4214     return NULL_TREE;
4215
4216   /* If we're in a template, but EXPR isn't value dependent, simplify
4217      it.  We're supposed to treat:
4218
4219        template <typename T> void f(T[1 + 1]);
4220        template <typename T> void f(T[2]);
4221
4222      as two declarations of the same function, for example.  */
4223   if (processing_template_decl
4224       && !type_dependent_expression_p (expr)
4225       && !value_dependent_expression_p (expr))
4226     {
4227       HOST_WIDE_INT saved_processing_template_decl;
4228
4229       saved_processing_template_decl = processing_template_decl;
4230       processing_template_decl = 0;
4231       expr = tsubst_copy_and_build (expr,
4232                                     /*args=*/NULL_TREE,
4233                                     tf_error,
4234                                     /*in_decl=*/NULL_TREE,
4235                                     /*function_p=*/false,
4236                                     /*integral_constant_expression_p=*/true);
4237       processing_template_decl = saved_processing_template_decl;
4238     }
4239   return expr;
4240 }
4241
4242 /* EXPR is an expression which is used in a constant-expression context.
4243    For instance, it could be a VAR_DECL with a constant initializer.
4244    Extract the innermost constant expression.
4245
4246    This is basically a more powerful version of
4247    integral_constant_value, which can be used also in templates where
4248    initializers can maintain a syntactic rather than semantic form
4249    (even if they are non-dependent, for access-checking purposes).  */
4250
4251 static tree
4252 fold_decl_constant_value (tree expr)
4253 {
4254   tree const_expr = expr;
4255   do
4256     {
4257       expr = fold_non_dependent_expr (const_expr);
4258       const_expr = integral_constant_value (expr);
4259     }
4260   while (expr != const_expr);
4261
4262   return expr;
4263 }
4264
4265 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4266    must be a function or a pointer-to-function type, as specified
4267    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4268    and check that the resulting function has external linkage.  */
4269
4270 static tree
4271 convert_nontype_argument_function (tree type, tree expr)
4272 {
4273   tree fns = expr;
4274   tree fn, fn_no_ptr;
4275
4276   fn = instantiate_type (type, fns, tf_none);
4277   if (fn == error_mark_node)
4278     return error_mark_node;
4279
4280   fn_no_ptr = fn;
4281   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4282     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4283   if (TREE_CODE (fn_no_ptr) == BASELINK)
4284     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4285  
4286   /* [temp.arg.nontype]/1
4287
4288      A template-argument for a non-type, non-template template-parameter
4289      shall be one of:
4290      [...]
4291      -- the address of an object or function with external linkage.  */
4292   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4293     {
4294       error ("%qE is not a valid template argument for type %qT "
4295              "because function %qD has not external linkage",
4296              expr, type, fn_no_ptr);
4297       return NULL_TREE;
4298     }
4299
4300   return fn;
4301 }
4302
4303 /* Attempt to convert the non-type template parameter EXPR to the
4304    indicated TYPE.  If the conversion is successful, return the
4305    converted value.  If the conversion is unsuccessful, return
4306    NULL_TREE if we issued an error message, or error_mark_node if we
4307    did not.  We issue error messages for out-and-out bad template
4308    parameters, but not simply because the conversion failed, since we
4309    might be just trying to do argument deduction.  Both TYPE and EXPR
4310    must be non-dependent.
4311
4312    The conversion follows the special rules described in
4313    [temp.arg.nontype], and it is much more strict than an implicit
4314    conversion.
4315
4316    This function is called twice for each template argument (see
4317    lookup_template_class for a more accurate description of this
4318    problem). This means that we need to handle expressions which
4319    are not valid in a C++ source, but can be created from the
4320    first call (for instance, casts to perform conversions). These
4321    hacks can go away after we fix the double coercion problem.  */
4322
4323 static tree
4324 convert_nontype_argument (tree type, tree expr)
4325 {
4326   tree expr_type;
4327
4328   /* Detect immediately string literals as invalid non-type argument.
4329      This special-case is not needed for correctness (we would easily
4330      catch this later), but only to provide better diagnostic for this
4331      common user mistake. As suggested by DR 100, we do not mention
4332      linkage issues in the diagnostic as this is not the point.  */
4333   if (TREE_CODE (expr) == STRING_CST)
4334     {
4335       error ("%qE is not a valid template argument for type %qT "
4336              "because string literals can never be used in this context",
4337              expr, type);
4338       return NULL_TREE;
4339     }
4340
4341   /* If we are in a template, EXPR may be non-dependent, but still
4342      have a syntactic, rather than semantic, form.  For example, EXPR
4343      might be a SCOPE_REF, rather than the VAR_DECL to which the
4344      SCOPE_REF refers.  Preserving the qualifying scope is necessary
4345      so that access checking can be performed when the template is
4346      instantiated -- but here we need the resolved form so that we can
4347      convert the argument.  */
4348   expr = fold_non_dependent_expr (expr);
4349   if (error_operand_p (expr))
4350     return error_mark_node;
4351   expr_type = TREE_TYPE (expr);
4352
4353   /* HACK: Due to double coercion, we can get a
4354      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4355      which is the tree that we built on the first call (see
4356      below when coercing to reference to object or to reference to
4357      function). We just strip everything and get to the arg.
4358      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4359      for examples.  */
4360   if (TREE_CODE (expr) == NOP_EXPR)
4361     {
4362       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4363         {
4364           /* ??? Maybe we could use convert_from_reference here, but we
4365              would need to relax its constraints because the NOP_EXPR
4366              could actually change the type to something more cv-qualified,
4367              and this is not folded by convert_from_reference.  */
4368           tree addr = TREE_OPERAND (expr, 0);
4369           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4370           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4371           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4372           gcc_assert (same_type_ignoring_top_level_qualifiers_p
4373                       (TREE_TYPE (expr_type),
4374                        TREE_TYPE (TREE_TYPE (addr))));
4375
4376           expr = TREE_OPERAND (addr, 0);
4377           expr_type = TREE_TYPE (expr);
4378         }
4379
4380       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4381          parameter is a pointer to object, through decay and
4382          qualification conversion. Let's strip everything.  */
4383       else if (TYPE_PTROBV_P (type))
4384         {
4385           STRIP_NOPS (expr);
4386           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4387           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4388           /* Skip the ADDR_EXPR only if it is part of the decay for
4389              an array. Otherwise, it is part of the original argument
4390              in the source code.  */
4391           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4392             expr = TREE_OPERAND (expr, 0);
4393           expr_type = TREE_TYPE (expr);
4394         }
4395     }
4396
4397   /* [temp.arg.nontype]/5, bullet 1
4398
4399      For a non-type template-parameter of integral or enumeration type,
4400      integral promotions (_conv.prom_) and integral conversions
4401      (_conv.integral_) are applied.  */
4402   if (INTEGRAL_TYPE_P (type))
4403     {
4404       if (!INTEGRAL_TYPE_P (expr_type))
4405         return error_mark_node;
4406
4407       expr = fold_decl_constant_value (expr);
4408       /* Notice that there are constant expressions like '4 % 0' which
4409          do not fold into integer constants.  */
4410       if (TREE_CODE (expr) != INTEGER_CST)
4411         {
4412           error ("%qE is not a valid template argument for type %qT "
4413                  "because it is a non-constant expression", expr, type);
4414           return NULL_TREE;
4415         }
4416
4417       /* At this point, an implicit conversion does what we want,
4418          because we already know that the expression is of integral
4419          type.  */
4420       expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4421       if (expr == error_mark_node)
4422         return error_mark_node;
4423
4424       /* Conversion was allowed: fold it to a bare integer constant.  */
4425       expr = fold (expr);
4426     }
4427   /* [temp.arg.nontype]/5, bullet 2
4428
4429      For a non-type template-parameter of type pointer to object,
4430      qualification conversions (_conv.qual_) and the array-to-pointer
4431      conversion (_conv.array_) are applied.  */
4432   else if (TYPE_PTROBV_P (type))
4433     {
4434       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
4435
4436          A template-argument for a non-type, non-template template-parameter
4437          shall be one of: [...]
4438
4439          -- the name of a non-type template-parameter;
4440          -- the address of an object or function with external linkage, [...]
4441             expressed as "& id-expression" where the & is optional if the name
4442             refers to a function or array, or if the corresponding
4443             template-parameter is a reference.
4444
4445         Here, we do not care about functions, as they are invalid anyway
4446         for a parameter of type pointer-to-object.  */
4447
4448       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4449         /* Non-type template parameters are OK.  */
4450         ;
4451       else if (TREE_CODE (expr) != ADDR_EXPR
4452                && TREE_CODE (expr_type) != ARRAY_TYPE)
4453         {
4454           if (TREE_CODE (expr) == VAR_DECL)
4455             {
4456               error ("%qD is not a valid template argument "
4457                      "because %qD is a variable, not the address of "
4458                      "a variable",
4459                      expr, expr);
4460               return NULL_TREE;
4461             }
4462           /* Other values, like integer constants, might be valid
4463              non-type arguments of some other type.  */
4464           return error_mark_node;
4465         }
4466       else
4467         {
4468           tree decl;
4469
4470           decl = ((TREE_CODE (expr) == ADDR_EXPR)
4471                   ? TREE_OPERAND (expr, 0) : expr);
4472           if (TREE_CODE (decl) != VAR_DECL)
4473             {
4474               error ("%qE is not a valid template argument of type %qT "
4475                      "because %qE is not a variable",
4476                      expr, type, decl);
4477               return NULL_TREE;
4478             }
4479           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4480             {
4481               error ("%qE is not a valid template argument of type %qT "
4482                      "because %qD does not have external linkage",
4483                      expr, type, decl);
4484               return NULL_TREE;
4485             }
4486         }
4487
4488       expr = decay_conversion (expr);
4489       if (expr == error_mark_node)
4490         return error_mark_node;
4491
4492       expr = perform_qualification_conversions (type, expr);
4493       if (expr == error_mark_node)
4494         return error_mark_node;
4495     }
4496   /* [temp.arg.nontype]/5, bullet 3
4497
4498      For a non-type template-parameter of type reference to object, no
4499      conversions apply. The type referred to by the reference may be more
4500      cv-qualified than the (otherwise identical) type of the
4501      template-argument. The template-parameter is bound directly to the
4502      template-argument, which must be an lvalue.  */
4503   else if (TYPE_REF_OBJ_P (type))
4504     {
4505       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4506                                                       expr_type))
4507         return error_mark_node;
4508
4509       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4510         {
4511           error ("%qE is not a valid template argument for type %qT "
4512                  "because of conflicts in cv-qualification", expr, type);
4513           return NULL_TREE;
4514         }
4515
4516       if (!real_lvalue_p (expr))
4517         {
4518           error ("%qE is not a valid template argument for type %qT "
4519                  "because it is not an lvalue", expr, type);
4520           return NULL_TREE;
4521         }
4522
4523       /* [temp.arg.nontype]/1
4524
4525          A template-argument for a non-type, non-template template-parameter
4526          shall be one of: [...]
4527
4528          -- the address of an object or function with external linkage.  */
4529       if (!DECL_EXTERNAL_LINKAGE_P (expr))
4530         {
4531           error ("%qE is not a valid template argument for type %qT "
4532                  "because object %qD has not external linkage",
4533                  expr, type, expr);
4534           return NULL_TREE;
4535         }
4536
4537       expr = build_nop (type, build_address (expr));
4538     }
4539   /* [temp.arg.nontype]/5, bullet 4
4540
4541      For a non-type template-parameter of type pointer to function, only
4542      the function-to-pointer conversion (_conv.func_) is applied. If the
4543      template-argument represents a set of overloaded functions (or a
4544      pointer to such), the matching function is selected from the set
4545      (_over.over_).  */
4546   else if (TYPE_PTRFN_P (type))
4547     {
4548       /* If the argument is a template-id, we might not have enough
4549          context information to decay the pointer.  */
4550       if (!type_unknown_p (expr_type))
4551         {
4552           expr = decay_conversion (expr);
4553           if (expr == error_mark_node)
4554             return error_mark_node;
4555         }
4556
4557       expr = convert_nontype_argument_function (type, expr);
4558       if (!expr || expr == error_mark_node)
4559         return expr;
4560     }
4561   /* [temp.arg.nontype]/5, bullet 5
4562
4563      For a non-type template-parameter of type reference to function, no
4564      conversions apply. If the template-argument represents a set of
4565      overloaded functions, the matching function is selected from the set
4566      (_over.over_).  */
4567   else if (TYPE_REFFN_P (type))
4568     {
4569       if (TREE_CODE (expr) == ADDR_EXPR)
4570         {
4571           error ("%qE is not a valid template argument for type %qT "
4572                  "because it is a pointer", expr, type);
4573           inform ("try using %qE instead", TREE_OPERAND (expr, 0));
4574           return NULL_TREE;
4575         }
4576
4577       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4578       if (!expr || expr == error_mark_node)
4579         return expr;
4580
4581       expr = build_nop (type, build_address (expr));
4582     }
4583   /* [temp.arg.nontype]/5, bullet 6
4584
4585      For a non-type template-parameter of type pointer to member function,
4586      no conversions apply. If the template-argument represents a set of
4587      overloaded member functions, the matching member function is selected
4588      from the set (_over.over_).  */
4589   else if (TYPE_PTRMEMFUNC_P (type))
4590     {
4591       expr = instantiate_type (type, expr, tf_none);
4592       if (expr == error_mark_node)
4593         return error_mark_node;
4594
4595       /* There is no way to disable standard conversions in
4596          resolve_address_of_overloaded_function (called by
4597          instantiate_type). It is possible that the call succeeded by
4598          converting &B::I to &D::I (where B is a base of D), so we need
4599          to reject this conversion here.
4600
4601          Actually, even if there was a way to disable standard conversions,
4602          it would still be better to reject them here so that we can
4603          provide a superior diagnostic.  */
4604       if (!same_type_p (TREE_TYPE (expr), type))
4605         {
4606           /* Make sure we are just one standard conversion off.  */
4607           gcc_assert (can_convert (type, TREE_TYPE (expr)));
4608           error ("%qE is not a valid template argument for type %qT "
4609                  "because it is of type %qT", expr, type,
4610                  TREE_TYPE (expr));
4611           inform ("standard conversions are not allowed in this context");
4612           return NULL_TREE;
4613         }
4614     }
4615   /* [temp.arg.nontype]/5, bullet 7
4616
4617      For a non-type template-parameter of type pointer to data member,
4618      qualification conversions (_conv.qual_) are applied.  */
4619   else if (TYPE_PTRMEM_P (type))
4620     {
4621       expr = perform_qualification_conversions (type, expr);
4622       if (expr == error_mark_node)
4623         return expr;
4624     }
4625   /* A template non-type parameter must be one of the above.  */
4626   else
4627     gcc_unreachable ();
4628
4629   /* Sanity check: did we actually convert the argument to the
4630      right type?  */
4631   gcc_assert (same_type_p (type, TREE_TYPE (expr)));
4632   return expr;
4633 }
4634
4635 /* Subroutine of coerce_template_template_parms, which returns 1 if
4636    PARM_PARM and ARG_PARM match using the rule for the template
4637    parameters of template template parameters. Both PARM and ARG are
4638    template parameters; the rest of the arguments are the same as for
4639    coerce_template_template_parms.
4640  */
4641 static int
4642 coerce_template_template_parm (tree parm,
4643                               tree arg,
4644                               tsubst_flags_t complain,
4645                               tree in_decl,
4646                               tree outer_args)
4647 {
4648   if (arg == NULL_TREE || arg == error_mark_node
4649       || parm == NULL_TREE || parm == error_mark_node)
4650     return 0;
4651   
4652   if (TREE_CODE (arg) != TREE_CODE (parm))
4653     return 0;
4654   
4655   switch (TREE_CODE (parm))
4656     {
4657     case TEMPLATE_DECL:
4658       /* We encounter instantiations of templates like
4659          template <template <template <class> class> class TT>
4660          class C;  */
4661       {
4662         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4663         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4664         
4665         if (!coerce_template_template_parms
4666             (parmparm, argparm, complain, in_decl, outer_args))
4667           return 0;
4668       }
4669       /* Fall through.  */
4670       
4671     case TYPE_DECL:
4672       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
4673           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
4674         /* Argument is a parameter pack but parameter is not.  */
4675         return 0;
4676       break;
4677       
4678     case PARM_DECL:
4679       /* The tsubst call is used to handle cases such as
4680          
4681            template <int> class C {};
4682            template <class T, template <T> class TT> class D {};
4683            D<int, C> d;
4684
4685          i.e. the parameter list of TT depends on earlier parameters.  */
4686       if (!dependent_type_p (TREE_TYPE (arg))
4687           && !same_type_p
4688                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
4689                  TREE_TYPE (arg)))
4690         return 0;
4691       
4692       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
4693           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
4694         /* Argument is a parameter pack but parameter is not.  */
4695         return 0;
4696       
4697       break;
4698
4699     default:
4700       gcc_unreachable ();
4701     }
4702
4703   return 1;
4704 }
4705
4706
4707 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4708    template template parameters.  Both PARM_PARMS and ARG_PARMS are
4709    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
4710    or PARM_DECL.
4711
4712    Consider the example:
4713      template <class T> class A;
4714      template<template <class U> class TT> class B;
4715
4716    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4717    the parameters to A, and OUTER_ARGS contains A.  */
4718
4719 static int
4720 coerce_template_template_parms (tree parm_parms,
4721                                 tree arg_parms,
4722                                 tsubst_flags_t complain,
4723                                 tree in_decl,
4724                                 tree outer_args)
4725 {
4726   int nparms, nargs, i;
4727   tree parm, arg;
4728   int variadic_p = 0;
4729
4730   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
4731   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
4732
4733   nparms = TREE_VEC_LENGTH (parm_parms);
4734   nargs = TREE_VEC_LENGTH (arg_parms);
4735
4736   /* Determine whether we have a parameter pack at the end of the
4737      template template parameter's template parameter list.  */
4738   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
4739     {
4740       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
4741       
4742       switch (TREE_CODE (parm))
4743         {
4744         case TEMPLATE_DECL:
4745         case TYPE_DECL:
4746           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
4747             variadic_p = 1;
4748           break;
4749           
4750         case PARM_DECL:
4751           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
4752             variadic_p = 1;
4753           break;
4754           
4755         default:
4756           gcc_unreachable ();
4757         }
4758     }
4759  
4760   if (nargs != nparms
4761       && !(variadic_p && nargs >= nparms - 1))
4762     return 0;
4763
4764   /* Check all of the template parameters except the parameter pack at
4765      the end (if any).  */
4766   for (i = 0; i < nparms - variadic_p; ++i)
4767     {
4768       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
4769           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4770         continue;
4771
4772       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4773       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4774
4775       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
4776                                           outer_args))
4777         return 0;
4778
4779     }
4780
4781   if (variadic_p)
4782     {
4783       /* Check each of the template parameters in the template
4784          argument against the template parameter pack at the end of
4785          the template template parameter.  */
4786       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
4787         return 0;
4788
4789       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4790
4791       for (; i < nargs; ++i)
4792         {
4793           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4794             continue;
4795  
4796           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4797  
4798           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
4799                                               outer_args))
4800             return 0;
4801         }
4802     }
4803
4804   return 1;
4805 }
4806
4807 /* Verifies that the deduced template arguments (in TARGS) for the
4808    template template parameters (in TPARMS) represent valid bindings,
4809    by comparing the template parameter list of each template argument
4810    to the template parameter list of its corresponding template
4811    template parameter, in accordance with DR150. This
4812    routine can only be called after all template arguments have been
4813    deduced. It will return TRUE if all of the template template
4814    parameter bindings are okay, FALSE otherwise.  */
4815 bool 
4816 template_template_parm_bindings_ok_p (tree tparms, tree targs)
4817 {
4818   int i, ntparms = TREE_VEC_LENGTH (tparms);
4819   bool ret = true;
4820
4821   /* We're dealing with template parms in this process.  */
4822   ++processing_template_decl;
4823
4824   targs = INNERMOST_TEMPLATE_ARGS (targs);
4825
4826   for (i = 0; i < ntparms; ++i)
4827     {
4828       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
4829       tree targ = TREE_VEC_ELT (targs, i);
4830
4831       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
4832         {
4833           tree packed_args = NULL_TREE;
4834           int idx, len = 1;
4835
4836           if (ARGUMENT_PACK_P (targ))
4837             {
4838               /* Look inside the argument pack.  */
4839               packed_args = ARGUMENT_PACK_ARGS (targ);
4840               len = TREE_VEC_LENGTH (packed_args);
4841             }
4842
4843           for (idx = 0; idx < len; ++idx)
4844             {
4845               tree targ_parms = NULL_TREE;
4846
4847               if (packed_args)
4848                 /* Extract the next argument from the argument
4849                    pack.  */
4850                 targ = TREE_VEC_ELT (packed_args, idx);
4851
4852               if (PACK_EXPANSION_P (targ))
4853                 /* Look at the pattern of the pack expansion.  */
4854                 targ = PACK_EXPANSION_PATTERN (targ);
4855
4856               /* Extract the template parameters from the template
4857                  argument.  */
4858               if (TREE_CODE (targ) == TEMPLATE_DECL)
4859                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
4860               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
4861                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
4862
4863               /* Verify that we can coerce the template template
4864                  parameters from the template argument to the template
4865                  parameter.  This requires an exact match.  */
4866               if (targ_parms
4867                   && !coerce_template_template_parms
4868                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
4869                         targ_parms,
4870                         tf_none,
4871                         tparm,
4872                         targs))
4873                 {
4874                   ret = false;
4875                   goto out;
4876                 }
4877             }
4878         }
4879     }
4880
4881  out:
4882
4883   --processing_template_decl;
4884   return ret;
4885 }
4886
4887 /* Convert the indicated template ARG as necessary to match the
4888    indicated template PARM.  Returns the converted ARG, or
4889    error_mark_node if the conversion was unsuccessful.  Error and
4890    warning messages are issued under control of COMPLAIN.  This
4891    conversion is for the Ith parameter in the parameter list.  ARGS is
4892    the full set of template arguments deduced so far.  */
4893
4894 static tree
4895 convert_template_argument (tree parm,
4896                            tree arg,
4897                            tree args,
4898                            tsubst_flags_t complain,
4899                            int i,
4900                            tree in_decl)
4901 {
4902   tree orig_arg;
4903   tree val;
4904   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
4905
4906   if (TREE_CODE (arg) == TREE_LIST
4907       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
4908     {
4909       /* The template argument was the name of some
4910          member function.  That's usually
4911          invalid, but static members are OK.  In any
4912          case, grab the underlying fields/functions
4913          and issue an error later if required.  */
4914       orig_arg = TREE_VALUE (arg);
4915       TREE_TYPE (arg) = unknown_type_node;
4916     }
4917
4918   orig_arg = arg;
4919
4920   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
4921   requires_type = (TREE_CODE (parm) == TYPE_DECL
4922                    || requires_tmpl_type);
4923
4924   /* When determining whether an argument pack expansion is a template,
4925      look at the pattern.  */
4926   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
4927     arg = PACK_EXPANSION_PATTERN (arg);
4928
4929   is_tmpl_type = 
4930     ((TREE_CODE (arg) == TEMPLATE_DECL
4931       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
4932      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4933      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
4934
4935   if (is_tmpl_type
4936       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4937           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
4938     arg = TYPE_STUB_DECL (arg);
4939
4940   is_type = TYPE_P (arg) || is_tmpl_type;
4941
4942   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
4943       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
4944     {
4945       permerror (input_location, "to refer to a type member of a template parameter, "
4946                  "use %<typename %E%>", orig_arg);
4947
4948       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
4949                                      TREE_OPERAND (arg, 1),
4950                                      typename_type,
4951                                      complain & tf_error);
4952       arg = orig_arg;
4953       is_type = 1;
4954     }
4955   if (is_type != requires_type)
4956     {
4957       if (in_decl)
4958         {
4959           if (complain & tf_error)
4960             {
4961               error ("type/value mismatch at argument %d in template "
4962                      "parameter list for %qD",
4963                      i + 1, in_decl);
4964               if (is_type)
4965                 error ("  expected a constant of type %qT, got %qT",
4966                        TREE_TYPE (parm),
4967                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
4968               else if (requires_tmpl_type)
4969                 error ("  expected a class template, got %qE", orig_arg);
4970               else
4971                 error ("  expected a type, got %qE", orig_arg);
4972             }
4973         }
4974       return error_mark_node;
4975     }
4976   if (is_tmpl_type ^ requires_tmpl_type)
4977     {
4978       if (in_decl && (complain & tf_error))
4979         {
4980           error ("type/value mismatch at argument %d in template "
4981                  "parameter list for %qD",
4982                  i + 1, in_decl);
4983           if (is_tmpl_type)
4984             error ("  expected a type, got %qT", DECL_NAME (arg));
4985           else
4986             error ("  expected a class template, got %qT", orig_arg);
4987         }
4988       return error_mark_node;
4989     }
4990
4991   if (is_type)
4992     {
4993       if (requires_tmpl_type)
4994         {
4995           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
4996             /* The number of argument required is not known yet.
4997                Just accept it for now.  */
4998             val = TREE_TYPE (arg);
4999           else
5000             {
5001               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5002               tree argparm;
5003
5004               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5005
5006               if (coerce_template_template_parms (parmparm, argparm,
5007                                                   complain, in_decl,
5008                                                   args))
5009                 {
5010                   val = orig_arg;
5011
5012                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
5013                      TEMPLATE_DECL.  */
5014                   if (val != error_mark_node)
5015                     {
5016                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
5017                         val = TREE_TYPE (val);
5018                       else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
5019                                && DECL_TEMPLATE_TEMPLATE_PARM_P (arg))
5020                         {
5021                           val = TREE_TYPE (arg);
5022                           val = make_pack_expansion (val);
5023                         }
5024                     }
5025                 }
5026               else
5027                 {
5028                   if (in_decl && (complain & tf_error))
5029                     {
5030                       error ("type/value mismatch at argument %d in "
5031                              "template parameter list for %qD",
5032                              i + 1, in_decl);
5033                       error ("  expected a template of type %qD, got %qD",
5034                              parm, orig_arg);
5035                     }
5036
5037                   val = error_mark_node;
5038                 }
5039             }
5040         }
5041       else
5042         val = orig_arg;
5043       /* We only form one instance of each template specialization.
5044          Therefore, if we use a non-canonical variant (i.e., a
5045          typedef), any future messages referring to the type will use
5046          the typedef, which is confusing if those future uses do not
5047          themselves also use the typedef.  */
5048       if (TYPE_P (val))
5049         val = canonical_type_variant (val);
5050     }
5051   else
5052     {
5053       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
5054
5055       if (invalid_nontype_parm_type_p (t, complain))
5056         return error_mark_node;
5057
5058       if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
5059         /* We used to call digest_init here.  However, digest_init
5060            will report errors, which we don't want when complain
5061            is zero.  More importantly, digest_init will try too
5062            hard to convert things: for example, `0' should not be
5063            converted to pointer type at this point according to
5064            the standard.  Accepting this is not merely an
5065            extension, since deciding whether or not these
5066            conversions can occur is part of determining which
5067            function template to call, or whether a given explicit
5068            argument specification is valid.  */
5069         val = convert_nontype_argument (t, orig_arg);
5070       else
5071         val = orig_arg;
5072
5073       if (val == NULL_TREE)
5074         val = error_mark_node;
5075       else if (val == error_mark_node && (complain & tf_error))
5076         error ("could not convert template argument %qE to %qT",  orig_arg, t);
5077     }
5078
5079   return val;
5080 }
5081
5082 /* Coerces the remaining template arguments in INNER_ARGS (from
5083    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
5084    Returns the coerced argument pack. PARM_IDX is the position of this
5085    parameter in the template parameter list. ARGS is the original
5086    template argument list.  */
5087 static tree
5088 coerce_template_parameter_pack (tree parms,
5089                                 int parm_idx,
5090                                 tree args,
5091                                 tree inner_args,
5092                                 int arg_idx,
5093                                 tree new_args,
5094                                 int* lost,
5095                                 tree in_decl,
5096                                 tsubst_flags_t complain)
5097 {
5098   tree parm = TREE_VEC_ELT (parms, parm_idx);
5099   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5100   tree packed_args;
5101   tree argument_pack;
5102   tree packed_types = NULL_TREE;
5103
5104   if (arg_idx > nargs)
5105     arg_idx = nargs;
5106
5107   packed_args = make_tree_vec (nargs - arg_idx);
5108
5109   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
5110       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
5111     {
5112       /* When the template parameter is a non-type template
5113          parameter pack whose type uses parameter packs, we need
5114          to look at each of the template arguments
5115          separately. Build a vector of the types for these
5116          non-type template parameters in PACKED_TYPES.  */
5117       tree expansion 
5118         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
5119       packed_types = tsubst_pack_expansion (expansion, args,
5120                                             complain, in_decl);
5121
5122       if (packed_types == error_mark_node)
5123         return error_mark_node;
5124
5125       /* Check that we have the right number of arguments.  */
5126       if (arg_idx < nargs
5127           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
5128           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
5129         {
5130           int needed_parms 
5131             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
5132           error ("wrong number of template arguments (%d, should be %d)",
5133                  nargs, needed_parms);
5134           return error_mark_node;
5135         }
5136
5137       /* If we aren't able to check the actual arguments now
5138          (because they haven't been expanded yet), we can at least
5139          verify that all of the types used for the non-type
5140          template parameter pack are, in fact, valid for non-type
5141          template parameters.  */
5142       if (arg_idx < nargs 
5143           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
5144         {
5145           int j, len = TREE_VEC_LENGTH (packed_types);
5146           for (j = 0; j < len; ++j)
5147             {
5148               tree t = TREE_VEC_ELT (packed_types, j);
5149               if (invalid_nontype_parm_type_p (t, complain))
5150                 return error_mark_node;
5151             }
5152         }
5153     }
5154
5155   /* Convert the remaining arguments, which will be a part of the
5156      parameter pack "parm".  */
5157   for (; arg_idx < nargs; ++arg_idx)
5158     {
5159       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
5160       tree actual_parm = TREE_VALUE (parm);
5161
5162       if (packed_types && !PACK_EXPANSION_P (arg))
5163         {
5164           /* When we have a vector of types (corresponding to the
5165              non-type template parameter pack that uses parameter
5166              packs in its type, as mention above), and the
5167              argument is not an expansion (which expands to a
5168              currently unknown number of arguments), clone the
5169              parm and give it the next type in PACKED_TYPES.  */
5170           actual_parm = copy_node (actual_parm);
5171           TREE_TYPE (actual_parm) = 
5172             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
5173         }
5174
5175       if (arg != error_mark_node)
5176         arg = convert_template_argument (actual_parm, 
5177                                          arg, new_args, complain, parm_idx,
5178                                          in_decl);
5179       if (arg == error_mark_node)
5180         (*lost)++;
5181       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
5182     }
5183
5184   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
5185       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
5186     argument_pack = make_node (TYPE_ARGUMENT_PACK);
5187   else
5188     {
5189       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
5190       TREE_TYPE (argument_pack) 
5191         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
5192       TREE_CONSTANT (argument_pack) = 1;
5193     }
5194
5195   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
5196   return argument_pack;
5197 }
5198
5199 /* Convert all template arguments to their appropriate types, and
5200    return a vector containing the innermost resulting template
5201    arguments.  If any error occurs, return error_mark_node. Error and
5202    warning messages are issued under control of COMPLAIN.
5203
5204    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
5205    for arguments not specified in ARGS.  Otherwise, if
5206    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
5207    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
5208    USE_DEFAULT_ARGS is false, then all arguments must be specified in
5209    ARGS.  */
5210
5211 static tree
5212 coerce_template_parms (tree parms,
5213                        tree args,
5214                        tree in_decl,
5215                        tsubst_flags_t complain,
5216                        bool require_all_args,
5217                        bool use_default_args)
5218 {
5219   int nparms, nargs, parm_idx, arg_idx, lost = 0;
5220   tree inner_args;
5221   tree new_args;
5222   tree new_inner_args;
5223   bool saved_skip_evaluation;
5224
5225   /* When used as a boolean value, indicates whether this is a
5226      variadic template parameter list. Since it's an int, we can also
5227      subtract it from nparms to get the number of non-variadic
5228      parameters.  */
5229   int variadic_p = 0;
5230
5231   inner_args 
5232     = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
5233
5234   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5235   nparms = TREE_VEC_LENGTH (parms);
5236
5237   /* Determine if there are any parameter packs.  */
5238   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
5239     {
5240       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5241       if (template_parameter_pack_p (tparm))
5242         {
5243           variadic_p = 1;
5244           break;
5245         }
5246     }
5247
5248   if ((nargs > nparms - variadic_p && !variadic_p)
5249       || (nargs < nparms - variadic_p
5250           && require_all_args
5251           && (!use_default_args
5252               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
5253                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
5254     {
5255       if (complain & tf_error)
5256         {
5257           const char *or_more = "";
5258           if (variadic_p)
5259             {
5260               or_more = " or more";
5261               --nparms;
5262             }
5263
5264           error ("wrong number of template arguments (%d, should be %d%s)",
5265                  nargs, nparms, or_more);
5266
5267           if (in_decl)
5268             error ("provided for %q+D", in_decl);
5269         }
5270
5271       return error_mark_node;
5272     }
5273
5274   /* We need to evaluate the template arguments, even though this
5275      template-id may be nested within a "sizeof".  */
5276   saved_skip_evaluation = skip_evaluation;
5277   skip_evaluation = false;
5278   new_inner_args = make_tree_vec (nparms);
5279   new_args = add_outermost_template_args (args, new_inner_args);
5280   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5281     {
5282       tree arg;
5283       tree parm;
5284
5285       /* Get the Ith template parameter.  */
5286       parm = TREE_VEC_ELT (parms, parm_idx);
5287  
5288       if (parm == error_mark_node)
5289       {
5290         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5291         continue;
5292       }
5293
5294       /* Calculate the next argument.  */
5295       if (template_parameter_pack_p (TREE_VALUE (parm)))
5296         {
5297           /* All remaining arguments will be placed in the
5298              template parameter pack PARM.  */
5299           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
5300                                                 inner_args, arg_idx,
5301                                                 new_args, &lost,
5302                                                 in_decl, complain);
5303           
5304           /* Store this argument.  */
5305           if (arg == error_mark_node)
5306             lost++;
5307           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5308
5309           /* We are done with all of the arguments.  */
5310           arg_idx = nargs;
5311
5312           continue;
5313         }
5314       else if (arg_idx < nargs)
5315         {
5316           arg = TREE_VEC_ELT (inner_args, arg_idx);
5317
5318           if (arg && PACK_EXPANSION_P (arg))
5319             {
5320               if (complain & tf_error)
5321                 {
5322                   /* If ARG is a pack expansion, but PARM is not a
5323                      template parameter pack (if it were, we would have
5324                      handled it above), we're trying to expand into a
5325                      fixed-length argument list.  */
5326                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5327                     error ("cannot expand %<%E%> into a fixed-length "
5328                            "argument list", arg);
5329                   else
5330                     error ("cannot expand %<%T%> into a fixed-length "
5331                            "argument list", arg);
5332                 }
5333               return error_mark_node;
5334             }
5335         }
5336       else if (require_all_args)
5337         /* There must be a default arg in this case.  */
5338         arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5339                                    complain, in_decl);
5340       else
5341         break;
5342
5343       if (arg == error_mark_node)
5344         {
5345           if (complain & tf_error)
5346             error ("template argument %d is invalid", arg_idx + 1);
5347         }
5348       else if (!arg)
5349         /* This only occurs if there was an error in the template
5350            parameter list itself (which we would already have
5351            reported) that we are trying to recover from, e.g., a class
5352            template with a parameter list such as
5353            template<typename..., typename>.  */
5354         return error_mark_node;
5355       else
5356         arg = convert_template_argument (TREE_VALUE (parm),
5357                                          arg, new_args, complain, 
5358                                          parm_idx, in_decl);
5359
5360       if (arg == error_mark_node)
5361         lost++;
5362       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5363     }
5364   skip_evaluation = saved_skip_evaluation;
5365
5366   if (lost)
5367     return error_mark_node;
5368
5369   return new_inner_args;
5370 }
5371
5372 /* Returns 1 if template args OT and NT are equivalent.  */
5373
5374 static int
5375 template_args_equal (tree ot, tree nt)
5376 {
5377   if (nt == ot)
5378     return 1;
5379
5380   if (TREE_CODE (nt) == TREE_VEC)
5381     /* For member templates */
5382     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5383   else if (PACK_EXPANSION_P (ot))
5384     return PACK_EXPANSION_P (nt) 
5385       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5386                               PACK_EXPANSION_PATTERN (nt));
5387   else if (TYPE_P (nt))
5388     return TYPE_P (ot) && same_type_p (ot, nt);
5389   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5390     return 0;
5391   else
5392     return cp_tree_equal (ot, nt);
5393 }
5394
5395 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5396    of template arguments.  Returns 0 otherwise.  */
5397
5398 int
5399 comp_template_args (tree oldargs, tree newargs)
5400 {
5401   int i;
5402
5403   oldargs = expand_template_argument_pack (oldargs);
5404   newargs = expand_template_argument_pack (newargs);
5405
5406   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5407     return 0;
5408
5409   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5410     {
5411       tree nt = TREE_VEC_ELT (newargs, i);
5412       tree ot = TREE_VEC_ELT (oldargs, i);
5413
5414       if (! template_args_equal (ot, nt))
5415         return 0;
5416     }
5417   return 1;
5418 }
5419
5420 static void
5421 add_pending_template (tree d)
5422 {
5423   tree ti = (TYPE_P (d)
5424              ? CLASSTYPE_TEMPLATE_INFO (d)
5425              : DECL_TEMPLATE_INFO (d));
5426   struct pending_template *pt;
5427   int level;
5428
5429   if (TI_PENDING_TEMPLATE_FLAG (ti))
5430     return;
5431
5432   /* We are called both from instantiate_decl, where we've already had a
5433      tinst_level pushed, and instantiate_template, where we haven't.
5434      Compensate.  */
5435   level = !current_tinst_level || current_tinst_level->decl != d;
5436
5437   if (level)
5438     push_tinst_level (d);
5439
5440   pt = GGC_NEW (struct pending_template);
5441   pt->next = NULL;
5442   pt->tinst = current_tinst_level;
5443   if (last_pending_template)
5444     last_pending_template->next = pt;
5445   else
5446     pending_templates = pt;
5447
5448   last_pending_template = pt;
5449
5450   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5451
5452   if (level)
5453     pop_tinst_level ();
5454 }
5455
5456
5457 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5458    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
5459    documentation for TEMPLATE_ID_EXPR.  */
5460
5461 tree
5462 lookup_template_function (tree fns, tree arglist)
5463 {
5464   tree type;
5465
5466   if (fns == error_mark_node || arglist == error_mark_node)
5467     return error_mark_node;
5468
5469   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5470   gcc_assert (fns && (is_overloaded_fn (fns)
5471                       || TREE_CODE (fns) == IDENTIFIER_NODE));
5472
5473   if (BASELINK_P (fns))
5474     {
5475       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5476                                          unknown_type_node,
5477                                          BASELINK_FUNCTIONS (fns),
5478                                          arglist);
5479       return fns;
5480     }
5481
5482   type = TREE_TYPE (fns);
5483   if (TREE_CODE (fns) == OVERLOAD || !type)
5484     type = unknown_type_node;
5485
5486   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5487 }
5488
5489 /* Within the scope of a template class S<T>, the name S gets bound
5490    (in build_self_reference) to a TYPE_DECL for the class, not a
5491    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
5492    or one of its enclosing classes, and that type is a template,
5493    return the associated TEMPLATE_DECL.  Otherwise, the original
5494    DECL is returned.  */
5495
5496 tree
5497 maybe_get_template_decl_from_type_decl (tree decl)
5498 {
5499   return (decl != NULL_TREE
5500           && TREE_CODE (decl) == TYPE_DECL
5501           && DECL_ARTIFICIAL (decl)
5502           && CLASS_TYPE_P (TREE_TYPE (decl))
5503           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5504     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5505 }
5506
5507 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5508    parameters, find the desired type.
5509
5510    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5511
5512    IN_DECL, if non-NULL, is the template declaration we are trying to
5513    instantiate.
5514
5515    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5516    the class we are looking up.
5517
5518    Issue error and warning messages under control of COMPLAIN.
5519
5520    If the template class is really a local class in a template
5521    function, then the FUNCTION_CONTEXT is the function in which it is
5522    being instantiated.
5523
5524    ??? Note that this function is currently called *twice* for each
5525    template-id: the first time from the parser, while creating the
5526    incomplete type (finish_template_type), and the second type during the
5527    real instantiation (instantiate_template_class). This is surely something
5528    that we want to avoid. It also causes some problems with argument
5529    coercion (see convert_nontype_argument for more information on this).  */
5530
5531 tree
5532 lookup_template_class (tree d1,
5533                        tree arglist,
5534                        tree in_decl,
5535                        tree context,
5536                        int entering_scope,
5537                        tsubst_flags_t complain)
5538 {
5539   tree templ = NULL_TREE, parmlist;
5540   tree t;
5541
5542   timevar_push (TV_NAME_LOOKUP);
5543
5544   if (TREE_CODE (d1) == IDENTIFIER_NODE)
5545     {
5546       tree value = innermost_non_namespace_value (d1);
5547       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5548         templ = value;
5549       else
5550         {
5551           if (context)
5552             push_decl_namespace (context);
5553           templ = lookup_name (d1);
5554           templ = maybe_get_template_decl_from_type_decl (templ);
5555           if (context)
5556             pop_decl_namespace ();
5557         }
5558       if (templ)
5559         context = DECL_CONTEXT (templ);
5560     }
5561   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
5562     {
5563       tree type = TREE_TYPE (d1);
5564
5565       /* If we are declaring a constructor, say A<T>::A<T>, we will get
5566          an implicit typename for the second A.  Deal with it.  */
5567       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5568         type = TREE_TYPE (type);
5569
5570       if (CLASSTYPE_TEMPLATE_INFO (type))
5571         {
5572           templ = CLASSTYPE_TI_TEMPLATE (type);
5573           d1 = DECL_NAME (templ);
5574         }
5575     }
5576   else if (TREE_CODE (d1) == ENUMERAL_TYPE
5577            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
5578     {
5579       templ = TYPE_TI_TEMPLATE (d1);
5580       d1 = DECL_NAME (templ);
5581     }
5582   else if (TREE_CODE (d1) == TEMPLATE_DECL
5583            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
5584     {
5585       templ = d1;
5586       d1 = DECL_NAME (templ);
5587       context = DECL_CONTEXT (templ);
5588     }
5589
5590   /* Issue an error message if we didn't find a template.  */
5591   if (! templ)
5592     {
5593       if (complain & tf_error)
5594         error ("%qT is not a template", d1);
5595       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5596     }
5597
5598   if (TREE_CODE (templ) != TEMPLATE_DECL
5599          /* Make sure it's a user visible template, if it was named by
5600             the user.  */
5601       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
5602           && !PRIMARY_TEMPLATE_P (templ)))
5603     {
5604       if (complain & tf_error)
5605         {
5606           error ("non-template type %qT used as a template", d1);
5607           if (in_decl)
5608             error ("for template declaration %q+D", in_decl);
5609         }
5610       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5611     }
5612
5613   complain &= ~tf_user;
5614
5615   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
5616     {
5617       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5618          template arguments */
5619
5620       tree parm;
5621       tree arglist2;
5622       tree outer;
5623
5624       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
5625
5626       /* Consider an example where a template template parameter declared as
5627
5628            template <class T, class U = std::allocator<T> > class TT
5629
5630          The template parameter level of T and U are one level larger than
5631          of TT.  To proper process the default argument of U, say when an
5632          instantiation `TT<int>' is seen, we need to build the full
5633          arguments containing {int} as the innermost level.  Outer levels,
5634          available when not appearing as default template argument, can be
5635          obtained from the arguments of the enclosing template.
5636
5637          Suppose that TT is later substituted with std::vector.  The above
5638          instantiation is `TT<int, std::allocator<T> >' with TT at
5639          level 1, and T at level 2, while the template arguments at level 1
5640          becomes {std::vector} and the inner level 2 is {int}.  */
5641
5642       outer = DECL_CONTEXT (templ);
5643       if (outer)
5644         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
5645       else if (current_template_parms)
5646         /* This is an argument of the current template, so we haven't set
5647            DECL_CONTEXT yet.  */
5648         outer = current_template_args ();
5649
5650       if (outer)
5651         arglist = add_to_template_args (outer, arglist);
5652
5653       arglist2 = coerce_template_parms (parmlist, arglist, templ,
5654                                         complain,
5655                                         /*require_all_args=*/true,
5656                                         /*use_default_args=*/true);
5657       if (arglist2 == error_mark_node
5658           || (!uses_template_parms (arglist2)
5659               && check_instantiated_args (templ, arglist2, complain)))
5660         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5661
5662       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
5663       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
5664     }
5665   else
5666     {
5667       tree template_type = TREE_TYPE (templ);
5668       tree gen_tmpl;
5669       tree type_decl;
5670       tree found = NULL_TREE;
5671       int arg_depth;
5672       int parm_depth;
5673       int is_partial_instantiation;
5674
5675       gen_tmpl = most_general_template (templ);
5676       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
5677       parm_depth = TMPL_PARMS_DEPTH (parmlist);
5678       arg_depth = TMPL_ARGS_DEPTH (arglist);
5679
5680       if (arg_depth == 1 && parm_depth > 1)
5681         {
5682           /* We've been given an incomplete set of template arguments.
5683              For example, given:
5684
5685                template <class T> struct S1 {
5686                  template <class U> struct S2 {};
5687                  template <class U> struct S2<U*> {};
5688                 };
5689
5690              we will be called with an ARGLIST of `U*', but the
5691              TEMPLATE will be `template <class T> template
5692              <class U> struct S1<T>::S2'.  We must fill in the missing
5693              arguments.  */
5694           arglist
5695             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
5696                                            arglist);
5697           arg_depth = TMPL_ARGS_DEPTH (arglist);
5698         }
5699
5700       /* Now we should have enough arguments.  */
5701       gcc_assert (parm_depth == arg_depth);
5702
5703       /* From here on, we're only interested in the most general
5704          template.  */
5705       templ = gen_tmpl;
5706
5707       /* Calculate the BOUND_ARGS.  These will be the args that are
5708          actually tsubst'd into the definition to create the
5709          instantiation.  */
5710       if (parm_depth > 1)
5711         {
5712           /* We have multiple levels of arguments to coerce, at once.  */
5713           int i;
5714           int saved_depth = TMPL_ARGS_DEPTH (arglist);
5715
5716           tree bound_args = make_tree_vec (parm_depth);
5717
5718           for (i = saved_depth,
5719                  t = DECL_TEMPLATE_PARMS (templ);
5720                i > 0 && t != NULL_TREE;
5721                --i, t = TREE_CHAIN (t))
5722             {
5723               tree a = coerce_template_parms (TREE_VALUE (t),
5724                                               arglist, templ,
5725                                               complain,
5726                                               /*require_all_args=*/true,
5727                                               /*use_default_args=*/true);
5728
5729               /* Don't process further if one of the levels fails.  */
5730               if (a == error_mark_node)
5731                 {
5732                   /* Restore the ARGLIST to its full size.  */
5733                   TREE_VEC_LENGTH (arglist) = saved_depth;
5734                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5735                 }
5736
5737               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5738
5739               /* We temporarily reduce the length of the ARGLIST so
5740                  that coerce_template_parms will see only the arguments
5741                  corresponding to the template parameters it is
5742                  examining.  */
5743               TREE_VEC_LENGTH (arglist)--;
5744             }
5745
5746           /* Restore the ARGLIST to its full size.  */
5747           TREE_VEC_LENGTH (arglist) = saved_depth;
5748
5749           arglist = bound_args;
5750         }
5751       else
5752         arglist
5753           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
5754                                    INNERMOST_TEMPLATE_ARGS (arglist),
5755                                    templ,
5756                                    complain,
5757                                    /*require_all_args=*/true,
5758                                    /*use_default_args=*/true);
5759
5760       if (arglist == error_mark_node)
5761         /* We were unable to bind the arguments.  */
5762         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5763
5764       /* In the scope of a template class, explicit references to the
5765          template class refer to the type of the template, not any
5766          instantiation of it.  For example, in:
5767
5768            template <class T> class C { void f(C<T>); }
5769
5770          the `C<T>' is just the same as `C'.  Outside of the
5771          class, however, such a reference is an instantiation.  */
5772       if (comp_template_args (TYPE_TI_ARGS (template_type),
5773                               arglist))
5774         {
5775           found = template_type;
5776
5777           if (!entering_scope && PRIMARY_TEMPLATE_P (templ))
5778             {
5779               tree ctx;
5780
5781               for (ctx = current_class_type;
5782                    ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5783                    ctx = (TYPE_P (ctx)
5784                           ? TYPE_CONTEXT (ctx)
5785                           : DECL_CONTEXT (ctx)))
5786                 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5787                   goto found_ctx;
5788
5789               /* We're not in the scope of the class, so the
5790                  TEMPLATE_TYPE is not the type we want after all.  */
5791               found = NULL_TREE;
5792             found_ctx:;
5793             }
5794         }
5795       if (found)
5796         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5797
5798       /* If we already have this specialization, return it.  */
5799       found = retrieve_specialization (templ, arglist,
5800                                        /*class_specializations_p=*/false);
5801       if (found)
5802         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5803
5804       /* This type is a "partial instantiation" if any of the template
5805          arguments still involve template parameters.  Note that we set
5806          IS_PARTIAL_INSTANTIATION for partial specializations as
5807          well.  */
5808       is_partial_instantiation = uses_template_parms (arglist);
5809
5810       /* If the deduced arguments are invalid, then the binding
5811          failed.  */
5812       if (!is_partial_instantiation
5813           && check_instantiated_args (templ,
5814                                       INNERMOST_TEMPLATE_ARGS (arglist),
5815                                       complain))
5816         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5817
5818       if (!is_partial_instantiation
5819           && !PRIMARY_TEMPLATE_P (templ)
5820           && TREE_CODE (CP_DECL_CONTEXT (templ)) == NAMESPACE_DECL)
5821         {
5822           found = xref_tag_from_type (TREE_TYPE (templ),
5823                                       DECL_NAME (templ),
5824                                       /*tag_scope=*/ts_global);
5825           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5826         }
5827
5828       context = tsubst (DECL_CONTEXT (templ), arglist,
5829                         complain, in_decl);
5830       if (!context)
5831         context = global_namespace;
5832
5833       /* Create the type.  */
5834       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5835         {
5836           if (!is_partial_instantiation)
5837             {
5838               set_current_access_from_decl (TYPE_NAME (template_type));
5839               t = start_enum (TYPE_IDENTIFIER (template_type));
5840             }
5841           else
5842             /* We don't want to call start_enum for this type, since
5843                the values for the enumeration constants may involve
5844                template parameters.  And, no one should be interested
5845                in the enumeration constants for such a type.  */
5846             t = make_node (ENUMERAL_TYPE);
5847         }
5848       else
5849         {
5850           t = make_class_type (TREE_CODE (template_type));
5851           CLASSTYPE_DECLARED_CLASS (t)
5852             = CLASSTYPE_DECLARED_CLASS (template_type);
5853           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
5854           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
5855
5856           /* A local class.  Make sure the decl gets registered properly.  */
5857           if (context == current_function_decl)
5858             pushtag (DECL_NAME (templ), t, /*tag_scope=*/ts_current);
5859
5860           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5861             /* This instantiation is another name for the primary
5862                template type. Set the TYPE_CANONICAL field
5863                appropriately. */
5864             TYPE_CANONICAL (t) = template_type;
5865           else if (any_template_arguments_need_structural_equality_p (arglist))
5866             /* Some of the template arguments require structural
5867                equality testing, so this template class requires
5868                structural equality testing. */
5869             SET_TYPE_STRUCTURAL_EQUALITY (t);
5870         }
5871
5872       /* If we called start_enum or pushtag above, this information
5873          will already be set up.  */
5874       if (!TYPE_NAME (t))
5875         {
5876           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5877
5878           type_decl = create_implicit_typedef (DECL_NAME (templ), t);
5879           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
5880           TYPE_STUB_DECL (t) = type_decl;
5881           DECL_SOURCE_LOCATION (type_decl)
5882             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
5883         }
5884       else
5885         type_decl = TYPE_NAME (t);
5886
5887       TREE_PRIVATE (type_decl)
5888         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5889       TREE_PROTECTED (type_decl)
5890         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
5891       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5892         {
5893           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5894           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5895         }
5896
5897       /* Set up the template information.  We have to figure out which
5898          template is the immediate parent if this is a full
5899          instantiation.  */
5900       if (parm_depth == 1 || is_partial_instantiation
5901           || !PRIMARY_TEMPLATE_P (templ))
5902         /* This case is easy; there are no member templates involved.  */
5903         found = templ;
5904       else
5905         {
5906           /* This is a full instantiation of a member template.  Look
5907              for a partial instantiation of which this is an instance.  */
5908
5909           for (found = DECL_TEMPLATE_INSTANTIATIONS (templ);
5910                found; found = TREE_CHAIN (found))
5911             {
5912               int success;
5913               tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5914
5915               /* We only want partial instantiations, here, not
5916                  specializations or full instantiations.  */
5917               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
5918                   || !uses_template_parms (TREE_VALUE (found)))
5919                 continue;
5920
5921               /* Temporarily reduce by one the number of levels in the
5922                  ARGLIST and in FOUND so as to avoid comparing the
5923                  last set of arguments.  */
5924               TREE_VEC_LENGTH (arglist)--;
5925               TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5926
5927               /* See if the arguments match.  If they do, then TMPL is
5928                  the partial instantiation we want.  */
5929               success = comp_template_args (TREE_PURPOSE (found), arglist);
5930
5931               /* Restore the argument vectors to their full size.  */
5932               TREE_VEC_LENGTH (arglist)++;
5933               TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5934
5935               if (success)
5936                 {
5937                   found = tmpl;
5938                   break;
5939                 }
5940             }
5941
5942           if (!found)
5943             {
5944               /* There was no partial instantiation. This happens
5945                  where C<T> is a member template of A<T> and it's used
5946                  in something like
5947
5948                   template <typename T> struct B { A<T>::C<int> m; };
5949                   B<float>;
5950
5951                  Create the partial instantiation.
5952                */
5953               TREE_VEC_LENGTH (arglist)--;
5954               found = tsubst (templ, arglist, complain, NULL_TREE);
5955               TREE_VEC_LENGTH (arglist)++;
5956             }
5957         }
5958
5959       SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
5960       DECL_TEMPLATE_INSTANTIATIONS (templ)
5961         = tree_cons (arglist, t,
5962                      DECL_TEMPLATE_INSTANTIATIONS (templ));
5963
5964       if (TREE_CODE (t) == ENUMERAL_TYPE
5965           && !is_partial_instantiation)
5966         /* Now that the type has been registered on the instantiations
5967            list, we set up the enumerators.  Because the enumeration
5968            constants may involve the enumeration type itself, we make
5969            sure to register the type first, and then create the
5970            constants.  That way, doing tsubst_expr for the enumeration
5971            constants won't result in recursive calls here; we'll find
5972            the instantiation and exit above.  */
5973         tsubst_enum (template_type, t, arglist);
5974
5975       if (is_partial_instantiation)
5976         /* If the type makes use of template parameters, the
5977            code that generates debugging information will crash.  */
5978         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
5979
5980       /* Possibly limit visibility based on template args.  */
5981       TREE_PUBLIC (type_decl) = 1;
5982       determine_visibility (type_decl);
5983
5984       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
5985     }
5986   timevar_pop (TV_NAME_LOOKUP);
5987 }
5988 \f
5989 struct pair_fn_data
5990 {
5991   tree_fn_t fn;
5992   void *data;
5993   /* True when we should also visit template parameters that occur in
5994      non-deduced contexts.  */
5995   bool include_nondeduced_p;
5996   struct pointer_set_t *visited;
5997 };
5998
5999 /* Called from for_each_template_parm via walk_tree.  */
6000
6001 static tree
6002 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
6003 {
6004   tree t = *tp;
6005   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
6006   tree_fn_t fn = pfd->fn;
6007   void *data = pfd->data;
6008
6009   if (TYPE_P (t)
6010       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
6011       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
6012                                  pfd->include_nondeduced_p))
6013     return error_mark_node;
6014
6015   switch (TREE_CODE (t))
6016     {
6017     case RECORD_TYPE:
6018       if (TYPE_PTRMEMFUNC_P (t))
6019         break;
6020       /* Fall through.  */
6021
6022     case UNION_TYPE:
6023     case ENUMERAL_TYPE:
6024       if (!TYPE_TEMPLATE_INFO (t))
6025         *walk_subtrees = 0;
6026       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
6027                                        fn, data, pfd->visited, 
6028                                        pfd->include_nondeduced_p))
6029         return error_mark_node;
6030       break;
6031
6032     case INTEGER_TYPE:
6033       if (for_each_template_parm (TYPE_MIN_VALUE (t),
6034                                   fn, data, pfd->visited, 
6035                                   pfd->include_nondeduced_p)
6036           || for_each_template_parm (TYPE_MAX_VALUE (t),
6037                                      fn, data, pfd->visited,
6038                                      pfd->include_nondeduced_p))
6039         return error_mark_node;
6040       break;
6041
6042     case METHOD_TYPE:
6043       /* Since we're not going to walk subtrees, we have to do this
6044          explicitly here.  */
6045       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
6046                                   pfd->visited, pfd->include_nondeduced_p))
6047         return error_mark_node;
6048       /* Fall through.  */
6049
6050     case FUNCTION_TYPE:
6051       /* Check the return type.  */
6052       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6053                                   pfd->include_nondeduced_p))
6054         return error_mark_node;
6055
6056       /* Check the parameter types.  Since default arguments are not
6057          instantiated until they are needed, the TYPE_ARG_TYPES may
6058          contain expressions that involve template parameters.  But,
6059          no-one should be looking at them yet.  And, once they're
6060          instantiated, they don't contain template parameters, so
6061          there's no point in looking at them then, either.  */
6062       {
6063         tree parm;
6064
6065         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
6066           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
6067                                       pfd->visited, pfd->include_nondeduced_p))
6068             return error_mark_node;
6069
6070         /* Since we've already handled the TYPE_ARG_TYPES, we don't
6071            want walk_tree walking into them itself.  */
6072         *walk_subtrees = 0;
6073       }
6074       break;
6075
6076     case TYPEOF_TYPE:
6077       if (pfd->include_nondeduced_p
6078           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
6079                                      pfd->visited, 
6080                                      pfd->include_nondeduced_p))
6081         return error_mark_node;
6082       break;
6083
6084     case FUNCTION_DECL:
6085     case VAR_DECL:
6086       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
6087           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
6088                                      pfd->visited, pfd->include_nondeduced_p))
6089         return error_mark_node;
6090       /* Fall through.  */
6091
6092     case PARM_DECL:
6093     case CONST_DECL:
6094       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
6095           && for_each_template_parm (DECL_INITIAL (t), fn, data,
6096                                      pfd->visited, pfd->include_nondeduced_p))
6097         return error_mark_node;
6098       if (DECL_CONTEXT (t)
6099           && pfd->include_nondeduced_p
6100           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
6101                                      pfd->visited, pfd->include_nondeduced_p))
6102         return error_mark_node;
6103       break;
6104
6105     case BOUND_TEMPLATE_TEMPLATE_PARM:
6106       /* Record template parameters such as `T' inside `TT<T>'.  */
6107       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
6108                                   pfd->include_nondeduced_p))
6109         return error_mark_node;
6110       /* Fall through.  */
6111
6112     case TEMPLATE_TEMPLATE_PARM:
6113     case TEMPLATE_TYPE_PARM:
6114     case TEMPLATE_PARM_INDEX:
6115       if (fn && (*fn)(t, data))
6116         return error_mark_node;
6117       else if (!fn)
6118         return error_mark_node;
6119       break;
6120
6121     case TEMPLATE_DECL:
6122       /* A template template parameter is encountered.  */
6123       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
6124           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6125                                      pfd->include_nondeduced_p))
6126         return error_mark_node;
6127
6128       /* Already substituted template template parameter */
6129       *walk_subtrees = 0;
6130       break;
6131
6132     case TYPENAME_TYPE:
6133       if (!fn
6134           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
6135                                      data, pfd->visited, 
6136                                      pfd->include_nondeduced_p))
6137         return error_mark_node;
6138       break;
6139
6140     case CONSTRUCTOR:
6141       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
6142           && pfd->include_nondeduced_p
6143           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
6144                                      (TREE_TYPE (t)), fn, data,
6145                                      pfd->visited, pfd->include_nondeduced_p))
6146         return error_mark_node;
6147       break;
6148
6149     case INDIRECT_REF:
6150     case COMPONENT_REF:
6151       /* If there's no type, then this thing must be some expression
6152          involving template parameters.  */
6153       if (!fn && !TREE_TYPE (t))
6154         return error_mark_node;
6155       break;
6156
6157     case MODOP_EXPR:
6158     case CAST_EXPR:
6159     case REINTERPRET_CAST_EXPR:
6160     case CONST_CAST_EXPR:
6161     case STATIC_CAST_EXPR:
6162     case DYNAMIC_CAST_EXPR:
6163     case ARROW_EXPR:
6164     case DOTSTAR_EXPR:
6165     case TYPEID_EXPR:
6166     case PSEUDO_DTOR_EXPR:
6167       if (!fn)
6168         return error_mark_node;
6169       break;
6170
6171     default:
6172       break;
6173     }
6174
6175   /* We didn't find any template parameters we liked.  */
6176   return NULL_TREE;
6177 }
6178
6179 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
6180    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
6181    call FN with the parameter and the DATA.
6182    If FN returns nonzero, the iteration is terminated, and
6183    for_each_template_parm returns 1.  Otherwise, the iteration
6184    continues.  If FN never returns a nonzero value, the value
6185    returned by for_each_template_parm is 0.  If FN is NULL, it is
6186    considered to be the function which always returns 1.
6187
6188    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
6189    parameters that occur in non-deduced contexts.  When false, only
6190    visits those template parameters that can be deduced.  */
6191
6192 static int
6193 for_each_template_parm (tree t, tree_fn_t fn, void* data,
6194                         struct pointer_set_t *visited,
6195                         bool include_nondeduced_p)
6196 {
6197   struct pair_fn_data pfd;
6198   int result;
6199
6200   /* Set up.  */
6201   pfd.fn = fn;
6202   pfd.data = data;
6203   pfd.include_nondeduced_p = include_nondeduced_p;
6204
6205   /* Walk the tree.  (Conceptually, we would like to walk without
6206      duplicates, but for_each_template_parm_r recursively calls
6207      for_each_template_parm, so we would need to reorganize a fair
6208      bit to use walk_tree_without_duplicates, so we keep our own
6209      visited list.)  */
6210   if (visited)
6211     pfd.visited = visited;
6212   else
6213     pfd.visited = pointer_set_create ();
6214   result = cp_walk_tree (&t,
6215                          for_each_template_parm_r,
6216                          &pfd,
6217                          pfd.visited) != NULL_TREE;
6218
6219   /* Clean up.  */
6220   if (!visited)
6221     {
6222       pointer_set_destroy (pfd.visited);
6223       pfd.visited = 0;
6224     }
6225
6226   return result;
6227 }
6228
6229 /* Returns true if T depends on any template parameter.  */
6230
6231 int
6232 uses_template_parms (tree t)
6233 {
6234   bool dependent_p;
6235   int saved_processing_template_decl;
6236
6237   saved_processing_template_decl = processing_template_decl;
6238   if (!saved_processing_template_decl)
6239     processing_template_decl = 1;
6240   if (TYPE_P (t))
6241     dependent_p = dependent_type_p (t);
6242   else if (TREE_CODE (t) == TREE_VEC)
6243     dependent_p = any_dependent_template_arguments_p (t);
6244   else if (TREE_CODE (t) == TREE_LIST)
6245     dependent_p = (uses_template_parms (TREE_VALUE (t))
6246                    || uses_template_parms (TREE_CHAIN (t)));
6247   else if (TREE_CODE (t) == TYPE_DECL)
6248     dependent_p = dependent_type_p (TREE_TYPE (t));
6249   else if (DECL_P (t)
6250            || EXPR_P (t)
6251            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
6252            || TREE_CODE (t) == OVERLOAD
6253            || TREE_CODE (t) == BASELINK
6254            || TREE_CODE (t) == IDENTIFIER_NODE
6255            || TREE_CODE (t) == TRAIT_EXPR
6256            || CONSTANT_CLASS_P (t))
6257     dependent_p = (type_dependent_expression_p (t)
6258                    || value_dependent_expression_p (t));
6259   else
6260     {
6261       gcc_assert (t == error_mark_node);
6262       dependent_p = false;
6263     }
6264
6265   processing_template_decl = saved_processing_template_decl;
6266
6267   return dependent_p;
6268 }
6269
6270 /* Returns true if T depends on any template parameter with level LEVEL.  */
6271
6272 int
6273 uses_template_parms_level (tree t, int level)
6274 {
6275   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
6276                                  /*include_nondeduced_p=*/true);
6277 }
6278
6279 static int tinst_depth;
6280 extern int max_tinst_depth;
6281 #ifdef GATHER_STATISTICS
6282 int depth_reached;
6283 #endif
6284 static int tinst_level_tick;
6285 static int last_template_error_tick;
6286
6287 /* We're starting to instantiate D; record the template instantiation context
6288    for diagnostics and to restore it later.  */
6289
6290 static int
6291 push_tinst_level (tree d)
6292 {
6293   struct tinst_level *new_level;
6294
6295   if (tinst_depth >= max_tinst_depth)
6296     {
6297       /* If the instantiation in question still has unbound template parms,
6298          we don't really care if we can't instantiate it, so just return.
6299          This happens with base instantiation for implicit `typename'.  */
6300       if (uses_template_parms (d))
6301         return 0;
6302
6303       last_template_error_tick = tinst_level_tick;
6304       error ("template instantiation depth exceeds maximum of %d (use "
6305              "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
6306              max_tinst_depth, d);
6307
6308       print_instantiation_context ();
6309
6310       return 0;
6311     }
6312
6313   new_level = GGC_NEW (struct tinst_level);
6314   new_level->decl = d;
6315   new_level->locus = input_location;
6316   new_level->in_system_header_p = in_system_header;
6317   new_level->next = current_tinst_level;
6318   current_tinst_level = new_level;
6319
6320   ++tinst_depth;
6321 #ifdef GATHER_STATISTICS
6322   if (tinst_depth > depth_reached)
6323     depth_reached = tinst_depth;
6324 #endif
6325
6326   ++tinst_level_tick;
6327   return 1;
6328 }
6329
6330 /* We're done instantiating this template; return to the instantiation
6331    context.  */
6332
6333 static void
6334 pop_tinst_level (void)
6335 {
6336   /* Restore the filename and line number stashed away when we started
6337      this instantiation.  */
6338   input_location = current_tinst_level->locus;
6339   current_tinst_level = current_tinst_level->next;
6340   --tinst_depth;
6341   ++tinst_level_tick;
6342 }
6343
6344 /* We're instantiating a deferred template; restore the template
6345    instantiation context in which the instantiation was requested, which
6346    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
6347
6348 static tree
6349 reopen_tinst_level (struct tinst_level *level)
6350 {
6351   struct tinst_level *t;
6352
6353   tinst_depth = 0;
6354   for (t = level; t; t = t->next)
6355     ++tinst_depth;
6356
6357   current_tinst_level = level;
6358   pop_tinst_level ();
6359   return level->decl;
6360 }
6361
6362 /* Returns the TINST_LEVEL which gives the original instantiation
6363    context.  */
6364
6365 struct tinst_level *
6366 outermost_tinst_level (void)
6367 {
6368   struct tinst_level *level = current_tinst_level;
6369   if (level)
6370     while (level->next)
6371       level = level->next;
6372   return level;
6373 }
6374
6375 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
6376    vector of template arguments, as for tsubst.
6377
6378    Returns an appropriate tsubst'd friend declaration.  */
6379
6380 static tree
6381 tsubst_friend_function (tree decl, tree args)
6382 {
6383   tree new_friend;
6384
6385   if (TREE_CODE (decl) == FUNCTION_DECL
6386       && DECL_TEMPLATE_INSTANTIATION (decl)
6387       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6388     /* This was a friend declared with an explicit template
6389        argument list, e.g.:
6390
6391        friend void f<>(T);
6392
6393        to indicate that f was a template instantiation, not a new
6394        function declaration.  Now, we have to figure out what
6395        instantiation of what template.  */
6396     {
6397       tree template_id, arglist, fns;
6398       tree new_args;
6399       tree tmpl;
6400       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6401
6402       /* Friend functions are looked up in the containing namespace scope.
6403          We must enter that scope, to avoid finding member functions of the
6404          current class with same name.  */
6405       push_nested_namespace (ns);
6406       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6407                          tf_warning_or_error, NULL_TREE,
6408                          /*integral_constant_expression_p=*/false);
6409       pop_nested_namespace (ns);
6410       arglist = tsubst (DECL_TI_ARGS (decl), args,
6411                         tf_warning_or_error, NULL_TREE);
6412       template_id = lookup_template_function (fns, arglist);
6413
6414       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6415       tmpl = determine_specialization (template_id, new_friend,
6416                                        &new_args,
6417                                        /*need_member_template=*/0,
6418                                        TREE_VEC_LENGTH (args),
6419                                        tsk_none);
6420       return instantiate_template (tmpl, new_args, tf_error);
6421     }
6422
6423   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6424
6425   /* The NEW_FRIEND will look like an instantiation, to the
6426      compiler, but is not an instantiation from the point of view of
6427      the language.  For example, we might have had:
6428
6429      template <class T> struct S {
6430        template <class U> friend void f(T, U);
6431      };
6432
6433      Then, in S<int>, template <class U> void f(int, U) is not an
6434      instantiation of anything.  */
6435   if (new_friend == error_mark_node)
6436     return error_mark_node;
6437
6438   DECL_USE_TEMPLATE (new_friend) = 0;
6439   if (TREE_CODE (decl) == TEMPLATE_DECL)
6440     {
6441       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6442       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6443         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6444     }
6445
6446   /* The mangled name for the NEW_FRIEND is incorrect.  The function
6447      is not a template instantiation and should not be mangled like
6448      one.  Therefore, we forget the mangling here; we'll recompute it
6449      later if we need it.  */
6450   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6451     {
6452       SET_DECL_RTL (new_friend, NULL_RTX);
6453       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6454     }
6455
6456   if (DECL_NAMESPACE_SCOPE_P (new_friend))
6457     {
6458       tree old_decl;
6459       tree new_friend_template_info;
6460       tree new_friend_result_template_info;
6461       tree ns;
6462       int  new_friend_is_defn;
6463
6464       /* We must save some information from NEW_FRIEND before calling
6465          duplicate decls since that function will free NEW_FRIEND if
6466          possible.  */
6467       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6468       new_friend_is_defn =
6469             (DECL_INITIAL (DECL_TEMPLATE_RESULT
6470                            (template_for_substitution (new_friend)))
6471              != NULL_TREE);
6472       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6473         {
6474           /* This declaration is a `primary' template.  */
6475           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6476
6477           new_friend_result_template_info
6478             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6479         }
6480       else
6481         new_friend_result_template_info = NULL_TREE;
6482
6483       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
6484       if (new_friend_is_defn)
6485         DECL_INITIAL (new_friend) = error_mark_node;
6486
6487       /* Inside pushdecl_namespace_level, we will push into the
6488          current namespace. However, the friend function should go
6489          into the namespace of the template.  */
6490       ns = decl_namespace_context (new_friend);
6491       push_nested_namespace (ns);
6492       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6493       pop_nested_namespace (ns);
6494
6495       if (old_decl == error_mark_node)
6496         return error_mark_node;
6497
6498       if (old_decl != new_friend)
6499         {
6500           /* This new friend declaration matched an existing
6501              declaration.  For example, given:
6502
6503                template <class T> void f(T);
6504                template <class U> class C {
6505                  template <class T> friend void f(T) {}
6506                };
6507
6508              the friend declaration actually provides the definition
6509              of `f', once C has been instantiated for some type.  So,
6510              old_decl will be the out-of-class template declaration,
6511              while new_friend is the in-class definition.
6512
6513              But, if `f' was called before this point, the
6514              instantiation of `f' will have DECL_TI_ARGS corresponding
6515              to `T' but not to `U', references to which might appear
6516              in the definition of `f'.  Previously, the most general
6517              template for an instantiation of `f' was the out-of-class
6518              version; now it is the in-class version.  Therefore, we
6519              run through all specialization of `f', adding to their
6520              DECL_TI_ARGS appropriately.  In particular, they need a
6521              new set of outer arguments, corresponding to the
6522              arguments for this class instantiation.
6523
6524              The same situation can arise with something like this:
6525
6526                friend void f(int);
6527                template <class T> class C {
6528                  friend void f(T) {}
6529                };
6530
6531              when `C<int>' is instantiated.  Now, `f(int)' is defined
6532              in the class.  */
6533
6534           if (!new_friend_is_defn)
6535             /* On the other hand, if the in-class declaration does
6536                *not* provide a definition, then we don't want to alter
6537                existing definitions.  We can just leave everything
6538                alone.  */
6539             ;
6540           else
6541             {
6542               /* Overwrite whatever template info was there before, if
6543                  any, with the new template information pertaining to
6544                  the declaration.  */
6545               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6546
6547               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6548                 reregister_specialization (new_friend,
6549                                            most_general_template (old_decl),
6550                                            old_decl);
6551               else
6552                 {
6553                   tree t;
6554                   tree new_friend_args;
6555
6556                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6557                     = new_friend_result_template_info;
6558
6559                   new_friend_args = TI_ARGS (new_friend_template_info);
6560                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6561                        t != NULL_TREE;
6562                        t = TREE_CHAIN (t))
6563                     {
6564                       tree spec = TREE_VALUE (t);
6565
6566                       DECL_TI_ARGS (spec)
6567                         = add_outermost_template_args (new_friend_args,
6568                                                        DECL_TI_ARGS (spec));
6569                     }
6570
6571                   /* Now, since specializations are always supposed to
6572                      hang off of the most general template, we must move
6573                      them.  */
6574                   t = most_general_template (old_decl);
6575                   if (t != old_decl)
6576                     {
6577                       DECL_TEMPLATE_SPECIALIZATIONS (t)
6578                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6579                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6580                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6581                     }
6582                 }
6583             }
6584
6585           /* The information from NEW_FRIEND has been merged into OLD_DECL
6586              by duplicate_decls.  */
6587           new_friend = old_decl;
6588         }
6589     }
6590   else
6591     {
6592       tree context = DECL_CONTEXT (new_friend);
6593       bool dependent_p;
6594
6595       /* In the code
6596            template <class T> class C {
6597              template <class U> friend void C1<U>::f (); // case 1
6598              friend void C2<T>::f ();                    // case 2
6599            };
6600          we only need to make sure CONTEXT is a complete type for
6601          case 2.  To distinguish between the two cases, we note that
6602          CONTEXT of case 1 remains dependent type after tsubst while
6603          this isn't true for case 2.  */
6604       ++processing_template_decl;
6605       dependent_p = dependent_type_p (context);
6606       --processing_template_decl;
6607
6608       if (!dependent_p
6609           && !complete_type_or_else (context, NULL_TREE))
6610         return error_mark_node;
6611
6612       if (COMPLETE_TYPE_P (context))
6613         {
6614           /* Check to see that the declaration is really present, and,
6615              possibly obtain an improved declaration.  */
6616           tree fn = check_classfn (context,
6617                                    new_friend, NULL_TREE);
6618
6619           if (fn)
6620             new_friend = fn;
6621         }
6622     }
6623
6624   return new_friend;
6625 }
6626
6627 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
6628    template arguments, as for tsubst.
6629
6630    Returns an appropriate tsubst'd friend type or error_mark_node on
6631    failure.  */
6632
6633 static tree
6634 tsubst_friend_class (tree friend_tmpl, tree args)
6635 {
6636   tree friend_type;
6637   tree tmpl;
6638   tree context;
6639
6640   context = DECL_CONTEXT (friend_tmpl);
6641
6642   if (context)
6643     {
6644       if (TREE_CODE (context) == NAMESPACE_DECL)
6645         push_nested_namespace (context);
6646       else
6647         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6648     }
6649
6650   /* Look for a class template declaration.  We look for hidden names
6651      because two friend declarations of the same template are the
6652      same.  For example, in:
6653
6654        struct A { 
6655          template <typename> friend class F;
6656        };
6657        template <typename> struct B { 
6658          template <typename> friend class F;
6659        };
6660
6661      both F templates are the same.  */
6662   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6663                            /*block_p=*/true, 0, 
6664                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6665
6666   /* But, if we don't find one, it might be because we're in a
6667      situation like this:
6668
6669        template <class T>
6670        struct S {
6671          template <class U>
6672          friend struct S;
6673        };
6674
6675      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6676      for `S<int>', not the TEMPLATE_DECL.  */
6677   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6678     {
6679       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6680       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6681     }
6682
6683   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6684     {
6685       /* The friend template has already been declared.  Just
6686          check to see that the declarations match, and install any new
6687          default parameters.  We must tsubst the default parameters,
6688          of course.  We only need the innermost template parameters
6689          because that is all that redeclare_class_template will look
6690          at.  */
6691       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6692           > TMPL_ARGS_DEPTH (args))
6693         {
6694           tree parms;
6695           location_t saved_input_location;
6696           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6697                                          args, tf_warning_or_error);
6698
6699           saved_input_location = input_location;
6700           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
6701           redeclare_class_template (TREE_TYPE (tmpl), parms);
6702           input_location = saved_input_location;
6703           
6704         }
6705
6706       friend_type = TREE_TYPE (tmpl);
6707     }
6708   else
6709     {
6710       /* The friend template has not already been declared.  In this
6711          case, the instantiation of the template class will cause the
6712          injection of this template into the global scope.  */
6713       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6714       if (tmpl == error_mark_node)
6715         return error_mark_node;
6716
6717       /* The new TMPL is not an instantiation of anything, so we
6718          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
6719          the new type because that is supposed to be the corresponding
6720          template decl, i.e., TMPL.  */
6721       DECL_USE_TEMPLATE (tmpl) = 0;
6722       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6723       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6724       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6725         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6726
6727       /* Inject this template into the global scope.  */
6728       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6729     }
6730
6731   if (context)
6732     {
6733       if (TREE_CODE (context) == NAMESPACE_DECL)
6734         pop_nested_namespace (context);
6735       else
6736         pop_nested_class ();
6737     }
6738
6739   return friend_type;
6740 }
6741
6742 /* Returns zero if TYPE cannot be completed later due to circularity.
6743    Otherwise returns one.  */
6744
6745 static int
6746 can_complete_type_without_circularity (tree type)
6747 {
6748   if (type == NULL_TREE || type == error_mark_node)
6749     return 0;
6750   else if (COMPLETE_TYPE_P (type))
6751     return 1;
6752   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6753     return can_complete_type_without_circularity (TREE_TYPE (type));
6754   else if (CLASS_TYPE_P (type)
6755            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6756     return 0;
6757   else
6758     return 1;
6759 }
6760
6761 /* Apply any attributes which had to be deferred until instantiation
6762    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
6763    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
6764
6765 static void
6766 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
6767                                 tree args, tsubst_flags_t complain, tree in_decl)
6768 {
6769   tree last_dep = NULL_TREE;
6770   tree t;
6771   tree *p;
6772
6773   for (t = attributes; t; t = TREE_CHAIN (t))
6774     if (ATTR_IS_DEPENDENT (t))
6775       {
6776         last_dep = t;
6777         attributes = copy_list (attributes);
6778         break;
6779       }
6780
6781   if (DECL_P (*decl_p))
6782     {
6783       if (TREE_TYPE (*decl_p) == error_mark_node)
6784         return;
6785       p = &DECL_ATTRIBUTES (*decl_p);
6786     }
6787   else
6788     p = &TYPE_ATTRIBUTES (*decl_p);
6789
6790   if (last_dep)
6791     {
6792       tree late_attrs = NULL_TREE;
6793       tree *q = &late_attrs;
6794
6795       for (*p = attributes; *p; )
6796         {
6797           t = *p;
6798           if (ATTR_IS_DEPENDENT (t))
6799             {
6800               *p = TREE_CHAIN (t);
6801               TREE_CHAIN (t) = NULL_TREE;
6802               /* If the first attribute argument is an identifier, don't
6803                  pass it through tsubst.  Attributes like mode, format,
6804                  cleanup and several target specific attributes expect it
6805                  unmodified.  */
6806               if (TREE_VALUE (t)
6807                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
6808                   && TREE_VALUE (TREE_VALUE (t))
6809                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
6810                       == IDENTIFIER_NODE))
6811                 {
6812                   tree chain
6813                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
6814                                    in_decl,
6815                                    /*integral_constant_expression_p=*/false);
6816                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
6817                     TREE_VALUE (t)
6818                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
6819                                    chain);
6820                 }
6821               else
6822                 TREE_VALUE (t)
6823                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
6824                                  /*integral_constant_expression_p=*/false);
6825               *q = t;
6826               q = &TREE_CHAIN (t);
6827             }
6828           else
6829             p = &TREE_CHAIN (t);
6830         }
6831
6832       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
6833     }
6834 }
6835
6836 tree
6837 instantiate_class_template (tree type)
6838 {
6839   tree templ, args, pattern, t, member;
6840   tree typedecl;
6841   tree pbinfo;
6842   tree base_list;
6843
6844   if (type == error_mark_node)
6845     return error_mark_node;
6846
6847   if (TYPE_BEING_DEFINED (type)
6848       || COMPLETE_TYPE_P (type)
6849       || dependent_type_p (type))
6850     return type;
6851
6852   /* Figure out which template is being instantiated.  */
6853   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6854   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
6855
6856   /* Determine what specialization of the original template to
6857      instantiate.  */
6858   t = most_specialized_class (type, templ);
6859   if (t == error_mark_node)
6860     {
6861       TYPE_BEING_DEFINED (type) = 1;
6862       return error_mark_node;
6863     }
6864   else if (t)
6865     {
6866       /* This TYPE is actually an instantiation of a partial
6867          specialization.  We replace the innermost set of ARGS with
6868          the arguments appropriate for substitution.  For example,
6869          given:
6870
6871            template <class T> struct S {};
6872            template <class T> struct S<T*> {};
6873
6874          and supposing that we are instantiating S<int*>, ARGS will
6875          presently be {int*} -- but we need {int}.  */
6876       pattern = TREE_TYPE (t);
6877       args = TREE_PURPOSE (t);
6878     }
6879   else
6880     {
6881       pattern = TREE_TYPE (templ);
6882       args = CLASSTYPE_TI_ARGS (type);
6883     }
6884
6885   /* If the template we're instantiating is incomplete, then clearly
6886      there's nothing we can do.  */
6887   if (!COMPLETE_TYPE_P (pattern))
6888     return type;
6889
6890   /* If we've recursively instantiated too many templates, stop.  */
6891   if (! push_tinst_level (type))
6892     return type;
6893
6894   /* Now we're really doing the instantiation.  Mark the type as in
6895      the process of being defined.  */
6896   TYPE_BEING_DEFINED (type) = 1;
6897
6898   /* We may be in the middle of deferred access check.  Disable
6899      it now.  */
6900   push_deferring_access_checks (dk_no_deferred);
6901
6902   push_to_top_level ();
6903
6904   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6905
6906   /* Set the input location to the template definition. This is needed
6907      if tsubsting causes an error.  */
6908   typedecl = TYPE_MAIN_DECL (type);
6909   input_location = DECL_SOURCE_LOCATION (typedecl);
6910
6911   TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern);
6912   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6913   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6914   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6915   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6916   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6917   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6918   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6919   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6920   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6921   TYPE_PACKED (type) = TYPE_PACKED (pattern);
6922   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6923   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6924   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6925   if (ANON_AGGR_TYPE_P (pattern))
6926     SET_ANON_AGGR_TYPE_P (type);
6927   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6928     {
6929       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6930       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6931     }
6932
6933   pbinfo = TYPE_BINFO (pattern);
6934
6935   /* We should never instantiate a nested class before its enclosing
6936      class; we need to look up the nested class by name before we can
6937      instantiate it, and that lookup should instantiate the enclosing
6938      class.  */
6939   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6940               || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6941               || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6942
6943   base_list = NULL_TREE;
6944   if (BINFO_N_BASE_BINFOS (pbinfo))
6945     {
6946       tree pbase_binfo;
6947       tree context = TYPE_CONTEXT (type);
6948       tree pushed_scope;
6949       int i;
6950
6951       /* We must enter the scope containing the type, as that is where
6952          the accessibility of types named in dependent bases are
6953          looked up from.  */
6954       pushed_scope = push_scope (context ? context : global_namespace);
6955
6956       /* Substitute into each of the bases to determine the actual
6957          basetypes.  */
6958       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6959         {
6960           tree base;
6961           tree access = BINFO_BASE_ACCESS (pbinfo, i);
6962           tree expanded_bases = NULL_TREE;
6963           int idx, len = 1;
6964
6965           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6966             {
6967               expanded_bases = 
6968                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6969                                        args, tf_error, NULL_TREE);
6970               if (expanded_bases == error_mark_node)
6971                 continue;
6972
6973               len = TREE_VEC_LENGTH (expanded_bases);
6974             }
6975
6976           for (idx = 0; idx < len; idx++)
6977             {
6978               if (expanded_bases)
6979                 /* Extract the already-expanded base class.  */
6980                 base = TREE_VEC_ELT (expanded_bases, idx);
6981               else
6982                 /* Substitute to figure out the base class.  */
6983                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
6984                                NULL_TREE);
6985
6986               if (base == error_mark_node)
6987                 continue;
6988
6989               base_list = tree_cons (access, base, base_list);
6990               if (BINFO_VIRTUAL_P (pbase_binfo))
6991                 TREE_TYPE (base_list) = integer_type_node;
6992             }
6993         }
6994
6995       /* The list is now in reverse order; correct that.  */
6996       base_list = nreverse (base_list);
6997
6998       if (pushed_scope)
6999         pop_scope (pushed_scope);
7000     }
7001   /* Now call xref_basetypes to set up all the base-class
7002      information.  */
7003   xref_basetypes (type, base_list);
7004
7005   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
7006                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
7007                                   args, tf_error, NULL_TREE);
7008
7009   /* Now that our base classes are set up, enter the scope of the
7010      class, so that name lookups into base classes, etc. will work
7011      correctly.  This is precisely analogous to what we do in
7012      begin_class_definition when defining an ordinary non-template
7013      class, except we also need to push the enclosing classes.  */
7014   push_nested_class (type);
7015
7016   /* Now members are processed in the order of declaration.  */
7017   for (member = CLASSTYPE_DECL_LIST (pattern);
7018        member; member = TREE_CHAIN (member))
7019     {
7020       tree t = TREE_VALUE (member);
7021
7022       if (TREE_PURPOSE (member))
7023         {
7024           if (TYPE_P (t))
7025             {
7026               /* Build new CLASSTYPE_NESTED_UTDS.  */
7027
7028               tree newtag;
7029               bool class_template_p;
7030
7031               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
7032                                   && TYPE_LANG_SPECIFIC (t)
7033                                   && CLASSTYPE_IS_TEMPLATE (t));
7034               /* If the member is a class template, then -- even after
7035                  substitution -- there may be dependent types in the
7036                  template argument list for the class.  We increment
7037                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
7038                  that function will assume that no types are dependent
7039                  when outside of a template.  */
7040               if (class_template_p)
7041                 ++processing_template_decl;
7042               newtag = tsubst (t, args, tf_error, NULL_TREE);
7043               if (class_template_p)
7044                 --processing_template_decl;
7045               if (newtag == error_mark_node)
7046                 continue;
7047
7048               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
7049                 {
7050                   tree name = TYPE_IDENTIFIER (t);
7051
7052                   if (class_template_p)
7053                     /* Unfortunately, lookup_template_class sets
7054                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
7055                        instantiation (i.e., for the type of a member
7056                        template class nested within a template class.)
7057                        This behavior is required for
7058                        maybe_process_partial_specialization to work
7059                        correctly, but is not accurate in this case;
7060                        the TAG is not an instantiation of anything.
7061                        (The corresponding TEMPLATE_DECL is an
7062                        instantiation, but the TYPE is not.) */
7063                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
7064
7065                   /* Now, we call pushtag to put this NEWTAG into the scope of
7066                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
7067                      pushtag calling push_template_decl.  We don't have to do
7068                      this for enums because it will already have been done in
7069                      tsubst_enum.  */
7070                   if (name)
7071                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
7072                   pushtag (name, newtag, /*tag_scope=*/ts_current);
7073                 }
7074             }
7075           else if (TREE_CODE (t) == FUNCTION_DECL
7076                    || DECL_FUNCTION_TEMPLATE_P (t))
7077             {
7078               /* Build new TYPE_METHODS.  */
7079               tree r;
7080
7081               if (TREE_CODE (t) == TEMPLATE_DECL)
7082                 ++processing_template_decl;
7083               r = tsubst (t, args, tf_error, NULL_TREE);
7084               if (TREE_CODE (t) == TEMPLATE_DECL)
7085                 --processing_template_decl;
7086               set_current_access_from_decl (r);
7087               finish_member_declaration (r);
7088             }
7089           else
7090             {
7091               /* Build new TYPE_FIELDS.  */
7092               if (TREE_CODE (t) == STATIC_ASSERT)
7093                 {
7094                   tree condition = 
7095                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
7096                                  tf_warning_or_error, NULL_TREE,
7097                                  /*integral_constant_expression_p=*/true);
7098                   finish_static_assert (condition,
7099                                         STATIC_ASSERT_MESSAGE (t), 
7100                                         STATIC_ASSERT_SOURCE_LOCATION (t),
7101                                         /*member_p=*/true);
7102                 }
7103               else if (TREE_CODE (t) != CONST_DECL)
7104                 {
7105                   tree r;
7106
7107                   /* The file and line for this declaration, to
7108                      assist in error message reporting.  Since we
7109                      called push_tinst_level above, we don't need to
7110                      restore these.  */
7111                   input_location = DECL_SOURCE_LOCATION (t);
7112
7113                   if (TREE_CODE (t) == TEMPLATE_DECL)
7114                     ++processing_template_decl;
7115                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
7116                   if (TREE_CODE (t) == TEMPLATE_DECL)
7117                     --processing_template_decl;
7118                   if (TREE_CODE (r) == VAR_DECL)
7119                     {
7120                       /* In [temp.inst]:
7121
7122                            [t]he initialization (and any associated
7123                            side-effects) of a static data member does
7124                            not occur unless the static data member is
7125                            itself used in a way that requires the
7126                            definition of the static data member to
7127                            exist.
7128
7129                          Therefore, we do not substitute into the
7130                          initialized for the static data member here.  */
7131                       finish_static_data_member_decl
7132                         (r,
7133                          /*init=*/NULL_TREE,
7134                          /*init_const_expr_p=*/false,
7135                          /*asmspec_tree=*/NULL_TREE,
7136                          /*flags=*/0);
7137                       if (DECL_INITIALIZED_IN_CLASS_P (r))
7138                         check_static_variable_definition (r, TREE_TYPE (r));
7139                     }
7140                   else if (TREE_CODE (r) == FIELD_DECL)
7141                     {
7142                       /* Determine whether R has a valid type and can be
7143                          completed later.  If R is invalid, then it is
7144                          replaced by error_mark_node so that it will not be
7145                          added to TYPE_FIELDS.  */
7146                       tree rtype = TREE_TYPE (r);
7147                       if (can_complete_type_without_circularity (rtype))
7148                         complete_type (rtype);
7149
7150                       if (!COMPLETE_TYPE_P (rtype))
7151                         {
7152                           cxx_incomplete_type_error (r, rtype);
7153                           r = error_mark_node;
7154                         }
7155                     }
7156
7157                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
7158                      such a thing will already have been added to the field
7159                      list by tsubst_enum in finish_member_declaration in the
7160                      CLASSTYPE_NESTED_UTDS case above.  */
7161                   if (!(TREE_CODE (r) == TYPE_DECL
7162                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
7163                         && DECL_ARTIFICIAL (r)))
7164                     {
7165                       set_current_access_from_decl (r);
7166                       finish_member_declaration (r);
7167                     }
7168                 }
7169             }
7170         }
7171       else
7172         {
7173           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
7174             {
7175               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
7176
7177               tree friend_type = t;
7178               bool adjust_processing_template_decl = false;
7179
7180               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7181                 {
7182                   /* template <class T> friend class C;  */
7183                   friend_type = tsubst_friend_class (friend_type, args);
7184                   adjust_processing_template_decl = true;
7185                 }
7186               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
7187                 {
7188                   /* template <class T> friend class C::D;  */
7189                   friend_type = tsubst (friend_type, args,
7190                                         tf_warning_or_error, NULL_TREE);
7191                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7192                     friend_type = TREE_TYPE (friend_type);
7193                   adjust_processing_template_decl = true;
7194                 }
7195               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
7196                 {
7197                   /* This could be either
7198
7199                        friend class T::C;
7200
7201                      when dependent_type_p is false or
7202
7203                        template <class U> friend class T::C;
7204
7205                      otherwise.  */
7206                   friend_type = tsubst (friend_type, args,
7207                                         tf_warning_or_error, NULL_TREE);
7208                   /* Bump processing_template_decl for correct
7209                      dependent_type_p calculation.  */
7210                   ++processing_template_decl;
7211                   if (dependent_type_p (friend_type))
7212                     adjust_processing_template_decl = true;
7213                   --processing_template_decl;
7214                 }
7215               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
7216                        && hidden_name_p (TYPE_NAME (friend_type)))
7217                 {
7218                   /* friend class C;
7219
7220                      where C hasn't been declared yet.  Let's lookup name
7221                      from namespace scope directly, bypassing any name that
7222                      come from dependent base class.  */
7223                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
7224
7225                   /* The call to xref_tag_from_type does injection for friend
7226                      classes.  */
7227                   push_nested_namespace (ns);
7228                   friend_type =
7229                     xref_tag_from_type (friend_type, NULL_TREE,
7230                                         /*tag_scope=*/ts_current);
7231                   pop_nested_namespace (ns);
7232                 }
7233               else if (uses_template_parms (friend_type))
7234                 /* friend class C<T>;  */
7235                 friend_type = tsubst (friend_type, args,
7236                                       tf_warning_or_error, NULL_TREE);
7237               /* Otherwise it's
7238
7239                    friend class C;
7240
7241                  where C is already declared or
7242
7243                    friend class C<int>;
7244
7245                  We don't have to do anything in these cases.  */
7246
7247               if (adjust_processing_template_decl)
7248                 /* Trick make_friend_class into realizing that the friend
7249                    we're adding is a template, not an ordinary class.  It's
7250                    important that we use make_friend_class since it will
7251                    perform some error-checking and output cross-reference
7252                    information.  */
7253                 ++processing_template_decl;
7254
7255               if (friend_type != error_mark_node)
7256                 make_friend_class (type, friend_type, /*complain=*/false);
7257
7258               if (adjust_processing_template_decl)
7259                 --processing_template_decl;
7260             }
7261           else
7262             {
7263               /* Build new DECL_FRIENDLIST.  */
7264               tree r;
7265
7266               /* The file and line for this declaration, to
7267                  assist in error message reporting.  Since we
7268                  called push_tinst_level above, we don't need to
7269                  restore these.  */
7270               input_location = DECL_SOURCE_LOCATION (t);
7271
7272               if (TREE_CODE (t) == TEMPLATE_DECL)
7273                 {
7274                   ++processing_template_decl;
7275                   push_deferring_access_checks (dk_no_check);
7276                 }
7277
7278               r = tsubst_friend_function (t, args);
7279               add_friend (type, r, /*complain=*/false);
7280               if (TREE_CODE (t) == TEMPLATE_DECL)
7281                 {
7282                   pop_deferring_access_checks ();
7283                   --processing_template_decl;
7284                 }
7285             }
7286         }
7287     }
7288
7289   /* Set the file and line number information to whatever is given for
7290      the class itself.  This puts error messages involving generated
7291      implicit functions at a predictable point, and the same point
7292      that would be used for non-template classes.  */
7293   input_location = DECL_SOURCE_LOCATION (typedecl);
7294
7295   unreverse_member_declarations (type);
7296   finish_struct_1 (type);
7297   TYPE_BEING_DEFINED (type) = 0;
7298
7299   /* Now that the class is complete, instantiate default arguments for
7300      any member functions.  We don't do this earlier because the
7301      default arguments may reference members of the class.  */
7302   if (!PRIMARY_TEMPLATE_P (templ))
7303     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
7304       if (TREE_CODE (t) == FUNCTION_DECL
7305           /* Implicitly generated member functions will not have template
7306              information; they are not instantiations, but instead are
7307              created "fresh" for each instantiation.  */
7308           && DECL_TEMPLATE_INFO (t))
7309         tsubst_default_arguments (t);
7310
7311   pop_nested_class ();
7312   pop_from_top_level ();
7313   pop_deferring_access_checks ();
7314   pop_tinst_level ();
7315
7316   /* The vtable for a template class can be emitted in any translation
7317      unit in which the class is instantiated.  When there is no key
7318      method, however, finish_struct_1 will already have added TYPE to
7319      the keyed_classes list.  */
7320   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
7321     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
7322
7323   return type;
7324 }
7325
7326 static tree
7327 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7328 {
7329   tree r;
7330
7331   if (!t)
7332     r = t;
7333   else if (TYPE_P (t))
7334     r = tsubst (t, args, complain, in_decl);
7335   else
7336     {
7337       r = tsubst_expr (t, args, complain, in_decl,
7338                        /*integral_constant_expression_p=*/true);
7339       r = fold_non_dependent_expr (r);
7340     }
7341   return r;
7342 }
7343
7344 /* Substitute ARGS into T, which is an pack expansion
7345    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
7346    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
7347    (if only a partial substitution could be performed) or
7348    ERROR_MARK_NODE if there was an error.  */
7349 tree
7350 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
7351                        tree in_decl)
7352 {
7353   tree pattern;
7354   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
7355   tree first_arg_pack; int i, len = -1;
7356   tree result;
7357   int incomplete = 0;
7358
7359   gcc_assert (PACK_EXPANSION_P (t));
7360   pattern = PACK_EXPANSION_PATTERN (t);
7361
7362   /* Determine the argument packs that will instantiate the parameter
7363      packs used in the expansion expression. While we're at it,
7364      compute the number of arguments to be expanded and make sure it
7365      is consistent.  */
7366   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
7367        pack = TREE_CHAIN (pack))
7368     {
7369       tree parm_pack = TREE_VALUE (pack);
7370       tree arg_pack = NULL_TREE;
7371       tree orig_arg = NULL_TREE;
7372
7373       if (TREE_CODE (parm_pack) == PARM_DECL)
7374         arg_pack = retrieve_local_specialization (parm_pack);
7375       else
7376         {
7377           int level, idx, levels;
7378           template_parm_level_and_index (parm_pack, &level, &idx);
7379
7380           levels = TMPL_ARGS_DEPTH (args);
7381           if (level <= levels)
7382             arg_pack = TMPL_ARG (args, level, idx);
7383         }
7384
7385       orig_arg = arg_pack;
7386       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
7387         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
7388       
7389       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
7390         /* This can only happen if we forget to expand an argument
7391            pack somewhere else. Just return an error, silently.  */
7392         {
7393           result = make_tree_vec (1);
7394           TREE_VEC_ELT (result, 0) = error_mark_node;
7395           return result;
7396         }
7397
7398       if (arg_pack
7399           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
7400           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
7401         {
7402           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
7403           tree pattern = PACK_EXPANSION_PATTERN (expansion);
7404           if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack))
7405               || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern)))
7406             /* The argument pack that the parameter maps to is just an
7407                expansion of the parameter itself, such as one would
7408                find in the implicit typedef of a class inside the
7409                class itself.  Consider this parameter "unsubstituted",
7410                so that we will maintain the outer pack expansion.  */
7411             arg_pack = NULL_TREE;
7412         }
7413           
7414       if (arg_pack)
7415         {
7416           int my_len = 
7417             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7418
7419           /* It's all-or-nothing with incomplete argument packs.  */
7420           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7421             return error_mark_node;
7422           
7423           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7424             incomplete = 1;
7425
7426           if (len < 0)
7427             {
7428               len = my_len;
7429               first_arg_pack = arg_pack;
7430             }
7431           else if (len != my_len)
7432             {
7433               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7434                 error ("mismatched argument pack lengths while expanding "
7435                        "%<%T%>",
7436                        pattern);
7437               else
7438                 error ("mismatched argument pack lengths while expanding "
7439                        "%<%E%>",
7440                        pattern);
7441               return error_mark_node;
7442             }
7443
7444           /* Keep track of the parameter packs and their corresponding
7445              argument packs.  */
7446           packs = tree_cons (parm_pack, arg_pack, packs);
7447           TREE_TYPE (packs) = orig_arg;
7448         }
7449       else
7450         /* We can't substitute for this parameter pack.  */
7451         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7452                                          TREE_VALUE (pack),
7453                                          unsubstituted_packs);
7454     }
7455
7456   /* We cannot expand this expansion expression, because we don't have
7457      all of the argument packs we need. Substitute into the pattern
7458      and return a PACK_EXPANSION_*. The caller will need to deal with
7459      that.  */
7460   if (unsubstituted_packs)
7461     return make_pack_expansion (tsubst (pattern, args, complain, 
7462                                         in_decl));
7463
7464   /* We could not find any argument packs that work.  */
7465   if (len < 0)
7466     return error_mark_node;
7467
7468   /* For each argument in each argument pack, substitute into the
7469      pattern.  */
7470   result = make_tree_vec (len + incomplete);
7471   for (i = 0; i < len + incomplete; ++i)
7472     {
7473       /* For parameter pack, change the substitution of the parameter
7474          pack to the ith argument in its argument pack, then expand
7475          the pattern.  */
7476       for (pack = packs; pack; pack = TREE_CHAIN (pack))
7477         {
7478           tree parm = TREE_PURPOSE (pack);
7479
7480           if (TREE_CODE (parm) == PARM_DECL)
7481             {
7482               /* Select the Ith argument from the pack.  */
7483               tree arg = make_node (ARGUMENT_PACK_SELECT);
7484               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7485               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7486               mark_used (parm);
7487               register_local_specialization (arg, parm);
7488             }
7489           else
7490             {
7491               tree value = parm;
7492               int idx, level;
7493               template_parm_level_and_index (parm, &level, &idx);
7494               
7495               if (i < len) 
7496                 {
7497                   /* Select the Ith argument from the pack. */
7498                   value = make_node (ARGUMENT_PACK_SELECT);
7499                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7500                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
7501                 }
7502
7503               /* Update the corresponding argument.  */
7504               TMPL_ARG (args, level, idx) = value;
7505             }
7506         }
7507
7508       /* Substitute into the PATTERN with the altered arguments.  */
7509       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7510         TREE_VEC_ELT (result, i) = 
7511           tsubst_expr (pattern, args, complain, in_decl,
7512                        /*integral_constant_expression_p=*/false);
7513       else
7514         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7515
7516       if (i == len)
7517         /* When we have incomplete argument packs, the last "expanded"
7518            result is itself a pack expansion, which allows us
7519            to deduce more arguments.  */
7520         TREE_VEC_ELT (result, i) = 
7521           make_pack_expansion (TREE_VEC_ELT (result, i));
7522
7523       if (TREE_VEC_ELT (result, i) == error_mark_node)
7524         {
7525           result = error_mark_node;
7526           break;
7527         }
7528     }
7529   
7530   /* Update ARGS to restore the substitution from parameter packs to
7531      their argument packs.  */
7532   for (pack = packs; pack; pack = TREE_CHAIN (pack))
7533     {
7534       tree parm = TREE_PURPOSE (pack);
7535
7536       if (TREE_CODE (parm) == PARM_DECL)
7537         register_local_specialization (TREE_TYPE (pack), parm);
7538       else
7539         {
7540           int idx, level;
7541           template_parm_level_and_index (parm, &level, &idx);
7542           
7543           /* Update the corresponding argument.  */
7544           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7545             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7546               TREE_TYPE (pack);
7547           else
7548             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7549         }
7550     }
7551
7552   return result;
7553 }
7554
7555 /* Substitute ARGS into the vector or list of template arguments T.  */
7556
7557 static tree
7558 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7559 {
7560   tree orig_t = t;
7561   int len = TREE_VEC_LENGTH (t);
7562   int need_new = 0, i, expanded_len_adjust = 0, out;
7563   tree *elts = (tree *) alloca (len * sizeof (tree));
7564
7565   for (i = 0; i < len; i++)
7566     {
7567       tree orig_arg = TREE_VEC_ELT (t, i);
7568       tree new_arg;
7569
7570       if (TREE_CODE (orig_arg) == TREE_VEC)
7571         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7572       else if (PACK_EXPANSION_P (orig_arg))
7573         {
7574           /* Substitute into an expansion expression.  */
7575           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7576
7577           if (TREE_CODE (new_arg) == TREE_VEC)
7578             /* Add to the expanded length adjustment the number of
7579                expanded arguments. We subtract one from this
7580                measurement, because the argument pack expression
7581                itself is already counted as 1 in
7582                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7583                the argument pack is empty.  */
7584             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7585         }
7586       else if (ARGUMENT_PACK_P (orig_arg))
7587         {
7588           /* Substitute into each of the arguments.  */
7589           new_arg = make_node (TREE_CODE (orig_arg));
7590           
7591           SET_ARGUMENT_PACK_ARGS (
7592             new_arg,
7593             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7594                                   args, complain, in_decl));
7595
7596           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7597             new_arg = error_mark_node;
7598
7599           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7600             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7601                                           complain, in_decl);
7602             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7603
7604             if (TREE_TYPE (new_arg) == error_mark_node)
7605               new_arg = error_mark_node;
7606           }
7607         }
7608       else
7609         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7610
7611       if (new_arg == error_mark_node)
7612         return error_mark_node;
7613
7614       elts[i] = new_arg;
7615       if (new_arg != orig_arg)
7616         need_new = 1;
7617     }
7618
7619   if (!need_new)
7620     return t;
7621
7622   /* Make space for the expanded arguments coming from template
7623      argument packs.  */
7624   t = make_tree_vec (len + expanded_len_adjust);
7625   for (i = 0, out = 0; i < len; i++)
7626     {
7627       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7628            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7629           && TREE_CODE (elts[i]) == TREE_VEC)
7630         {
7631           int idx;
7632
7633           /* Now expand the template argument pack "in place".  */
7634           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7635             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7636         }
7637       else
7638         {
7639           TREE_VEC_ELT (t, out) = elts[i];
7640           out++;
7641         }
7642     }
7643
7644   return t;
7645 }
7646
7647 /* Return the result of substituting ARGS into the template parameters
7648    given by PARMS.  If there are m levels of ARGS and m + n levels of
7649    PARMS, then the result will contain n levels of PARMS.  For
7650    example, if PARMS is `template <class T> template <class U>
7651    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7652    result will be `template <int*, double, class V>'.  */
7653
7654 static tree
7655 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7656 {
7657   tree r = NULL_TREE;
7658   tree* new_parms;
7659
7660   /* When substituting into a template, we must set
7661      PROCESSING_TEMPLATE_DECL as the template parameters may be
7662      dependent if they are based on one-another, and the dependency
7663      predicates are short-circuit outside of templates.  */
7664   ++processing_template_decl;
7665
7666   for (new_parms = &r;
7667        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7668        new_parms = &(TREE_CHAIN (*new_parms)),
7669          parms = TREE_CHAIN (parms))
7670     {
7671       tree new_vec =
7672         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7673       int i;
7674
7675       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7676         {
7677           tree tuple;
7678           tree default_value;
7679           tree parm_decl;
7680
7681           if (parms == error_mark_node)
7682             continue;
7683
7684           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7685
7686           if (tuple == error_mark_node)
7687             continue;
7688
7689           default_value = TREE_PURPOSE (tuple);
7690           parm_decl = TREE_VALUE (tuple);
7691
7692           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7693           if (TREE_CODE (parm_decl) == PARM_DECL
7694               && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7695             parm_decl = error_mark_node;
7696           default_value = tsubst_template_arg (default_value, args,
7697                                                complain, NULL_TREE);
7698
7699           tuple = build_tree_list (default_value, parm_decl);
7700           TREE_VEC_ELT (new_vec, i) = tuple;
7701         }
7702
7703       *new_parms =
7704         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7705                              - TMPL_ARGS_DEPTH (args)),
7706                    new_vec, NULL_TREE);
7707     }
7708
7709   --processing_template_decl;
7710
7711   return r;
7712 }
7713
7714 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7715    type T.  If T is not an aggregate or enumeration type, it is
7716    handled as if by tsubst.  IN_DECL is as for tsubst.  If
7717    ENTERING_SCOPE is nonzero, T is the context for a template which
7718    we are presently tsubst'ing.  Return the substituted value.  */
7719
7720 static tree
7721 tsubst_aggr_type (tree t,
7722                   tree args,
7723                   tsubst_flags_t complain,
7724                   tree in_decl,
7725                   int entering_scope)
7726 {
7727   if (t == NULL_TREE)
7728     return NULL_TREE;
7729
7730   switch (TREE_CODE (t))
7731     {
7732     case RECORD_TYPE:
7733       if (TYPE_PTRMEMFUNC_P (t))
7734         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7735
7736       /* Else fall through.  */
7737     case ENUMERAL_TYPE:
7738     case UNION_TYPE:
7739       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
7740         {
7741           tree argvec;
7742           tree context;
7743           tree r;
7744           bool saved_skip_evaluation;
7745
7746           /* In "sizeof(X<I>)" we need to evaluate "I".  */
7747           saved_skip_evaluation = skip_evaluation;
7748           skip_evaluation = false;
7749
7750           /* First, determine the context for the type we are looking
7751              up.  */
7752           context = TYPE_CONTEXT (t);
7753           if (context)
7754             {
7755               context = tsubst_aggr_type (context, args, complain,
7756                                           in_decl, /*entering_scope=*/1);
7757               /* If context is a nested class inside a class template,
7758                  it may still need to be instantiated (c++/33959).  */
7759               if (TYPE_P (context))
7760                 context = complete_type (context);
7761             }
7762
7763           /* Then, figure out what arguments are appropriate for the
7764              type we are trying to find.  For example, given:
7765
7766                template <class T> struct S;
7767                template <class T, class U> void f(T, U) { S<U> su; }
7768
7769              and supposing that we are instantiating f<int, double>,
7770              then our ARGS will be {int, double}, but, when looking up
7771              S we only want {double}.  */
7772           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7773                                          complain, in_decl);
7774           if (argvec == error_mark_node)
7775             r = error_mark_node;
7776           else
7777             {
7778               r = lookup_template_class (t, argvec, in_decl, context,
7779                                          entering_scope, complain);
7780               r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7781             }
7782
7783           skip_evaluation = saved_skip_evaluation;
7784
7785           return r;
7786         }
7787       else
7788         /* This is not a template type, so there's nothing to do.  */
7789         return t;
7790
7791     default:
7792       return tsubst (t, args, complain, in_decl);
7793     }
7794 }
7795
7796 /* Substitute into the default argument ARG (a default argument for
7797    FN), which has the indicated TYPE.  */
7798
7799 tree
7800 tsubst_default_argument (tree fn, tree type, tree arg)
7801 {
7802   tree saved_class_ptr = NULL_TREE;
7803   tree saved_class_ref = NULL_TREE;
7804
7805   /* This default argument came from a template.  Instantiate the
7806      default argument here, not in tsubst.  In the case of
7807      something like:
7808
7809        template <class T>
7810        struct S {
7811          static T t();
7812          void f(T = t());
7813        };
7814
7815      we must be careful to do name lookup in the scope of S<T>,
7816      rather than in the current class.  */
7817   push_access_scope (fn);
7818   /* The "this" pointer is not valid in a default argument.  */
7819   if (cfun)
7820     {
7821       saved_class_ptr = current_class_ptr;
7822       cp_function_chain->x_current_class_ptr = NULL_TREE;
7823       saved_class_ref = current_class_ref;
7824       cp_function_chain->x_current_class_ref = NULL_TREE;
7825     }
7826
7827   push_deferring_access_checks(dk_no_deferred);
7828   /* The default argument expression may cause implicitly defined
7829      member functions to be synthesized, which will result in garbage
7830      collection.  We must treat this situation as if we were within
7831      the body of function so as to avoid collecting live data on the
7832      stack.  */
7833   ++function_depth;
7834   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7835                      tf_warning_or_error, NULL_TREE,
7836                      /*integral_constant_expression_p=*/false);
7837   --function_depth;
7838   pop_deferring_access_checks();
7839
7840   /* Restore the "this" pointer.  */
7841   if (cfun)
7842     {
7843       cp_function_chain->x_current_class_ptr = saved_class_ptr;
7844       cp_function_chain->x_current_class_ref = saved_class_ref;
7845     }
7846
7847   pop_access_scope (fn);
7848
7849   /* Make sure the default argument is reasonable.  */
7850   arg = check_default_argument (type, arg);
7851
7852   return arg;
7853 }
7854
7855 /* Substitute into all the default arguments for FN.  */
7856
7857 static void
7858 tsubst_default_arguments (tree fn)
7859 {
7860   tree arg;
7861   tree tmpl_args;
7862
7863   tmpl_args = DECL_TI_ARGS (fn);
7864
7865   /* If this function is not yet instantiated, we certainly don't need
7866      its default arguments.  */
7867   if (uses_template_parms (tmpl_args))
7868     return;
7869
7870   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7871        arg;
7872        arg = TREE_CHAIN (arg))
7873     if (TREE_PURPOSE (arg))
7874       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7875                                                     TREE_VALUE (arg),
7876                                                     TREE_PURPOSE (arg));
7877 }
7878
7879 /* Substitute the ARGS into the T, which is a _DECL.  Return the
7880    result of the substitution.  Issue error and warning messages under
7881    control of COMPLAIN.  */
7882
7883 static tree
7884 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7885 {
7886   location_t saved_loc;
7887   tree r = NULL_TREE;
7888   tree in_decl = t;
7889
7890   /* Set the filename and linenumber to improve error-reporting.  */
7891   saved_loc = input_location;
7892   input_location = DECL_SOURCE_LOCATION (t);
7893
7894   switch (TREE_CODE (t))
7895     {
7896     case TEMPLATE_DECL:
7897       {
7898         /* We can get here when processing a member function template,
7899            member class template, and template template parameter of
7900            a template class.  */
7901         tree decl = DECL_TEMPLATE_RESULT (t);
7902         tree spec;
7903         tree tmpl_args;
7904         tree full_args;
7905
7906         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7907           {
7908             /* Template template parameter is treated here.  */
7909             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7910             if (new_type == error_mark_node)
7911               return error_mark_node;
7912
7913             r = copy_decl (t);
7914             TREE_CHAIN (r) = NULL_TREE;
7915             TREE_TYPE (r) = new_type;
7916             DECL_TEMPLATE_RESULT (r)
7917               = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7918             DECL_TEMPLATE_PARMS (r)
7919               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7920                                        complain);
7921             TYPE_NAME (new_type) = r;
7922             break;
7923           }
7924
7925         /* We might already have an instance of this template.
7926            The ARGS are for the surrounding class type, so the
7927            full args contain the tsubst'd args for the context,
7928            plus the innermost args from the template decl.  */
7929         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7930           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7931           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7932         /* Because this is a template, the arguments will still be
7933            dependent, even after substitution.  If
7934            PROCESSING_TEMPLATE_DECL is not set, the dependency
7935            predicates will short-circuit.  */
7936         ++processing_template_decl;
7937         full_args = tsubst_template_args (tmpl_args, args,
7938                                           complain, in_decl);
7939         --processing_template_decl;
7940         if (full_args == error_mark_node)
7941           return error_mark_node;
7942
7943         /* tsubst_template_args doesn't copy the vector if
7944            nothing changed.  But, *something* should have
7945            changed.  */
7946         gcc_assert (full_args != tmpl_args);
7947
7948         spec = retrieve_specialization (t, full_args,
7949                                         /*class_specializations_p=*/true);
7950         if (spec != NULL_TREE)
7951           {
7952             r = spec;
7953             break;
7954           }
7955
7956         /* Make a new template decl.  It will be similar to the
7957            original, but will record the current template arguments.
7958            We also create a new function declaration, which is just
7959            like the old one, but points to this new template, rather
7960            than the old one.  */
7961         r = copy_decl (t);
7962         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7963         TREE_CHAIN (r) = NULL_TREE;
7964
7965         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7966
7967         if (TREE_CODE (decl) == TYPE_DECL)
7968           {
7969             tree new_type;
7970             ++processing_template_decl;
7971             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7972             --processing_template_decl;
7973             if (new_type == error_mark_node)
7974               return error_mark_node;
7975
7976             TREE_TYPE (r) = new_type;
7977             CLASSTYPE_TI_TEMPLATE (new_type) = r;
7978             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7979             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7980             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7981           }
7982         else
7983           {
7984             tree new_decl;
7985             ++processing_template_decl;
7986             new_decl = tsubst (decl, args, complain, in_decl);
7987             --processing_template_decl;
7988             if (new_decl == error_mark_node)
7989               return error_mark_node;
7990
7991             DECL_TEMPLATE_RESULT (r) = new_decl;
7992             DECL_TI_TEMPLATE (new_decl) = r;
7993             TREE_TYPE (r) = TREE_TYPE (new_decl);
7994             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
7995             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
7996           }
7997
7998         SET_DECL_IMPLICIT_INSTANTIATION (r);
7999         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
8000         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
8001
8002         /* The template parameters for this new template are all the
8003            template parameters for the old template, except the
8004            outermost level of parameters.  */
8005         DECL_TEMPLATE_PARMS (r)
8006           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
8007                                    complain);
8008
8009         if (PRIMARY_TEMPLATE_P (t))
8010           DECL_PRIMARY_TEMPLATE (r) = r;
8011
8012         if (TREE_CODE (decl) != TYPE_DECL)
8013           /* Record this non-type partial instantiation.  */
8014           register_specialization (r, t,
8015                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
8016                                    false);
8017       }
8018       break;
8019
8020     case FUNCTION_DECL:
8021       {
8022         tree ctx;
8023         tree argvec = NULL_TREE;
8024         tree *friends;
8025         tree gen_tmpl;
8026         tree type;
8027         int member;
8028         int args_depth;
8029         int parms_depth;
8030
8031         /* Nobody should be tsubst'ing into non-template functions.  */
8032         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
8033
8034         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
8035           {
8036             tree spec;
8037             bool dependent_p;
8038
8039             /* If T is not dependent, just return it.  We have to
8040                increment PROCESSING_TEMPLATE_DECL because
8041                value_dependent_expression_p assumes that nothing is
8042                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
8043             ++processing_template_decl;
8044             dependent_p = value_dependent_expression_p (t);
8045             --processing_template_decl;
8046             if (!dependent_p)
8047               return t;
8048
8049             /* Calculate the most general template of which R is a
8050                specialization, and the complete set of arguments used to
8051                specialize R.  */
8052             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
8053             argvec = tsubst_template_args (DECL_TI_ARGS
8054                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
8055                                            args, complain, in_decl);
8056
8057             /* Check to see if we already have this specialization.  */
8058             spec = retrieve_specialization (gen_tmpl, argvec,
8059                                             /*class_specializations_p=*/false);
8060
8061             if (spec)
8062               {
8063                 r = spec;
8064                 break;
8065               }
8066
8067             /* We can see more levels of arguments than parameters if
8068                there was a specialization of a member template, like
8069                this:
8070
8071                  template <class T> struct S { template <class U> void f(); }
8072                  template <> template <class U> void S<int>::f(U);
8073
8074                Here, we'll be substituting into the specialization,
8075                because that's where we can find the code we actually
8076                want to generate, but we'll have enough arguments for
8077                the most general template.
8078
8079                We also deal with the peculiar case:
8080
8081                  template <class T> struct S {
8082                    template <class U> friend void f();
8083                  };
8084                  template <class U> void f() {}
8085                  template S<int>;
8086                  template void f<double>();
8087
8088                Here, the ARGS for the instantiation of will be {int,
8089                double}.  But, we only need as many ARGS as there are
8090                levels of template parameters in CODE_PATTERN.  We are
8091                careful not to get fooled into reducing the ARGS in
8092                situations like:
8093
8094                  template <class T> struct S { template <class U> void f(U); }
8095                  template <class T> template <> void S<T>::f(int) {}
8096
8097                which we can spot because the pattern will be a
8098                specialization in this case.  */
8099             args_depth = TMPL_ARGS_DEPTH (args);
8100             parms_depth =
8101               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
8102             if (args_depth > parms_depth
8103                 && !DECL_TEMPLATE_SPECIALIZATION (t))
8104               args = get_innermost_template_args (args, parms_depth);
8105           }
8106         else
8107           {
8108             /* This special case arises when we have something like this:
8109
8110                  template <class T> struct S {
8111                    friend void f<int>(int, double);
8112                  };
8113
8114                Here, the DECL_TI_TEMPLATE for the friend declaration
8115                will be an IDENTIFIER_NODE.  We are being called from
8116                tsubst_friend_function, and we want only to create a
8117                new decl (R) with appropriate types so that we can call
8118                determine_specialization.  */
8119             gen_tmpl = NULL_TREE;
8120           }
8121
8122         if (DECL_CLASS_SCOPE_P (t))
8123           {
8124             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
8125               member = 2;
8126             else
8127               member = 1;
8128             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
8129                                     complain, t, /*entering_scope=*/1);
8130           }
8131         else
8132           {
8133             member = 0;
8134             ctx = DECL_CONTEXT (t);
8135           }
8136         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8137         if (type == error_mark_node)
8138           return error_mark_node;
8139
8140         /* We do NOT check for matching decls pushed separately at this
8141            point, as they may not represent instantiations of this
8142            template, and in any case are considered separate under the
8143            discrete model.  */
8144         r = copy_decl (t);
8145         DECL_USE_TEMPLATE (r) = 0;
8146         TREE_TYPE (r) = type;
8147         /* Clear out the mangled name and RTL for the instantiation.  */
8148         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8149         SET_DECL_RTL (r, NULL_RTX);
8150         /* Leave DECL_INITIAL set on deleted instantiations.  */
8151         if (!DECL_DELETED_FN (r))
8152           DECL_INITIAL (r) = NULL_TREE;
8153         DECL_CONTEXT (r) = ctx;
8154
8155         if (member && DECL_CONV_FN_P (r))
8156           /* Type-conversion operator.  Reconstruct the name, in
8157              case it's the name of one of the template's parameters.  */
8158           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
8159
8160         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
8161                                      complain, t);
8162         DECL_RESULT (r) = NULL_TREE;
8163
8164         TREE_STATIC (r) = 0;
8165         TREE_PUBLIC (r) = TREE_PUBLIC (t);
8166         DECL_EXTERNAL (r) = 1;
8167         /* If this is an instantiation of a function with internal
8168            linkage, we already know what object file linkage will be
8169            assigned to the instantiation.  */
8170         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
8171         DECL_DEFER_OUTPUT (r) = 0;
8172         TREE_CHAIN (r) = NULL_TREE;
8173         DECL_PENDING_INLINE_INFO (r) = 0;
8174         DECL_PENDING_INLINE_P (r) = 0;
8175         DECL_SAVED_TREE (r) = NULL_TREE;
8176         TREE_USED (r) = 0;
8177         if (DECL_CLONED_FUNCTION (r))
8178           {
8179             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
8180                                                args, complain, t);
8181             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
8182             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
8183           }
8184
8185         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
8186            this in the special friend case mentioned above where
8187            GEN_TMPL is NULL.  */
8188         if (gen_tmpl)
8189           {
8190             DECL_TEMPLATE_INFO (r)
8191               = tree_cons (gen_tmpl, argvec, NULL_TREE);
8192             SET_DECL_IMPLICIT_INSTANTIATION (r);
8193             register_specialization (r, gen_tmpl, argvec, false);
8194
8195             /* We're not supposed to instantiate default arguments
8196                until they are called, for a template.  But, for a
8197                declaration like:
8198
8199                  template <class T> void f ()
8200                  { extern void g(int i = T()); }
8201
8202                we should do the substitution when the template is
8203                instantiated.  We handle the member function case in
8204                instantiate_class_template since the default arguments
8205                might refer to other members of the class.  */
8206             if (!member
8207                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
8208                 && !uses_template_parms (argvec))
8209               tsubst_default_arguments (r);
8210           }
8211         else
8212           DECL_TEMPLATE_INFO (r) = NULL_TREE;
8213
8214         /* Copy the list of befriending classes.  */
8215         for (friends = &DECL_BEFRIENDING_CLASSES (r);
8216              *friends;
8217              friends = &TREE_CHAIN (*friends))
8218           {
8219             *friends = copy_node (*friends);
8220             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
8221                                             args, complain,
8222                                             in_decl);
8223           }
8224
8225         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
8226           {
8227             maybe_retrofit_in_chrg (r);
8228             if (DECL_CONSTRUCTOR_P (r))
8229               grok_ctor_properties (ctx, r);
8230             /* If this is an instantiation of a member template, clone it.
8231                If it isn't, that'll be handled by
8232                clone_constructors_and_destructors.  */
8233             if (PRIMARY_TEMPLATE_P (gen_tmpl))
8234               clone_function_decl (r, /*update_method_vec_p=*/0);
8235           }
8236         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
8237                  && !grok_op_properties (r, (complain & tf_error) != 0))
8238           return error_mark_node;
8239
8240         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
8241           SET_DECL_FRIEND_CONTEXT (r,
8242                                    tsubst (DECL_FRIEND_CONTEXT (t),
8243                                             args, complain, in_decl));
8244
8245         /* Possibly limit visibility based on template args.  */
8246         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8247         if (DECL_VISIBILITY_SPECIFIED (t))
8248           {
8249             DECL_VISIBILITY_SPECIFIED (r) = 0;
8250             DECL_ATTRIBUTES (r)
8251               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8252           }
8253         determine_visibility (r);
8254
8255         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8256                                         args, complain, in_decl);
8257       }
8258       break;
8259
8260     case PARM_DECL:
8261       {
8262         tree type = NULL_TREE;
8263         int i, len = 1;
8264         tree expanded_types = NULL_TREE;
8265         tree prev_r = NULL_TREE;
8266         tree first_r = NULL_TREE;
8267
8268         if (FUNCTION_PARAMETER_PACK_P (t))
8269           {
8270             /* If there is a local specialization that isn't a
8271                parameter pack, it means that we're doing a "simple"
8272                substitution from inside tsubst_pack_expansion. Just
8273                return the local specialization (which will be a single
8274                parm).  */
8275             tree spec = retrieve_local_specialization (t);
8276             if (spec 
8277                 && TREE_CODE (spec) == PARM_DECL
8278                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
8279               return spec;
8280
8281             /* Expand the TYPE_PACK_EXPANSION that provides the types for
8282                the parameters in this function parameter pack.  */
8283             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
8284                                                     complain, in_decl);
8285             if (TREE_CODE (expanded_types) == TREE_VEC)
8286               {
8287                 len = TREE_VEC_LENGTH (expanded_types);
8288
8289                 /* Zero-length parameter packs are boring. Just substitute
8290                    into the chain.  */
8291                 if (len == 0)
8292                   return tsubst (TREE_CHAIN (t), args, complain, 
8293                                  TREE_CHAIN (t));
8294               }
8295             else
8296               {
8297                 /* All we did was update the type. Make a note of that.  */
8298                 type = expanded_types;
8299                 expanded_types = NULL_TREE;
8300               }
8301           }
8302
8303         /* Loop through all of the parameter's we'll build. When T is
8304            a function parameter pack, LEN is the number of expanded
8305            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
8306         r = NULL_TREE;
8307         for (i = 0; i < len; ++i)
8308           {
8309             prev_r = r;
8310             r = copy_node (t);
8311             if (DECL_TEMPLATE_PARM_P (t))
8312               SET_DECL_TEMPLATE_PARM_P (r);
8313
8314             if (expanded_types)
8315               /* We're on the Ith parameter of the function parameter
8316                  pack.  */
8317               {
8318                 /* Get the Ith type.  */
8319                 type = TREE_VEC_ELT (expanded_types, i);
8320
8321                 if (DECL_NAME (r))
8322                   /* Rename the parameter to include the index.  */
8323                   DECL_NAME (r) =
8324                     make_ith_pack_parameter_name (DECL_NAME (r), i);
8325               }
8326             else if (!type)
8327               /* We're dealing with a normal parameter.  */
8328               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8329
8330             type = type_decays_to (type);
8331             TREE_TYPE (r) = type;
8332             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8333
8334             if (DECL_INITIAL (r))
8335               {
8336                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
8337                   DECL_INITIAL (r) = TREE_TYPE (r);
8338                 else
8339                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
8340                                              complain, in_decl);
8341               }
8342
8343             DECL_CONTEXT (r) = NULL_TREE;
8344
8345             if (!DECL_TEMPLATE_PARM_P (r))
8346               DECL_ARG_TYPE (r) = type_passed_as (type);
8347
8348             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8349                                             args, complain, in_decl);
8350
8351             /* Keep track of the first new parameter we
8352                generate. That's what will be returned to the
8353                caller.  */
8354             if (!first_r)
8355               first_r = r;
8356
8357             /* Build a proper chain of parameters when substituting
8358                into a function parameter pack.  */
8359             if (prev_r)
8360               TREE_CHAIN (prev_r) = r;
8361           }
8362
8363         if (TREE_CHAIN (t))
8364           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
8365                                    complain, TREE_CHAIN (t));
8366
8367         /* FIRST_R contains the start of the chain we've built.  */
8368         r = first_r;
8369       }
8370       break;
8371
8372     case FIELD_DECL:
8373       {
8374         tree type;
8375
8376         r = copy_decl (t);
8377         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8378         if (type == error_mark_node)
8379           return error_mark_node;
8380         TREE_TYPE (r) = type;
8381         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8382
8383         /* DECL_INITIAL gives the number of bits in a bit-field.  */
8384         DECL_INITIAL (r)
8385           = tsubst_expr (DECL_INITIAL (t), args,
8386                          complain, in_decl,
8387                          /*integral_constant_expression_p=*/true);
8388         /* We don't have to set DECL_CONTEXT here; it is set by
8389            finish_member_declaration.  */
8390         TREE_CHAIN (r) = NULL_TREE;
8391         if (VOID_TYPE_P (type))
8392           error ("instantiation of %q+D as type %qT", r, type);
8393
8394         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8395                                         args, complain, in_decl);
8396       }
8397       break;
8398
8399     case USING_DECL:
8400       /* We reach here only for member using decls.  */
8401       if (DECL_DEPENDENT_P (t))
8402         {
8403           r = do_class_using_decl
8404             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
8405              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
8406           if (!r)
8407             r = error_mark_node;
8408         }
8409       else
8410         {
8411           r = copy_node (t);
8412           TREE_CHAIN (r) = NULL_TREE;
8413         }
8414       break;
8415
8416     case TYPE_DECL:
8417     case VAR_DECL:
8418       {
8419         tree argvec = NULL_TREE;
8420         tree gen_tmpl = NULL_TREE;
8421         tree spec;
8422         tree tmpl = NULL_TREE;
8423         tree ctx;
8424         tree type = NULL_TREE;
8425         bool local_p;
8426
8427         if (TREE_CODE (t) == TYPE_DECL
8428             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8429           {
8430             /* If this is the canonical decl, we don't have to
8431                mess with instantiations, and often we can't (for
8432                typename, template type parms and such).  Note that
8433                TYPE_NAME is not correct for the above test if
8434                we've copied the type for a typedef.  */
8435             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8436             if (type == error_mark_node)
8437               return error_mark_node;
8438             r = TYPE_NAME (type);
8439             break;
8440           }
8441
8442         /* Check to see if we already have the specialization we
8443            need.  */
8444         spec = NULL_TREE;
8445         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8446           {
8447             /* T is a static data member or namespace-scope entity.
8448                We have to substitute into namespace-scope variables
8449                (even though such entities are never templates) because
8450                of cases like:
8451                
8452                  template <class T> void f() { extern T t; }
8453
8454                where the entity referenced is not known until
8455                instantiation time.  */
8456             local_p = false;
8457             ctx = DECL_CONTEXT (t);
8458             if (DECL_CLASS_SCOPE_P (t))
8459               {
8460                 ctx = tsubst_aggr_type (ctx, args,
8461                                         complain,
8462                                         in_decl, /*entering_scope=*/1);
8463                 /* If CTX is unchanged, then T is in fact the
8464                    specialization we want.  That situation occurs when
8465                    referencing a static data member within in its own
8466                    class.  We can use pointer equality, rather than
8467                    same_type_p, because DECL_CONTEXT is always
8468                    canonical.  */
8469                 if (ctx == DECL_CONTEXT (t))
8470                   spec = t;
8471               }
8472
8473             if (!spec)
8474               {
8475                 tmpl = DECL_TI_TEMPLATE (t);
8476                 gen_tmpl = most_general_template (tmpl);
8477                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8478                 spec = (retrieve_specialization 
8479                         (gen_tmpl, argvec,
8480                          /*class_specializations_p=*/false));
8481               }
8482           }
8483         else
8484           {
8485             /* A local variable.  */
8486             local_p = true;
8487             /* Subsequent calls to pushdecl will fill this in.  */
8488             ctx = NULL_TREE;
8489             spec = retrieve_local_specialization (t);
8490           }
8491         /* If we already have the specialization we need, there is
8492            nothing more to do.  */ 
8493         if (spec)
8494           {
8495             r = spec;
8496             break;
8497           }
8498
8499         /* Create a new node for the specialization we need.  */
8500         r = copy_decl (t);
8501         if (type == NULL_TREE)
8502           type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8503         if (TREE_CODE (r) == VAR_DECL)
8504           {
8505             /* Even if the original location is out of scope, the
8506                newly substituted one is not.  */
8507             DECL_DEAD_FOR_LOCAL (r) = 0;
8508             DECL_INITIALIZED_P (r) = 0;
8509             DECL_TEMPLATE_INSTANTIATED (r) = 0;
8510             if (type == error_mark_node)
8511               return error_mark_node;
8512             if (TREE_CODE (type) == FUNCTION_TYPE)
8513               {
8514                 /* It may seem that this case cannot occur, since:
8515
8516                      typedef void f();
8517                      void g() { f x; }
8518
8519                    declares a function, not a variable.  However:
8520       
8521                      typedef void f();
8522                      template <typename T> void g() { T t; }
8523                      template void g<f>();
8524
8525                    is an attempt to declare a variable with function
8526                    type.  */
8527                 error ("variable %qD has function type",
8528                        /* R is not yet sufficiently initialized, so we
8529                           just use its name.  */
8530                        DECL_NAME (r));
8531                 return error_mark_node;
8532               }
8533             type = complete_type (type);
8534             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8535               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8536             type = check_var_type (DECL_NAME (r), type);
8537
8538             if (DECL_HAS_VALUE_EXPR_P (t))
8539               {
8540                 tree ve = DECL_VALUE_EXPR (t);
8541                 ve = tsubst_expr (ve, args, complain, in_decl,
8542                                   /*constant_expression_p=*/false);
8543                 SET_DECL_VALUE_EXPR (r, ve);
8544               }
8545           }
8546         else if (DECL_SELF_REFERENCE_P (t))
8547           SET_DECL_SELF_REFERENCE_P (r);
8548         TREE_TYPE (r) = type;
8549         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8550         DECL_CONTEXT (r) = ctx;
8551         /* Clear out the mangled name and RTL for the instantiation.  */
8552         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8553         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8554           SET_DECL_RTL (r, NULL_RTX);
8555         /* The initializer must not be expanded until it is required;
8556            see [temp.inst].  */
8557         DECL_INITIAL (r) = NULL_TREE;
8558         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8559           SET_DECL_RTL (r, NULL_RTX);
8560         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8561         if (TREE_CODE (r) == VAR_DECL)
8562           {
8563             /* Possibly limit visibility based on template args.  */
8564             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8565             if (DECL_VISIBILITY_SPECIFIED (t))
8566               {
8567                 DECL_VISIBILITY_SPECIFIED (r) = 0;
8568                 DECL_ATTRIBUTES (r)
8569                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8570               }
8571             determine_visibility (r);
8572           }
8573         /* Preserve a typedef that names a type.  */
8574         else if (TREE_CODE (r) == TYPE_DECL
8575                  && DECL_ORIGINAL_TYPE (t)
8576                  && type != error_mark_node)
8577           {
8578             DECL_ORIGINAL_TYPE (r) = tsubst (DECL_ORIGINAL_TYPE (t),
8579                                              args, complain, in_decl);
8580             TREE_TYPE (r) = type = build_variant_type_copy (type);
8581             TYPE_NAME (type) = r;
8582           }
8583
8584         if (!local_p)
8585           {
8586             /* A static data member declaration is always marked
8587                external when it is declared in-class, even if an
8588                initializer is present.  We mimic the non-template
8589                processing here.  */
8590             DECL_EXTERNAL (r) = 1;
8591
8592             register_specialization (r, gen_tmpl, argvec, false);
8593             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8594             SET_DECL_IMPLICIT_INSTANTIATION (r);
8595           }
8596         else
8597           register_local_specialization (r, t);
8598
8599         TREE_CHAIN (r) = NULL_TREE;
8600
8601         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
8602                                         (int) ATTR_FLAG_TYPE_IN_PLACE,
8603                                         args, complain, in_decl);
8604         layout_decl (r, 0);
8605       }
8606       break;
8607
8608     default:
8609       gcc_unreachable ();
8610     }
8611
8612   /* Restore the file and line information.  */
8613   input_location = saved_loc;
8614
8615   return r;
8616 }
8617
8618 /* Substitute into the ARG_TYPES of a function type.  */
8619
8620 static tree
8621 tsubst_arg_types (tree arg_types,
8622                   tree args,
8623                   tsubst_flags_t complain,
8624                   tree in_decl)
8625 {
8626   tree remaining_arg_types;
8627   tree type = NULL_TREE;
8628   int i = 1;
8629   tree expanded_args = NULL_TREE;
8630   tree default_arg;
8631
8632   if (!arg_types || arg_types == void_list_node)
8633     return arg_types;
8634
8635   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8636                                           args, complain, in_decl);
8637   if (remaining_arg_types == error_mark_node)
8638     return error_mark_node;
8639
8640   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8641     {
8642       /* For a pack expansion, perform substitution on the
8643          entire expression. Later on, we'll handle the arguments
8644          one-by-one.  */
8645       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8646                                             args, complain, in_decl);
8647
8648       if (TREE_CODE (expanded_args) == TREE_VEC)
8649         /* So that we'll spin through the parameters, one by one.  */
8650         i = TREE_VEC_LENGTH (expanded_args);
8651       else
8652         {
8653           /* We only partially substituted into the parameter
8654              pack. Our type is TYPE_PACK_EXPANSION.  */
8655           type = expanded_args;
8656           expanded_args = NULL_TREE;
8657         }
8658     }
8659
8660   while (i > 0) {
8661     --i;
8662     
8663     if (expanded_args)
8664       type = TREE_VEC_ELT (expanded_args, i);
8665     else if (!type)
8666       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8667
8668     if (type == error_mark_node)
8669       return error_mark_node;
8670     if (VOID_TYPE_P (type))
8671       {
8672         if (complain & tf_error)
8673           {
8674             error ("invalid parameter type %qT", type);
8675             if (in_decl)
8676               error ("in declaration %q+D", in_decl);
8677           }
8678         return error_mark_node;
8679     }
8680     
8681     /* Do array-to-pointer, function-to-pointer conversion, and ignore
8682        top-level qualifiers as required.  */
8683     type = TYPE_MAIN_VARIANT (type_decays_to (type));
8684
8685     /* We do not substitute into default arguments here.  The standard
8686        mandates that they be instantiated only when needed, which is
8687        done in build_over_call.  */
8688     default_arg = TREE_PURPOSE (arg_types);
8689
8690     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8691       {
8692         /* We've instantiated a template before its default arguments
8693            have been parsed.  This can happen for a nested template
8694            class, and is not an error unless we require the default
8695            argument in a call of this function.  */
8696         remaining_arg_types = 
8697           tree_cons (default_arg, type, remaining_arg_types);
8698         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
8699                        remaining_arg_types);
8700       }
8701     else
8702       remaining_arg_types = 
8703         hash_tree_cons (default_arg, type, remaining_arg_types);
8704   }
8705         
8706   return remaining_arg_types;
8707 }
8708
8709 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
8710    *not* handle the exception-specification for FNTYPE, because the
8711    initial substitution of explicitly provided template parameters
8712    during argument deduction forbids substitution into the
8713    exception-specification:
8714
8715      [temp.deduct]
8716
8717      All references in the function type of the function template to  the
8718      corresponding template parameters are replaced by the specified tem-
8719      plate argument values.  If a substitution in a template parameter or
8720      in  the function type of the function template results in an invalid
8721      type, type deduction fails.  [Note: The equivalent  substitution  in
8722      exception specifications is done only when the function is instanti-
8723      ated, at which point a program is  ill-formed  if  the  substitution
8724      results in an invalid type.]  */
8725
8726 static tree
8727 tsubst_function_type (tree t,
8728                       tree args,
8729                       tsubst_flags_t complain,
8730                       tree in_decl)
8731 {
8732   tree return_type;
8733   tree arg_types;
8734   tree fntype;
8735
8736   /* The TYPE_CONTEXT is not used for function/method types.  */
8737   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8738
8739   /* Substitute the return type.  */
8740   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8741   if (return_type == error_mark_node)
8742     return error_mark_node;
8743   /* The standard does not presently indicate that creation of a
8744      function type with an invalid return type is a deduction failure.
8745      However, that is clearly analogous to creating an array of "void"
8746      or a reference to a reference.  This is core issue #486.  */
8747   if (TREE_CODE (return_type) == ARRAY_TYPE
8748       || TREE_CODE (return_type) == FUNCTION_TYPE)
8749     {
8750       if (complain & tf_error)
8751         {
8752           if (TREE_CODE (return_type) == ARRAY_TYPE)
8753             error ("function returning an array");
8754           else
8755             error ("function returning a function");
8756         }
8757       return error_mark_node;
8758     }
8759
8760   /* Substitute the argument types.  */
8761   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8762                                 complain, in_decl);
8763   if (arg_types == error_mark_node)
8764     return error_mark_node;
8765
8766   /* Construct a new type node and return it.  */
8767   if (TREE_CODE (t) == FUNCTION_TYPE)
8768     fntype = build_function_type (return_type, arg_types);
8769   else
8770     {
8771       tree r = TREE_TYPE (TREE_VALUE (arg_types));
8772       if (! MAYBE_CLASS_TYPE_P (r))
8773         {
8774           /* [temp.deduct]
8775
8776              Type deduction may fail for any of the following
8777              reasons:
8778
8779              -- Attempting to create "pointer to member of T" when T
8780              is not a class type.  */
8781           if (complain & tf_error)
8782             error ("creating pointer to member function of non-class type %qT",
8783                       r);
8784           return error_mark_node;
8785         }
8786
8787       fntype = build_method_type_directly (r, return_type,
8788                                            TREE_CHAIN (arg_types));
8789     }
8790   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8791   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8792
8793   return fntype;
8794 }
8795
8796 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
8797    ARGS into that specification, and return the substituted
8798    specification.  If there is no specification, return NULL_TREE.  */
8799
8800 static tree
8801 tsubst_exception_specification (tree fntype,
8802                                 tree args,
8803                                 tsubst_flags_t complain,
8804                                 tree in_decl)
8805 {
8806   tree specs;
8807   tree new_specs;
8808
8809   specs = TYPE_RAISES_EXCEPTIONS (fntype);
8810   new_specs = NULL_TREE;
8811   if (specs)
8812     {
8813       if (! TREE_VALUE (specs))
8814         new_specs = specs;
8815       else
8816         while (specs)
8817           {
8818             tree spec;
8819             int i, len = 1;
8820             tree expanded_specs = NULL_TREE;
8821
8822             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8823               {
8824                 /* Expand the pack expansion type.  */
8825                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8826                                                        args, complain,
8827                                                        in_decl);
8828
8829                 if (expanded_specs == error_mark_node)
8830                   return error_mark_node;
8831                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
8832                   len = TREE_VEC_LENGTH (expanded_specs);
8833                 else
8834                   {
8835                     /* We're substituting into a member template, so
8836                        we got a TYPE_PACK_EXPANSION back.  Add that
8837                        expansion and move on.  */
8838                     gcc_assert (TREE_CODE (expanded_specs) 
8839                                 == TYPE_PACK_EXPANSION);
8840                     new_specs = add_exception_specifier (new_specs,
8841                                                          expanded_specs,
8842                                                          complain);
8843                     specs = TREE_CHAIN (specs);
8844                     continue;
8845                   }
8846               }
8847
8848             for (i = 0; i < len; ++i)
8849               {
8850                 if (expanded_specs)
8851                   spec = TREE_VEC_ELT (expanded_specs, i);
8852                 else
8853                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8854                 if (spec == error_mark_node)
8855                   return spec;
8856                 new_specs = add_exception_specifier (new_specs, spec, 
8857                                                      complain);
8858               }
8859
8860             specs = TREE_CHAIN (specs);
8861           }
8862     }
8863   return new_specs;
8864 }
8865
8866 /* Take the tree structure T and replace template parameters used
8867    therein with the argument vector ARGS.  IN_DECL is an associated
8868    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
8869    Issue error and warning messages under control of COMPLAIN.  Note
8870    that we must be relatively non-tolerant of extensions here, in
8871    order to preserve conformance; if we allow substitutions that
8872    should not be allowed, we may allow argument deductions that should
8873    not succeed, and therefore report ambiguous overload situations
8874    where there are none.  In theory, we could allow the substitution,
8875    but indicate that it should have failed, and allow our caller to
8876    make sure that the right thing happens, but we don't try to do this
8877    yet.
8878
8879    This function is used for dealing with types, decls and the like;
8880    for expressions, use tsubst_expr or tsubst_copy.  */
8881
8882 static tree
8883 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8884 {
8885   tree type, r;
8886
8887   if (t == NULL_TREE || t == error_mark_node
8888       || t == integer_type_node
8889       || t == void_type_node
8890       || t == char_type_node
8891       || t == unknown_type_node
8892       || TREE_CODE (t) == NAMESPACE_DECL)
8893     return t;
8894
8895   if (DECL_P (t))
8896     return tsubst_decl (t, args, complain);
8897
8898   if (TREE_CODE (t) == IDENTIFIER_NODE)
8899     type = IDENTIFIER_TYPE_VALUE (t);
8900   else
8901     type = TREE_TYPE (t);
8902
8903   gcc_assert (type != unknown_type_node);
8904
8905   /* Reuse typedefs.  We need to do this to handle dependent attributes,
8906      such as attribute aligned.  */
8907   if (TYPE_P (t)
8908       && TYPE_NAME (t)
8909       && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
8910     {
8911       tree decl = TYPE_NAME (t);
8912       
8913       if (DECL_CLASS_SCOPE_P (decl)
8914           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
8915           && uses_template_parms (DECL_CONTEXT (decl)))
8916         {
8917           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
8918           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
8919           r = retrieve_specialization (tmpl, gen_args, false);
8920         }
8921       else if (DECL_FUNCTION_SCOPE_P (decl)
8922                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
8923                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
8924         r = retrieve_local_specialization (decl);
8925       else
8926         /* The typedef is from a non-template context.  */
8927         return t;
8928
8929       if (r)
8930         {
8931           r = TREE_TYPE (r);
8932           r = cp_build_qualified_type_real
8933             (r, cp_type_quals (t) | cp_type_quals (r),
8934              complain | tf_ignore_bad_quals);
8935           return r;
8936         }
8937       /* Else we must be instantiating the typedef, so fall through.  */
8938     }
8939
8940   if (type
8941       && TREE_CODE (t) != TYPENAME_TYPE
8942       && TREE_CODE (t) != IDENTIFIER_NODE
8943       && TREE_CODE (t) != FUNCTION_TYPE
8944       && TREE_CODE (t) != METHOD_TYPE)
8945     type = tsubst (type, args, complain, in_decl);
8946   if (type == error_mark_node)
8947     return error_mark_node;
8948
8949   switch (TREE_CODE (t))
8950     {
8951     case RECORD_TYPE:
8952     case UNION_TYPE:
8953     case ENUMERAL_TYPE:
8954       return tsubst_aggr_type (t, args, complain, in_decl,
8955                                /*entering_scope=*/0);
8956
8957     case ERROR_MARK:
8958     case IDENTIFIER_NODE:
8959     case VOID_TYPE:
8960     case REAL_TYPE:
8961     case COMPLEX_TYPE:
8962     case VECTOR_TYPE:
8963     case BOOLEAN_TYPE:
8964     case INTEGER_CST:
8965     case REAL_CST:
8966     case STRING_CST:
8967       return t;
8968
8969     case INTEGER_TYPE:
8970       if (t == integer_type_node)
8971         return t;
8972
8973       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8974           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8975         return t;
8976
8977       {
8978         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8979
8980         max = tsubst_expr (omax, args, complain, in_decl,
8981                            /*integral_constant_expression_p=*/false);
8982         max = fold_decl_constant_value (max);
8983
8984         if (TREE_CODE (max) != INTEGER_CST
8985             && !at_function_scope_p ()
8986             && !value_dependent_expression_p (max))
8987           {
8988             if (complain & tf_error)
8989               error ("array bound is not an integer constant");
8990             return error_mark_node;
8991           }
8992
8993         /* [temp.deduct]
8994
8995            Type deduction may fail for any of the following
8996            reasons:
8997
8998              Attempting to create an array with a size that is
8999              zero or negative.  */
9000         if (integer_zerop (max) && !(complain & tf_error))
9001           /* We must fail if performing argument deduction (as
9002              indicated by the state of complain), so that
9003              another substitution can be found.  */
9004           return error_mark_node;
9005         else if (TREE_CODE (max) == INTEGER_CST
9006                  && INT_CST_LT (max, integer_zero_node))
9007           {
9008             if (complain & tf_error)
9009               error ("creating array with negative size (%qE)", max);
9010
9011             return error_mark_node;
9012           }
9013
9014         return compute_array_index_type (NULL_TREE, max);
9015       }
9016
9017     case TEMPLATE_TYPE_PARM:
9018     case TEMPLATE_TEMPLATE_PARM:
9019     case BOUND_TEMPLATE_TEMPLATE_PARM:
9020     case TEMPLATE_PARM_INDEX:
9021       {
9022         int idx;
9023         int level;
9024         int levels;
9025         tree arg = NULL_TREE;
9026
9027         r = NULL_TREE;
9028
9029         gcc_assert (TREE_VEC_LENGTH (args) > 0);
9030         template_parm_level_and_index (t, &level, &idx); 
9031
9032         levels = TMPL_ARGS_DEPTH (args);
9033         if (level <= levels)
9034           {
9035             arg = TMPL_ARG (args, level, idx);
9036
9037             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
9038               /* See through ARGUMENT_PACK_SELECT arguments. */
9039               arg = ARGUMENT_PACK_SELECT_ARG (arg);
9040           }
9041
9042         if (arg == error_mark_node)
9043           return error_mark_node;
9044         else if (arg != NULL_TREE)
9045           {
9046             if (ARGUMENT_PACK_P (arg))
9047               /* If ARG is an argument pack, we don't actually want to
9048                  perform a substitution here, because substitutions
9049                  for argument packs are only done
9050                  element-by-element. We can get to this point when
9051                  substituting the type of a non-type template
9052                  parameter pack, when that type actually contains
9053                  template parameter packs from an outer template, e.g.,
9054
9055                  template<typename... Types> struct A {
9056                    template<Types... Values> struct B { };
9057                  };  */
9058               return t;
9059
9060             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
9061               {
9062                 int quals;
9063                 gcc_assert (TYPE_P (arg));
9064
9065                 /* cv-quals from the template are discarded when
9066                    substituting in a function or reference type.  */
9067                 if (TREE_CODE (arg) == FUNCTION_TYPE
9068                     || TREE_CODE (arg) == METHOD_TYPE
9069                     || TREE_CODE (arg) == REFERENCE_TYPE)
9070                   quals = cp_type_quals (arg);
9071                 else
9072                   quals = cp_type_quals (arg) | cp_type_quals (t);
9073                   
9074                 return cp_build_qualified_type_real
9075                   (arg, quals, complain | tf_ignore_bad_quals);
9076               }
9077             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9078               {
9079                 /* We are processing a type constructed from a
9080                    template template parameter.  */
9081                 tree argvec = tsubst (TYPE_TI_ARGS (t),
9082                                       args, complain, in_decl);
9083                 if (argvec == error_mark_node)
9084                   return error_mark_node;
9085
9086                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
9087                    are resolving nested-types in the signature of a
9088                    member function templates.  Otherwise ARG is a
9089                    TEMPLATE_DECL and is the real template to be
9090                    instantiated.  */
9091                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
9092                   arg = TYPE_NAME (arg);
9093
9094                 r = lookup_template_class (arg,
9095                                            argvec, in_decl,
9096                                            DECL_CONTEXT (arg),
9097                                             /*entering_scope=*/0,
9098                                            complain);
9099                 return cp_build_qualified_type_real
9100                   (r, TYPE_QUALS (t), complain);
9101               }
9102             else
9103               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
9104               return arg;
9105           }
9106
9107         if (level == 1)
9108           /* This can happen during the attempted tsubst'ing in
9109              unify.  This means that we don't yet have any information
9110              about the template parameter in question.  */
9111           return t;
9112
9113         /* If we get here, we must have been looking at a parm for a
9114            more deeply nested template.  Make a new version of this
9115            template parameter, but with a lower level.  */
9116         switch (TREE_CODE (t))
9117           {
9118           case TEMPLATE_TYPE_PARM:
9119           case TEMPLATE_TEMPLATE_PARM:
9120           case BOUND_TEMPLATE_TEMPLATE_PARM:
9121             if (cp_type_quals (t))
9122               {
9123                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
9124                 r = cp_build_qualified_type_real
9125                   (r, cp_type_quals (t),
9126                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
9127                                ? tf_ignore_bad_quals : 0));
9128               }
9129             else
9130               {
9131                 r = copy_type (t);
9132                 TEMPLATE_TYPE_PARM_INDEX (r)
9133                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
9134                                                 r, levels, args, complain);
9135                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
9136                 TYPE_MAIN_VARIANT (r) = r;
9137                 TYPE_POINTER_TO (r) = NULL_TREE;
9138                 TYPE_REFERENCE_TO (r) = NULL_TREE;
9139
9140                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
9141                   /* We have reduced the level of the template
9142                      template parameter, but not the levels of its
9143                      template parameters, so canonical_type_parameter
9144                      will not be able to find the canonical template
9145                      template parameter for this level. Thus, we
9146                      require structural equality checking to compare
9147                      TEMPLATE_TEMPLATE_PARMs. */
9148                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9149                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
9150                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9151                 else
9152                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
9153
9154                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9155                   {
9156                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
9157                                           complain, in_decl);
9158                     if (argvec == error_mark_node)
9159                       return error_mark_node;
9160
9161                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
9162                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
9163                   }
9164               }
9165             break;
9166
9167           case TEMPLATE_PARM_INDEX:
9168             r = reduce_template_parm_level (t, type, levels, args, complain);
9169             break;
9170
9171           default:
9172             gcc_unreachable ();
9173           }
9174
9175         return r;
9176       }
9177
9178     case TREE_LIST:
9179       {
9180         tree purpose, value, chain;
9181
9182         if (t == void_list_node)
9183           return t;
9184
9185         purpose = TREE_PURPOSE (t);
9186         if (purpose)
9187           {
9188             purpose = tsubst (purpose, args, complain, in_decl);
9189             if (purpose == error_mark_node)
9190               return error_mark_node;
9191           }
9192         value = TREE_VALUE (t);
9193         if (value)
9194           {
9195             value = tsubst (value, args, complain, in_decl);
9196             if (value == error_mark_node)
9197               return error_mark_node;
9198           }
9199         chain = TREE_CHAIN (t);
9200         if (chain && chain != void_type_node)
9201           {
9202             chain = tsubst (chain, args, complain, in_decl);
9203             if (chain == error_mark_node)
9204               return error_mark_node;
9205           }
9206         if (purpose == TREE_PURPOSE (t)
9207             && value == TREE_VALUE (t)
9208             && chain == TREE_CHAIN (t))
9209           return t;
9210         return hash_tree_cons (purpose, value, chain);
9211       }
9212
9213     case TREE_BINFO:
9214       /* We should never be tsubsting a binfo.  */
9215       gcc_unreachable ();
9216
9217     case TREE_VEC:
9218       /* A vector of template arguments.  */
9219       gcc_assert (!type);
9220       return tsubst_template_args (t, args, complain, in_decl);
9221
9222     case POINTER_TYPE:
9223     case REFERENCE_TYPE:
9224       {
9225         enum tree_code code;
9226
9227         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
9228           return t;
9229
9230         code = TREE_CODE (t);
9231
9232
9233         /* [temp.deduct]
9234
9235            Type deduction may fail for any of the following
9236            reasons:
9237
9238            -- Attempting to create a pointer to reference type.
9239            -- Attempting to create a reference to a reference type or
9240               a reference to void.
9241
9242           Core issue 106 says that creating a reference to a reference
9243           during instantiation is no longer a cause for failure. We
9244           only enforce this check in strict C++98 mode.  */
9245         if ((TREE_CODE (type) == REFERENCE_TYPE
9246              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
9247             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
9248           {
9249             static location_t last_loc;
9250
9251             /* We keep track of the last time we issued this error
9252                message to avoid spewing a ton of messages during a
9253                single bad template instantiation.  */
9254             if (complain & tf_error
9255                 && last_loc != input_location)
9256               {
9257                 if (TREE_CODE (type) == VOID_TYPE)
9258                   error ("forming reference to void");
9259                 else
9260                   error ("forming %s to reference type %qT",
9261                          (code == POINTER_TYPE) ? "pointer" : "reference",
9262                          type);
9263                 last_loc = input_location;
9264               }
9265
9266             return error_mark_node;
9267           }
9268         else if (code == POINTER_TYPE)
9269           {
9270             r = build_pointer_type (type);
9271             if (TREE_CODE (type) == METHOD_TYPE)
9272               r = build_ptrmemfunc_type (r);
9273           }
9274         else if (TREE_CODE (type) == REFERENCE_TYPE)
9275           /* In C++0x, during template argument substitution, when there is an
9276              attempt to create a reference to a reference type, reference
9277              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
9278
9279              "If a template-argument for a template-parameter T names a type
9280              that is a reference to a type A, an attempt to create the type
9281              'lvalue reference to cv T' creates the type 'lvalue reference to
9282              A,' while an attempt to create the type type rvalue reference to
9283              cv T' creates the type T"
9284           */
9285           r = cp_build_reference_type
9286               (TREE_TYPE (type),
9287                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
9288         else
9289           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
9290         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
9291
9292         if (r != error_mark_node)
9293           /* Will this ever be needed for TYPE_..._TO values?  */
9294           layout_type (r);
9295
9296         return r;
9297       }
9298     case OFFSET_TYPE:
9299       {
9300         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
9301         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
9302           {
9303             /* [temp.deduct]
9304
9305                Type deduction may fail for any of the following
9306                reasons:
9307
9308                -- Attempting to create "pointer to member of T" when T
9309                   is not a class type.  */
9310             if (complain & tf_error)
9311               error ("creating pointer to member of non-class type %qT", r);
9312             return error_mark_node;
9313           }
9314         if (TREE_CODE (type) == REFERENCE_TYPE)
9315           {
9316             if (complain & tf_error)
9317               error ("creating pointer to member reference type %qT", type);
9318             return error_mark_node;
9319           }
9320         if (TREE_CODE (type) == VOID_TYPE)
9321           {
9322             if (complain & tf_error)
9323               error ("creating pointer to member of type void");
9324             return error_mark_node;
9325           }
9326         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9327         if (TREE_CODE (type) == FUNCTION_TYPE)
9328           {
9329             /* The type of the implicit object parameter gets its
9330                cv-qualifiers from the FUNCTION_TYPE. */
9331             tree method_type;
9332             tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
9333                                                       cp_type_quals (type));
9334             tree memptr;
9335             method_type = build_method_type_directly (this_type,
9336                                                       TREE_TYPE (type),
9337                                                       TYPE_ARG_TYPES (type));
9338             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
9339             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
9340                                                  complain);
9341           }
9342         else
9343           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
9344                                                TYPE_QUALS (t),
9345                                                complain);
9346       }
9347     case FUNCTION_TYPE:
9348     case METHOD_TYPE:
9349       {
9350         tree fntype;
9351         tree specs;
9352         fntype = tsubst_function_type (t, args, complain, in_decl);
9353         if (fntype == error_mark_node)
9354           return error_mark_node;
9355
9356         /* Substitute the exception specification.  */
9357         specs = tsubst_exception_specification (t, args, complain,
9358                                                 in_decl);
9359         if (specs == error_mark_node)
9360           return error_mark_node;
9361         if (specs)
9362           fntype = build_exception_variant (fntype, specs);
9363         return fntype;
9364       }
9365     case ARRAY_TYPE:
9366       {
9367         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
9368         if (domain == error_mark_node)
9369           return error_mark_node;
9370
9371         /* As an optimization, we avoid regenerating the array type if
9372            it will obviously be the same as T.  */
9373         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
9374           return t;
9375
9376         /* These checks should match the ones in grokdeclarator.
9377
9378            [temp.deduct]
9379
9380            The deduction may fail for any of the following reasons:
9381
9382            -- Attempting to create an array with an element type that
9383               is void, a function type, or a reference type, or [DR337]
9384               an abstract class type.  */
9385         if (TREE_CODE (type) == VOID_TYPE
9386             || TREE_CODE (type) == FUNCTION_TYPE
9387             || TREE_CODE (type) == REFERENCE_TYPE)
9388           {
9389             if (complain & tf_error)
9390               error ("creating array of %qT", type);
9391             return error_mark_node;
9392           }
9393         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
9394           {
9395             if (complain & tf_error)
9396               error ("creating array of %qT, which is an abstract class type",
9397                      type);
9398             return error_mark_node;
9399           }
9400
9401         r = build_cplus_array_type (type, domain);
9402
9403         if (TYPE_USER_ALIGN (t))
9404           {
9405             TYPE_ALIGN (r) = TYPE_ALIGN (t);
9406             TYPE_USER_ALIGN (r) = 1;
9407           }
9408
9409         return r;
9410       }
9411
9412     case PLUS_EXPR:
9413     case MINUS_EXPR:
9414       {
9415         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9416         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9417
9418         if (e1 == error_mark_node || e2 == error_mark_node)
9419           return error_mark_node;
9420
9421         return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
9422       }
9423
9424     case NEGATE_EXPR:
9425     case NOP_EXPR:
9426       {
9427         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9428         if (e == error_mark_node)
9429           return error_mark_node;
9430
9431         return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
9432       }
9433
9434     case TYPENAME_TYPE:
9435       {
9436         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9437                                      in_decl, /*entering_scope=*/1);
9438         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
9439                               complain, in_decl);
9440
9441         if (ctx == error_mark_node || f == error_mark_node)
9442           return error_mark_node;
9443
9444         if (!MAYBE_CLASS_TYPE_P (ctx))
9445           {
9446             if (complain & tf_error)
9447               error ("%qT is not a class, struct, or union type", ctx);
9448             return error_mark_node;
9449           }
9450         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
9451           {
9452             /* Normally, make_typename_type does not require that the CTX
9453                have complete type in order to allow things like:
9454
9455                  template <class T> struct S { typename S<T>::X Y; };
9456
9457                But, such constructs have already been resolved by this
9458                point, so here CTX really should have complete type, unless
9459                it's a partial instantiation.  */
9460             ctx = complete_type (ctx);
9461             if (!COMPLETE_TYPE_P (ctx))
9462               {
9463                 if (complain & tf_error)
9464                   cxx_incomplete_type_error (NULL_TREE, ctx);
9465                 return error_mark_node;
9466               }
9467           }
9468
9469         f = make_typename_type (ctx, f, typename_type,
9470                                 (complain & tf_error) | tf_keep_type_decl);
9471         if (f == error_mark_node)
9472           return f;
9473         if (TREE_CODE (f) == TYPE_DECL)
9474           {
9475             complain |= tf_ignore_bad_quals;
9476             f = TREE_TYPE (f);
9477           }
9478
9479         if (TREE_CODE (f) != TYPENAME_TYPE)
9480           {
9481             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9482               error ("%qT resolves to %qT, which is not an enumeration type",
9483                      t, f);
9484             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9485               error ("%qT resolves to %qT, which is is not a class type",
9486                      t, f);
9487           }
9488
9489         return cp_build_qualified_type_real
9490           (f, cp_type_quals (f) | cp_type_quals (t), complain);
9491       }
9492
9493     case UNBOUND_CLASS_TEMPLATE:
9494       {
9495         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9496                                      in_decl, /*entering_scope=*/1);
9497         tree name = TYPE_IDENTIFIER (t);
9498         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9499
9500         if (ctx == error_mark_node || name == error_mark_node)
9501           return error_mark_node;
9502
9503         if (parm_list)
9504           parm_list = tsubst_template_parms (parm_list, args, complain);
9505         return make_unbound_class_template (ctx, name, parm_list, complain);
9506       }
9507
9508     case INDIRECT_REF:
9509     case ADDR_EXPR:
9510     case CALL_EXPR:
9511       gcc_unreachable ();
9512
9513     case ARRAY_REF:
9514       {
9515         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9516         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9517                                /*integral_constant_expression_p=*/false);
9518         if (e1 == error_mark_node || e2 == error_mark_node)
9519           return error_mark_node;
9520
9521         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9522       }
9523
9524     case SCOPE_REF:
9525       {
9526         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9527         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9528         if (e1 == error_mark_node || e2 == error_mark_node)
9529           return error_mark_node;
9530
9531         return build_qualified_name (/*type=*/NULL_TREE,
9532                                      e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9533       }
9534
9535     case TYPEOF_TYPE:
9536       {
9537         tree type;
9538
9539         type = finish_typeof (tsubst_expr 
9540                               (TYPEOF_TYPE_EXPR (t), args,
9541                                complain, in_decl,
9542                                /*integral_constant_expression_p=*/false));
9543         return cp_build_qualified_type_real (type,
9544                                              cp_type_quals (t)
9545                                              | cp_type_quals (type),
9546                                              complain);
9547       }
9548
9549     case DECLTYPE_TYPE:
9550       {
9551         tree type;
9552
9553         type = 
9554           finish_decltype_type (tsubst_expr 
9555                                 (DECLTYPE_TYPE_EXPR (t), args,
9556                                  complain, in_decl,
9557                                  /*integral_constant_expression_p=*/false),
9558                                 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9559         return cp_build_qualified_type_real (type,
9560                                              cp_type_quals (t)
9561                                              | cp_type_quals (type),
9562                                              complain);
9563       }
9564
9565     case TYPE_ARGUMENT_PACK:
9566     case NONTYPE_ARGUMENT_PACK:
9567       {
9568         tree r = make_node (TREE_CODE (t));
9569         tree packed_out = 
9570           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
9571                                 args,
9572                                 complain,
9573                                 in_decl);
9574         SET_ARGUMENT_PACK_ARGS (r, packed_out);
9575
9576         /* For template nontype argument packs, also substitute into
9577            the type.  */
9578         if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9579           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9580
9581         return r;
9582       }
9583       break;
9584
9585     default:
9586       sorry ("use of %qs in template",
9587              tree_code_name [(int) TREE_CODE (t)]);
9588       return error_mark_node;
9589     }
9590 }
9591
9592 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
9593    type of the expression on the left-hand side of the "." or "->"
9594    operator.  */
9595
9596 static tree
9597 tsubst_baselink (tree baselink, tree object_type,
9598                  tree args, tsubst_flags_t complain, tree in_decl)
9599 {
9600     tree name;
9601     tree qualifying_scope;
9602     tree fns;
9603     tree optype;
9604     tree template_args = 0;
9605     bool template_id_p = false;
9606
9607     /* A baselink indicates a function from a base class.  Both the
9608        BASELINK_ACCESS_BINFO and the base class referenced may
9609        indicate bases of the template class, rather than the
9610        instantiated class.  In addition, lookups that were not
9611        ambiguous before may be ambiguous now.  Therefore, we perform
9612        the lookup again.  */
9613     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9614     qualifying_scope = tsubst (qualifying_scope, args,
9615                                complain, in_decl);
9616     fns = BASELINK_FUNCTIONS (baselink);
9617     optype = BASELINK_OPTYPE (baselink);
9618     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9619       {
9620         template_id_p = true;
9621         template_args = TREE_OPERAND (fns, 1);
9622         fns = TREE_OPERAND (fns, 0);
9623         if (template_args)
9624           template_args = tsubst_template_args (template_args, args,
9625                                                 complain, in_decl);
9626       }
9627     name = DECL_NAME (get_first_fn (fns));
9628     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9629
9630     /* If lookup found a single function, mark it as used at this
9631        point.  (If it lookup found multiple functions the one selected
9632        later by overload resolution will be marked as used at that
9633        point.)  */
9634     if (BASELINK_P (baselink))
9635       fns = BASELINK_FUNCTIONS (baselink);
9636     if (!template_id_p && !really_overloaded_fn (fns))
9637       mark_used (OVL_CURRENT (fns));
9638
9639     /* Add back the template arguments, if present.  */
9640     if (BASELINK_P (baselink) && template_id_p)
9641       BASELINK_FUNCTIONS (baselink)
9642         = build_nt (TEMPLATE_ID_EXPR,
9643                     BASELINK_FUNCTIONS (baselink),
9644                     template_args);
9645     /* Update the conversion operator type.  */
9646     BASELINK_OPTYPE (baselink) 
9647       = tsubst (optype, args, complain, in_decl);
9648
9649     if (!object_type)
9650       object_type = current_class_type;
9651     return adjust_result_of_qualified_name_lookup (baselink,
9652                                                    qualifying_scope,
9653                                                    object_type);
9654 }
9655
9656 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
9657    true if the qualified-id will be a postfix-expression in-and-of
9658    itself; false if more of the postfix-expression follows the
9659    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
9660    of "&".  */
9661
9662 static tree
9663 tsubst_qualified_id (tree qualified_id, tree args,
9664                      tsubst_flags_t complain, tree in_decl,
9665                      bool done, bool address_p)
9666 {
9667   tree expr;
9668   tree scope;
9669   tree name;
9670   bool is_template;
9671   tree template_args;
9672
9673   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9674
9675   /* Figure out what name to look up.  */
9676   name = TREE_OPERAND (qualified_id, 1);
9677   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9678     {
9679       is_template = true;
9680       template_args = TREE_OPERAND (name, 1);
9681       if (template_args)
9682         template_args = tsubst_template_args (template_args, args,
9683                                               complain, in_decl);
9684       name = TREE_OPERAND (name, 0);
9685     }
9686   else
9687     {
9688       is_template = false;
9689       template_args = NULL_TREE;
9690     }
9691
9692   /* Substitute into the qualifying scope.  When there are no ARGS, we
9693      are just trying to simplify a non-dependent expression.  In that
9694      case the qualifying scope may be dependent, and, in any case,
9695      substituting will not help.  */
9696   scope = TREE_OPERAND (qualified_id, 0);
9697   if (args)
9698     {
9699       scope = tsubst (scope, args, complain, in_decl);
9700       expr = tsubst_copy (name, args, complain, in_decl);
9701     }
9702   else
9703     expr = name;
9704
9705   if (dependent_type_p (scope))
9706     return build_qualified_name (/*type=*/NULL_TREE,
9707                                  scope, expr,
9708                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9709
9710   if (!BASELINK_P (name) && !DECL_P (expr))
9711     {
9712       if (TREE_CODE (expr) == BIT_NOT_EXPR)
9713         /* If this were actually a destructor call, it would have been
9714            parsed as such by the parser.  */
9715         expr = error_mark_node;
9716       else
9717         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9718       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9719                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9720         {
9721           if (complain & tf_error)
9722             {
9723               error ("dependent-name %qE is parsed as a non-type, but "
9724                      "instantiation yields a type", qualified_id);
9725               inform ("say %<typename %E%> if a type is meant", qualified_id);
9726             }
9727           return error_mark_node;
9728         }
9729     }
9730
9731   if (DECL_P (expr))
9732     {
9733       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9734                                            scope);
9735       /* Remember that there was a reference to this entity.  */
9736       mark_used (expr);
9737     }
9738
9739   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9740     {
9741       if (complain & tf_error)
9742         qualified_name_lookup_error (scope,
9743                                      TREE_OPERAND (qualified_id, 1),
9744                                      expr, input_location);
9745       return error_mark_node;
9746     }
9747
9748   if (is_template)
9749     expr = lookup_template_function (expr, template_args);
9750
9751   if (expr == error_mark_node && complain & tf_error)
9752     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9753                                  expr, input_location);
9754   else if (TYPE_P (scope))
9755     {
9756       expr = (adjust_result_of_qualified_name_lookup
9757               (expr, scope, current_class_type));
9758       expr = (finish_qualified_id_expr
9759               (scope, expr, done, address_p,
9760                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9761                /*template_arg_p=*/false));
9762     }
9763
9764   /* Expressions do not generally have reference type.  */
9765   if (TREE_CODE (expr) != SCOPE_REF
9766       /* However, if we're about to form a pointer-to-member, we just
9767          want the referenced member referenced.  */
9768       && TREE_CODE (expr) != OFFSET_REF)
9769     expr = convert_from_reference (expr);
9770
9771   return expr;
9772 }
9773
9774 /* Like tsubst, but deals with expressions.  This function just replaces
9775    template parms; to finish processing the resultant expression, use
9776    tsubst_expr.  */
9777
9778 static tree
9779 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9780 {
9781   enum tree_code code;
9782   tree r;
9783
9784   if (t == NULL_TREE || t == error_mark_node)
9785     return t;
9786
9787   code = TREE_CODE (t);
9788
9789   switch (code)
9790     {
9791     case PARM_DECL:
9792       r = retrieve_local_specialization (t);
9793       gcc_assert (r != NULL);
9794       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9795         r = ARGUMENT_PACK_SELECT_ARG (r);
9796       mark_used (r);
9797       return r;
9798
9799     case CONST_DECL:
9800       {
9801         tree enum_type;
9802         tree v;
9803
9804         if (DECL_TEMPLATE_PARM_P (t))
9805           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9806         /* There is no need to substitute into namespace-scope
9807            enumerators.  */
9808         if (DECL_NAMESPACE_SCOPE_P (t))
9809           return t;
9810         /* If ARGS is NULL, then T is known to be non-dependent.  */
9811         if (args == NULL_TREE)
9812           return integral_constant_value (t);
9813
9814         /* Unfortunately, we cannot just call lookup_name here.
9815            Consider:
9816
9817              template <int I> int f() {
9818              enum E { a = I };
9819              struct S { void g() { E e = a; } };
9820              };
9821
9822            When we instantiate f<7>::S::g(), say, lookup_name is not
9823            clever enough to find f<7>::a.  */
9824         enum_type
9825           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9826                               /*entering_scope=*/0);
9827
9828         for (v = TYPE_VALUES (enum_type);
9829              v != NULL_TREE;
9830              v = TREE_CHAIN (v))
9831           if (TREE_PURPOSE (v) == DECL_NAME (t))
9832             return TREE_VALUE (v);
9833
9834           /* We didn't find the name.  That should never happen; if
9835              name-lookup found it during preliminary parsing, we
9836              should find it again here during instantiation.  */
9837         gcc_unreachable ();
9838       }
9839       return t;
9840
9841     case FIELD_DECL:
9842       if (DECL_CONTEXT (t))
9843         {
9844           tree ctx;
9845
9846           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9847                                   /*entering_scope=*/1);
9848           if (ctx != DECL_CONTEXT (t))
9849             {
9850               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9851               if (!r)
9852                 {
9853                   if (complain & tf_error)
9854                     error ("using invalid field %qD", t);
9855                   return error_mark_node;
9856                 }
9857               return r;
9858             }
9859         }
9860
9861       return t;
9862
9863     case VAR_DECL:
9864     case FUNCTION_DECL:
9865       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9866           || local_variable_p (t))
9867         t = tsubst (t, args, complain, in_decl);
9868       mark_used (t);
9869       return t;
9870
9871     case BASELINK:
9872       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9873
9874     case TEMPLATE_DECL:
9875       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9876         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9877                        args, complain, in_decl);
9878       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9879         return tsubst (t, args, complain, in_decl);
9880       else if (DECL_CLASS_SCOPE_P (t)
9881                && uses_template_parms (DECL_CONTEXT (t)))
9882         {
9883           /* Template template argument like the following example need
9884              special treatment:
9885
9886                template <template <class> class TT> struct C {};
9887                template <class T> struct D {
9888                  template <class U> struct E {};
9889                  C<E> c;                                // #1
9890                };
9891                D<int> d;                                // #2
9892
9893              We are processing the template argument `E' in #1 for
9894              the template instantiation #2.  Originally, `E' is a
9895              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
9896              have to substitute this with one having context `D<int>'.  */
9897
9898           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9899           return lookup_field (context, DECL_NAME(t), 0, false);
9900         }
9901       else
9902         /* Ordinary template template argument.  */
9903         return t;
9904
9905     case CAST_EXPR:
9906     case REINTERPRET_CAST_EXPR:
9907     case CONST_CAST_EXPR:
9908     case STATIC_CAST_EXPR:
9909     case DYNAMIC_CAST_EXPR:
9910     case NOP_EXPR:
9911       return build1
9912         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9913          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9914
9915     case SIZEOF_EXPR:
9916       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9917         {
9918           /* We only want to compute the number of arguments.  */
9919           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9920                                                 complain, in_decl);
9921           int len = 0;
9922
9923           if (TREE_CODE (expanded) == TREE_VEC)
9924             len = TREE_VEC_LENGTH (expanded);
9925
9926           if (expanded == error_mark_node)
9927             return error_mark_node;
9928           else if (PACK_EXPANSION_P (expanded)
9929                    || (TREE_CODE (expanded) == TREE_VEC
9930                        && len > 0
9931                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
9932             {
9933               if (TREE_CODE (expanded) == TREE_VEC)
9934                 expanded = TREE_VEC_ELT (expanded, len - 1);
9935
9936               if (TYPE_P (expanded))
9937                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
9938                                                    complain & tf_error);
9939               else
9940                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
9941                                                    complain & tf_error);
9942             }
9943           else
9944             return build_int_cst (size_type_node, len);
9945         }
9946       /* Fall through */
9947
9948     case INDIRECT_REF:
9949     case NEGATE_EXPR:
9950     case TRUTH_NOT_EXPR:
9951     case BIT_NOT_EXPR:
9952     case ADDR_EXPR:
9953     case UNARY_PLUS_EXPR:      /* Unary + */
9954     case ALIGNOF_EXPR:
9955     case ARROW_EXPR:
9956     case THROW_EXPR:
9957     case TYPEID_EXPR:
9958     case REALPART_EXPR:
9959     case IMAGPART_EXPR:
9960       return build1
9961         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9962          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9963
9964     case COMPONENT_REF:
9965       {
9966         tree object;
9967         tree name;
9968
9969         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9970         name = TREE_OPERAND (t, 1);
9971         if (TREE_CODE (name) == BIT_NOT_EXPR)
9972           {
9973             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9974                                 complain, in_decl);
9975             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9976           }
9977         else if (TREE_CODE (name) == SCOPE_REF
9978                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9979           {
9980             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9981                                      complain, in_decl);
9982             name = TREE_OPERAND (name, 1);
9983             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9984                                 complain, in_decl);
9985             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9986             name = build_qualified_name (/*type=*/NULL_TREE,
9987                                          base, name,
9988                                          /*template_p=*/false);
9989           }
9990         else if (TREE_CODE (name) == BASELINK)
9991           name = tsubst_baselink (name,
9992                                   non_reference (TREE_TYPE (object)),
9993                                   args, complain,
9994                                   in_decl);
9995         else
9996           name = tsubst_copy (name, args, complain, in_decl);
9997         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
9998       }
9999
10000     case PLUS_EXPR:
10001     case MINUS_EXPR:
10002     case MULT_EXPR:
10003     case TRUNC_DIV_EXPR:
10004     case CEIL_DIV_EXPR:
10005     case FLOOR_DIV_EXPR:
10006     case ROUND_DIV_EXPR:
10007     case EXACT_DIV_EXPR:
10008     case BIT_AND_EXPR:
10009     case BIT_IOR_EXPR:
10010     case BIT_XOR_EXPR:
10011     case TRUNC_MOD_EXPR:
10012     case FLOOR_MOD_EXPR:
10013     case TRUTH_ANDIF_EXPR:
10014     case TRUTH_ORIF_EXPR:
10015     case TRUTH_AND_EXPR:
10016     case TRUTH_OR_EXPR:
10017     case RSHIFT_EXPR:
10018     case LSHIFT_EXPR:
10019     case RROTATE_EXPR:
10020     case LROTATE_EXPR:
10021     case EQ_EXPR:
10022     case NE_EXPR:
10023     case MAX_EXPR:
10024     case MIN_EXPR:
10025     case LE_EXPR:
10026     case GE_EXPR:
10027     case LT_EXPR:
10028     case GT_EXPR:
10029     case COMPOUND_EXPR:
10030     case DOTSTAR_EXPR:
10031     case MEMBER_REF:
10032     case PREDECREMENT_EXPR:
10033     case PREINCREMENT_EXPR:
10034     case POSTDECREMENT_EXPR:
10035     case POSTINCREMENT_EXPR:
10036       return build_nt
10037         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10038          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
10039
10040     case SCOPE_REF:
10041       return build_qualified_name (/*type=*/NULL_TREE,
10042                                    tsubst_copy (TREE_OPERAND (t, 0),
10043                                                 args, complain, in_decl),
10044                                    tsubst_copy (TREE_OPERAND (t, 1),
10045                                                 args, complain, in_decl),
10046                                    QUALIFIED_NAME_IS_TEMPLATE (t));
10047
10048     case ARRAY_REF:
10049       return build_nt
10050         (ARRAY_REF,
10051          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10052          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10053          NULL_TREE, NULL_TREE);
10054
10055     case CALL_EXPR:
10056       {
10057         int n = VL_EXP_OPERAND_LENGTH (t);
10058         tree result = build_vl_exp (CALL_EXPR, n);
10059         int i;
10060         for (i = 0; i < n; i++)
10061           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
10062                                              complain, in_decl);
10063         return result;
10064       }
10065
10066     case COND_EXPR:
10067     case MODOP_EXPR:
10068     case PSEUDO_DTOR_EXPR:
10069       {
10070         r = build_nt
10071           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10072            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10073            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
10074         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10075         return r;
10076       }
10077
10078     case NEW_EXPR:
10079       {
10080         r = build_nt
10081         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10082          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10083          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
10084         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
10085         return r;
10086       }
10087
10088     case DELETE_EXPR:
10089       {
10090         r = build_nt
10091         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10092          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
10093         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
10094         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
10095         return r;
10096       }
10097
10098     case TEMPLATE_ID_EXPR:
10099       {
10100         /* Substituted template arguments */
10101         tree fn = TREE_OPERAND (t, 0);
10102         tree targs = TREE_OPERAND (t, 1);
10103
10104         fn = tsubst_copy (fn, args, complain, in_decl);
10105         if (targs)
10106           targs = tsubst_template_args (targs, args, complain, in_decl);
10107
10108         return lookup_template_function (fn, targs);
10109       }
10110
10111     case TREE_LIST:
10112       {
10113         tree purpose, value, chain;
10114
10115         if (t == void_list_node)
10116           return t;
10117
10118         purpose = TREE_PURPOSE (t);
10119         if (purpose)
10120           purpose = tsubst_copy (purpose, args, complain, in_decl);
10121         value = TREE_VALUE (t);
10122         if (value)
10123           value = tsubst_copy (value, args, complain, in_decl);
10124         chain = TREE_CHAIN (t);
10125         if (chain && chain != void_type_node)
10126           chain = tsubst_copy (chain, args, complain, in_decl);
10127         if (purpose == TREE_PURPOSE (t)
10128             && value == TREE_VALUE (t)
10129             && chain == TREE_CHAIN (t))
10130           return t;
10131         return tree_cons (purpose, value, chain);
10132       }
10133
10134     case RECORD_TYPE:
10135     case UNION_TYPE:
10136     case ENUMERAL_TYPE:
10137     case INTEGER_TYPE:
10138     case TEMPLATE_TYPE_PARM:
10139     case TEMPLATE_TEMPLATE_PARM:
10140     case BOUND_TEMPLATE_TEMPLATE_PARM:
10141     case TEMPLATE_PARM_INDEX:
10142     case POINTER_TYPE:
10143     case REFERENCE_TYPE:
10144     case OFFSET_TYPE:
10145     case FUNCTION_TYPE:
10146     case METHOD_TYPE:
10147     case ARRAY_TYPE:
10148     case TYPENAME_TYPE:
10149     case UNBOUND_CLASS_TEMPLATE:
10150     case TYPEOF_TYPE:
10151     case DECLTYPE_TYPE:
10152     case TYPE_DECL:
10153       return tsubst (t, args, complain, in_decl);
10154
10155     case IDENTIFIER_NODE:
10156       if (IDENTIFIER_TYPENAME_P (t))
10157         {
10158           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10159           return mangle_conv_op_name_for_type (new_type);
10160         }
10161       else
10162         return t;
10163
10164     case CONSTRUCTOR:
10165       /* This is handled by tsubst_copy_and_build.  */
10166       gcc_unreachable ();
10167
10168     case VA_ARG_EXPR:
10169       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
10170                                           in_decl),
10171                              tsubst (TREE_TYPE (t), args, complain, in_decl));
10172
10173     case CLEANUP_POINT_EXPR:
10174       /* We shouldn't have built any of these during initial template
10175          generation.  Instead, they should be built during instantiation
10176          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
10177       gcc_unreachable ();
10178
10179     case OFFSET_REF:
10180       mark_used (TREE_OPERAND (t, 1));
10181       return t;
10182
10183     case EXPR_PACK_EXPANSION:
10184       error ("invalid use of pack expansion expression");
10185       return error_mark_node;
10186
10187     case NONTYPE_ARGUMENT_PACK:
10188       error ("use %<...%> to expand argument pack");
10189       return error_mark_node;
10190
10191     default:
10192       return t;
10193     }
10194 }
10195
10196 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
10197
10198 static tree
10199 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
10200                     tree in_decl)
10201 {
10202   tree new_clauses = NULL, nc, oc;
10203
10204   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
10205     {
10206       nc = copy_node (oc);
10207       OMP_CLAUSE_CHAIN (nc) = new_clauses;
10208       new_clauses = nc;
10209
10210       switch (OMP_CLAUSE_CODE (nc))
10211         {
10212         case OMP_CLAUSE_LASTPRIVATE:
10213           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
10214             {
10215               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
10216               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
10217                            in_decl, /*integral_constant_expression_p=*/false);
10218               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
10219                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
10220             }
10221           /* FALLTHRU */
10222         case OMP_CLAUSE_PRIVATE:
10223         case OMP_CLAUSE_SHARED:
10224         case OMP_CLAUSE_FIRSTPRIVATE:
10225         case OMP_CLAUSE_REDUCTION:
10226         case OMP_CLAUSE_COPYIN:
10227         case OMP_CLAUSE_COPYPRIVATE:
10228         case OMP_CLAUSE_IF:
10229         case OMP_CLAUSE_NUM_THREADS:
10230         case OMP_CLAUSE_SCHEDULE:
10231         case OMP_CLAUSE_COLLAPSE:
10232           OMP_CLAUSE_OPERAND (nc, 0)
10233             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
10234                            in_decl, /*integral_constant_expression_p=*/false);
10235           break;
10236         case OMP_CLAUSE_NOWAIT:
10237         case OMP_CLAUSE_ORDERED:
10238         case OMP_CLAUSE_DEFAULT:
10239         case OMP_CLAUSE_UNTIED:
10240           break;
10241         default:
10242           gcc_unreachable ();
10243         }
10244     }
10245
10246   return finish_omp_clauses (nreverse (new_clauses));
10247 }
10248
10249 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
10250
10251 static tree
10252 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
10253                           tree in_decl)
10254 {
10255 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
10256
10257   tree purpose, value, chain;
10258
10259   if (t == NULL)
10260     return t;
10261
10262   if (TREE_CODE (t) != TREE_LIST)
10263     return tsubst_copy_and_build (t, args, complain, in_decl,
10264                                   /*function_p=*/false,
10265                                   /*integral_constant_expression_p=*/false);
10266
10267   if (t == void_list_node)
10268     return t;
10269
10270   purpose = TREE_PURPOSE (t);
10271   if (purpose)
10272     purpose = RECUR (purpose);
10273   value = TREE_VALUE (t);
10274   if (value)
10275     value = RECUR (value);
10276   chain = TREE_CHAIN (t);
10277   if (chain && chain != void_type_node)
10278     chain = RECUR (chain);
10279   return tree_cons (purpose, value, chain);
10280 #undef RECUR
10281 }
10282
10283 /* Substitute one OMP_FOR iterator.  */
10284
10285 static void
10286 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
10287                          tree condv, tree incrv, tree *clauses,
10288                          tree args, tsubst_flags_t complain, tree in_decl,
10289                          bool integral_constant_expression_p)
10290 {
10291 #define RECUR(NODE)                             \
10292   tsubst_expr ((NODE), args, complain, in_decl, \
10293                integral_constant_expression_p)
10294   tree decl, init, cond, incr;
10295
10296   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
10297   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10298   decl = RECUR (TREE_OPERAND (init, 0));
10299   init = TREE_OPERAND (init, 1);
10300   gcc_assert (!type_dependent_expression_p (decl));
10301
10302   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
10303     {
10304       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
10305       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
10306       if (TREE_CODE (incr) == MODIFY_EXPR)
10307         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
10308                                     RECUR (TREE_OPERAND (incr, 1)),
10309                                     complain);
10310       else
10311         incr = RECUR (incr);
10312       TREE_VEC_ELT (declv, i) = decl;
10313       TREE_VEC_ELT (initv, i) = init;
10314       TREE_VEC_ELT (condv, i) = cond;
10315       TREE_VEC_ELT (incrv, i) = incr;
10316       return;
10317     }
10318
10319   if (init && TREE_CODE (init) != DECL_EXPR)
10320     {
10321       tree c;
10322       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
10323         {
10324           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
10325                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
10326               && OMP_CLAUSE_DECL (c) == decl)
10327             break;
10328           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
10329                    && OMP_CLAUSE_DECL (c) == decl)
10330             error ("iteration variable %qD should not be firstprivate", decl);
10331           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
10332                    && OMP_CLAUSE_DECL (c) == decl)
10333             error ("iteration variable %qD should not be reduction", decl);
10334         }
10335       if (c == NULL)
10336         {
10337           c = build_omp_clause (OMP_CLAUSE_PRIVATE);
10338           OMP_CLAUSE_DECL (c) = decl;
10339           c = finish_omp_clauses (c);
10340           if (c)
10341             {
10342               OMP_CLAUSE_CHAIN (c) = *clauses;
10343               *clauses = c;
10344             }
10345         }
10346     }
10347   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
10348   if (COMPARISON_CLASS_P (cond))
10349     cond = build2 (TREE_CODE (cond), boolean_type_node,
10350                    RECUR (TREE_OPERAND (cond, 0)),
10351                    RECUR (TREE_OPERAND (cond, 1)));
10352   else
10353     cond = RECUR (cond);
10354   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
10355   switch (TREE_CODE (incr))
10356     {
10357     case PREINCREMENT_EXPR:
10358     case PREDECREMENT_EXPR:
10359     case POSTINCREMENT_EXPR:
10360     case POSTDECREMENT_EXPR:
10361       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
10362                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
10363       break;
10364     case MODIFY_EXPR:
10365       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
10366           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
10367         {
10368           tree rhs = TREE_OPERAND (incr, 1);
10369           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
10370                          RECUR (TREE_OPERAND (incr, 0)),
10371                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
10372                                  RECUR (TREE_OPERAND (rhs, 0)),
10373                                  RECUR (TREE_OPERAND (rhs, 1))));
10374         }
10375       else
10376         incr = RECUR (incr);
10377       break;
10378     case MODOP_EXPR:
10379       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
10380           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
10381         {
10382           tree lhs = RECUR (TREE_OPERAND (incr, 0));
10383           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
10384                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
10385                                  TREE_TYPE (decl), lhs,
10386                                  RECUR (TREE_OPERAND (incr, 2))));
10387         }
10388       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
10389                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
10390                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
10391         {
10392           tree rhs = TREE_OPERAND (incr, 2);
10393           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
10394                          RECUR (TREE_OPERAND (incr, 0)),
10395                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
10396                                  RECUR (TREE_OPERAND (rhs, 0)),
10397                                  RECUR (TREE_OPERAND (rhs, 1))));
10398         }
10399       else
10400         incr = RECUR (incr);
10401       break;
10402     default:
10403       incr = RECUR (incr);
10404       break;
10405     }
10406
10407   TREE_VEC_ELT (declv, i) = decl;
10408   TREE_VEC_ELT (initv, i) = init;
10409   TREE_VEC_ELT (condv, i) = cond;
10410   TREE_VEC_ELT (incrv, i) = incr;
10411 #undef RECUR
10412 }
10413
10414 /* Like tsubst_copy for expressions, etc. but also does semantic
10415    processing.  */
10416
10417 static tree
10418 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
10419              bool integral_constant_expression_p)
10420 {
10421 #define RECUR(NODE)                             \
10422   tsubst_expr ((NODE), args, complain, in_decl, \
10423                integral_constant_expression_p)
10424
10425   tree stmt, tmp;
10426
10427   if (t == NULL_TREE || t == error_mark_node)
10428     return t;
10429
10430   if (EXPR_HAS_LOCATION (t))
10431     input_location = EXPR_LOCATION (t);
10432   if (STATEMENT_CODE_P (TREE_CODE (t)))
10433     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
10434
10435   switch (TREE_CODE (t))
10436     {
10437     case STATEMENT_LIST:
10438       {
10439         tree_stmt_iterator i;
10440         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
10441           RECUR (tsi_stmt (i));
10442         break;
10443       }
10444
10445     case CTOR_INITIALIZER:
10446       finish_mem_initializers (tsubst_initializer_list
10447                                (TREE_OPERAND (t, 0), args));
10448       break;
10449
10450     case RETURN_EXPR:
10451       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
10452       break;
10453
10454     case EXPR_STMT:
10455       tmp = RECUR (EXPR_STMT_EXPR (t));
10456       if (EXPR_STMT_STMT_EXPR_RESULT (t))
10457         finish_stmt_expr_expr (tmp, cur_stmt_expr);
10458       else
10459         finish_expr_stmt (tmp);
10460       break;
10461
10462     case USING_STMT:
10463       do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
10464       break;
10465
10466     case DECL_EXPR:
10467       {
10468         tree decl;
10469         tree init;
10470
10471         decl = DECL_EXPR_DECL (t);
10472         if (TREE_CODE (decl) == LABEL_DECL)
10473           finish_label_decl (DECL_NAME (decl));
10474         else if (TREE_CODE (decl) == USING_DECL)
10475           {
10476             tree scope = USING_DECL_SCOPE (decl);
10477             tree name = DECL_NAME (decl);
10478             tree decl;
10479
10480             scope = RECUR (scope);
10481             decl = lookup_qualified_name (scope, name,
10482                                           /*is_type_p=*/false,
10483                                           /*complain=*/false);
10484             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
10485               qualified_name_lookup_error (scope, name, decl, input_location);
10486             else
10487               do_local_using_decl (decl, scope, name);
10488           }
10489         else
10490           {
10491             init = DECL_INITIAL (decl);
10492             decl = tsubst (decl, args, complain, in_decl);
10493             if (decl != error_mark_node)
10494               {
10495                 /* By marking the declaration as instantiated, we avoid
10496                    trying to instantiate it.  Since instantiate_decl can't
10497                    handle local variables, and since we've already done
10498                    all that needs to be done, that's the right thing to
10499                    do.  */
10500                 if (TREE_CODE (decl) == VAR_DECL)
10501                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10502                 if (TREE_CODE (decl) == VAR_DECL
10503                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
10504                   /* Anonymous aggregates are a special case.  */
10505                   finish_anon_union (decl);
10506                 else
10507                   {
10508                     maybe_push_decl (decl);
10509                     if (TREE_CODE (decl) == VAR_DECL
10510                         && DECL_PRETTY_FUNCTION_P (decl))
10511                       {
10512                         /* For __PRETTY_FUNCTION__ we have to adjust the
10513                            initializer.  */
10514                         const char *const name
10515                           = cxx_printable_name (current_function_decl, 2);
10516                         init = cp_fname_init (name, &TREE_TYPE (decl));
10517                       }
10518                     else
10519                       {
10520                         tree t = RECUR (init);
10521
10522                         if (init && !t)
10523                           /* If we had an initializer but it
10524                              instantiated to nothing,
10525                              value-initialize the object.  This will
10526                              only occur when the initializer was a
10527                              pack expansion where the parameter packs
10528                              used in that expansion were of length
10529                              zero.  */
10530                           init = build_default_init (TREE_TYPE (decl),
10531                                                      NULL_TREE);
10532                         else
10533                           init = t;
10534                       }
10535
10536                     finish_decl (decl, init, NULL_TREE);
10537                   }
10538               }
10539           }
10540
10541         /* A DECL_EXPR can also be used as an expression, in the condition
10542            clause of an if/for/while construct.  */
10543         return decl;
10544       }
10545
10546     case FOR_STMT:
10547       stmt = begin_for_stmt ();
10548                           RECUR (FOR_INIT_STMT (t));
10549       finish_for_init_stmt (stmt);
10550       tmp = RECUR (FOR_COND (t));
10551       finish_for_cond (tmp, stmt);
10552       tmp = RECUR (FOR_EXPR (t));
10553       finish_for_expr (tmp, stmt);
10554       RECUR (FOR_BODY (t));
10555       finish_for_stmt (stmt);
10556       break;
10557
10558     case WHILE_STMT:
10559       stmt = begin_while_stmt ();
10560       tmp = RECUR (WHILE_COND (t));
10561       finish_while_stmt_cond (tmp, stmt);
10562       RECUR (WHILE_BODY (t));
10563       finish_while_stmt (stmt);
10564       break;
10565
10566     case DO_STMT:
10567       stmt = begin_do_stmt ();
10568       RECUR (DO_BODY (t));
10569       finish_do_body (stmt);
10570       tmp = RECUR (DO_COND (t));
10571       finish_do_stmt (tmp, stmt);
10572       break;
10573
10574     case IF_STMT:
10575       stmt = begin_if_stmt ();
10576       tmp = RECUR (IF_COND (t));
10577       finish_if_stmt_cond (tmp, stmt);
10578       RECUR (THEN_CLAUSE (t));
10579       finish_then_clause (stmt);
10580
10581       if (ELSE_CLAUSE (t))
10582         {
10583           begin_else_clause (stmt);
10584           RECUR (ELSE_CLAUSE (t));
10585           finish_else_clause (stmt);
10586         }
10587
10588       finish_if_stmt (stmt);
10589       break;
10590
10591     case BIND_EXPR:
10592       if (BIND_EXPR_BODY_BLOCK (t))
10593         stmt = begin_function_body ();
10594       else
10595         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
10596                                     ? BCS_TRY_BLOCK : 0);
10597
10598       RECUR (BIND_EXPR_BODY (t));
10599
10600       if (BIND_EXPR_BODY_BLOCK (t))
10601         finish_function_body (stmt);
10602       else
10603         finish_compound_stmt (stmt);
10604       break;
10605
10606     case BREAK_STMT:
10607       finish_break_stmt ();
10608       break;
10609
10610     case CONTINUE_STMT:
10611       finish_continue_stmt ();
10612       break;
10613
10614     case SWITCH_STMT:
10615       stmt = begin_switch_stmt ();
10616       tmp = RECUR (SWITCH_STMT_COND (t));
10617       finish_switch_cond (tmp, stmt);
10618       RECUR (SWITCH_STMT_BODY (t));
10619       finish_switch_stmt (stmt);
10620       break;
10621
10622     case CASE_LABEL_EXPR:
10623       finish_case_label (RECUR (CASE_LOW (t)),
10624                          RECUR (CASE_HIGH (t)));
10625       break;
10626
10627     case LABEL_EXPR:
10628       finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
10629       break;
10630
10631     case GOTO_EXPR:
10632       tmp = GOTO_DESTINATION (t);
10633       if (TREE_CODE (tmp) != LABEL_DECL)
10634         /* Computed goto's must be tsubst'd into.  On the other hand,
10635            non-computed gotos must not be; the identifier in question
10636            will have no binding.  */
10637         tmp = RECUR (tmp);
10638       else
10639         tmp = DECL_NAME (tmp);
10640       finish_goto_stmt (tmp);
10641       break;
10642
10643     case ASM_EXPR:
10644       tmp = finish_asm_stmt
10645         (ASM_VOLATILE_P (t),
10646          RECUR (ASM_STRING (t)),
10647          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
10648          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
10649          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
10650       {
10651         tree asm_expr = tmp;
10652         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
10653           asm_expr = TREE_OPERAND (asm_expr, 0);
10654         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
10655       }
10656       break;
10657
10658     case TRY_BLOCK:
10659       if (CLEANUP_P (t))
10660         {
10661           stmt = begin_try_block ();
10662           RECUR (TRY_STMTS (t));
10663           finish_cleanup_try_block (stmt);
10664           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10665         }
10666       else
10667         {
10668           tree compound_stmt = NULL_TREE;
10669
10670           if (FN_TRY_BLOCK_P (t))
10671             stmt = begin_function_try_block (&compound_stmt);
10672           else
10673             stmt = begin_try_block ();
10674
10675           RECUR (TRY_STMTS (t));
10676
10677           if (FN_TRY_BLOCK_P (t))
10678             finish_function_try_block (stmt);
10679           else
10680             finish_try_block (stmt);
10681
10682           RECUR (TRY_HANDLERS (t));
10683           if (FN_TRY_BLOCK_P (t))
10684             finish_function_handler_sequence (stmt, compound_stmt);
10685           else
10686             finish_handler_sequence (stmt);
10687         }
10688       break;
10689
10690     case HANDLER:
10691       {
10692         tree decl = HANDLER_PARMS (t);
10693
10694         if (decl)
10695           {
10696             decl = tsubst (decl, args, complain, in_decl);
10697             /* Prevent instantiate_decl from trying to instantiate
10698                this variable.  We've already done all that needs to be
10699                done.  */
10700             if (decl != error_mark_node)
10701               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10702           }
10703         stmt = begin_handler ();
10704         finish_handler_parms (decl, stmt);
10705         RECUR (HANDLER_BODY (t));
10706         finish_handler (stmt);
10707       }
10708       break;
10709
10710     case TAG_DEFN:
10711       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10712       break;
10713
10714     case STATIC_ASSERT:
10715       {
10716         tree condition = 
10717           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
10718                        args,
10719                        complain, in_decl,
10720                        /*integral_constant_expression_p=*/true);
10721         finish_static_assert (condition,
10722                               STATIC_ASSERT_MESSAGE (t),
10723                               STATIC_ASSERT_SOURCE_LOCATION (t),
10724                               /*member_p=*/false);
10725       }
10726       break;
10727
10728     case OMP_PARALLEL:
10729       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10730                                 args, complain, in_decl);
10731       stmt = begin_omp_parallel ();
10732       RECUR (OMP_PARALLEL_BODY (t));
10733       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10734         = OMP_PARALLEL_COMBINED (t);
10735       break;
10736
10737     case OMP_TASK:
10738       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
10739                                 args, complain, in_decl);
10740       stmt = begin_omp_task ();
10741       RECUR (OMP_TASK_BODY (t));
10742       finish_omp_task (tmp, stmt);
10743       break;
10744
10745     case OMP_FOR:
10746       {
10747         tree clauses, body, pre_body;
10748         tree declv, initv, condv, incrv;
10749         int i;
10750
10751         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10752                                       args, complain, in_decl);
10753         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10754         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10755         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10756         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10757
10758         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
10759           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
10760                                    &clauses, args, complain, in_decl,
10761                                    integral_constant_expression_p);
10762
10763         stmt = begin_omp_structured_block ();
10764
10765         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
10766           if (TREE_VEC_ELT (initv, i) == NULL
10767               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
10768             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
10769           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
10770             {
10771               tree init = RECUR (TREE_VEC_ELT (initv, i));
10772               gcc_assert (init == TREE_VEC_ELT (declv, i));
10773               TREE_VEC_ELT (initv, i) = NULL_TREE;
10774             }
10775           else
10776             {
10777               tree decl_expr = TREE_VEC_ELT (initv, i);
10778               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
10779               gcc_assert (init != NULL);
10780               TREE_VEC_ELT (initv, i) = RECUR (init);
10781               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
10782               RECUR (decl_expr);
10783               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
10784             }
10785
10786         pre_body = push_stmt_list ();
10787         RECUR (OMP_FOR_PRE_BODY (t));
10788         pre_body = pop_stmt_list (pre_body);
10789
10790         body = push_stmt_list ();
10791         RECUR (OMP_FOR_BODY (t));
10792         body = pop_stmt_list (body);
10793
10794         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
10795                             body, pre_body, clauses);
10796
10797         add_stmt (finish_omp_structured_block (stmt));
10798       }
10799       break;
10800
10801     case OMP_SECTIONS:
10802     case OMP_SINGLE:
10803       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10804       stmt = push_stmt_list ();
10805       RECUR (OMP_BODY (t));
10806       stmt = pop_stmt_list (stmt);
10807
10808       t = copy_node (t);
10809       OMP_BODY (t) = stmt;
10810       OMP_CLAUSES (t) = tmp;
10811       add_stmt (t);
10812       break;
10813
10814     case OMP_SECTION:
10815     case OMP_CRITICAL:
10816     case OMP_MASTER:
10817     case OMP_ORDERED:
10818       stmt = push_stmt_list ();
10819       RECUR (OMP_BODY (t));
10820       stmt = pop_stmt_list (stmt);
10821
10822       t = copy_node (t);
10823       OMP_BODY (t) = stmt;
10824       add_stmt (t);
10825       break;
10826
10827     case OMP_ATOMIC:
10828       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
10829       {
10830         tree op1 = TREE_OPERAND (t, 1);
10831         tree lhs = RECUR (TREE_OPERAND (op1, 0));
10832         tree rhs = RECUR (TREE_OPERAND (op1, 1));
10833         finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10834       }
10835       break;
10836
10837     case EXPR_PACK_EXPANSION:
10838       error ("invalid use of pack expansion expression");
10839       return error_mark_node;
10840
10841     case NONTYPE_ARGUMENT_PACK:
10842       error ("use %<...%> to expand argument pack");
10843       return error_mark_node;
10844
10845     default:
10846       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10847
10848       return tsubst_copy_and_build (t, args, complain, in_decl,
10849                                     /*function_p=*/false,
10850                                     integral_constant_expression_p);
10851     }
10852
10853   return NULL_TREE;
10854 #undef RECUR
10855 }
10856
10857 /* T is a postfix-expression that is not being used in a function
10858    call.  Return the substituted version of T.  */
10859
10860 static tree
10861 tsubst_non_call_postfix_expression (tree t, tree args,
10862                                     tsubst_flags_t complain,
10863                                     tree in_decl)
10864 {
10865   if (TREE_CODE (t) == SCOPE_REF)
10866     t = tsubst_qualified_id (t, args, complain, in_decl,
10867                              /*done=*/false, /*address_p=*/false);
10868   else
10869     t = tsubst_copy_and_build (t, args, complain, in_decl,
10870                                /*function_p=*/false,
10871                                /*integral_constant_expression_p=*/false);
10872
10873   return t;
10874 }
10875
10876 /* Like tsubst but deals with expressions and performs semantic
10877    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
10878
10879 tree
10880 tsubst_copy_and_build (tree t,
10881                        tree args,
10882                        tsubst_flags_t complain,
10883                        tree in_decl,
10884                        bool function_p,
10885                        bool integral_constant_expression_p)
10886 {
10887 #define RECUR(NODE)                                             \
10888   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
10889                          /*function_p=*/false,                  \
10890                          integral_constant_expression_p)
10891
10892   tree op1;
10893
10894   if (t == NULL_TREE || t == error_mark_node)
10895     return t;
10896
10897   switch (TREE_CODE (t))
10898     {
10899     case USING_DECL:
10900       t = DECL_NAME (t);
10901       /* Fall through.  */
10902     case IDENTIFIER_NODE:
10903       {
10904         tree decl;
10905         cp_id_kind idk;
10906         bool non_integral_constant_expression_p;
10907         const char *error_msg;
10908
10909         if (IDENTIFIER_TYPENAME_P (t))
10910           {
10911             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10912             t = mangle_conv_op_name_for_type (new_type);
10913           }
10914
10915         /* Look up the name.  */
10916         decl = lookup_name (t);
10917
10918         /* By convention, expressions use ERROR_MARK_NODE to indicate
10919            failure, not NULL_TREE.  */
10920         if (decl == NULL_TREE)
10921           decl = error_mark_node;
10922
10923         decl = finish_id_expression (t, decl, NULL_TREE,
10924                                      &idk,
10925                                      integral_constant_expression_p,
10926                                      /*allow_non_integral_constant_expression_p=*/false,
10927                                      &non_integral_constant_expression_p,
10928                                      /*template_p=*/false,
10929                                      /*done=*/true,
10930                                      /*address_p=*/false,
10931                                      /*template_arg_p=*/false,
10932                                      &error_msg,
10933                                      input_location);
10934         if (error_msg)
10935           error (error_msg);
10936         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10937           decl = unqualified_name_lookup_error (decl);
10938         return decl;
10939       }
10940
10941     case TEMPLATE_ID_EXPR:
10942       {
10943         tree object;
10944         tree templ = RECUR (TREE_OPERAND (t, 0));
10945         tree targs = TREE_OPERAND (t, 1);
10946
10947         if (targs)
10948           targs = tsubst_template_args (targs, args, complain, in_decl);
10949
10950         if (TREE_CODE (templ) == COMPONENT_REF)
10951           {
10952             object = TREE_OPERAND (templ, 0);
10953             templ = TREE_OPERAND (templ, 1);
10954           }
10955         else
10956           object = NULL_TREE;
10957         templ = lookup_template_function (templ, targs);
10958
10959         if (object)
10960           return build3 (COMPONENT_REF, TREE_TYPE (templ),
10961                          object, templ, NULL_TREE);
10962         else
10963           return baselink_for_fns (templ);
10964       }
10965
10966     case INDIRECT_REF:
10967       {
10968         tree r = RECUR (TREE_OPERAND (t, 0));
10969
10970         if (REFERENCE_REF_P (t))
10971           {
10972             /* A type conversion to reference type will be enclosed in
10973                such an indirect ref, but the substitution of the cast
10974                will have also added such an indirect ref.  */
10975             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10976               r = convert_from_reference (r);
10977           }
10978         else
10979           r = build_x_indirect_ref (r, "unary *", complain);
10980         return r;
10981       }
10982
10983     case NOP_EXPR:
10984       return build_nop
10985         (tsubst (TREE_TYPE (t), args, complain, in_decl),
10986          RECUR (TREE_OPERAND (t, 0)));
10987
10988     case CAST_EXPR:
10989     case REINTERPRET_CAST_EXPR:
10990     case CONST_CAST_EXPR:
10991     case DYNAMIC_CAST_EXPR:
10992     case STATIC_CAST_EXPR:
10993       {
10994         tree type;
10995         tree op;
10996
10997         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10998         if (integral_constant_expression_p
10999             && !cast_valid_in_integral_constant_expression_p (type))
11000           {
11001             if (complain & tf_error)
11002               error ("a cast to a type other than an integral or "
11003                      "enumeration type cannot appear in a constant-expression");
11004             return error_mark_node; 
11005           }
11006
11007         op = RECUR (TREE_OPERAND (t, 0));
11008
11009         switch (TREE_CODE (t))
11010           {
11011           case CAST_EXPR:
11012             return build_functional_cast (type, op, complain);
11013           case REINTERPRET_CAST_EXPR:
11014             return build_reinterpret_cast (type, op, complain);
11015           case CONST_CAST_EXPR:
11016             return build_const_cast (type, op, complain);
11017           case DYNAMIC_CAST_EXPR:
11018             return build_dynamic_cast (type, op, complain);
11019           case STATIC_CAST_EXPR:
11020             return build_static_cast (type, op, complain);
11021           default:
11022             gcc_unreachable ();
11023           }
11024       }
11025
11026     case POSTDECREMENT_EXPR:
11027     case POSTINCREMENT_EXPR:
11028       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11029                                                 args, complain, in_decl);
11030       return build_x_unary_op (TREE_CODE (t), op1, complain);
11031
11032     case PREDECREMENT_EXPR:
11033     case PREINCREMENT_EXPR:
11034     case NEGATE_EXPR:
11035     case BIT_NOT_EXPR:
11036     case ABS_EXPR:
11037     case TRUTH_NOT_EXPR:
11038     case UNARY_PLUS_EXPR:  /* Unary + */
11039     case REALPART_EXPR:
11040     case IMAGPART_EXPR:
11041       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
11042                                complain);
11043
11044     case ADDR_EXPR:
11045       op1 = TREE_OPERAND (t, 0);
11046       if (TREE_CODE (op1) == SCOPE_REF)
11047         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
11048                                    /*done=*/true, /*address_p=*/true);
11049       else
11050         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
11051                                                   in_decl);
11052       if (TREE_CODE (op1) == LABEL_DECL)
11053         return finish_label_address_expr (DECL_NAME (op1));
11054       return build_x_unary_op (ADDR_EXPR, op1, complain);
11055
11056     case PLUS_EXPR:
11057     case MINUS_EXPR:
11058     case MULT_EXPR:
11059     case TRUNC_DIV_EXPR:
11060     case CEIL_DIV_EXPR:
11061     case FLOOR_DIV_EXPR:
11062     case ROUND_DIV_EXPR:
11063     case EXACT_DIV_EXPR:
11064     case BIT_AND_EXPR:
11065     case BIT_IOR_EXPR:
11066     case BIT_XOR_EXPR:
11067     case TRUNC_MOD_EXPR:
11068     case FLOOR_MOD_EXPR:
11069     case TRUTH_ANDIF_EXPR:
11070     case TRUTH_ORIF_EXPR:
11071     case TRUTH_AND_EXPR:
11072     case TRUTH_OR_EXPR:
11073     case RSHIFT_EXPR:
11074     case LSHIFT_EXPR:
11075     case RROTATE_EXPR:
11076     case LROTATE_EXPR:
11077     case EQ_EXPR:
11078     case NE_EXPR:
11079     case MAX_EXPR:
11080     case MIN_EXPR:
11081     case LE_EXPR:
11082     case GE_EXPR:
11083     case LT_EXPR:
11084     case GT_EXPR:
11085     case MEMBER_REF:
11086     case DOTSTAR_EXPR:
11087       return build_x_binary_op
11088         (TREE_CODE (t),
11089          RECUR (TREE_OPERAND (t, 0)),
11090          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
11091           ? ERROR_MARK
11092           : TREE_CODE (TREE_OPERAND (t, 0))),
11093          RECUR (TREE_OPERAND (t, 1)),
11094          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
11095           ? ERROR_MARK
11096           : TREE_CODE (TREE_OPERAND (t, 1))),
11097          /*overloaded_p=*/NULL,
11098          complain);
11099
11100     case SCOPE_REF:
11101       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
11102                                   /*address_p=*/false);
11103     case ARRAY_REF:
11104       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11105                                                 args, complain, in_decl);
11106       return build_x_binary_op (ARRAY_REF, op1,
11107                                 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
11108                                  ? ERROR_MARK
11109                                  : TREE_CODE (TREE_OPERAND (t, 0))),
11110                                 RECUR (TREE_OPERAND (t, 1)),
11111                                 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
11112                                  ? ERROR_MARK
11113                                  : TREE_CODE (TREE_OPERAND (t, 1))),
11114                                 /*overloaded_p=*/NULL,
11115                                 complain);
11116
11117     case SIZEOF_EXPR:
11118       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
11119         return tsubst_copy (t, args, complain, in_decl);
11120       /* Fall through */
11121       
11122     case ALIGNOF_EXPR:
11123       op1 = TREE_OPERAND (t, 0);
11124       if (!args)
11125         {
11126           /* When there are no ARGS, we are trying to evaluate a
11127              non-dependent expression from the parser.  Trying to do
11128              the substitutions may not work.  */
11129           if (!TYPE_P (op1))
11130             op1 = TREE_TYPE (op1);
11131         }
11132       else
11133         {
11134           ++skip_evaluation;
11135           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
11136                                        /*function_p=*/false,
11137                                        /*integral_constant_expression_p=*/false);
11138           --skip_evaluation;
11139         }
11140       if (TYPE_P (op1))
11141         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
11142                                            complain & tf_error);
11143       else
11144         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
11145                                            complain & tf_error);
11146
11147     case MODOP_EXPR:
11148       {
11149         tree r = build_x_modify_expr
11150           (RECUR (TREE_OPERAND (t, 0)),
11151            TREE_CODE (TREE_OPERAND (t, 1)),
11152            RECUR (TREE_OPERAND (t, 2)),
11153            complain);
11154         /* TREE_NO_WARNING must be set if either the expression was
11155            parenthesized or it uses an operator such as >>= rather
11156            than plain assignment.  In the former case, it was already
11157            set and must be copied.  In the latter case,
11158            build_x_modify_expr sets it and it must not be reset
11159            here.  */
11160         if (TREE_NO_WARNING (t))
11161           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
11162         return r;
11163       }
11164
11165     case ARROW_EXPR:
11166       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11167                                                 args, complain, in_decl);
11168       /* Remember that there was a reference to this entity.  */
11169       if (DECL_P (op1))
11170         mark_used (op1);
11171       return build_x_arrow (op1);
11172
11173     case NEW_EXPR:
11174       {
11175         tree init = RECUR (TREE_OPERAND (t, 3));
11176
11177         if (TREE_OPERAND (t, 3) && !init)
11178           /* If there was an initializer in the original tree, but
11179              it instantiated to an empty list, then we should pass on
11180              VOID_ZERO_NODE to tell build_new that it was an empty
11181              initializer () rather than no initializer.  This can only
11182              happen when the initializer is a pack expansion whose
11183              parameter packs are of length zero.  */
11184           init = void_zero_node;
11185
11186         return build_new
11187           (RECUR (TREE_OPERAND (t, 0)),
11188            RECUR (TREE_OPERAND (t, 1)),
11189            RECUR (TREE_OPERAND (t, 2)),
11190            init,
11191            NEW_EXPR_USE_GLOBAL (t),
11192            complain);
11193       }
11194
11195     case DELETE_EXPR:
11196      return delete_sanity
11197        (RECUR (TREE_OPERAND (t, 0)),
11198         RECUR (TREE_OPERAND (t, 1)),
11199         DELETE_EXPR_USE_VEC (t),
11200         DELETE_EXPR_USE_GLOBAL (t));
11201
11202     case COMPOUND_EXPR:
11203       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
11204                                     RECUR (TREE_OPERAND (t, 1)),
11205                                     complain);
11206
11207     case CALL_EXPR:
11208       {
11209         tree function;
11210         tree call_args;
11211         bool qualified_p;
11212         bool koenig_p;
11213
11214         function = CALL_EXPR_FN (t);
11215         /* When we parsed the expression,  we determined whether or
11216            not Koenig lookup should be performed.  */
11217         koenig_p = KOENIG_LOOKUP_P (t);
11218         if (TREE_CODE (function) == SCOPE_REF)
11219           {
11220             qualified_p = true;
11221             function = tsubst_qualified_id (function, args, complain, in_decl,
11222                                             /*done=*/false,
11223                                             /*address_p=*/false);
11224           }
11225         else
11226           {
11227             if (TREE_CODE (function) == COMPONENT_REF)
11228               {
11229                 tree op = TREE_OPERAND (function, 1);
11230
11231                 qualified_p = (TREE_CODE (op) == SCOPE_REF
11232                                || (BASELINK_P (op)
11233                                    && BASELINK_QUALIFIED_P (op)));
11234               }
11235             else
11236               qualified_p = false;
11237
11238             function = tsubst_copy_and_build (function, args, complain,
11239                                               in_decl,
11240                                               !qualified_p,
11241                                               integral_constant_expression_p);
11242
11243             if (BASELINK_P (function))
11244               qualified_p = true;
11245           }
11246
11247         /* FIXME:  Rewrite this so as not to construct an arglist.  */
11248         call_args = RECUR (CALL_EXPR_ARGS (t));
11249
11250         /* We do not perform argument-dependent lookup if normal
11251            lookup finds a non-function, in accordance with the
11252            expected resolution of DR 218.  */
11253         if (koenig_p
11254             && ((is_overloaded_fn (function)
11255                  /* If lookup found a member function, the Koenig lookup is
11256                     not appropriate, even if an unqualified-name was used
11257                     to denote the function.  */
11258                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
11259                 || TREE_CODE (function) == IDENTIFIER_NODE))
11260           function = perform_koenig_lookup (function, call_args);
11261
11262         if (TREE_CODE (function) == IDENTIFIER_NODE)
11263           {
11264             unqualified_name_lookup_error (function);
11265             return error_mark_node;
11266           }
11267
11268         /* Remember that there was a reference to this entity.  */
11269         if (DECL_P (function))
11270           mark_used (function);
11271
11272         if (TREE_CODE (function) == OFFSET_REF)
11273           return build_offset_ref_call_from_tree (function, call_args);
11274         if (TREE_CODE (function) == COMPONENT_REF)
11275           {
11276             if (!BASELINK_P (TREE_OPERAND (function, 1)))
11277               return finish_call_expr (function, call_args,
11278                                        /*disallow_virtual=*/false,
11279                                        /*koenig_p=*/false,
11280                                        complain);
11281             else
11282               return (build_new_method_call
11283                       (TREE_OPERAND (function, 0),
11284                        TREE_OPERAND (function, 1),
11285                        call_args, NULL_TREE,
11286                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
11287                        /*fn_p=*/NULL,
11288                        complain));
11289           }
11290         return finish_call_expr (function, call_args,
11291                                  /*disallow_virtual=*/qualified_p,
11292                                  koenig_p,
11293                                  complain);
11294       }
11295
11296     case COND_EXPR:
11297       return build_x_conditional_expr
11298         (RECUR (TREE_OPERAND (t, 0)),
11299          RECUR (TREE_OPERAND (t, 1)),
11300          RECUR (TREE_OPERAND (t, 2)),
11301          complain);
11302
11303     case PSEUDO_DTOR_EXPR:
11304       return finish_pseudo_destructor_expr
11305         (RECUR (TREE_OPERAND (t, 0)),
11306          RECUR (TREE_OPERAND (t, 1)),
11307          RECUR (TREE_OPERAND (t, 2)));
11308
11309     case TREE_LIST:
11310       {
11311         tree purpose, value, chain;
11312
11313         if (t == void_list_node)
11314           return t;
11315
11316         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
11317             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
11318           {
11319             /* We have pack expansions, so expand those and
11320                create a new list out of it.  */
11321             tree purposevec = NULL_TREE;
11322             tree valuevec = NULL_TREE;
11323             tree chain;
11324             int i, len = -1;
11325
11326             /* Expand the argument expressions.  */
11327             if (TREE_PURPOSE (t))
11328               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
11329                                                  complain, in_decl);
11330             if (TREE_VALUE (t))
11331               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
11332                                                complain, in_decl);
11333
11334             /* Build the rest of the list.  */
11335             chain = TREE_CHAIN (t);
11336             if (chain && chain != void_type_node)
11337               chain = RECUR (chain);
11338
11339             /* Determine the number of arguments.  */
11340             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
11341               {
11342                 len = TREE_VEC_LENGTH (purposevec);
11343                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
11344               }
11345             else if (TREE_CODE (valuevec) == TREE_VEC)
11346               len = TREE_VEC_LENGTH (valuevec);
11347             else
11348               {
11349                 /* Since we only performed a partial substitution into
11350                    the argument pack, we only return a single list
11351                    node.  */
11352                 if (purposevec == TREE_PURPOSE (t)
11353                     && valuevec == TREE_VALUE (t)
11354                     && chain == TREE_CHAIN (t))
11355                   return t;
11356
11357                 return tree_cons (purposevec, valuevec, chain);
11358               }
11359             
11360             /* Convert the argument vectors into a TREE_LIST */
11361             i = len;
11362             while (i > 0)
11363               {
11364                 /* Grab the Ith values.  */
11365                 i--;
11366                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
11367                                      : NULL_TREE;
11368                 value 
11369                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
11370                              : NULL_TREE;
11371
11372                 /* Build the list (backwards).  */
11373                 chain = tree_cons (purpose, value, chain);
11374               }
11375
11376             return chain;
11377           }
11378
11379         purpose = TREE_PURPOSE (t);
11380         if (purpose)
11381           purpose = RECUR (purpose);
11382         value = TREE_VALUE (t);
11383         if (value)
11384           value = RECUR (value);
11385         chain = TREE_CHAIN (t);
11386         if (chain && chain != void_type_node)
11387           chain = RECUR (chain);
11388         if (purpose == TREE_PURPOSE (t)
11389             && value == TREE_VALUE (t)
11390             && chain == TREE_CHAIN (t))
11391           return t;
11392         return tree_cons (purpose, value, chain);
11393       }
11394
11395     case COMPONENT_REF:
11396       {
11397         tree object;
11398         tree object_type;
11399         tree member;
11400
11401         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11402                                                      args, complain, in_decl);
11403         /* Remember that there was a reference to this entity.  */
11404         if (DECL_P (object))
11405           mark_used (object);
11406         object_type = TREE_TYPE (object);
11407
11408         member = TREE_OPERAND (t, 1);
11409         if (BASELINK_P (member))
11410           member = tsubst_baselink (member,
11411                                     non_reference (TREE_TYPE (object)),
11412                                     args, complain, in_decl);
11413         else
11414           member = tsubst_copy (member, args, complain, in_decl);
11415         if (member == error_mark_node)
11416           return error_mark_node;
11417
11418         if (object_type && !CLASS_TYPE_P (object_type))
11419           {
11420             if (SCALAR_TYPE_P (object_type))
11421               {
11422                 tree s = NULL_TREE;
11423                 tree dtor = member;
11424
11425                 if (TREE_CODE (dtor) == SCOPE_REF)
11426                   {
11427                     s = TREE_OPERAND (dtor, 0);
11428                     dtor = TREE_OPERAND (dtor, 1);
11429                   }
11430                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
11431                   {
11432                     dtor = TREE_OPERAND (dtor, 0);
11433                     if (TYPE_P (dtor))
11434                       return finish_pseudo_destructor_expr (object, s, dtor);
11435                   }
11436               }
11437           }
11438         else if (TREE_CODE (member) == SCOPE_REF
11439                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
11440           {
11441             tree tmpl;
11442             tree args;
11443
11444             /* Lookup the template functions now that we know what the
11445                scope is.  */
11446             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
11447             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
11448             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
11449                                             /*is_type_p=*/false,
11450                                             /*complain=*/false);
11451             if (BASELINK_P (member))
11452               {
11453                 BASELINK_FUNCTIONS (member)
11454                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
11455                               args);
11456                 member = (adjust_result_of_qualified_name_lookup
11457                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
11458                            object_type));
11459               }
11460             else
11461               {
11462                 qualified_name_lookup_error (object_type, tmpl, member,
11463                                              input_location);
11464                 return error_mark_node;
11465               }
11466           }
11467         else if (TREE_CODE (member) == SCOPE_REF
11468                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
11469                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
11470           {
11471             if (complain & tf_error)
11472               {
11473                 if (TYPE_P (TREE_OPERAND (member, 0)))
11474                   error ("%qT is not a class or namespace",
11475                          TREE_OPERAND (member, 0));
11476                 else
11477                   error ("%qD is not a class or namespace",
11478                          TREE_OPERAND (member, 0));
11479               }
11480             return error_mark_node;
11481           }
11482         else if (TREE_CODE (member) == FIELD_DECL)
11483           return finish_non_static_data_member (member, object, NULL_TREE);
11484
11485         return finish_class_member_access_expr (object, member,
11486                                                 /*template_p=*/false,
11487                                                 complain);
11488       }
11489
11490     case THROW_EXPR:
11491       return build_throw
11492         (RECUR (TREE_OPERAND (t, 0)));
11493
11494     case CONSTRUCTOR:
11495       {
11496         VEC(constructor_elt,gc) *n;
11497         constructor_elt *ce;
11498         unsigned HOST_WIDE_INT idx;
11499         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11500         bool process_index_p;
11501         int newlen;
11502         bool need_copy_p = false;
11503         tree r;
11504
11505         if (type == error_mark_node)
11506           return error_mark_node;
11507
11508         /* digest_init will do the wrong thing if we let it.  */
11509         if (type && TYPE_PTRMEMFUNC_P (type))
11510           return t;
11511
11512         /* We do not want to process the index of aggregate
11513            initializers as they are identifier nodes which will be
11514            looked up by digest_init.  */
11515         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
11516
11517         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
11518         newlen = VEC_length (constructor_elt, n);
11519         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
11520           {
11521             if (ce->index && process_index_p)
11522               ce->index = RECUR (ce->index);
11523
11524             if (PACK_EXPANSION_P (ce->value))
11525               {
11526                 /* Substitute into the pack expansion.  */
11527                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
11528                                                   in_decl);
11529
11530                 if (ce->value == error_mark_node)
11531                   ;
11532                 else if (TREE_VEC_LENGTH (ce->value) == 1)
11533                   /* Just move the argument into place.  */
11534                   ce->value = TREE_VEC_ELT (ce->value, 0);
11535                 else
11536                   {
11537                     /* Update the length of the final CONSTRUCTOR
11538                        arguments vector, and note that we will need to
11539                        copy.*/
11540                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
11541                     need_copy_p = true;
11542                   }
11543               }
11544             else
11545               ce->value = RECUR (ce->value);
11546           }
11547
11548         if (need_copy_p)
11549           {
11550             VEC(constructor_elt,gc) *old_n = n;
11551
11552             n = VEC_alloc (constructor_elt, gc, newlen);
11553             for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce); 
11554                  idx++)
11555               {
11556                 if (TREE_CODE (ce->value) == TREE_VEC)
11557                   {
11558                     int i, len = TREE_VEC_LENGTH (ce->value);
11559                     for (i = 0; i < len; ++i)
11560                       CONSTRUCTOR_APPEND_ELT (n, 0,
11561                                               TREE_VEC_ELT (ce->value, i));
11562                   }
11563                 else
11564                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
11565               }
11566           }
11567
11568         r = build_constructor (init_list_type_node, n);
11569
11570         if (TREE_HAS_CONSTRUCTOR (t))
11571           return finish_compound_literal (type, r);
11572
11573         return r;
11574       }
11575
11576     case TYPEID_EXPR:
11577       {
11578         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
11579         if (TYPE_P (operand_0))
11580           return get_typeid (operand_0);
11581         return build_typeid (operand_0);
11582       }
11583
11584     case VAR_DECL:
11585       if (!args)
11586         return t;
11587       /* Fall through */
11588
11589     case PARM_DECL:
11590       {
11591         tree r = tsubst_copy (t, args, complain, in_decl);
11592
11593         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
11594           /* If the original type was a reference, we'll be wrapped in
11595              the appropriate INDIRECT_REF.  */
11596           r = convert_from_reference (r);
11597         return r;
11598       }
11599
11600     case VA_ARG_EXPR:
11601       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
11602                              tsubst_copy (TREE_TYPE (t), args, complain,
11603                                           in_decl));
11604
11605     case OFFSETOF_EXPR:
11606       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
11607
11608     case TRAIT_EXPR:
11609       {
11610         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
11611                                   complain, in_decl);
11612
11613         tree type2 = TRAIT_EXPR_TYPE2 (t);
11614         if (type2)
11615           type2 = tsubst_copy (type2, args, complain, in_decl);
11616         
11617         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
11618       }
11619
11620     case STMT_EXPR:
11621       {
11622         tree old_stmt_expr = cur_stmt_expr;
11623         tree stmt_expr = begin_stmt_expr ();
11624
11625         cur_stmt_expr = stmt_expr;
11626         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
11627                      integral_constant_expression_p);
11628         stmt_expr = finish_stmt_expr (stmt_expr, false);
11629         cur_stmt_expr = old_stmt_expr;
11630
11631         return stmt_expr;
11632       }
11633
11634     case CONST_DECL:
11635       t = tsubst_copy (t, args, complain, in_decl);
11636       /* As in finish_id_expression, we resolve enumeration constants
11637          to their underlying values.  */
11638       if (TREE_CODE (t) == CONST_DECL)
11639         {
11640           used_types_insert (TREE_TYPE (t));
11641           return DECL_INITIAL (t);
11642         }
11643       return t;
11644
11645     default:
11646       /* Handle Objective-C++ constructs, if appropriate.  */
11647       {
11648         tree subst
11649           = objcp_tsubst_copy_and_build (t, args, complain,
11650                                          in_decl, /*function_p=*/false);
11651         if (subst)
11652           return subst;
11653       }
11654       return tsubst_copy (t, args, complain, in_decl);
11655     }
11656
11657 #undef RECUR
11658 }
11659
11660 /* Verify that the instantiated ARGS are valid. For type arguments,
11661    make sure that the type's linkage is ok. For non-type arguments,
11662    make sure they are constants if they are integral or enumerations.
11663    Emit an error under control of COMPLAIN, and return TRUE on error.  */
11664
11665 static bool
11666 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
11667 {
11668   int ix, len = DECL_NTPARMS (tmpl);
11669   bool result = false;
11670
11671   for (ix = 0; ix != len; ix++)
11672     {
11673       tree t = TREE_VEC_ELT (args, ix);
11674
11675       if (TYPE_P (t))
11676         {
11677           /* [basic.link]: A name with no linkage (notably, the name
11678              of a class or enumeration declared in a local scope)
11679              shall not be used to declare an entity with linkage.
11680              This implies that names with no linkage cannot be used as
11681              template arguments.  */
11682           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
11683
11684           if (nt)
11685             {
11686               /* DR 488 makes use of a type with no linkage cause
11687                  type deduction to fail.  */
11688               if (complain & tf_error)
11689                 {
11690                   if (TYPE_ANONYMOUS_P (nt))
11691                     error ("%qT is/uses anonymous type", t);
11692                   else
11693                     error ("template argument for %qD uses local type %qT",
11694                            tmpl, t);
11695                 }
11696               result = true;
11697             }
11698           /* In order to avoid all sorts of complications, we do not
11699              allow variably-modified types as template arguments.  */
11700           else if (variably_modified_type_p (t, NULL_TREE))
11701             {
11702               if (complain & tf_error)
11703                 error ("%qT is a variably modified type", t);
11704               result = true;
11705             }
11706         }
11707       /* A non-type argument of integral or enumerated type must be a
11708          constant.  */
11709       else if (TREE_TYPE (t)
11710                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
11711                && !TREE_CONSTANT (t))
11712         {
11713           if (complain & tf_error)
11714             error ("integral expression %qE is not constant", t);
11715           result = true;
11716         }
11717     }
11718   if (result && (complain & tf_error))
11719     error ("  trying to instantiate %qD", tmpl);
11720   return result;
11721 }
11722
11723 /* Instantiate the indicated variable or function template TMPL with
11724    the template arguments in TARG_PTR.  */
11725
11726 tree
11727 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
11728 {
11729   tree fndecl;
11730   tree gen_tmpl;
11731   tree spec;
11732   HOST_WIDE_INT saved_processing_template_decl;
11733
11734   if (tmpl == error_mark_node)
11735     return error_mark_node;
11736
11737   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11738
11739   /* If this function is a clone, handle it specially.  */
11740   if (DECL_CLONED_FUNCTION_P (tmpl))
11741     {
11742       tree spec;
11743       tree clone;
11744
11745       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11746                                    complain);
11747       if (spec == error_mark_node)
11748         return error_mark_node;
11749
11750       /* Look for the clone.  */
11751       FOR_EACH_CLONE (clone, spec)
11752         if (DECL_NAME (clone) == DECL_NAME (tmpl))
11753           return clone;
11754       /* We should always have found the clone by now.  */
11755       gcc_unreachable ();
11756       return NULL_TREE;
11757     }
11758
11759   /* Check to see if we already have this specialization.  */
11760   spec = retrieve_specialization (tmpl, targ_ptr,
11761                                   /*class_specializations_p=*/false);
11762   if (spec != NULL_TREE)
11763     return spec;
11764
11765   gen_tmpl = most_general_template (tmpl);
11766   if (tmpl != gen_tmpl)
11767     {
11768       /* The TMPL is a partial instantiation.  To get a full set of
11769          arguments we must add the arguments used to perform the
11770          partial instantiation.  */
11771       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11772                                               targ_ptr);
11773
11774       /* Check to see if we already have this specialization.  */
11775       spec = retrieve_specialization (gen_tmpl, targ_ptr,
11776                                       /*class_specializations_p=*/false);
11777       if (spec != NULL_TREE)
11778         return spec;
11779     }
11780
11781   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11782                                complain))
11783     return error_mark_node;
11784
11785   /* We are building a FUNCTION_DECL, during which the access of its
11786      parameters and return types have to be checked.  However this
11787      FUNCTION_DECL which is the desired context for access checking
11788      is not built yet.  We solve this chicken-and-egg problem by
11789      deferring all checks until we have the FUNCTION_DECL.  */
11790   push_deferring_access_checks (dk_deferred);
11791
11792   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11793      (because, for example, we have encountered a non-dependent
11794      function call in the body of a template function and must now
11795      determine which of several overloaded functions will be called),
11796      within the instantiation itself we are not processing a
11797      template.  */  
11798   saved_processing_template_decl = processing_template_decl;
11799   processing_template_decl = 0;
11800   /* Substitute template parameters to obtain the specialization.  */
11801   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11802                    targ_ptr, complain, gen_tmpl);
11803   processing_template_decl = saved_processing_template_decl;
11804   if (fndecl == error_mark_node)
11805     return error_mark_node;
11806
11807   /* Now we know the specialization, compute access previously
11808      deferred.  */
11809   push_access_scope (fndecl);
11810   perform_deferred_access_checks ();
11811   pop_access_scope (fndecl);
11812   pop_deferring_access_checks ();
11813
11814   /* The DECL_TI_TEMPLATE should always be the immediate parent
11815      template, not the most general template.  */
11816   DECL_TI_TEMPLATE (fndecl) = tmpl;
11817
11818   /* If we've just instantiated the main entry point for a function,
11819      instantiate all the alternate entry points as well.  We do this
11820      by cloning the instantiation of the main entry point, not by
11821      instantiating the template clones.  */
11822   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11823     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11824
11825   return fndecl;
11826 }
11827
11828 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
11829    arguments that are being used when calling it.  TARGS is a vector
11830    into which the deduced template arguments are placed.
11831
11832    Return zero for success, 2 for an incomplete match that doesn't resolve
11833    all the types, and 1 for complete failure.  An error message will be
11834    printed only for an incomplete match.
11835
11836    If FN is a conversion operator, or we are trying to produce a specific
11837    specialization, RETURN_TYPE is the return type desired.
11838
11839    The EXPLICIT_TARGS are explicit template arguments provided via a
11840    template-id.
11841
11842    The parameter STRICT is one of:
11843
11844    DEDUCE_CALL:
11845      We are deducing arguments for a function call, as in
11846      [temp.deduct.call].
11847
11848    DEDUCE_CONV:
11849      We are deducing arguments for a conversion function, as in
11850      [temp.deduct.conv].
11851
11852    DEDUCE_EXACT:
11853      We are deducing arguments when doing an explicit instantiation
11854      as in [temp.explicit], when determining an explicit specialization
11855      as in [temp.expl.spec], or when taking the address of a function
11856      template, as in [temp.deduct.funcaddr].  */
11857
11858 int
11859 fn_type_unification (tree fn,
11860                      tree explicit_targs,
11861                      tree targs,
11862                      tree args,
11863                      tree return_type,
11864                      unification_kind_t strict,
11865                      int flags)
11866 {
11867   tree parms;
11868   tree fntype;
11869   int result;
11870   bool incomplete_argument_packs_p = false;
11871
11872   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11873
11874   fntype = TREE_TYPE (fn);
11875   if (explicit_targs)
11876     {
11877       /* [temp.deduct]
11878
11879          The specified template arguments must match the template
11880          parameters in kind (i.e., type, nontype, template), and there
11881          must not be more arguments than there are parameters;
11882          otherwise type deduction fails.
11883
11884          Nontype arguments must match the types of the corresponding
11885          nontype template parameters, or must be convertible to the
11886          types of the corresponding nontype parameters as specified in
11887          _temp.arg.nontype_, otherwise type deduction fails.
11888
11889          All references in the function type of the function template
11890          to the corresponding template parameters are replaced by the
11891          specified template argument values.  If a substitution in a
11892          template parameter or in the function type of the function
11893          template results in an invalid type, type deduction fails.  */
11894       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11895       int i, len = TREE_VEC_LENGTH (tparms);
11896       tree converted_args;
11897       bool incomplete = false;
11898
11899       if (explicit_targs == error_mark_node)
11900         return 1;
11901
11902       converted_args
11903         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11904                                   /*require_all_args=*/false,
11905                                   /*use_default_args=*/false));
11906       if (converted_args == error_mark_node)
11907         return 1;
11908
11909       /* Substitute the explicit args into the function type.  This is
11910          necessary so that, for instance, explicitly declared function
11911          arguments can match null pointed constants.  If we were given
11912          an incomplete set of explicit args, we must not do semantic
11913          processing during substitution as we could create partial
11914          instantiations.  */
11915       for (i = 0; i < len; i++)
11916         {
11917           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11918           bool parameter_pack = false;
11919
11920           /* Dig out the actual parm.  */
11921           if (TREE_CODE (parm) == TYPE_DECL
11922               || TREE_CODE (parm) == TEMPLATE_DECL)
11923             {
11924               parm = TREE_TYPE (parm);
11925               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11926             }
11927           else if (TREE_CODE (parm) == PARM_DECL)
11928             {
11929               parm = DECL_INITIAL (parm);
11930               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11931             }
11932
11933           if (parameter_pack)
11934             {
11935               int level, idx;
11936               tree targ;
11937               template_parm_level_and_index (parm, &level, &idx);
11938
11939               /* Mark the argument pack as "incomplete". We could
11940                  still deduce more arguments during unification.  */
11941               targ = TMPL_ARG (converted_args, level, idx);
11942               if (targ)
11943                 {
11944                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11945                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
11946                     = ARGUMENT_PACK_ARGS (targ);
11947                 }
11948
11949               /* We have some incomplete argument packs.  */
11950               incomplete_argument_packs_p = true;
11951             }
11952         }
11953
11954       if (incomplete_argument_packs_p)
11955         /* Any substitution is guaranteed to be incomplete if there
11956            are incomplete argument packs, because we can still deduce
11957            more arguments.  */
11958         incomplete = 1;
11959       else
11960         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11961
11962       processing_template_decl += incomplete;
11963       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11964       processing_template_decl -= incomplete;
11965
11966       if (fntype == error_mark_node)
11967         return 1;
11968
11969       /* Place the explicitly specified arguments in TARGS.  */
11970       for (i = NUM_TMPL_ARGS (converted_args); i--;)
11971         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11972     }
11973
11974   /* Never do unification on the 'this' parameter.  */
11975   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11976
11977   if (return_type)
11978     {
11979       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11980       args = tree_cons (NULL_TREE, return_type, args);
11981     }
11982
11983   /* We allow incomplete unification without an error message here
11984      because the standard doesn't seem to explicitly prohibit it.  Our
11985      callers must be ready to deal with unification failures in any
11986      event.  */
11987   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11988                                   targs, parms, args, /*subr=*/0,
11989                                   strict, flags);
11990
11991   if (result == 0 && incomplete_argument_packs_p)
11992     {
11993       int i, len = NUM_TMPL_ARGS (targs);
11994
11995       /* Clear the "incomplete" flags on all argument packs.  */
11996       for (i = 0; i < len; i++)
11997         {
11998           tree arg = TREE_VEC_ELT (targs, i);
11999           if (ARGUMENT_PACK_P (arg))
12000             {
12001               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
12002               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
12003             }
12004         }
12005     }
12006
12007   /* Now that we have bindings for all of the template arguments,
12008      ensure that the arguments deduced for the template template
12009      parameters have compatible template parameter lists.  We cannot
12010      check this property before we have deduced all template
12011      arguments, because the template parameter types of a template
12012      template parameter might depend on prior template parameters
12013      deduced after the template template parameter.  The following
12014      ill-formed example illustrates this issue:
12015
12016        template<typename T, template<T> class C> void f(C<5>, T);
12017
12018        template<int N> struct X {};
12019
12020        void g() {
12021          f(X<5>(), 5l); // error: template argument deduction fails
12022        }
12023
12024      The template parameter list of 'C' depends on the template type
12025      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
12026      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
12027      time that we deduce 'C'.  */
12028   if (result == 0
12029       && !template_template_parm_bindings_ok_p 
12030            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
12031     return 1;
12032
12033   if (result == 0)
12034     /* All is well so far.  Now, check:
12035
12036        [temp.deduct]
12037
12038        When all template arguments have been deduced, all uses of
12039        template parameters in nondeduced contexts are replaced with
12040        the corresponding deduced argument values.  If the
12041        substitution results in an invalid type, as described above,
12042        type deduction fails.  */
12043     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
12044         == error_mark_node)
12045       return 1;
12046
12047   return result;
12048 }
12049
12050 /* Adjust types before performing type deduction, as described in
12051    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
12052    sections are symmetric.  PARM is the type of a function parameter
12053    or the return type of the conversion function.  ARG is the type of
12054    the argument passed to the call, or the type of the value
12055    initialized with the result of the conversion function.
12056    ARG_EXPR is the original argument expression, which may be null.  */
12057
12058 static int
12059 maybe_adjust_types_for_deduction (unification_kind_t strict,
12060                                   tree* parm,
12061                                   tree* arg,
12062                                   tree arg_expr)
12063 {
12064   int result = 0;
12065
12066   switch (strict)
12067     {
12068     case DEDUCE_CALL:
12069       break;
12070
12071     case DEDUCE_CONV:
12072       {
12073         /* Swap PARM and ARG throughout the remainder of this
12074            function; the handling is precisely symmetric since PARM
12075            will initialize ARG rather than vice versa.  */
12076         tree* temp = parm;
12077         parm = arg;
12078         arg = temp;
12079         break;
12080       }
12081
12082     case DEDUCE_EXACT:
12083       /* There is nothing to do in this case.  */
12084       return 0;
12085
12086     default:
12087       gcc_unreachable ();
12088     }
12089
12090   if (TREE_CODE (*parm) != REFERENCE_TYPE)
12091     {
12092       /* [temp.deduct.call]
12093
12094          If P is not a reference type:
12095
12096          --If A is an array type, the pointer type produced by the
12097          array-to-pointer standard conversion (_conv.array_) is
12098          used in place of A for type deduction; otherwise,
12099
12100          --If A is a function type, the pointer type produced by
12101          the function-to-pointer standard conversion
12102          (_conv.func_) is used in place of A for type deduction;
12103          otherwise,
12104
12105          --If A is a cv-qualified type, the top level
12106          cv-qualifiers of A's type are ignored for type
12107          deduction.  */
12108       if (TREE_CODE (*arg) == ARRAY_TYPE)
12109         *arg = build_pointer_type (TREE_TYPE (*arg));
12110       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
12111         *arg = build_pointer_type (*arg);
12112       else
12113         *arg = TYPE_MAIN_VARIANT (*arg);
12114     }
12115
12116   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
12117      of the form T&&, where T is a template parameter, and the argument
12118      is an lvalue, T is deduced as A& */
12119   if (TREE_CODE (*parm) == REFERENCE_TYPE
12120       && TYPE_REF_IS_RVALUE (*parm)
12121       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
12122       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
12123       && arg_expr && real_lvalue_p (arg_expr))
12124     *arg = build_reference_type (*arg);
12125
12126   /* [temp.deduct.call]
12127
12128      If P is a cv-qualified type, the top level cv-qualifiers
12129      of P's type are ignored for type deduction.  If P is a
12130      reference type, the type referred to by P is used for
12131      type deduction.  */
12132   *parm = TYPE_MAIN_VARIANT (*parm);
12133   if (TREE_CODE (*parm) == REFERENCE_TYPE)
12134     {
12135       *parm = TREE_TYPE (*parm);
12136       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12137     }
12138
12139   /* DR 322. For conversion deduction, remove a reference type on parm
12140      too (which has been swapped into ARG).  */
12141   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
12142     *arg = TREE_TYPE (*arg);
12143
12144   return result;
12145 }
12146
12147 /* Most parms like fn_type_unification.
12148
12149    If SUBR is 1, we're being called recursively (to unify the
12150    arguments of a function or method parameter of a function
12151    template). */
12152
12153 static int
12154 type_unification_real (tree tparms,
12155                        tree targs,
12156                        tree xparms,
12157                        tree xargs,
12158                        int subr,
12159                        unification_kind_t strict,
12160                        int flags)
12161 {
12162   tree parm, arg, arg_expr;
12163   int i;
12164   int ntparms = TREE_VEC_LENGTH (tparms);
12165   int sub_strict;
12166   int saw_undeduced = 0;
12167   tree parms, args;
12168
12169   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
12170   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
12171   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
12172   gcc_assert (ntparms > 0);
12173
12174   switch (strict)
12175     {
12176     case DEDUCE_CALL:
12177       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
12178                     | UNIFY_ALLOW_DERIVED);
12179       break;
12180
12181     case DEDUCE_CONV:
12182       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12183       break;
12184
12185     case DEDUCE_EXACT:
12186       sub_strict = UNIFY_ALLOW_NONE;
12187       break;
12188
12189     default:
12190       gcc_unreachable ();
12191     }
12192
12193  again:
12194   parms = xparms;
12195   args = xargs;
12196
12197   while (parms && parms != void_list_node
12198          && args && args != void_list_node)
12199     {
12200       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
12201         break;
12202
12203       parm = TREE_VALUE (parms);
12204       parms = TREE_CHAIN (parms);
12205       arg = TREE_VALUE (args);
12206       args = TREE_CHAIN (args);
12207       arg_expr = NULL;
12208
12209       if (arg == error_mark_node)
12210         return 1;
12211       if (arg == unknown_type_node)
12212         /* We can't deduce anything from this, but we might get all the
12213            template args from other function args.  */
12214         continue;
12215
12216       /* Conversions will be performed on a function argument that
12217          corresponds with a function parameter that contains only
12218          non-deducible template parameters and explicitly specified
12219          template parameters.  */
12220       if (!uses_template_parms (parm))
12221         {
12222           tree type;
12223
12224           if (!TYPE_P (arg))
12225             type = TREE_TYPE (arg);
12226           else
12227             type = arg;
12228
12229           if (same_type_p (parm, type))
12230             continue;
12231           if (strict != DEDUCE_EXACT
12232               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
12233                                   flags))
12234             continue;
12235
12236           return 1;
12237         }
12238
12239       if (!TYPE_P (arg))
12240         {
12241           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12242           if (type_unknown_p (arg))
12243             {
12244               /* [temp.deduct.type] 
12245
12246                  A template-argument can be deduced from a pointer to
12247                  function or pointer to member function argument if
12248                  the set of overloaded functions does not contain
12249                  function templates and at most one of a set of
12250                  overloaded functions provides a unique match.  */
12251               if (resolve_overloaded_unification
12252                   (tparms, targs, parm, arg, strict, sub_strict))
12253                 continue;
12254
12255               return 1;
12256             }
12257           arg_expr = arg;
12258           arg = unlowered_expr_type (arg);
12259           if (arg == error_mark_node)
12260             return 1;
12261         }
12262
12263       {
12264         int arg_strict = sub_strict;
12265
12266         if (!subr)
12267           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
12268                                                           arg_expr);
12269
12270         if (arg == init_list_type_node && arg_expr)
12271           arg = arg_expr;
12272         if (unify (tparms, targs, parm, arg, arg_strict))
12273           return 1;
12274       }
12275     }
12276
12277
12278   if (parms 
12279       && parms != void_list_node
12280       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
12281     {
12282       /* Unify the remaining arguments with the pack expansion type.  */
12283       tree argvec;
12284       tree parmvec = make_tree_vec (1);
12285       int len = 0;
12286       tree t;
12287
12288       /* Count the number of arguments that remain.  */
12289       for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
12290         len++;
12291         
12292       /* Allocate a TREE_VEC and copy in all of the arguments */ 
12293       argvec = make_tree_vec (len);
12294       for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
12295         {
12296           TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
12297           ++i;
12298         }
12299
12300       /* Copy the parameter into parmvec.  */
12301       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
12302       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
12303                                 /*call_args_p=*/true, /*subr=*/subr))
12304         return 1;
12305
12306       /* Advance to the end of the list of parameters.  */
12307       parms = TREE_CHAIN (parms);
12308     }
12309
12310   /* Fail if we've reached the end of the parm list, and more args
12311      are present, and the parm list isn't variadic.  */
12312   if (args && args != void_list_node && parms == void_list_node)
12313     return 1;
12314   /* Fail if parms are left and they don't have default values.  */
12315   if (parms && parms != void_list_node
12316       && TREE_PURPOSE (parms) == NULL_TREE)
12317     return 1;
12318
12319   if (!subr)
12320     for (i = 0; i < ntparms; i++)
12321       if (!TREE_VEC_ELT (targs, i))
12322         {
12323           tree tparm;
12324
12325           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
12326             continue;
12327
12328           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
12329
12330           /* If this is an undeduced nontype parameter that depends on
12331              a type parameter, try another pass; its type may have been
12332              deduced from a later argument than the one from which
12333              this parameter can be deduced.  */
12334           if (TREE_CODE (tparm) == PARM_DECL
12335               && uses_template_parms (TREE_TYPE (tparm))
12336               && !saw_undeduced++)
12337             goto again;
12338
12339           /* Core issue #226 (C++0x) [temp.deduct]:
12340
12341                If a template argument has not been deduced, its
12342                default template argument, if any, is used. 
12343
12344              When we are in C++98 mode, TREE_PURPOSE will either
12345              be NULL_TREE or ERROR_MARK_NODE, so we do not need
12346              to explicitly check cxx_dialect here.  */
12347           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
12348             {
12349               tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)), 
12350                                  targs, tf_none, NULL_TREE);
12351               if (arg == error_mark_node)
12352                 return 1;
12353               else
12354                 {
12355                   TREE_VEC_ELT (targs, i) = arg;
12356                   continue;
12357                 }
12358             }
12359
12360           /* If the type parameter is a parameter pack, then it will
12361              be deduced to an empty parameter pack.  */
12362           if (template_parameter_pack_p (tparm))
12363             {
12364               tree arg;
12365
12366               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
12367                 {
12368                   arg = make_node (NONTYPE_ARGUMENT_PACK);
12369                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
12370                   TREE_CONSTANT (arg) = 1;
12371                 }
12372               else
12373                 arg = make_node (TYPE_ARGUMENT_PACK);
12374
12375               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
12376
12377               TREE_VEC_ELT (targs, i) = arg;
12378               continue;
12379             }
12380
12381           return 2;
12382         }
12383
12384   return 0;
12385 }
12386
12387 /* Subroutine of type_unification_real.  Args are like the variables
12388    at the call site.  ARG is an overloaded function (or template-id);
12389    we try deducing template args from each of the overloads, and if
12390    only one succeeds, we go with that.  Modifies TARGS and returns
12391    true on success.  */
12392
12393 static bool
12394 resolve_overloaded_unification (tree tparms,
12395                                 tree targs,
12396                                 tree parm,
12397                                 tree arg,
12398                                 unification_kind_t strict,
12399                                 int sub_strict)
12400 {
12401   tree tempargs = copy_node (targs);
12402   int good = 0;
12403   bool addr_p;
12404
12405   if (TREE_CODE (arg) == ADDR_EXPR)
12406     {
12407       arg = TREE_OPERAND (arg, 0);
12408       addr_p = true;
12409     }
12410   else
12411     addr_p = false;
12412
12413   if (TREE_CODE (arg) == COMPONENT_REF)
12414     /* Handle `&x' where `x' is some static or non-static member
12415        function name.  */
12416     arg = TREE_OPERAND (arg, 1);
12417
12418   if (TREE_CODE (arg) == OFFSET_REF)
12419     arg = TREE_OPERAND (arg, 1);
12420
12421   /* Strip baselink information.  */
12422   if (BASELINK_P (arg))
12423     arg = BASELINK_FUNCTIONS (arg);
12424
12425   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
12426     {
12427       /* If we got some explicit template args, we need to plug them into
12428          the affected templates before we try to unify, in case the
12429          explicit args will completely resolve the templates in question.  */
12430
12431       tree expl_subargs = TREE_OPERAND (arg, 1);
12432       arg = TREE_OPERAND (arg, 0);
12433
12434       for (; arg; arg = OVL_NEXT (arg))
12435         {
12436           tree fn = OVL_CURRENT (arg);
12437           tree subargs, elem;
12438
12439           if (TREE_CODE (fn) != TEMPLATE_DECL)
12440             continue;
12441
12442           ++processing_template_decl;
12443           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
12444                                   expl_subargs, /*check_ret=*/false);
12445           if (subargs)
12446             {
12447               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
12448               good += try_one_overload (tparms, targs, tempargs, parm,
12449                                         elem, strict, sub_strict, addr_p);
12450             }
12451           --processing_template_decl;
12452         }
12453     }
12454   else if (TREE_CODE (arg) != OVERLOAD
12455            && TREE_CODE (arg) != FUNCTION_DECL)
12456     /* If ARG is, for example, "(0, &f)" then its type will be unknown
12457        -- but the deduction does not succeed because the expression is
12458        not just the function on its own.  */
12459     return false;
12460   else
12461     for (; arg; arg = OVL_NEXT (arg))
12462       good += try_one_overload (tparms, targs, tempargs, parm,
12463                                 TREE_TYPE (OVL_CURRENT (arg)),
12464                                 strict, sub_strict, addr_p);
12465
12466   /* [temp.deduct.type] A template-argument can be deduced from a pointer
12467      to function or pointer to member function argument if the set of
12468      overloaded functions does not contain function templates and at most
12469      one of a set of overloaded functions provides a unique match.
12470
12471      So if we found multiple possibilities, we return success but don't
12472      deduce anything.  */
12473
12474   if (good == 1)
12475     {
12476       int i = TREE_VEC_LENGTH (targs);
12477       for (; i--; )
12478         if (TREE_VEC_ELT (tempargs, i))
12479           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
12480     }
12481   if (good)
12482     return true;
12483
12484   return false;
12485 }
12486
12487 /* Subroutine of resolve_overloaded_unification; does deduction for a single
12488    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
12489    different overloads deduce different arguments for a given parm.
12490    ADDR_P is true if the expression for which deduction is being
12491    performed was of the form "& fn" rather than simply "fn".
12492
12493    Returns 1 on success.  */
12494
12495 static int
12496 try_one_overload (tree tparms,
12497                   tree orig_targs,
12498                   tree targs,
12499                   tree parm,
12500                   tree arg,
12501                   unification_kind_t strict,
12502                   int sub_strict,
12503                   bool addr_p)
12504 {
12505   int nargs;
12506   tree tempargs;
12507   int i;
12508
12509   /* [temp.deduct.type] A template-argument can be deduced from a pointer
12510      to function or pointer to member function argument if the set of
12511      overloaded functions does not contain function templates and at most
12512      one of a set of overloaded functions provides a unique match.
12513
12514      So if this is a template, just return success.  */
12515
12516   if (uses_template_parms (arg))
12517     return 1;
12518
12519   if (TREE_CODE (arg) == METHOD_TYPE)
12520     arg = build_ptrmemfunc_type (build_pointer_type (arg));
12521   else if (addr_p)
12522     arg = build_pointer_type (arg);
12523
12524   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12525
12526   /* We don't copy orig_targs for this because if we have already deduced
12527      some template args from previous args, unify would complain when we
12528      try to deduce a template parameter for the same argument, even though
12529      there isn't really a conflict.  */
12530   nargs = TREE_VEC_LENGTH (targs);
12531   tempargs = make_tree_vec (nargs);
12532
12533   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
12534     return 0;
12535
12536   /* First make sure we didn't deduce anything that conflicts with
12537      explicitly specified args.  */
12538   for (i = nargs; i--; )
12539     {
12540       tree elt = TREE_VEC_ELT (tempargs, i);
12541       tree oldelt = TREE_VEC_ELT (orig_targs, i);
12542
12543       if (!elt)
12544         /*NOP*/;
12545       else if (uses_template_parms (elt))
12546         /* Since we're unifying against ourselves, we will fill in
12547            template args used in the function parm list with our own
12548            template parms.  Discard them.  */
12549         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
12550       else if (oldelt && !template_args_equal (oldelt, elt))
12551         return 0;
12552     }
12553
12554   for (i = nargs; i--; )
12555     {
12556       tree elt = TREE_VEC_ELT (tempargs, i);
12557
12558       if (elt)
12559         TREE_VEC_ELT (targs, i) = elt;
12560     }
12561
12562   return 1;
12563 }
12564
12565 /* PARM is a template class (perhaps with unbound template
12566    parameters).  ARG is a fully instantiated type.  If ARG can be
12567    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
12568    TARGS are as for unify.  */
12569
12570 static tree
12571 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
12572 {
12573   tree copy_of_targs;
12574
12575   if (!CLASSTYPE_TEMPLATE_INFO (arg)
12576       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
12577           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
12578     return NULL_TREE;
12579
12580   /* We need to make a new template argument vector for the call to
12581      unify.  If we used TARGS, we'd clutter it up with the result of
12582      the attempted unification, even if this class didn't work out.
12583      We also don't want to commit ourselves to all the unifications
12584      we've already done, since unification is supposed to be done on
12585      an argument-by-argument basis.  In other words, consider the
12586      following pathological case:
12587
12588        template <int I, int J, int K>
12589        struct S {};
12590
12591        template <int I, int J>
12592        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
12593
12594        template <int I, int J, int K>
12595        void f(S<I, J, K>, S<I, I, I>);
12596
12597        void g() {
12598          S<0, 0, 0> s0;
12599          S<0, 1, 2> s2;
12600
12601          f(s0, s2);
12602        }
12603
12604      Now, by the time we consider the unification involving `s2', we
12605      already know that we must have `f<0, 0, 0>'.  But, even though
12606      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
12607      because there are two ways to unify base classes of S<0, 1, 2>
12608      with S<I, I, I>.  If we kept the already deduced knowledge, we
12609      would reject the possibility I=1.  */
12610   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
12611
12612   /* If unification failed, we're done.  */
12613   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
12614              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
12615     return NULL_TREE;
12616
12617   return arg;
12618 }
12619
12620 /* Given a template type PARM and a class type ARG, find the unique
12621    base type in ARG that is an instance of PARM.  We do not examine
12622    ARG itself; only its base-classes.  If there is not exactly one
12623    appropriate base class, return NULL_TREE.  PARM may be the type of
12624    a partial specialization, as well as a plain template type.  Used
12625    by unify.  */
12626
12627 static tree
12628 get_template_base (tree tparms, tree targs, tree parm, tree arg)
12629 {
12630   tree rval = NULL_TREE;
12631   tree binfo;
12632
12633   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
12634
12635   binfo = TYPE_BINFO (complete_type (arg));
12636   if (!binfo)
12637     /* The type could not be completed.  */
12638     return NULL_TREE;
12639
12640   /* Walk in inheritance graph order.  The search order is not
12641      important, and this avoids multiple walks of virtual bases.  */
12642   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
12643     {
12644       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
12645
12646       if (r)
12647         {
12648           /* If there is more than one satisfactory baseclass, then:
12649
12650                [temp.deduct.call]
12651
12652               If they yield more than one possible deduced A, the type
12653               deduction fails.
12654
12655              applies.  */
12656           if (rval && !same_type_p (r, rval))
12657             return NULL_TREE;
12658
12659           rval = r;
12660         }
12661     }
12662
12663   return rval;
12664 }
12665
12666 /* Returns the level of DECL, which declares a template parameter.  */
12667
12668 static int
12669 template_decl_level (tree decl)
12670 {
12671   switch (TREE_CODE (decl))
12672     {
12673     case TYPE_DECL:
12674     case TEMPLATE_DECL:
12675       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
12676
12677     case PARM_DECL:
12678       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
12679
12680     default:
12681       gcc_unreachable ();
12682     }
12683   return 0;
12684 }
12685
12686 /* Decide whether ARG can be unified with PARM, considering only the
12687    cv-qualifiers of each type, given STRICT as documented for unify.
12688    Returns nonzero iff the unification is OK on that basis.  */
12689
12690 static int
12691 check_cv_quals_for_unify (int strict, tree arg, tree parm)
12692 {
12693   int arg_quals = cp_type_quals (arg);
12694   int parm_quals = cp_type_quals (parm);
12695
12696   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12697       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12698     {
12699       /*  Although a CVR qualifier is ignored when being applied to a
12700           substituted template parameter ([8.3.2]/1 for example), that
12701           does not apply during deduction [14.8.2.4]/1, (even though
12702           that is not explicitly mentioned, [14.8.2.4]/9 indicates
12703           this).  Except when we're allowing additional CV qualifiers
12704           at the outer level [14.8.2.1]/3,1st bullet.  */
12705       if ((TREE_CODE (arg) == REFERENCE_TYPE
12706            || TREE_CODE (arg) == FUNCTION_TYPE
12707            || TREE_CODE (arg) == METHOD_TYPE)
12708           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
12709         return 0;
12710
12711       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
12712           && (parm_quals & TYPE_QUAL_RESTRICT))
12713         return 0;
12714     }
12715
12716   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12717       && (arg_quals & parm_quals) != parm_quals)
12718     return 0;
12719
12720   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
12721       && (parm_quals & arg_quals) != arg_quals)
12722     return 0;
12723
12724   return 1;
12725 }
12726
12727 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
12728 void 
12729 template_parm_level_and_index (tree parm, int* level, int* index)
12730 {
12731   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12732       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12733       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12734     {
12735       *index = TEMPLATE_TYPE_IDX (parm);
12736       *level = TEMPLATE_TYPE_LEVEL (parm);
12737     }
12738   else
12739     {
12740       *index = TEMPLATE_PARM_IDX (parm);
12741       *level = TEMPLATE_PARM_LEVEL (parm);
12742     }
12743 }
12744
12745 /* Unifies the remaining arguments in PACKED_ARGS with the pack
12746    expansion at the end of PACKED_PARMS. Returns 0 if the type
12747    deduction succeeds, 1 otherwise. STRICT is the same as in
12748    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
12749    call argument list. We'll need to adjust the arguments to make them
12750    types. SUBR tells us if this is from a recursive call to
12751    type_unification_real.  */
12752 int
12753 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
12754                       tree packed_args, int strict, bool call_args_p,
12755                       bool subr)
12756 {
12757   tree parm 
12758     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
12759   tree pattern = PACK_EXPANSION_PATTERN (parm);
12760   tree pack, packs = NULL_TREE;
12761   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
12762   int len = TREE_VEC_LENGTH (packed_args);
12763
12764   /* Determine the parameter packs we will be deducing from the
12765      pattern, and record their current deductions.  */
12766   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
12767        pack; pack = TREE_CHAIN (pack))
12768     {
12769       tree parm_pack = TREE_VALUE (pack);
12770       int idx, level;
12771
12772       /* Determine the index and level of this parameter pack.  */
12773       template_parm_level_and_index (parm_pack, &level, &idx);
12774
12775       /* Keep track of the parameter packs and their corresponding
12776          argument packs.  */
12777       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12778       TREE_TYPE (packs) = make_tree_vec (len - start);
12779     }
12780   
12781   /* Loop through all of the arguments that have not yet been
12782      unified and unify each with the pattern.  */
12783   for (i = start; i < len; i++)
12784     {
12785       tree parm = pattern;
12786
12787       /* For each parameter pack, clear out the deduced value so that
12788          we can deduce it again.  */
12789       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12790         {
12791           int idx, level;
12792           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12793
12794           TMPL_ARG (targs, level, idx) = NULL_TREE;
12795         }
12796
12797       /* Unify the pattern with the current argument.  */
12798       {
12799         tree arg = TREE_VEC_ELT (packed_args, i);
12800         tree arg_expr = NULL_TREE;
12801         int arg_strict = strict;
12802         bool skip_arg_p = false;
12803
12804         if (call_args_p)
12805           {
12806             int sub_strict;
12807
12808             /* This mirrors what we do in type_unification_real.  */
12809             switch (strict)
12810               {
12811               case DEDUCE_CALL:
12812                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
12813                               | UNIFY_ALLOW_MORE_CV_QUAL
12814                               | UNIFY_ALLOW_DERIVED);
12815                 break;
12816                 
12817               case DEDUCE_CONV:
12818                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12819                 break;
12820                 
12821               case DEDUCE_EXACT:
12822                 sub_strict = UNIFY_ALLOW_NONE;
12823                 break;
12824                 
12825               default:
12826                 gcc_unreachable ();
12827               }
12828
12829             if (!TYPE_P (arg))
12830               {
12831                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12832                 if (type_unknown_p (arg))
12833                   {
12834                     /* [temp.deduct.type] A template-argument can be
12835                        deduced from a pointer to function or pointer
12836                        to member function argument if the set of
12837                        overloaded functions does not contain function
12838                        templates and at most one of a set of
12839                        overloaded functions provides a unique
12840                        match.  */
12841
12842                     if (resolve_overloaded_unification
12843                         (tparms, targs, parm, arg, strict, sub_strict)
12844                         != 0)
12845                       return 1;
12846                     skip_arg_p = true;
12847                   }
12848
12849                 if (!skip_arg_p)
12850                   {
12851                     arg_expr = arg;
12852                     arg = unlowered_expr_type (arg);
12853                     if (arg == error_mark_node)
12854                       return 1;
12855                   }
12856               }
12857       
12858             arg_strict = sub_strict;
12859
12860             if (!subr)
12861               arg_strict |= 
12862                 maybe_adjust_types_for_deduction (strict, &parm, &arg, 
12863                                                   arg_expr);
12864           }
12865
12866         if (!skip_arg_p)
12867           {
12868             if (unify (tparms, targs, parm, arg, arg_strict))
12869               return 1;
12870           }
12871       }
12872
12873       /* For each parameter pack, collect the deduced value.  */
12874       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12875         {
12876           int idx, level;
12877           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12878
12879           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
12880             TMPL_ARG (targs, level, idx);
12881         }
12882     }
12883
12884   /* Verify that the results of unification with the parameter packs
12885      produce results consistent with what we've seen before, and make
12886      the deduced argument packs available.  */
12887   for (pack = packs; pack; pack = TREE_CHAIN (pack))
12888     {
12889       tree old_pack = TREE_VALUE (pack);
12890       tree new_args = TREE_TYPE (pack);
12891       int i, len = TREE_VEC_LENGTH (new_args);
12892       bool nondeduced_p = false;
12893
12894       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
12895          actually deduce anything.  */
12896       for (i = 0; i < len && !nondeduced_p; ++i)
12897         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
12898           nondeduced_p = true;
12899       if (nondeduced_p)
12900         continue;
12901
12902       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12903         {
12904           /* Prepend the explicit arguments onto NEW_ARGS.  */
12905           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12906           tree old_args = new_args;
12907           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12908           int len = explicit_len + TREE_VEC_LENGTH (old_args);
12909
12910           /* Copy the explicit arguments.  */
12911           new_args = make_tree_vec (len);
12912           for (i = 0; i < explicit_len; i++)
12913             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12914
12915           /* Copy the deduced arguments.  */
12916           for (; i < len; i++)
12917             TREE_VEC_ELT (new_args, i) =
12918               TREE_VEC_ELT (old_args, i - explicit_len);
12919         }
12920
12921       if (!old_pack)
12922         {
12923           tree result;
12924           int idx, level;
12925           
12926           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12927
12928           /* Build the deduced *_ARGUMENT_PACK.  */
12929           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12930             {
12931               result = make_node (NONTYPE_ARGUMENT_PACK);
12932               TREE_TYPE (result) = 
12933                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12934               TREE_CONSTANT (result) = 1;
12935             }
12936           else
12937             result = make_node (TYPE_ARGUMENT_PACK);
12938
12939           SET_ARGUMENT_PACK_ARGS (result, new_args);
12940
12941           /* Note the deduced argument packs for this parameter
12942              pack.  */
12943           TMPL_ARG (targs, level, idx) = result;
12944         }
12945       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12946                && (ARGUMENT_PACK_ARGS (old_pack) 
12947                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12948         {
12949           /* We only had the explicitly-provided arguments before, but
12950              now we have a complete set of arguments.  */
12951           int idx, level;
12952           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12953           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12954
12955           /* Keep the original deduced argument pack.  */
12956           TMPL_ARG (targs, level, idx) = old_pack;
12957
12958           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12959           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12960           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12961         }
12962       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12963                                     new_args))
12964         /* Inconsistent unification of this parameter pack.  */
12965         return 1;
12966       else
12967         {
12968           int idx, level;
12969           
12970           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12971
12972           /* Keep the original deduced argument pack.  */
12973           TMPL_ARG (targs, level, idx) = old_pack;
12974         }
12975     }
12976
12977   return 0;
12978 }
12979
12980 /* Deduce the value of template parameters.  TPARMS is the (innermost)
12981    set of template parameters to a template.  TARGS is the bindings
12982    for those template parameters, as determined thus far; TARGS may
12983    include template arguments for outer levels of template parameters
12984    as well.  PARM is a parameter to a template function, or a
12985    subcomponent of that parameter; ARG is the corresponding argument.
12986    This function attempts to match PARM with ARG in a manner
12987    consistent with the existing assignments in TARGS.  If more values
12988    are deduced, then TARGS is updated.
12989
12990    Returns 0 if the type deduction succeeds, 1 otherwise.  The
12991    parameter STRICT is a bitwise or of the following flags:
12992
12993      UNIFY_ALLOW_NONE:
12994        Require an exact match between PARM and ARG.
12995      UNIFY_ALLOW_MORE_CV_QUAL:
12996        Allow the deduced ARG to be more cv-qualified (by qualification
12997        conversion) than ARG.
12998      UNIFY_ALLOW_LESS_CV_QUAL:
12999        Allow the deduced ARG to be less cv-qualified than ARG.
13000      UNIFY_ALLOW_DERIVED:
13001        Allow the deduced ARG to be a template base class of ARG,
13002        or a pointer to a template base class of the type pointed to by
13003        ARG.
13004      UNIFY_ALLOW_INTEGER:
13005        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
13006        case for more information.
13007      UNIFY_ALLOW_OUTER_LEVEL:
13008        This is the outermost level of a deduction. Used to determine validity
13009        of qualification conversions. A valid qualification conversion must
13010        have const qualified pointers leading up to the inner type which
13011        requires additional CV quals, except at the outer level, where const
13012        is not required [conv.qual]. It would be normal to set this flag in
13013        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
13014      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
13015        This is the outermost level of a deduction, and PARM can be more CV
13016        qualified at this point.
13017      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
13018        This is the outermost level of a deduction, and PARM can be less CV
13019        qualified at this point.  */
13020
13021 static int
13022 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
13023 {
13024   int idx;
13025   tree targ;
13026   tree tparm;
13027   int strict_in = strict;
13028
13029   /* I don't think this will do the right thing with respect to types.
13030      But the only case I've seen it in so far has been array bounds, where
13031      signedness is the only information lost, and I think that will be
13032      okay.  */
13033   while (TREE_CODE (parm) == NOP_EXPR)
13034     parm = TREE_OPERAND (parm, 0);
13035
13036   if (arg == error_mark_node)
13037     return 1;
13038   if (arg == unknown_type_node
13039       || arg == init_list_type_node)
13040     /* We can't deduce anything from this, but we might get all the
13041        template args from other function args.  */
13042     return 0;
13043
13044   /* If PARM uses template parameters, then we can't bail out here,
13045      even if ARG == PARM, since we won't record unifications for the
13046      template parameters.  We might need them if we're trying to
13047      figure out which of two things is more specialized.  */
13048   if (arg == parm && !uses_template_parms (parm))
13049     return 0;
13050
13051   /* Handle init lists early, so the rest of the function can assume
13052      we're dealing with a type. */
13053   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
13054     {
13055       tree elt, elttype;
13056       unsigned i;
13057
13058       if (!is_std_init_list (parm))
13059         /* We can only deduce from an initializer list argument if the
13060            parameter is std::initializer_list; otherwise this is a
13061            non-deduced context. */
13062         return 0;
13063
13064       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
13065
13066       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
13067         {
13068           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
13069             elt = TREE_TYPE (elt);
13070           if (unify (tparms, targs, elttype, elt, UNIFY_ALLOW_NONE))
13071             return 1;
13072         }
13073       return 0;
13074     }
13075
13076   /* Immediately reject some pairs that won't unify because of
13077      cv-qualification mismatches.  */
13078   if (TREE_CODE (arg) == TREE_CODE (parm)
13079       && TYPE_P (arg)
13080       /* It is the elements of the array which hold the cv quals of an array
13081          type, and the elements might be template type parms. We'll check
13082          when we recurse.  */
13083       && TREE_CODE (arg) != ARRAY_TYPE
13084       /* We check the cv-qualifiers when unifying with template type
13085          parameters below.  We want to allow ARG `const T' to unify with
13086          PARM `T' for example, when computing which of two templates
13087          is more specialized, for example.  */
13088       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
13089       && !check_cv_quals_for_unify (strict_in, arg, parm))
13090     return 1;
13091
13092   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
13093       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
13094     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
13095   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
13096   strict &= ~UNIFY_ALLOW_DERIVED;
13097   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
13098   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
13099
13100   switch (TREE_CODE (parm))
13101     {
13102     case TYPENAME_TYPE:
13103     case SCOPE_REF:
13104     case UNBOUND_CLASS_TEMPLATE:
13105       /* In a type which contains a nested-name-specifier, template
13106          argument values cannot be deduced for template parameters used
13107          within the nested-name-specifier.  */
13108       return 0;
13109
13110     case TEMPLATE_TYPE_PARM:
13111     case TEMPLATE_TEMPLATE_PARM:
13112     case BOUND_TEMPLATE_TEMPLATE_PARM:
13113       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
13114       if (tparm == error_mark_node)
13115         return 1;
13116
13117       if (TEMPLATE_TYPE_LEVEL (parm)
13118           != template_decl_level (tparm))
13119         /* The PARM is not one we're trying to unify.  Just check
13120            to see if it matches ARG.  */
13121         return (TREE_CODE (arg) == TREE_CODE (parm)
13122                 && same_type_p (parm, arg)) ? 0 : 1;
13123       idx = TEMPLATE_TYPE_IDX (parm);
13124       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
13125       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
13126
13127       /* Check for mixed types and values.  */
13128       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
13129            && TREE_CODE (tparm) != TYPE_DECL)
13130           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
13131               && TREE_CODE (tparm) != TEMPLATE_DECL))
13132         return 1;
13133
13134       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
13135         {
13136           /* ARG must be constructed from a template class or a template
13137              template parameter.  */
13138           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
13139               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
13140             return 1;
13141
13142           {
13143             tree parmvec = TYPE_TI_ARGS (parm);
13144             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
13145             tree parm_parms 
13146               = DECL_INNERMOST_TEMPLATE_PARMS
13147                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
13148             int i, len;
13149             int parm_variadic_p = 0;
13150
13151             /* The resolution to DR150 makes clear that default
13152                arguments for an N-argument may not be used to bind T
13153                to a template template parameter with fewer than N
13154                parameters.  It is not safe to permit the binding of
13155                default arguments as an extension, as that may change
13156                the meaning of a conforming program.  Consider:
13157
13158                   struct Dense { static const unsigned int dim = 1; };
13159
13160                   template <template <typename> class View,
13161                             typename Block>
13162                   void operator+(float, View<Block> const&);
13163
13164                   template <typename Block,
13165                             unsigned int Dim = Block::dim>
13166                   struct Lvalue_proxy { operator float() const; };
13167
13168                   void
13169                   test_1d (void) {
13170                     Lvalue_proxy<Dense> p;
13171                     float b;
13172                     b + p;
13173                   }
13174
13175               Here, if Lvalue_proxy is permitted to bind to View, then
13176               the global operator+ will be used; if they are not, the
13177               Lvalue_proxy will be converted to float.  */
13178             if (coerce_template_parms (parm_parms,
13179                                        argvec,
13180                                        TYPE_TI_TEMPLATE (parm),
13181                                        tf_none,
13182                                        /*require_all_args=*/true,
13183                                        /*use_default_args=*/false)
13184                 == error_mark_node)
13185               return 1;
13186
13187             /* Deduce arguments T, i from TT<T> or TT<i>.
13188                We check each element of PARMVEC and ARGVEC individually
13189                rather than the whole TREE_VEC since they can have
13190                different number of elements.  */
13191
13192             parmvec = expand_template_argument_pack (parmvec);
13193             argvec = expand_template_argument_pack (argvec);
13194
13195             len = TREE_VEC_LENGTH (parmvec);
13196
13197             /* Check if the parameters end in a pack, making them
13198                variadic.  */
13199             if (len > 0
13200                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
13201               parm_variadic_p = 1;
13202             
13203             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
13204               return 1;
13205
13206              for (i = 0; i < len - parm_variadic_p; ++i)
13207               {
13208                 if (unify (tparms, targs,
13209                            TREE_VEC_ELT (parmvec, i),
13210                            TREE_VEC_ELT (argvec, i),
13211                            UNIFY_ALLOW_NONE))
13212                   return 1;
13213               }
13214
13215             if (parm_variadic_p
13216                 && unify_pack_expansion (tparms, targs,
13217                                          parmvec, argvec,
13218                                          UNIFY_ALLOW_NONE,
13219                                          /*call_args_p=*/false,
13220                                          /*subr=*/false))
13221               return 1;
13222           }
13223           arg = TYPE_TI_TEMPLATE (arg);
13224
13225           /* Fall through to deduce template name.  */
13226         }
13227
13228       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
13229           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
13230         {
13231           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
13232
13233           /* Simple cases: Value already set, does match or doesn't.  */
13234           if (targ != NULL_TREE && template_args_equal (targ, arg))
13235             return 0;
13236           else if (targ)
13237             return 1;
13238         }
13239       else
13240         {
13241           /* If PARM is `const T' and ARG is only `int', we don't have
13242              a match unless we are allowing additional qualification.
13243              If ARG is `const int' and PARM is just `T' that's OK;
13244              that binds `const int' to `T'.  */
13245           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
13246                                          arg, parm))
13247             return 1;
13248
13249           /* Consider the case where ARG is `const volatile int' and
13250              PARM is `const T'.  Then, T should be `volatile int'.  */
13251           arg = cp_build_qualified_type_real
13252             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
13253           if (arg == error_mark_node)
13254             return 1;
13255
13256           /* Simple cases: Value already set, does match or doesn't.  */
13257           if (targ != NULL_TREE && same_type_p (targ, arg))
13258             return 0;
13259           else if (targ)
13260             return 1;
13261
13262           /* Make sure that ARG is not a variable-sized array.  (Note
13263              that were talking about variable-sized arrays (like
13264              `int[n]'), rather than arrays of unknown size (like
13265              `int[]').)  We'll get very confused by such a type since
13266              the bound of the array will not be computable in an
13267              instantiation.  Besides, such types are not allowed in
13268              ISO C++, so we can do as we please here.  */
13269           if (variably_modified_type_p (arg, NULL_TREE))
13270             return 1;
13271         }
13272
13273       /* If ARG is a parameter pack or an expansion, we cannot unify
13274          against it unless PARM is also a parameter pack.  */
13275       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
13276           && !template_parameter_pack_p (parm))
13277         return 1;
13278
13279       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13280       return 0;
13281
13282     case TEMPLATE_PARM_INDEX:
13283       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
13284       if (tparm == error_mark_node)
13285         return 1;
13286
13287       if (TEMPLATE_PARM_LEVEL (parm)
13288           != template_decl_level (tparm))
13289         /* The PARM is not one we're trying to unify.  Just check
13290            to see if it matches ARG.  */
13291         return !(TREE_CODE (arg) == TREE_CODE (parm)
13292                  && cp_tree_equal (parm, arg));
13293
13294       idx = TEMPLATE_PARM_IDX (parm);
13295       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
13296
13297       if (targ)
13298         return !cp_tree_equal (targ, arg);
13299
13300       /* [temp.deduct.type] If, in the declaration of a function template
13301          with a non-type template-parameter, the non-type
13302          template-parameter is used in an expression in the function
13303          parameter-list and, if the corresponding template-argument is
13304          deduced, the template-argument type shall match the type of the
13305          template-parameter exactly, except that a template-argument
13306          deduced from an array bound may be of any integral type.
13307          The non-type parameter might use already deduced type parameters.  */
13308       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
13309       if (!TREE_TYPE (arg))
13310         /* Template-parameter dependent expression.  Just accept it for now.
13311            It will later be processed in convert_template_argument.  */
13312         ;
13313       else if (same_type_p (TREE_TYPE (arg), tparm))
13314         /* OK */;
13315       else if ((strict & UNIFY_ALLOW_INTEGER)
13316                && (TREE_CODE (tparm) == INTEGER_TYPE
13317                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
13318         /* Convert the ARG to the type of PARM; the deduced non-type
13319            template argument must exactly match the types of the
13320            corresponding parameter.  */
13321         arg = fold (build_nop (TREE_TYPE (parm), arg));
13322       else if (uses_template_parms (tparm))
13323         /* We haven't deduced the type of this parameter yet.  Try again
13324            later.  */
13325         return 0;
13326       else
13327         return 1;
13328
13329       /* If ARG is a parameter pack or an expansion, we cannot unify
13330          against it unless PARM is also a parameter pack.  */
13331       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
13332           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
13333         return 1;
13334
13335       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13336       return 0;
13337
13338     case PTRMEM_CST:
13339      {
13340         /* A pointer-to-member constant can be unified only with
13341          another constant.  */
13342       if (TREE_CODE (arg) != PTRMEM_CST)
13343         return 1;
13344
13345       /* Just unify the class member. It would be useless (and possibly
13346          wrong, depending on the strict flags) to unify also
13347          PTRMEM_CST_CLASS, because we want to be sure that both parm and
13348          arg refer to the same variable, even if through different
13349          classes. For instance:
13350
13351          struct A { int x; };
13352          struct B : A { };
13353
13354          Unification of &A::x and &B::x must succeed.  */
13355       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
13356                     PTRMEM_CST_MEMBER (arg), strict);
13357      }
13358
13359     case POINTER_TYPE:
13360       {
13361         if (TREE_CODE (arg) != POINTER_TYPE)
13362           return 1;
13363
13364         /* [temp.deduct.call]
13365
13366            A can be another pointer or pointer to member type that can
13367            be converted to the deduced A via a qualification
13368            conversion (_conv.qual_).
13369
13370            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
13371            This will allow for additional cv-qualification of the
13372            pointed-to types if appropriate.  */
13373
13374         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
13375           /* The derived-to-base conversion only persists through one
13376              level of pointers.  */
13377           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
13378
13379         return unify (tparms, targs, TREE_TYPE (parm),
13380                       TREE_TYPE (arg), strict);
13381       }
13382
13383     case REFERENCE_TYPE:
13384       if (TREE_CODE (arg) != REFERENCE_TYPE)
13385         return 1;
13386       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13387                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
13388
13389     case ARRAY_TYPE:
13390       if (TREE_CODE (arg) != ARRAY_TYPE)
13391         return 1;
13392       if ((TYPE_DOMAIN (parm) == NULL_TREE)
13393           != (TYPE_DOMAIN (arg) == NULL_TREE))
13394         return 1;
13395       if (TYPE_DOMAIN (parm) != NULL_TREE)
13396         {
13397           tree parm_max;
13398           tree arg_max;
13399           bool parm_cst;
13400           bool arg_cst;
13401
13402           /* Our representation of array types uses "N - 1" as the
13403              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
13404              not an integer constant.  We cannot unify arbitrarily
13405              complex expressions, so we eliminate the MINUS_EXPRs
13406              here.  */
13407           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
13408           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
13409           if (!parm_cst)
13410             {
13411               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
13412               parm_max = TREE_OPERAND (parm_max, 0);
13413             }
13414           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
13415           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
13416           if (!arg_cst)
13417             {
13418               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
13419                  trying to unify the type of a variable with the type
13420                  of a template parameter.  For example:
13421
13422                    template <unsigned int N>
13423                    void f (char (&) [N]);
13424                    int g(); 
13425                    void h(int i) {
13426                      char a[g(i)];
13427                      f(a); 
13428                    }
13429
13430                 Here, the type of the ARG will be "int [g(i)]", and
13431                 may be a SAVE_EXPR, etc.  */
13432               if (TREE_CODE (arg_max) != MINUS_EXPR)
13433                 return 1;
13434               arg_max = TREE_OPERAND (arg_max, 0);
13435             }
13436
13437           /* If only one of the bounds used a MINUS_EXPR, compensate
13438              by adding one to the other bound.  */
13439           if (parm_cst && !arg_cst)
13440             parm_max = fold_build2 (PLUS_EXPR,
13441                                     integer_type_node,
13442                                     parm_max,
13443                                     integer_one_node);
13444           else if (arg_cst && !parm_cst)
13445             arg_max = fold_build2 (PLUS_EXPR,
13446                                    integer_type_node,
13447                                    arg_max,
13448                                    integer_one_node);
13449
13450           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
13451             return 1;
13452         }
13453       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13454                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
13455
13456     case REAL_TYPE:
13457     case COMPLEX_TYPE:
13458     case VECTOR_TYPE:
13459     case INTEGER_TYPE:
13460     case BOOLEAN_TYPE:
13461     case ENUMERAL_TYPE:
13462     case VOID_TYPE:
13463       if (TREE_CODE (arg) != TREE_CODE (parm))
13464         return 1;
13465
13466       /* We have already checked cv-qualification at the top of the
13467          function.  */
13468       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
13469         return 1;
13470
13471       /* As far as unification is concerned, this wins.  Later checks
13472          will invalidate it if necessary.  */
13473       return 0;
13474
13475       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
13476       /* Type INTEGER_CST can come from ordinary constant template args.  */
13477     case INTEGER_CST:
13478       while (TREE_CODE (arg) == NOP_EXPR)
13479         arg = TREE_OPERAND (arg, 0);
13480
13481       if (TREE_CODE (arg) != INTEGER_CST)
13482         return 1;
13483       return !tree_int_cst_equal (parm, arg);
13484
13485     case TREE_VEC:
13486       {
13487         int i;
13488         if (TREE_CODE (arg) != TREE_VEC)
13489           return 1;
13490         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
13491           return 1;
13492         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
13493           if (unify (tparms, targs,
13494                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
13495                      UNIFY_ALLOW_NONE))
13496             return 1;
13497         return 0;
13498       }
13499
13500     case RECORD_TYPE:
13501     case UNION_TYPE:
13502       if (TREE_CODE (arg) != TREE_CODE (parm))
13503         return 1;
13504
13505       if (TYPE_PTRMEMFUNC_P (parm))
13506         {
13507           if (!TYPE_PTRMEMFUNC_P (arg))
13508             return 1;
13509
13510           return unify (tparms, targs,
13511                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
13512                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
13513                         strict);
13514         }
13515
13516       if (CLASSTYPE_TEMPLATE_INFO (parm))
13517         {
13518           tree t = NULL_TREE;
13519
13520           if (strict_in & UNIFY_ALLOW_DERIVED)
13521             {
13522               /* First, we try to unify the PARM and ARG directly.  */
13523               t = try_class_unification (tparms, targs,
13524                                          parm, arg);
13525
13526               if (!t)
13527                 {
13528                   /* Fallback to the special case allowed in
13529                      [temp.deduct.call]:
13530
13531                        If P is a class, and P has the form
13532                        template-id, then A can be a derived class of
13533                        the deduced A.  Likewise, if P is a pointer to
13534                        a class of the form template-id, A can be a
13535                        pointer to a derived class pointed to by the
13536                        deduced A.  */
13537                   t = get_template_base (tparms, targs, parm, arg);
13538
13539                   if (!t)
13540                     return 1;
13541                 }
13542             }
13543           else if (CLASSTYPE_TEMPLATE_INFO (arg)
13544                    && (CLASSTYPE_TI_TEMPLATE (parm)
13545                        == CLASSTYPE_TI_TEMPLATE (arg)))
13546             /* Perhaps PARM is something like S<U> and ARG is S<int>.
13547                Then, we should unify `int' and `U'.  */
13548             t = arg;
13549           else
13550             /* There's no chance of unification succeeding.  */
13551             return 1;
13552
13553           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
13554                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
13555         }
13556       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
13557         return 1;
13558       return 0;
13559
13560     case METHOD_TYPE:
13561     case FUNCTION_TYPE:
13562       if (TREE_CODE (arg) != TREE_CODE (parm))
13563         return 1;
13564
13565       /* CV qualifications for methods can never be deduced, they must
13566          match exactly.  We need to check them explicitly here,
13567          because type_unification_real treats them as any other
13568          cv-qualified parameter.  */
13569       if (TREE_CODE (parm) == METHOD_TYPE
13570           && (!check_cv_quals_for_unify
13571               (UNIFY_ALLOW_NONE,
13572                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
13573                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
13574         return 1;
13575
13576       if (unify (tparms, targs, TREE_TYPE (parm),
13577                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
13578         return 1;
13579       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
13580                                     TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
13581                                     LOOKUP_NORMAL);
13582
13583     case OFFSET_TYPE:
13584       /* Unify a pointer to member with a pointer to member function, which
13585          deduces the type of the member as a function type. */
13586       if (TYPE_PTRMEMFUNC_P (arg))
13587         {
13588           tree method_type;
13589           tree fntype;
13590           cp_cv_quals cv_quals;
13591
13592           /* Check top-level cv qualifiers */
13593           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
13594             return 1;
13595
13596           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13597                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
13598             return 1;
13599
13600           /* Determine the type of the function we are unifying against. */
13601           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
13602           fntype =
13603             build_function_type (TREE_TYPE (method_type),
13604                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
13605
13606           /* Extract the cv-qualifiers of the member function from the
13607              implicit object parameter and place them on the function
13608              type to be restored later. */
13609           cv_quals =
13610             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
13611           fntype = build_qualified_type (fntype, cv_quals);
13612           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
13613         }
13614
13615       if (TREE_CODE (arg) != OFFSET_TYPE)
13616         return 1;
13617       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13618                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
13619         return 1;
13620       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13621                     strict);
13622
13623     case CONST_DECL:
13624       if (DECL_TEMPLATE_PARM_P (parm))
13625         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
13626       if (arg != integral_constant_value (parm))
13627         return 1;
13628       return 0;
13629
13630     case FIELD_DECL:
13631     case TEMPLATE_DECL:
13632       /* Matched cases are handled by the ARG == PARM test above.  */
13633       return 1;
13634
13635     case TYPE_ARGUMENT_PACK:
13636     case NONTYPE_ARGUMENT_PACK:
13637       {
13638         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
13639         tree packed_args = ARGUMENT_PACK_ARGS (arg);
13640         int i, len = TREE_VEC_LENGTH (packed_parms);
13641         int argslen = TREE_VEC_LENGTH (packed_args);
13642         int parm_variadic_p = 0;
13643
13644         for (i = 0; i < len; ++i)
13645           {
13646             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
13647               {
13648                 if (i == len - 1)
13649                   /* We can unify against something with a trailing
13650                      parameter pack.  */
13651                   parm_variadic_p = 1;
13652                 else
13653                   /* Since there is something following the pack
13654                      expansion, we cannot unify this template argument
13655                      list.  */
13656                   return 0;
13657               }
13658           }
13659           
13660
13661         /* If we don't have enough arguments to satisfy the parameters
13662            (not counting the pack expression at the end), or we have
13663            too many arguments for a parameter list that doesn't end in
13664            a pack expression, we can't unify.  */
13665         if (argslen < (len - parm_variadic_p)
13666             || (argslen > len && !parm_variadic_p))
13667           return 1;
13668
13669         /* Unify all of the parameters that precede the (optional)
13670            pack expression.  */
13671         for (i = 0; i < len - parm_variadic_p; ++i)
13672           {
13673             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
13674                        TREE_VEC_ELT (packed_args, i), strict))
13675               return 1;
13676           }
13677
13678         if (parm_variadic_p)
13679           return unify_pack_expansion (tparms, targs, 
13680                                        packed_parms, packed_args,
13681                                        strict, /*call_args_p=*/false,
13682                                        /*subr=*/false);
13683         return 0;
13684       }
13685
13686       break;
13687
13688     case TYPEOF_TYPE:
13689     case DECLTYPE_TYPE:
13690       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
13691          nodes.  */
13692       return 0;
13693
13694     case ERROR_MARK:
13695       /* Unification fails if we hit an error node.  */
13696       return 1;
13697
13698     default:
13699       gcc_assert (EXPR_P (parm));
13700
13701       /* We must be looking at an expression.  This can happen with
13702          something like:
13703
13704            template <int I>
13705            void foo(S<I>, S<I + 2>);
13706
13707          This is a "nondeduced context":
13708
13709            [deduct.type]
13710
13711            The nondeduced contexts are:
13712
13713            --A type that is a template-id in which one or more of
13714              the template-arguments is an expression that references
13715              a template-parameter.
13716
13717          In these cases, we assume deduction succeeded, but don't
13718          actually infer any unifications.  */
13719
13720       if (!uses_template_parms (parm)
13721           && !template_args_equal (parm, arg))
13722         return 1;
13723       else
13724         return 0;
13725     }
13726 }
13727 \f
13728 /* Note that DECL can be defined in this translation unit, if
13729    required.  */
13730
13731 static void
13732 mark_definable (tree decl)
13733 {
13734   tree clone;
13735   DECL_NOT_REALLY_EXTERN (decl) = 1;
13736   FOR_EACH_CLONE (clone, decl)
13737     DECL_NOT_REALLY_EXTERN (clone) = 1;
13738 }
13739
13740 /* Called if RESULT is explicitly instantiated, or is a member of an
13741    explicitly instantiated class.  */
13742
13743 void
13744 mark_decl_instantiated (tree result, int extern_p)
13745 {
13746   SET_DECL_EXPLICIT_INSTANTIATION (result);
13747
13748   /* If this entity has already been written out, it's too late to
13749      make any modifications.  */
13750   if (TREE_ASM_WRITTEN (result))
13751     return;
13752
13753   if (TREE_CODE (result) != FUNCTION_DECL)
13754     /* The TREE_PUBLIC flag for function declarations will have been
13755        set correctly by tsubst.  */
13756     TREE_PUBLIC (result) = 1;
13757
13758   /* This might have been set by an earlier implicit instantiation.  */
13759   DECL_COMDAT (result) = 0;
13760
13761   if (extern_p)
13762     DECL_NOT_REALLY_EXTERN (result) = 0;
13763   else
13764     {
13765       mark_definable (result);
13766       /* Always make artificials weak.  */
13767       if (DECL_ARTIFICIAL (result) && flag_weak)
13768         comdat_linkage (result);
13769       /* For WIN32 we also want to put explicit instantiations in
13770          linkonce sections.  */
13771       else if (TREE_PUBLIC (result))
13772         maybe_make_one_only (result);
13773     }
13774
13775   /* If EXTERN_P, then this function will not be emitted -- unless
13776      followed by an explicit instantiation, at which point its linkage
13777      will be adjusted.  If !EXTERN_P, then this function will be
13778      emitted here.  In neither circumstance do we want
13779      import_export_decl to adjust the linkage.  */
13780   DECL_INTERFACE_KNOWN (result) = 1;
13781 }
13782
13783 /* Given two function templates PAT1 and PAT2, return:
13784
13785    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
13786    -1 if PAT2 is more specialized than PAT1.
13787    0 if neither is more specialized.
13788
13789    LEN indicates the number of parameters we should consider
13790    (defaulted parameters should not be considered).
13791
13792    The 1998 std underspecified function template partial ordering, and
13793    DR214 addresses the issue.  We take pairs of arguments, one from
13794    each of the templates, and deduce them against each other.  One of
13795    the templates will be more specialized if all the *other*
13796    template's arguments deduce against its arguments and at least one
13797    of its arguments *does* *not* deduce against the other template's
13798    corresponding argument.  Deduction is done as for class templates.
13799    The arguments used in deduction have reference and top level cv
13800    qualifiers removed.  Iff both arguments were originally reference
13801    types *and* deduction succeeds in both directions, the template
13802    with the more cv-qualified argument wins for that pairing (if
13803    neither is more cv-qualified, they both are equal).  Unlike regular
13804    deduction, after all the arguments have been deduced in this way,
13805    we do *not* verify the deduced template argument values can be
13806    substituted into non-deduced contexts, nor do we have to verify
13807    that all template arguments have been deduced.  */
13808
13809 int
13810 more_specialized_fn (tree pat1, tree pat2, int len)
13811 {
13812   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
13813   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
13814   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
13815   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
13816   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
13817   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
13818   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
13819   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
13820   int better1 = 0;
13821   int better2 = 0;
13822
13823   /* Remove the this parameter from non-static member functions.  If
13824      one is a non-static member function and the other is not a static
13825      member function, remove the first parameter from that function
13826      also.  This situation occurs for operator functions where we
13827      locate both a member function (with this pointer) and non-member
13828      operator (with explicit first operand).  */
13829   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
13830     {
13831       len--; /* LEN is the number of significant arguments for DECL1 */
13832       args1 = TREE_CHAIN (args1);
13833       if (!DECL_STATIC_FUNCTION_P (decl2))
13834         args2 = TREE_CHAIN (args2);
13835     }
13836   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
13837     {
13838       args2 = TREE_CHAIN (args2);
13839       if (!DECL_STATIC_FUNCTION_P (decl1))
13840         {
13841           len--;
13842           args1 = TREE_CHAIN (args1);
13843         }
13844     }
13845
13846   /* If only one is a conversion operator, they are unordered.  */
13847   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13848     return 0;
13849
13850   /* Consider the return type for a conversion function */
13851   if (DECL_CONV_FN_P (decl1))
13852     {
13853       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13854       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13855       len++;
13856     }
13857
13858   processing_template_decl++;
13859
13860   while (len--
13861          /* Stop when an ellipsis is seen.  */
13862          && args1 != NULL_TREE && args2 != NULL_TREE)
13863     {
13864       tree arg1 = TREE_VALUE (args1);
13865       tree arg2 = TREE_VALUE (args2);
13866       int deduce1, deduce2;
13867       int quals1 = -1;
13868       int quals2 = -1;
13869
13870       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13871           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13872         {
13873           /* When both arguments are pack expansions, we need only
13874              unify the patterns themselves.  */
13875           arg1 = PACK_EXPANSION_PATTERN (arg1);
13876           arg2 = PACK_EXPANSION_PATTERN (arg2);
13877
13878           /* This is the last comparison we need to do.  */
13879           len = 0;
13880         }
13881
13882       if (TREE_CODE (arg1) == REFERENCE_TYPE)
13883         {
13884           arg1 = TREE_TYPE (arg1);
13885           quals1 = cp_type_quals (arg1);
13886         }
13887
13888       if (TREE_CODE (arg2) == REFERENCE_TYPE)
13889         {
13890           arg2 = TREE_TYPE (arg2);
13891           quals2 = cp_type_quals (arg2);
13892         }
13893
13894       if ((quals1 < 0) != (quals2 < 0))
13895         {
13896           /* Only of the args is a reference, see if we should apply
13897              array/function pointer decay to it.  This is not part of
13898              DR214, but is, IMHO, consistent with the deduction rules
13899              for the function call itself, and with our earlier
13900              implementation of the underspecified partial ordering
13901              rules.  (nathan).  */
13902           if (quals1 >= 0)
13903             {
13904               switch (TREE_CODE (arg1))
13905                 {
13906                 case ARRAY_TYPE:
13907                   arg1 = TREE_TYPE (arg1);
13908                   /* FALLTHROUGH. */
13909                 case FUNCTION_TYPE:
13910                   arg1 = build_pointer_type (arg1);
13911                   break;
13912
13913                 default:
13914                   break;
13915                 }
13916             }
13917           else
13918             {
13919               switch (TREE_CODE (arg2))
13920                 {
13921                 case ARRAY_TYPE:
13922                   arg2 = TREE_TYPE (arg2);
13923                   /* FALLTHROUGH. */
13924                 case FUNCTION_TYPE:
13925                   arg2 = build_pointer_type (arg2);
13926                   break;
13927
13928                 default:
13929                   break;
13930                 }
13931             }
13932         }
13933
13934       arg1 = TYPE_MAIN_VARIANT (arg1);
13935       arg2 = TYPE_MAIN_VARIANT (arg2);
13936
13937       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13938         {
13939           int i, len2 = list_length (args2);
13940           tree parmvec = make_tree_vec (1);
13941           tree argvec = make_tree_vec (len2);
13942           tree ta = args2;
13943
13944           /* Setup the parameter vector, which contains only ARG1.  */
13945           TREE_VEC_ELT (parmvec, 0) = arg1;
13946
13947           /* Setup the argument vector, which contains the remaining
13948              arguments.  */
13949           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13950             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13951
13952           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
13953                                            argvec, UNIFY_ALLOW_NONE, 
13954                                            /*call_args_p=*/false, 
13955                                            /*subr=*/0);
13956
13957           /* We cannot deduce in the other direction, because ARG1 is
13958              a pack expansion but ARG2 is not.  */
13959           deduce2 = 0;
13960         }
13961       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13962         {
13963           int i, len1 = list_length (args1);
13964           tree parmvec = make_tree_vec (1);
13965           tree argvec = make_tree_vec (len1);
13966           tree ta = args1;
13967
13968           /* Setup the parameter vector, which contains only ARG1.  */
13969           TREE_VEC_ELT (parmvec, 0) = arg2;
13970
13971           /* Setup the argument vector, which contains the remaining
13972              arguments.  */
13973           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13974             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13975
13976           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
13977                                            argvec, UNIFY_ALLOW_NONE, 
13978                                            /*call_args_p=*/false, 
13979                                            /*subr=*/0);
13980
13981           /* We cannot deduce in the other direction, because ARG2 is
13982              a pack expansion but ARG1 is not.*/
13983           deduce1 = 0;
13984         }
13985
13986       else
13987         {
13988           /* The normal case, where neither argument is a pack
13989              expansion.  */
13990           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13991           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13992         }
13993
13994       if (!deduce1)
13995         better2 = -1;
13996       if (!deduce2)
13997         better1 = -1;
13998       if (better1 < 0 && better2 < 0)
13999         /* We've failed to deduce something in either direction.
14000            These must be unordered.  */
14001         break;
14002
14003       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
14004         {
14005           /* Deduces in both directions, see if quals can
14006              disambiguate.  Pretend the worse one failed to deduce. */
14007           if ((quals1 & quals2) == quals2)
14008             deduce1 = 0;
14009           if ((quals1 & quals2) == quals1)
14010             deduce2 = 0;
14011         }
14012       if (deduce1 && !deduce2 && !better2)
14013         better2 = 1;
14014       if (deduce2 && !deduce1 && !better1)
14015         better1 = 1;
14016
14017       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
14018           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
14019         /* We have already processed all of the arguments in our
14020            handing of the pack expansion type.  */
14021         len = 0;
14022
14023       args1 = TREE_CHAIN (args1);
14024       args2 = TREE_CHAIN (args2);
14025     }
14026
14027   processing_template_decl--;
14028
14029   /* All things being equal, if the next argument is a pack expansion
14030      for one function but not for the other, prefer the
14031      non-variadic function.  */
14032   if ((better1 > 0) - (better2 > 0) == 0
14033       && args1 && TREE_VALUE (args1)
14034       && args2 && TREE_VALUE (args2))
14035     {
14036       if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
14037         return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
14038       else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
14039         return 1;
14040     }
14041
14042   return (better1 > 0) - (better2 > 0);
14043 }
14044
14045 /* Determine which of two partial specializations is more specialized.
14046
14047    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
14048    to the first partial specialization.  The TREE_VALUE is the
14049    innermost set of template parameters for the partial
14050    specialization.  PAT2 is similar, but for the second template.
14051
14052    Return 1 if the first partial specialization is more specialized;
14053    -1 if the second is more specialized; 0 if neither is more
14054    specialized.
14055
14056    See [temp.class.order] for information about determining which of
14057    two templates is more specialized.  */
14058
14059 static int
14060 more_specialized_class (tree pat1, tree pat2)
14061 {
14062   tree targs;
14063   tree tmpl1, tmpl2;
14064   int winner = 0;
14065   bool any_deductions = false;
14066
14067   tmpl1 = TREE_TYPE (pat1);
14068   tmpl2 = TREE_TYPE (pat2);
14069
14070   /* Just like what happens for functions, if we are ordering between
14071      different class template specializations, we may encounter dependent
14072      types in the arguments, and we need our dependency check functions
14073      to behave correctly.  */
14074   ++processing_template_decl;
14075   targs = get_class_bindings (TREE_VALUE (pat1),
14076                               CLASSTYPE_TI_ARGS (tmpl1),
14077                               CLASSTYPE_TI_ARGS (tmpl2));
14078   if (targs)
14079     {
14080       --winner;
14081       any_deductions = true;
14082     }
14083
14084   targs = get_class_bindings (TREE_VALUE (pat2),
14085                               CLASSTYPE_TI_ARGS (tmpl2),
14086                               CLASSTYPE_TI_ARGS (tmpl1));
14087   if (targs)
14088     {
14089       ++winner;
14090       any_deductions = true;
14091     }
14092   --processing_template_decl;
14093
14094   /* In the case of a tie where at least one of the class templates
14095      has a parameter pack at the end, the template with the most
14096      non-packed parameters wins.  */
14097   if (winner == 0
14098       && any_deductions
14099       && (template_args_variadic_p (TREE_PURPOSE (pat1))
14100           || template_args_variadic_p (TREE_PURPOSE (pat2))))
14101     {
14102       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
14103       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
14104       int len1 = TREE_VEC_LENGTH (args1);
14105       int len2 = TREE_VEC_LENGTH (args2);
14106
14107       /* We don't count the pack expansion at the end.  */
14108       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
14109         --len1;
14110       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
14111         --len2;
14112
14113       if (len1 > len2)
14114         return 1;
14115       else if (len1 < len2)
14116         return -1;
14117     }
14118
14119   return winner;
14120 }
14121
14122 /* Return the template arguments that will produce the function signature
14123    DECL from the function template FN, with the explicit template
14124    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
14125    also match.  Return NULL_TREE if no satisfactory arguments could be
14126    found.  */
14127
14128 static tree
14129 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
14130 {
14131   int ntparms = DECL_NTPARMS (fn);
14132   tree targs = make_tree_vec (ntparms);
14133   tree decl_type;
14134   tree decl_arg_types;
14135
14136   /* Substitute the explicit template arguments into the type of DECL.
14137      The call to fn_type_unification will handle substitution into the
14138      FN.  */
14139   decl_type = TREE_TYPE (decl);
14140   if (explicit_args && uses_template_parms (decl_type))
14141     {
14142       tree tmpl;
14143       tree converted_args;
14144
14145       if (DECL_TEMPLATE_INFO (decl))
14146         tmpl = DECL_TI_TEMPLATE (decl);
14147       else
14148         /* We can get here for some invalid specializations.  */
14149         return NULL_TREE;
14150
14151       converted_args
14152         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
14153                                  explicit_args, NULL_TREE,
14154                                  tf_none,
14155                                  /*require_all_args=*/false,
14156                                  /*use_default_args=*/false);
14157       if (converted_args == error_mark_node)
14158         return NULL_TREE;
14159
14160       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
14161       if (decl_type == error_mark_node)
14162         return NULL_TREE;
14163     }
14164
14165   /* Never do unification on the 'this' parameter.  */
14166   decl_arg_types = skip_artificial_parms_for (decl, 
14167                                               TYPE_ARG_TYPES (decl_type));
14168
14169   if (fn_type_unification (fn, explicit_args, targs,
14170                            decl_arg_types,
14171                            (check_rettype || DECL_CONV_FN_P (fn)
14172                             ? TREE_TYPE (decl_type) : NULL_TREE),
14173                            DEDUCE_EXACT, LOOKUP_NORMAL))
14174     return NULL_TREE;
14175
14176   return targs;
14177 }
14178
14179 /* Return the innermost template arguments that, when applied to a
14180    template specialization whose innermost template parameters are
14181    TPARMS, and whose specialization arguments are PARMS, yield the
14182    ARGS.
14183
14184    For example, suppose we have:
14185
14186      template <class T, class U> struct S {};
14187      template <class T> struct S<T*, int> {};
14188
14189    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
14190    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
14191    int}.  The resulting vector will be {double}, indicating that `T'
14192    is bound to `double'.  */
14193
14194 static tree
14195 get_class_bindings (tree tparms, tree spec_args, tree args)
14196 {
14197   int i, ntparms = TREE_VEC_LENGTH (tparms);
14198   tree deduced_args;
14199   tree innermost_deduced_args;
14200
14201   innermost_deduced_args = make_tree_vec (ntparms);
14202   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14203     {
14204       deduced_args = copy_node (args);
14205       SET_TMPL_ARGS_LEVEL (deduced_args,
14206                            TMPL_ARGS_DEPTH (deduced_args),
14207                            innermost_deduced_args);
14208     }
14209   else
14210     deduced_args = innermost_deduced_args;
14211
14212   if (unify (tparms, deduced_args,
14213              INNERMOST_TEMPLATE_ARGS (spec_args),
14214              INNERMOST_TEMPLATE_ARGS (args),
14215              UNIFY_ALLOW_NONE))
14216     return NULL_TREE;
14217
14218   for (i =  0; i < ntparms; ++i)
14219     if (! TREE_VEC_ELT (innermost_deduced_args, i))
14220       return NULL_TREE;
14221
14222   /* Verify that nondeduced template arguments agree with the type
14223      obtained from argument deduction.
14224
14225      For example:
14226
14227        struct A { typedef int X; };
14228        template <class T, class U> struct C {};
14229        template <class T> struct C<T, typename T::X> {};
14230
14231      Then with the instantiation `C<A, int>', we can deduce that
14232      `T' is `A' but unify () does not check whether `typename T::X'
14233      is `int'.  */
14234   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
14235   if (spec_args == error_mark_node
14236       /* We only need to check the innermost arguments; the other
14237          arguments will always agree.  */
14238       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
14239                               INNERMOST_TEMPLATE_ARGS (args)))
14240     return NULL_TREE;
14241
14242   /* Now that we have bindings for all of the template arguments,
14243      ensure that the arguments deduced for the template template
14244      parameters have compatible template parameter lists.  See the use
14245      of template_template_parm_bindings_ok_p in fn_type_unification
14246      for more information.  */
14247   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
14248     return NULL_TREE;
14249
14250   return deduced_args;
14251 }
14252
14253 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
14254    Return the TREE_LIST node with the most specialized template, if
14255    any.  If there is no most specialized template, the error_mark_node
14256    is returned.
14257
14258    Note that this function does not look at, or modify, the
14259    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
14260    returned is one of the elements of INSTANTIATIONS, callers may
14261    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
14262    and retrieve it from the value returned.  */
14263
14264 tree
14265 most_specialized_instantiation (tree templates)
14266 {
14267   tree fn, champ;
14268
14269   ++processing_template_decl;
14270
14271   champ = templates;
14272   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
14273     {
14274       int fate = 0;
14275
14276       if (get_bindings (TREE_VALUE (champ),
14277                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
14278                         NULL_TREE, /*check_ret=*/false))
14279         fate--;
14280
14281       if (get_bindings (TREE_VALUE (fn),
14282                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
14283                         NULL_TREE, /*check_ret=*/false))
14284         fate++;
14285
14286       if (fate == -1)
14287         champ = fn;
14288       else if (!fate)
14289         {
14290           /* Equally specialized, move to next function.  If there
14291              is no next function, nothing's most specialized.  */
14292           fn = TREE_CHAIN (fn);
14293           champ = fn;
14294           if (!fn)
14295             break;
14296         }
14297     }
14298
14299   if (champ)
14300     /* Now verify that champ is better than everything earlier in the
14301        instantiation list.  */
14302     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
14303       if (get_bindings (TREE_VALUE (champ),
14304                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
14305                         NULL_TREE, /*check_ret=*/false)
14306           || !get_bindings (TREE_VALUE (fn),
14307                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
14308                             NULL_TREE, /*check_ret=*/false))
14309         {
14310           champ = NULL_TREE;
14311           break;
14312         }
14313
14314   processing_template_decl--;
14315
14316   if (!champ)
14317     return error_mark_node;
14318
14319   return champ;
14320 }
14321
14322 /* If DECL is a specialization of some template, return the most
14323    general such template.  Otherwise, returns NULL_TREE.
14324
14325    For example, given:
14326
14327      template <class T> struct S { template <class U> void f(U); };
14328
14329    if TMPL is `template <class U> void S<int>::f(U)' this will return
14330    the full template.  This function will not trace past partial
14331    specializations, however.  For example, given in addition:
14332
14333      template <class T> struct S<T*> { template <class U> void f(U); };
14334
14335    if TMPL is `template <class U> void S<int*>::f(U)' this will return
14336    `template <class T> template <class U> S<T*>::f(U)'.  */
14337
14338 tree
14339 most_general_template (tree decl)
14340 {
14341   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
14342      an immediate specialization.  */
14343   if (TREE_CODE (decl) == FUNCTION_DECL)
14344     {
14345       if (DECL_TEMPLATE_INFO (decl)) {
14346         decl = DECL_TI_TEMPLATE (decl);
14347
14348         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
14349            template friend.  */
14350         if (TREE_CODE (decl) != TEMPLATE_DECL)
14351           return NULL_TREE;
14352       } else
14353         return NULL_TREE;
14354     }
14355
14356   /* Look for more and more general templates.  */
14357   while (DECL_TEMPLATE_INFO (decl))
14358     {
14359       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
14360          (See cp-tree.h for details.)  */
14361       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
14362         break;
14363
14364       if (CLASS_TYPE_P (TREE_TYPE (decl))
14365           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
14366         break;
14367
14368       /* Stop if we run into an explicitly specialized class template.  */
14369       if (!DECL_NAMESPACE_SCOPE_P (decl)
14370           && DECL_CONTEXT (decl)
14371           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
14372         break;
14373
14374       decl = DECL_TI_TEMPLATE (decl);
14375     }
14376
14377   return decl;
14378 }
14379
14380 /* Return the most specialized of the class template partial
14381    specializations of TMPL which can produce TYPE, a specialization of
14382    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
14383    a _TYPE node corresponding to the partial specialization, while the
14384    TREE_PURPOSE is the set of template arguments that must be
14385    substituted into the TREE_TYPE in order to generate TYPE.
14386
14387    If the choice of partial specialization is ambiguous, a diagnostic
14388    is issued, and the error_mark_node is returned.  If there are no
14389    partial specializations of TMPL matching TYPE, then NULL_TREE is
14390    returned.  */
14391
14392 static tree
14393 most_specialized_class (tree type, tree tmpl)
14394 {
14395   tree list = NULL_TREE;
14396   tree t;
14397   tree champ;
14398   int fate;
14399   bool ambiguous_p;
14400   tree args;
14401   tree outer_args = NULL_TREE;
14402
14403   tmpl = most_general_template (tmpl);
14404   args = CLASSTYPE_TI_ARGS (type);
14405
14406   /* For determining which partial specialization to use, only the
14407      innermost args are interesting.  */
14408   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14409     {
14410       outer_args = strip_innermost_template_args (args, 1);
14411       args = INNERMOST_TEMPLATE_ARGS (args);
14412     }
14413
14414   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
14415     {
14416       tree partial_spec_args;
14417       tree spec_args;
14418       tree parms = TREE_VALUE (t);
14419
14420       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
14421       if (outer_args)
14422         {
14423           int i;
14424
14425           ++processing_template_decl;
14426
14427           /* Discard the outer levels of args, and then substitute in the
14428              template args from the enclosing class.  */
14429           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
14430           partial_spec_args = tsubst_template_args
14431             (partial_spec_args, outer_args, tf_none, NULL_TREE);
14432
14433           /* PARMS already refers to just the innermost parms, but the
14434              template parms in partial_spec_args had their levels lowered
14435              by tsubst, so we need to do the same for the parm list.  We
14436              can't just tsubst the TREE_VEC itself, as tsubst wants to
14437              treat a TREE_VEC as an argument vector.  */
14438           parms = copy_node (parms);
14439           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
14440             TREE_VEC_ELT (parms, i) =
14441               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
14442
14443           --processing_template_decl;
14444         }
14445       spec_args = get_class_bindings (parms,
14446                                       partial_spec_args,
14447                                       args);
14448       if (spec_args)
14449         {
14450           if (outer_args)
14451             spec_args = add_to_template_args (outer_args, spec_args);
14452           list = tree_cons (spec_args, TREE_VALUE (t), list);
14453           TREE_TYPE (list) = TREE_TYPE (t);
14454         }
14455     }
14456
14457   if (! list)
14458     return NULL_TREE;
14459
14460   ambiguous_p = false;
14461   t = list;
14462   champ = t;
14463   t = TREE_CHAIN (t);
14464   for (; t; t = TREE_CHAIN (t))
14465     {
14466       fate = more_specialized_class (champ, t);
14467       if (fate == 1)
14468         ;
14469       else
14470         {
14471           if (fate == 0)
14472             {
14473               t = TREE_CHAIN (t);
14474               if (! t)
14475                 {
14476                   ambiguous_p = true;
14477                   break;
14478                 }
14479             }
14480           champ = t;
14481         }
14482     }
14483
14484   if (!ambiguous_p)
14485     for (t = list; t && t != champ; t = TREE_CHAIN (t))
14486       {
14487         fate = more_specialized_class (champ, t);
14488         if (fate != 1)
14489           {
14490             ambiguous_p = true;
14491             break;
14492           }
14493       }
14494
14495   if (ambiguous_p)
14496     {
14497       const char *str = "candidates are:";
14498       error ("ambiguous class template instantiation for %q#T", type);
14499       for (t = list; t; t = TREE_CHAIN (t))
14500         {
14501           error ("%s %+#T", str, TREE_TYPE (t));
14502           str = "               ";
14503         }
14504       return error_mark_node;
14505     }
14506
14507   return champ;
14508 }
14509
14510 /* Explicitly instantiate DECL.  */
14511
14512 void
14513 do_decl_instantiation (tree decl, tree storage)
14514 {
14515   tree result = NULL_TREE;
14516   int extern_p = 0;
14517
14518   if (!decl || decl == error_mark_node)
14519     /* An error occurred, for which grokdeclarator has already issued
14520        an appropriate message.  */
14521     return;
14522   else if (! DECL_LANG_SPECIFIC (decl))
14523     {
14524       error ("explicit instantiation of non-template %q#D", decl);
14525       return;
14526     }
14527   else if (TREE_CODE (decl) == VAR_DECL)
14528     {
14529       /* There is an asymmetry here in the way VAR_DECLs and
14530          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
14531          the latter, the DECL we get back will be marked as a
14532          template instantiation, and the appropriate
14533          DECL_TEMPLATE_INFO will be set up.  This does not happen for
14534          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
14535          should handle VAR_DECLs as it currently handles
14536          FUNCTION_DECLs.  */
14537       if (!DECL_CLASS_SCOPE_P (decl))
14538         {
14539           error ("%qD is not a static data member of a class template", decl);
14540           return;
14541         }
14542       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
14543       if (!result || TREE_CODE (result) != VAR_DECL)
14544         {
14545           error ("no matching template for %qD found", decl);
14546           return;
14547         }
14548       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
14549         {
14550           error ("type %qT for explicit instantiation %qD does not match "
14551                  "declared type %qT", TREE_TYPE (result), decl,
14552                  TREE_TYPE (decl));
14553           return;
14554         }
14555     }
14556   else if (TREE_CODE (decl) != FUNCTION_DECL)
14557     {
14558       error ("explicit instantiation of %q#D", decl);
14559       return;
14560     }
14561   else
14562     result = decl;
14563
14564   /* Check for various error cases.  Note that if the explicit
14565      instantiation is valid the RESULT will currently be marked as an
14566      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
14567      until we get here.  */
14568
14569   if (DECL_TEMPLATE_SPECIALIZATION (result))
14570     {
14571       /* DR 259 [temp.spec].
14572
14573          Both an explicit instantiation and a declaration of an explicit
14574          specialization shall not appear in a program unless the explicit
14575          instantiation follows a declaration of the explicit specialization.
14576
14577          For a given set of template parameters, if an explicit
14578          instantiation of a template appears after a declaration of an
14579          explicit specialization for that template, the explicit
14580          instantiation has no effect.  */
14581       return;
14582     }
14583   else if (DECL_EXPLICIT_INSTANTIATION (result))
14584     {
14585       /* [temp.spec]
14586
14587          No program shall explicitly instantiate any template more
14588          than once.
14589
14590          We check DECL_NOT_REALLY_EXTERN so as not to complain when
14591          the first instantiation was `extern' and the second is not,
14592          and EXTERN_P for the opposite case.  */
14593       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
14594         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
14595       /* If an "extern" explicit instantiation follows an ordinary
14596          explicit instantiation, the template is instantiated.  */
14597       if (extern_p)
14598         return;
14599     }
14600   else if (!DECL_IMPLICIT_INSTANTIATION (result))
14601     {
14602       error ("no matching template for %qD found", result);
14603       return;
14604     }
14605   else if (!DECL_TEMPLATE_INFO (result))
14606     {
14607       permerror (input_location, "explicit instantiation of non-template %q#D", result);
14608       return;
14609     }
14610
14611   if (storage == NULL_TREE)
14612     ;
14613   else if (storage == ridpointers[(int) RID_EXTERN])
14614     {
14615       if (!in_system_header && (cxx_dialect == cxx98))
14616         pedwarn (OPT_pedantic, 
14617                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
14618                  "instantiations");
14619       extern_p = 1;
14620     }
14621   else
14622     error ("storage class %qD applied to template instantiation", storage);
14623
14624   check_explicit_instantiation_namespace (result);
14625   mark_decl_instantiated (result, extern_p);
14626   if (! extern_p)
14627     instantiate_decl (result, /*defer_ok=*/1,
14628                       /*expl_inst_class_mem_p=*/false);
14629 }
14630
14631 static void
14632 mark_class_instantiated (tree t, int extern_p)
14633 {
14634   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
14635   SET_CLASSTYPE_INTERFACE_KNOWN (t);
14636   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
14637   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
14638   if (! extern_p)
14639     {
14640       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
14641       rest_of_type_compilation (t, 1);
14642     }
14643 }
14644
14645 /* Called from do_type_instantiation through binding_table_foreach to
14646    do recursive instantiation for the type bound in ENTRY.  */
14647 static void
14648 bt_instantiate_type_proc (binding_entry entry, void *data)
14649 {
14650   tree storage = *(tree *) data;
14651
14652   if (MAYBE_CLASS_TYPE_P (entry->type)
14653       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
14654     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
14655 }
14656
14657 /* Called from do_type_instantiation to instantiate a member
14658    (a member function or a static member variable) of an
14659    explicitly instantiated class template.  */
14660 static void
14661 instantiate_class_member (tree decl, int extern_p)
14662 {
14663   mark_decl_instantiated (decl, extern_p);
14664   if (! extern_p)
14665     instantiate_decl (decl, /*defer_ok=*/1,
14666                       /*expl_inst_class_mem_p=*/true);
14667 }
14668
14669 /* Perform an explicit instantiation of template class T.  STORAGE, if
14670    non-null, is the RID for extern, inline or static.  COMPLAIN is
14671    nonzero if this is called from the parser, zero if called recursively,
14672    since the standard is unclear (as detailed below).  */
14673
14674 void
14675 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
14676 {
14677   int extern_p = 0;
14678   int nomem_p = 0;
14679   int static_p = 0;
14680   int previous_instantiation_extern_p = 0;
14681
14682   if (TREE_CODE (t) == TYPE_DECL)
14683     t = TREE_TYPE (t);
14684
14685   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
14686     {
14687       error ("explicit instantiation of non-template type %qT", t);
14688       return;
14689     }
14690
14691   complete_type (t);
14692
14693   if (!COMPLETE_TYPE_P (t))
14694     {
14695       if (complain & tf_error)
14696         error ("explicit instantiation of %q#T before definition of template",
14697                t);
14698       return;
14699     }
14700
14701   if (storage != NULL_TREE)
14702     {
14703       if (!in_system_header)
14704         {
14705           if (storage == ridpointers[(int) RID_EXTERN])
14706             {
14707               if (cxx_dialect == cxx98)
14708                 pedwarn(OPT_pedantic, 
14709                         "ISO C++ 1998 forbids the use of %<extern%> on "
14710                         "explicit instantiations");
14711             }
14712           else
14713             pedwarn(OPT_pedantic, "ISO C++ forbids the use of %qE on explicit "
14714                     "instantiations", storage);
14715         }
14716
14717       if (storage == ridpointers[(int) RID_INLINE])
14718         nomem_p = 1;
14719       else if (storage == ridpointers[(int) RID_EXTERN])
14720         extern_p = 1;
14721       else if (storage == ridpointers[(int) RID_STATIC])
14722         static_p = 1;
14723       else
14724         {
14725           error ("storage class %qD applied to template instantiation",
14726                  storage);
14727           extern_p = 0;
14728         }
14729     }
14730
14731   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
14732     {
14733       /* DR 259 [temp.spec].
14734
14735          Both an explicit instantiation and a declaration of an explicit
14736          specialization shall not appear in a program unless the explicit
14737          instantiation follows a declaration of the explicit specialization.
14738
14739          For a given set of template parameters, if an explicit
14740          instantiation of a template appears after a declaration of an
14741          explicit specialization for that template, the explicit
14742          instantiation has no effect.  */
14743       return;
14744     }
14745   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
14746     {
14747       /* [temp.spec]
14748
14749          No program shall explicitly instantiate any template more
14750          than once.
14751
14752          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
14753          instantiation was `extern'.  If EXTERN_P then the second is.
14754          These cases are OK.  */
14755       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
14756
14757       if (!previous_instantiation_extern_p && !extern_p
14758           && (complain & tf_error))
14759         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
14760
14761       /* If we've already instantiated the template, just return now.  */
14762       if (!CLASSTYPE_INTERFACE_ONLY (t))
14763         return;
14764     }
14765
14766   check_explicit_instantiation_namespace (TYPE_NAME (t));
14767   mark_class_instantiated (t, extern_p);
14768
14769   if (nomem_p)
14770     return;
14771
14772   {
14773     tree tmp;
14774
14775     /* In contrast to implicit instantiation, where only the
14776        declarations, and not the definitions, of members are
14777        instantiated, we have here:
14778
14779          [temp.explicit]
14780
14781          The explicit instantiation of a class template specialization
14782          implies the instantiation of all of its members not
14783          previously explicitly specialized in the translation unit
14784          containing the explicit instantiation.
14785
14786        Of course, we can't instantiate member template classes, since
14787        we don't have any arguments for them.  Note that the standard
14788        is unclear on whether the instantiation of the members are
14789        *explicit* instantiations or not.  However, the most natural
14790        interpretation is that it should be an explicit instantiation.  */
14791
14792     if (! static_p)
14793       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
14794         if (TREE_CODE (tmp) == FUNCTION_DECL
14795             && DECL_TEMPLATE_INSTANTIATION (tmp))
14796           instantiate_class_member (tmp, extern_p);
14797
14798     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
14799       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
14800         instantiate_class_member (tmp, extern_p);
14801
14802     if (CLASSTYPE_NESTED_UTDS (t))
14803       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
14804                              bt_instantiate_type_proc, &storage);
14805   }
14806 }
14807
14808 /* Given a function DECL, which is a specialization of TMPL, modify
14809    DECL to be a re-instantiation of TMPL with the same template
14810    arguments.  TMPL should be the template into which tsubst'ing
14811    should occur for DECL, not the most general template.
14812
14813    One reason for doing this is a scenario like this:
14814
14815      template <class T>
14816      void f(const T&, int i);
14817
14818      void g() { f(3, 7); }
14819
14820      template <class T>
14821      void f(const T& t, const int i) { }
14822
14823    Note that when the template is first instantiated, with
14824    instantiate_template, the resulting DECL will have no name for the
14825    first parameter, and the wrong type for the second.  So, when we go
14826    to instantiate the DECL, we regenerate it.  */
14827
14828 static void
14829 regenerate_decl_from_template (tree decl, tree tmpl)
14830 {
14831   /* The arguments used to instantiate DECL, from the most general
14832      template.  */
14833   tree args;
14834   tree code_pattern;
14835
14836   args = DECL_TI_ARGS (decl);
14837   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
14838
14839   /* Make sure that we can see identifiers, and compute access
14840      correctly.  */
14841   push_access_scope (decl);
14842
14843   if (TREE_CODE (decl) == FUNCTION_DECL)
14844     {
14845       tree decl_parm;
14846       tree pattern_parm;
14847       tree specs;
14848       int args_depth;
14849       int parms_depth;
14850
14851       args_depth = TMPL_ARGS_DEPTH (args);
14852       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
14853       if (args_depth > parms_depth)
14854         args = get_innermost_template_args (args, parms_depth);
14855
14856       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
14857                                               args, tf_error, NULL_TREE);
14858       if (specs)
14859         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
14860                                                     specs);
14861
14862       /* Merge parameter declarations.  */
14863       decl_parm = skip_artificial_parms_for (decl,
14864                                              DECL_ARGUMENTS (decl));
14865       pattern_parm
14866         = skip_artificial_parms_for (code_pattern,
14867                                      DECL_ARGUMENTS (code_pattern));
14868       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
14869         {
14870           tree parm_type;
14871           tree attributes;
14872           
14873           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14874             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
14875           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
14876                               NULL_TREE);
14877           parm_type = type_decays_to (parm_type);
14878           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14879             TREE_TYPE (decl_parm) = parm_type;
14880           attributes = DECL_ATTRIBUTES (pattern_parm);
14881           if (DECL_ATTRIBUTES (decl_parm) != attributes)
14882             {
14883               DECL_ATTRIBUTES (decl_parm) = attributes;
14884               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14885             }
14886           decl_parm = TREE_CHAIN (decl_parm);
14887           pattern_parm = TREE_CHAIN (pattern_parm);
14888         }
14889       /* Merge any parameters that match with the function parameter
14890          pack.  */
14891       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
14892         {
14893           int i, len;
14894           tree expanded_types;
14895           /* Expand the TYPE_PACK_EXPANSION that provides the types for
14896              the parameters in this function parameter pack.  */
14897           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
14898                                                  args, tf_error, NULL_TREE);
14899           len = TREE_VEC_LENGTH (expanded_types);
14900           for (i = 0; i < len; i++)
14901             {
14902               tree parm_type;
14903               tree attributes;
14904           
14905               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14906                 /* Rename the parameter to include the index.  */
14907                 DECL_NAME (decl_parm) = 
14908                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
14909               parm_type = TREE_VEC_ELT (expanded_types, i);
14910               parm_type = type_decays_to (parm_type);
14911               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14912                 TREE_TYPE (decl_parm) = parm_type;
14913               attributes = DECL_ATTRIBUTES (pattern_parm);
14914               if (DECL_ATTRIBUTES (decl_parm) != attributes)
14915                 {
14916                   DECL_ATTRIBUTES (decl_parm) = attributes;
14917                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14918                 }
14919               decl_parm = TREE_CHAIN (decl_parm);
14920             }
14921         }
14922       /* Merge additional specifiers from the CODE_PATTERN.  */
14923       if (DECL_DECLARED_INLINE_P (code_pattern)
14924           && !DECL_DECLARED_INLINE_P (decl))
14925         DECL_DECLARED_INLINE_P (decl) = 1;
14926     }
14927   else if (TREE_CODE (decl) == VAR_DECL)
14928     DECL_INITIAL (decl) =
14929       tsubst_expr (DECL_INITIAL (code_pattern), args,
14930                    tf_error, DECL_TI_TEMPLATE (decl),
14931                    /*integral_constant_expression_p=*/false);
14932   else
14933     gcc_unreachable ();
14934
14935   pop_access_scope (decl);
14936 }
14937
14938 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14939    substituted to get DECL.  */
14940
14941 tree
14942 template_for_substitution (tree decl)
14943 {
14944   tree tmpl = DECL_TI_TEMPLATE (decl);
14945
14946   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14947      for the instantiation.  This is not always the most general
14948      template.  Consider, for example:
14949
14950         template <class T>
14951         struct S { template <class U> void f();
14952                    template <> void f<int>(); };
14953
14954      and an instantiation of S<double>::f<int>.  We want TD to be the
14955      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
14956   while (/* An instantiation cannot have a definition, so we need a
14957             more general template.  */
14958          DECL_TEMPLATE_INSTANTIATION (tmpl)
14959            /* We must also deal with friend templates.  Given:
14960
14961                 template <class T> struct S {
14962                   template <class U> friend void f() {};
14963                 };
14964
14965               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14966               so far as the language is concerned, but that's still
14967               where we get the pattern for the instantiation from.  On
14968               other hand, if the definition comes outside the class, say:
14969
14970                 template <class T> struct S {
14971                   template <class U> friend void f();
14972                 };
14973                 template <class U> friend void f() {}
14974
14975               we don't need to look any further.  That's what the check for
14976               DECL_INITIAL is for.  */
14977           || (TREE_CODE (decl) == FUNCTION_DECL
14978               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14979               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14980     {
14981       /* The present template, TD, should not be a definition.  If it
14982          were a definition, we should be using it!  Note that we
14983          cannot restructure the loop to just keep going until we find
14984          a template with a definition, since that might go too far if
14985          a specialization was declared, but not defined.  */
14986       gcc_assert (TREE_CODE (decl) != VAR_DECL
14987                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14988
14989       /* Fetch the more general template.  */
14990       tmpl = DECL_TI_TEMPLATE (tmpl);
14991     }
14992
14993   return tmpl;
14994 }
14995
14996 /* Produce the definition of D, a _DECL generated from a template.  If
14997    DEFER_OK is nonzero, then we don't have to actually do the
14998    instantiation now; we just have to do it sometime.  Normally it is
14999    an error if this is an explicit instantiation but D is undefined.
15000    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
15001    explicitly instantiated class template.  */
15002
15003 tree
15004 instantiate_decl (tree d, int defer_ok,
15005                   bool expl_inst_class_mem_p)
15006 {
15007   tree tmpl = DECL_TI_TEMPLATE (d);
15008   tree gen_args;
15009   tree args;
15010   tree td;
15011   tree code_pattern;
15012   tree spec;
15013   tree gen_tmpl;
15014   bool pattern_defined;
15015   int need_push;
15016   location_t saved_loc = input_location;
15017   bool external_p;
15018
15019   /* This function should only be used to instantiate templates for
15020      functions and static member variables.  */
15021   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
15022               || TREE_CODE (d) == VAR_DECL);
15023
15024   /* Variables are never deferred; if instantiation is required, they
15025      are instantiated right away.  That allows for better code in the
15026      case that an expression refers to the value of the variable --
15027      if the variable has a constant value the referring expression can
15028      take advantage of that fact.  */
15029   if (TREE_CODE (d) == VAR_DECL)
15030     defer_ok = 0;
15031
15032   /* Don't instantiate cloned functions.  Instead, instantiate the
15033      functions they cloned.  */
15034   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
15035     d = DECL_CLONED_FUNCTION (d);
15036
15037   if (DECL_TEMPLATE_INSTANTIATED (d))
15038     /* D has already been instantiated.  It might seem reasonable to
15039        check whether or not D is an explicit instantiation, and, if so,
15040        stop here.  But when an explicit instantiation is deferred
15041        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
15042        is set, even though we still need to do the instantiation.  */
15043     return d;
15044
15045   /* If we already have a specialization of this declaration, then
15046      there's no reason to instantiate it.  Note that
15047      retrieve_specialization gives us both instantiations and
15048      specializations, so we must explicitly check
15049      DECL_TEMPLATE_SPECIALIZATION.  */
15050   gen_tmpl = most_general_template (tmpl);
15051   gen_args = DECL_TI_ARGS (d);
15052   spec = retrieve_specialization (gen_tmpl, gen_args,
15053                                   /*class_specializations_p=*/false);
15054   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
15055     return spec;
15056
15057   /* This needs to happen before any tsubsting.  */
15058   if (! push_tinst_level (d))
15059     return d;
15060
15061   timevar_push (TV_PARSE);
15062
15063   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
15064      for the instantiation.  */
15065   td = template_for_substitution (d);
15066   code_pattern = DECL_TEMPLATE_RESULT (td);
15067
15068   /* We should never be trying to instantiate a member of a class
15069      template or partial specialization.  */
15070   gcc_assert (d != code_pattern);
15071
15072   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
15073       || DECL_TEMPLATE_SPECIALIZATION (td))
15074     /* In the case of a friend template whose definition is provided
15075        outside the class, we may have too many arguments.  Drop the
15076        ones we don't need.  The same is true for specializations.  */
15077     args = get_innermost_template_args
15078       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
15079   else
15080     args = gen_args;
15081
15082   if (TREE_CODE (d) == FUNCTION_DECL)
15083     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
15084   else
15085     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
15086
15087   /* We may be in the middle of deferred access check.  Disable it now.  */
15088   push_deferring_access_checks (dk_no_deferred);
15089
15090   /* Unless an explicit instantiation directive has already determined
15091      the linkage of D, remember that a definition is available for
15092      this entity.  */
15093   if (pattern_defined
15094       && !DECL_INTERFACE_KNOWN (d)
15095       && !DECL_NOT_REALLY_EXTERN (d))
15096     mark_definable (d);
15097
15098   input_location = DECL_SOURCE_LOCATION (d);
15099
15100   /* If D is a member of an explicitly instantiated class template,
15101      and no definition is available, treat it like an implicit
15102      instantiation.  */
15103   if (!pattern_defined && expl_inst_class_mem_p
15104       && DECL_EXPLICIT_INSTANTIATION (d))
15105     {
15106       DECL_NOT_REALLY_EXTERN (d) = 0;
15107       DECL_INTERFACE_KNOWN (d) = 0;
15108       SET_DECL_IMPLICIT_INSTANTIATION (d);
15109     }
15110
15111   if (!defer_ok)
15112     {
15113       /* Recheck the substitutions to obtain any warning messages
15114          about ignoring cv qualifiers.  */
15115       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
15116       tree type = TREE_TYPE (gen);
15117
15118       /* Make sure that we can see identifiers, and compute access
15119          correctly.  D is already the target FUNCTION_DECL with the
15120          right context.  */
15121       push_access_scope (d);
15122
15123       if (TREE_CODE (gen) == FUNCTION_DECL)
15124         {
15125           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
15126           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
15127                                           d);
15128           /* Don't simply tsubst the function type, as that will give
15129              duplicate warnings about poor parameter qualifications.
15130              The function arguments are the same as the decl_arguments
15131              without the top level cv qualifiers.  */
15132           type = TREE_TYPE (type);
15133         }
15134       tsubst (type, gen_args, tf_warning_or_error, d);
15135
15136       pop_access_scope (d);
15137     }
15138
15139   /* Check to see whether we know that this template will be
15140      instantiated in some other file, as with "extern template"
15141      extension.  */
15142   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
15143   /* In general, we do not instantiate such templates...  */
15144   if (external_p
15145       /* ... but we instantiate inline functions so that we can inline
15146          them and ... */
15147       && ! (TREE_CODE (d) == FUNCTION_DECL
15148             && possibly_inlined_p (d))
15149       /* ... we instantiate static data members whose values are
15150          needed in integral constant expressions.  */
15151       && ! (TREE_CODE (d) == VAR_DECL
15152             && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
15153     goto out;
15154   /* Defer all other templates, unless we have been explicitly
15155      forbidden from doing so.  */
15156   if (/* If there is no definition, we cannot instantiate the
15157          template.  */
15158       ! pattern_defined
15159       /* If it's OK to postpone instantiation, do so.  */
15160       || defer_ok
15161       /* If this is a static data member that will be defined
15162          elsewhere, we don't want to instantiate the entire data
15163          member, but we do want to instantiate the initializer so that
15164          we can substitute that elsewhere.  */
15165       || (external_p && TREE_CODE (d) == VAR_DECL))
15166     {
15167       /* The definition of the static data member is now required so
15168          we must substitute the initializer.  */
15169       if (TREE_CODE (d) == VAR_DECL
15170           && !DECL_INITIAL (d)
15171           && DECL_INITIAL (code_pattern))
15172         {
15173           tree ns;
15174           tree init;
15175
15176           ns = decl_namespace_context (d);
15177           push_nested_namespace (ns);
15178           push_nested_class (DECL_CONTEXT (d));
15179           init = tsubst_expr (DECL_INITIAL (code_pattern),
15180                               args,
15181                               tf_warning_or_error, NULL_TREE,
15182                               /*integral_constant_expression_p=*/false);
15183           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
15184                           /*asmspec_tree=*/NULL_TREE,
15185                           LOOKUP_ONLYCONVERTING);
15186           pop_nested_class ();
15187           pop_nested_namespace (ns);
15188         }
15189
15190       /* We restore the source position here because it's used by
15191          add_pending_template.  */
15192       input_location = saved_loc;
15193
15194       if (at_eof && !pattern_defined
15195           && DECL_EXPLICIT_INSTANTIATION (d))
15196         /* [temp.explicit]
15197
15198            The definition of a non-exported function template, a
15199            non-exported member function template, or a non-exported
15200            member function or static data member of a class template
15201            shall be present in every translation unit in which it is
15202            explicitly instantiated.  */
15203         permerror (input_location,  "explicit instantiation of %qD "
15204                    "but no definition available", d);
15205
15206       /* ??? Historically, we have instantiated inline functions, even
15207          when marked as "extern template".  */
15208       if (!(external_p && TREE_CODE (d) == VAR_DECL))
15209         add_pending_template (d);
15210       goto out;
15211     }
15212   /* Tell the repository that D is available in this translation unit
15213      -- and see if it is supposed to be instantiated here.  */
15214   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
15215     {
15216       /* In a PCH file, despite the fact that the repository hasn't
15217          requested instantiation in the PCH it is still possible that
15218          an instantiation will be required in a file that includes the
15219          PCH.  */
15220       if (pch_file)
15221         add_pending_template (d);
15222       /* Instantiate inline functions so that the inliner can do its
15223          job, even though we'll not be emitting a copy of this
15224          function.  */
15225       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
15226         goto out;
15227     }
15228
15229   need_push = !cfun || !global_bindings_p ();
15230   if (need_push)
15231     push_to_top_level ();
15232
15233   /* Mark D as instantiated so that recursive calls to
15234      instantiate_decl do not try to instantiate it again.  */
15235   DECL_TEMPLATE_INSTANTIATED (d) = 1;
15236
15237   /* Regenerate the declaration in case the template has been modified
15238      by a subsequent redeclaration.  */
15239   regenerate_decl_from_template (d, td);
15240
15241   /* We already set the file and line above.  Reset them now in case
15242      they changed as a result of calling regenerate_decl_from_template.  */
15243   input_location = DECL_SOURCE_LOCATION (d);
15244
15245   if (TREE_CODE (d) == VAR_DECL)
15246     {
15247       tree init;
15248
15249       /* Clear out DECL_RTL; whatever was there before may not be right
15250          since we've reset the type of the declaration.  */
15251       SET_DECL_RTL (d, NULL_RTX);
15252       DECL_IN_AGGR_P (d) = 0;
15253
15254       /* The initializer is placed in DECL_INITIAL by
15255          regenerate_decl_from_template.  Pull it out so that
15256          finish_decl can process it.  */
15257       init = DECL_INITIAL (d);
15258       DECL_INITIAL (d) = NULL_TREE;
15259       DECL_INITIALIZED_P (d) = 0;
15260
15261       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
15262          initializer.  That function will defer actual emission until
15263          we have a chance to determine linkage.  */
15264       DECL_EXTERNAL (d) = 0;
15265
15266       /* Enter the scope of D so that access-checking works correctly.  */
15267       push_nested_class (DECL_CONTEXT (d));
15268       finish_decl (d, init, NULL_TREE);
15269       pop_nested_class ();
15270     }
15271   else if (TREE_CODE (d) == FUNCTION_DECL)
15272     {
15273       htab_t saved_local_specializations;
15274       tree subst_decl;
15275       tree tmpl_parm;
15276       tree spec_parm;
15277
15278       /* Save away the current list, in case we are instantiating one
15279          template from within the body of another.  */
15280       saved_local_specializations = local_specializations;
15281
15282       /* Set up the list of local specializations.  */
15283       local_specializations = htab_create (37,
15284                                            hash_local_specialization,
15285                                            eq_local_specializations,
15286                                            NULL);
15287
15288       /* Set up context.  */
15289       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
15290
15291       /* Create substitution entries for the parameters.  */
15292       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
15293       tmpl_parm = DECL_ARGUMENTS (subst_decl);
15294       spec_parm = DECL_ARGUMENTS (d);
15295       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
15296         {
15297           register_local_specialization (spec_parm, tmpl_parm);
15298           spec_parm = skip_artificial_parms_for (d, spec_parm);
15299           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
15300         }
15301       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
15302         {
15303           register_local_specialization (spec_parm, tmpl_parm);
15304           tmpl_parm = TREE_CHAIN (tmpl_parm);
15305           spec_parm = TREE_CHAIN (spec_parm);
15306         }
15307       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
15308         {
15309           /* Collect all of the extra "packed" parameters into an
15310              argument pack.  */
15311           tree parmvec;
15312           tree parmtypevec;
15313           tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
15314           tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
15315           int i, len = 0;
15316           tree t;
15317           
15318           /* Count how many parameters remain.  */
15319           for (t = spec_parm; t; t = TREE_CHAIN (t))
15320             len++;
15321
15322           /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
15323           parmvec = make_tree_vec (len);
15324           parmtypevec = make_tree_vec (len);
15325           for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
15326             {
15327               TREE_VEC_ELT (parmvec, i) = spec_parm;
15328               TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
15329             }
15330
15331           /* Build the argument packs.  */
15332           SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
15333           SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
15334           TREE_TYPE (argpack) = argtypepack;
15335           
15336           /* Register the (value) argument pack as a specialization of
15337              TMPL_PARM, then move on.  */
15338           register_local_specialization (argpack, tmpl_parm);
15339           tmpl_parm = TREE_CHAIN (tmpl_parm);
15340         }
15341       gcc_assert (!spec_parm);
15342
15343       /* Substitute into the body of the function.  */
15344       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
15345                    tf_warning_or_error, tmpl,
15346                    /*integral_constant_expression_p=*/false);
15347
15348       /* Set the current input_location to the end of the function
15349          so that finish_function knows where we are.  */
15350       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
15351
15352       /* We don't need the local specializations any more.  */
15353       htab_delete (local_specializations);
15354       local_specializations = saved_local_specializations;
15355
15356       /* Finish the function.  */
15357       d = finish_function (0);
15358       expand_or_defer_fn (d);
15359     }
15360
15361   /* We're not deferring instantiation any more.  */
15362   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
15363
15364   if (need_push)
15365     pop_from_top_level ();
15366
15367 out:
15368   input_location = saved_loc;
15369   pop_deferring_access_checks ();
15370   pop_tinst_level ();
15371
15372   timevar_pop (TV_PARSE);
15373
15374   return d;
15375 }
15376
15377 /* Run through the list of templates that we wish we could
15378    instantiate, and instantiate any we can.  RETRIES is the
15379    number of times we retry pending template instantiation.  */
15380
15381 void
15382 instantiate_pending_templates (int retries)
15383 {
15384   int reconsider;
15385   location_t saved_loc = input_location;
15386
15387   /* Instantiating templates may trigger vtable generation.  This in turn
15388      may require further template instantiations.  We place a limit here
15389      to avoid infinite loop.  */
15390   if (pending_templates && retries >= max_tinst_depth)
15391     {
15392       tree decl = pending_templates->tinst->decl;
15393
15394       error ("template instantiation depth exceeds maximum of %d"
15395              " instantiating %q+D, possibly from virtual table generation"
15396              " (use -ftemplate-depth-NN to increase the maximum)",
15397              max_tinst_depth, decl);
15398       if (TREE_CODE (decl) == FUNCTION_DECL)
15399         /* Pretend that we defined it.  */
15400         DECL_INITIAL (decl) = error_mark_node;
15401       return;
15402     }
15403
15404   do
15405     {
15406       struct pending_template **t = &pending_templates;
15407       struct pending_template *last = NULL;
15408       reconsider = 0;
15409       while (*t)
15410         {
15411           tree instantiation = reopen_tinst_level ((*t)->tinst);
15412           bool complete = false;
15413
15414           if (TYPE_P (instantiation))
15415             {
15416               tree fn;
15417
15418               if (!COMPLETE_TYPE_P (instantiation))
15419                 {
15420                   instantiate_class_template (instantiation);
15421                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
15422                     for (fn = TYPE_METHODS (instantiation);
15423                          fn;
15424                          fn = TREE_CHAIN (fn))
15425                       if (! DECL_ARTIFICIAL (fn))
15426                         instantiate_decl (fn,
15427                                           /*defer_ok=*/0,
15428                                           /*expl_inst_class_mem_p=*/false);
15429                   if (COMPLETE_TYPE_P (instantiation))
15430                     reconsider = 1;
15431                 }
15432
15433               complete = COMPLETE_TYPE_P (instantiation);
15434             }
15435           else
15436             {
15437               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
15438                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
15439                 {
15440                   instantiation
15441                     = instantiate_decl (instantiation,
15442                                         /*defer_ok=*/0,
15443                                         /*expl_inst_class_mem_p=*/false);
15444                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
15445                     reconsider = 1;
15446                 }
15447
15448               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
15449                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
15450             }
15451
15452           if (complete)
15453             /* If INSTANTIATION has been instantiated, then we don't
15454                need to consider it again in the future.  */
15455             *t = (*t)->next;
15456           else
15457             {
15458               last = *t;
15459               t = &(*t)->next;
15460             }
15461           tinst_depth = 0;
15462           current_tinst_level = NULL;
15463         }
15464       last_pending_template = last;
15465     }
15466   while (reconsider);
15467
15468   input_location = saved_loc;
15469 }
15470
15471 /* Substitute ARGVEC into T, which is a list of initializers for
15472    either base class or a non-static data member.  The TREE_PURPOSEs
15473    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
15474    instantiate_decl.  */
15475
15476 static tree
15477 tsubst_initializer_list (tree t, tree argvec)
15478 {
15479   tree inits = NULL_TREE;
15480
15481   for (; t; t = TREE_CHAIN (t))
15482     {
15483       tree decl;
15484       tree init;
15485       tree expanded_bases = NULL_TREE;
15486       tree expanded_arguments = NULL_TREE;
15487       int i, len = 1;
15488
15489       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
15490         {
15491           tree expr;
15492           tree arg;
15493
15494           /* Expand the base class expansion type into separate base
15495              classes.  */
15496           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
15497                                                  tf_warning_or_error,
15498                                                  NULL_TREE);
15499           if (expanded_bases == error_mark_node)
15500             continue;
15501           
15502           /* We'll be building separate TREE_LISTs of arguments for
15503              each base.  */
15504           len = TREE_VEC_LENGTH (expanded_bases);
15505           expanded_arguments = make_tree_vec (len);
15506           for (i = 0; i < len; i++)
15507             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
15508
15509           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
15510              expand each argument in the TREE_VALUE of t.  */
15511           expr = make_node (EXPR_PACK_EXPANSION);
15512           PACK_EXPANSION_PARAMETER_PACKS (expr) =
15513             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
15514
15515           if (TREE_VALUE (t) == void_type_node)
15516             /* VOID_TYPE_NODE is used to indicate
15517                value-initialization.  */
15518             {
15519               for (i = 0; i < len; i++)
15520                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
15521             }
15522           else
15523             {
15524               /* Substitute parameter packs into each argument in the
15525                  TREE_LIST.  */
15526               in_base_initializer = 1;
15527               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
15528                 {
15529                   tree expanded_exprs;
15530
15531                   /* Expand the argument.  */
15532                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
15533                   expanded_exprs 
15534                     = tsubst_pack_expansion (expr, argvec,
15535                                              tf_warning_or_error,
15536                                              NULL_TREE);
15537                   if (expanded_exprs == error_mark_node)
15538                     continue;
15539
15540                   /* Prepend each of the expanded expressions to the
15541                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
15542                   for (i = 0; i < len; i++)
15543                     {
15544                       TREE_VEC_ELT (expanded_arguments, i) = 
15545                         tree_cons (NULL_TREE, 
15546                                    TREE_VEC_ELT (expanded_exprs, i),
15547                                    TREE_VEC_ELT (expanded_arguments, i));
15548                     }
15549                 }
15550               in_base_initializer = 0;
15551
15552               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
15553                  since we built them backwards.  */
15554               for (i = 0; i < len; i++)
15555                 {
15556                   TREE_VEC_ELT (expanded_arguments, i) = 
15557                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
15558                 }
15559             }
15560         }
15561
15562       for (i = 0; i < len; ++i)
15563         {
15564           if (expanded_bases)
15565             {
15566               decl = TREE_VEC_ELT (expanded_bases, i);
15567               decl = expand_member_init (decl);
15568               init = TREE_VEC_ELT (expanded_arguments, i);
15569             }
15570           else
15571             {
15572               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
15573                                   tf_warning_or_error, NULL_TREE);
15574
15575               decl = expand_member_init (decl);
15576               if (decl && !DECL_P (decl))
15577                 in_base_initializer = 1;
15578
15579               init = tsubst_expr (TREE_VALUE (t), argvec, 
15580                                   tf_warning_or_error, NULL_TREE,
15581                                   /*integral_constant_expression_p=*/false);
15582               in_base_initializer = 0;
15583             }
15584
15585           if (decl)
15586             {
15587               init = build_tree_list (decl, init);
15588               TREE_CHAIN (init) = inits;
15589               inits = init;
15590             }
15591         }
15592     }
15593   return inits;
15594 }
15595
15596 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
15597
15598 static void
15599 set_current_access_from_decl (tree decl)
15600 {
15601   if (TREE_PRIVATE (decl))
15602     current_access_specifier = access_private_node;
15603   else if (TREE_PROTECTED (decl))
15604     current_access_specifier = access_protected_node;
15605   else
15606     current_access_specifier = access_public_node;
15607 }
15608
15609 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
15610    is the instantiation (which should have been created with
15611    start_enum) and ARGS are the template arguments to use.  */
15612
15613 static void
15614 tsubst_enum (tree tag, tree newtag, tree args)
15615 {
15616   tree e;
15617
15618   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
15619     {
15620       tree value;
15621       tree decl;
15622
15623       decl = TREE_VALUE (e);
15624       /* Note that in a template enum, the TREE_VALUE is the
15625          CONST_DECL, not the corresponding INTEGER_CST.  */
15626       value = tsubst_expr (DECL_INITIAL (decl),
15627                            args, tf_warning_or_error, NULL_TREE,
15628                            /*integral_constant_expression_p=*/true);
15629
15630       /* Give this enumeration constant the correct access.  */
15631       set_current_access_from_decl (decl);
15632
15633       /* Actually build the enumerator itself.  */
15634       build_enumerator (DECL_NAME (decl), value, newtag);
15635     }
15636
15637   finish_enum (newtag);
15638   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
15639     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
15640 }
15641
15642 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
15643    its type -- but without substituting the innermost set of template
15644    arguments.  So, innermost set of template parameters will appear in
15645    the type.  */
15646
15647 tree
15648 get_mostly_instantiated_function_type (tree decl)
15649 {
15650   tree fn_type;
15651   tree tmpl;
15652   tree targs;
15653   tree tparms;
15654   int parm_depth;
15655
15656   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
15657   targs = DECL_TI_ARGS (decl);
15658   tparms = DECL_TEMPLATE_PARMS (tmpl);
15659   parm_depth = TMPL_PARMS_DEPTH (tparms);
15660
15661   /* There should be as many levels of arguments as there are levels
15662      of parameters.  */
15663   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
15664
15665   fn_type = TREE_TYPE (tmpl);
15666
15667   if (parm_depth == 1)
15668     /* No substitution is necessary.  */
15669     ;
15670   else
15671     {
15672       int i, save_access_control;
15673       tree partial_args;
15674
15675       /* Replace the innermost level of the TARGS with NULL_TREEs to
15676          let tsubst know not to substitute for those parameters.  */
15677       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
15678       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
15679         SET_TMPL_ARGS_LEVEL (partial_args, i,
15680                              TMPL_ARGS_LEVEL (targs, i));
15681       SET_TMPL_ARGS_LEVEL (partial_args,
15682                            TMPL_ARGS_DEPTH (targs),
15683                            make_tree_vec (DECL_NTPARMS (tmpl)));
15684
15685       /* Disable access control as this function is used only during
15686          name-mangling.  */
15687       save_access_control = flag_access_control;
15688       flag_access_control = 0;
15689
15690       ++processing_template_decl;
15691       /* Now, do the (partial) substitution to figure out the
15692          appropriate function type.  */
15693       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
15694       --processing_template_decl;
15695
15696       /* Substitute into the template parameters to obtain the real
15697          innermost set of parameters.  This step is important if the
15698          innermost set of template parameters contains value
15699          parameters whose types depend on outer template parameters.  */
15700       TREE_VEC_LENGTH (partial_args)--;
15701       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
15702
15703       flag_access_control = save_access_control;
15704     }
15705
15706   return fn_type;
15707 }
15708
15709 /* Return truthvalue if we're processing a template different from
15710    the last one involved in diagnostics.  */
15711 int
15712 problematic_instantiation_changed (void)
15713 {
15714   return last_template_error_tick != tinst_level_tick;
15715 }
15716
15717 /* Remember current template involved in diagnostics.  */
15718 void
15719 record_last_problematic_instantiation (void)
15720 {
15721   last_template_error_tick = tinst_level_tick;
15722 }
15723
15724 struct tinst_level *
15725 current_instantiation (void)
15726 {
15727   return current_tinst_level;
15728 }
15729
15730 /* [temp.param] Check that template non-type parm TYPE is of an allowable
15731    type. Return zero for ok, nonzero for disallowed. Issue error and
15732    warning messages under control of COMPLAIN.  */
15733
15734 static int
15735 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
15736 {
15737   if (INTEGRAL_TYPE_P (type))
15738     return 0;
15739   else if (POINTER_TYPE_P (type))
15740     return 0;
15741   else if (TYPE_PTR_TO_MEMBER_P (type))
15742     return 0;
15743   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
15744     return 0;
15745   else if (TREE_CODE (type) == TYPENAME_TYPE)
15746     return 0;
15747
15748   if (complain & tf_error)
15749     error ("%q#T is not a valid type for a template constant parameter", type);
15750   return 1;
15751 }
15752
15753 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
15754    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
15755
15756 static bool
15757 dependent_type_p_r (tree type)
15758 {
15759   tree scope;
15760
15761   /* [temp.dep.type]
15762
15763      A type is dependent if it is:
15764
15765      -- a template parameter. Template template parameters are types
15766         for us (since TYPE_P holds true for them) so we handle
15767         them here.  */
15768   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
15769       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
15770     return true;
15771   /* -- a qualified-id with a nested-name-specifier which contains a
15772         class-name that names a dependent type or whose unqualified-id
15773         names a dependent type.  */
15774   if (TREE_CODE (type) == TYPENAME_TYPE)
15775     return true;
15776   /* -- a cv-qualified type where the cv-unqualified type is
15777         dependent.  */
15778   type = TYPE_MAIN_VARIANT (type);
15779   /* -- a compound type constructed from any dependent type.  */
15780   if (TYPE_PTR_TO_MEMBER_P (type))
15781     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
15782             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
15783                                            (type)));
15784   else if (TREE_CODE (type) == POINTER_TYPE
15785            || TREE_CODE (type) == REFERENCE_TYPE)
15786     return dependent_type_p (TREE_TYPE (type));
15787   else if (TREE_CODE (type) == FUNCTION_TYPE
15788            || TREE_CODE (type) == METHOD_TYPE)
15789     {
15790       tree arg_type;
15791
15792       if (dependent_type_p (TREE_TYPE (type)))
15793         return true;
15794       for (arg_type = TYPE_ARG_TYPES (type);
15795            arg_type;
15796            arg_type = TREE_CHAIN (arg_type))
15797         if (dependent_type_p (TREE_VALUE (arg_type)))
15798           return true;
15799       return false;
15800     }
15801   /* -- an array type constructed from any dependent type or whose
15802         size is specified by a constant expression that is
15803         value-dependent.  */
15804   if (TREE_CODE (type) == ARRAY_TYPE)
15805     {
15806       if (TYPE_DOMAIN (type)
15807           && dependent_type_p (TYPE_DOMAIN (type)))
15808         return true;
15809       return dependent_type_p (TREE_TYPE (type));
15810     }
15811   else if (TREE_CODE (type) == INTEGER_TYPE
15812            && !TREE_CONSTANT (TYPE_MAX_VALUE (type)))
15813     {
15814       /* If this is the TYPE_DOMAIN of an array type, consider it
15815          dependent.  */
15816       return (value_dependent_expression_p (TYPE_MAX_VALUE (type))
15817               || type_dependent_expression_p (TYPE_MAX_VALUE (type)));
15818     }
15819
15820   /* -- a template-id in which either the template name is a template
15821      parameter ...  */
15822   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
15823     return true;
15824   /* ... or any of the template arguments is a dependent type or
15825         an expression that is type-dependent or value-dependent.  */
15826   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
15827            && (any_dependent_template_arguments_p
15828                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
15829     return true;
15830
15831   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
15832      argument of the `typeof' expression is not type-dependent, then
15833      it should already been have resolved.  */
15834   if (TREE_CODE (type) == TYPEOF_TYPE
15835       || TREE_CODE (type) == DECLTYPE_TYPE)
15836     return true;
15837
15838   /* A template argument pack is dependent if any of its packed
15839      arguments are.  */
15840   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
15841     {
15842       tree args = ARGUMENT_PACK_ARGS (type);
15843       int i, len = TREE_VEC_LENGTH (args);
15844       for (i = 0; i < len; ++i)
15845         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15846           return true;
15847     }
15848
15849   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
15850      be template parameters.  */
15851   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
15852     return true;
15853
15854   /* The standard does not specifically mention types that are local
15855      to template functions or local classes, but they should be
15856      considered dependent too.  For example:
15857
15858        template <int I> void f() {
15859          enum E { a = I };
15860          S<sizeof (E)> s;
15861        }
15862
15863      The size of `E' cannot be known until the value of `I' has been
15864      determined.  Therefore, `E' must be considered dependent.  */
15865   scope = TYPE_CONTEXT (type);
15866   if (scope && TYPE_P (scope))
15867     return dependent_type_p (scope);
15868   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15869     return type_dependent_expression_p (scope);
15870
15871   /* Other types are non-dependent.  */
15872   return false;
15873 }
15874
15875 /* Returns TRUE if TYPE is dependent, in the sense of
15876    [temp.dep.type].  */
15877
15878 bool
15879 dependent_type_p (tree type)
15880 {
15881   /* If there are no template parameters in scope, then there can't be
15882      any dependent types.  */
15883   if (!processing_template_decl)
15884     {
15885       /* If we are not processing a template, then nobody should be
15886          providing us with a dependent type.  */
15887       gcc_assert (type);
15888       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
15889       return false;
15890     }
15891
15892   /* If the type is NULL, we have not computed a type for the entity
15893      in question; in that case, the type is dependent.  */
15894   if (!type)
15895     return true;
15896
15897   /* Erroneous types can be considered non-dependent.  */
15898   if (type == error_mark_node)
15899     return false;
15900
15901   /* If we have not already computed the appropriate value for TYPE,
15902      do so now.  */
15903   if (!TYPE_DEPENDENT_P_VALID (type))
15904     {
15905       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
15906       TYPE_DEPENDENT_P_VALID (type) = 1;
15907     }
15908
15909   return TYPE_DEPENDENT_P (type);
15910 }
15911
15912 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
15913
15914 static bool
15915 dependent_scope_ref_p (tree expression, bool criterion (tree))
15916 {
15917   tree scope;
15918   tree name;
15919
15920   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15921
15922   if (!TYPE_P (TREE_OPERAND (expression, 0)))
15923     return true;
15924
15925   scope = TREE_OPERAND (expression, 0);
15926   name = TREE_OPERAND (expression, 1);
15927
15928   /* [temp.dep.expr]
15929
15930      An id-expression is type-dependent if it contains a
15931      nested-name-specifier that contains a class-name that names a
15932      dependent type.  */
15933   /* The suggested resolution to Core Issue 2 implies that if the
15934      qualifying type is the current class, then we must peek
15935      inside it.  */
15936   if (DECL_P (name)
15937       && currently_open_class (scope)
15938       && !criterion (name))
15939     return false;
15940   if (dependent_type_p (scope))
15941     return true;
15942
15943   return false;
15944 }
15945
15946 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15947    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
15948    expression.  */
15949
15950 bool
15951 value_dependent_expression_p (tree expression)
15952 {
15953   if (!processing_template_decl)
15954     return false;
15955
15956   /* A name declared with a dependent type.  */
15957   if (DECL_P (expression) && type_dependent_expression_p (expression))
15958     return true;
15959
15960   switch (TREE_CODE (expression))
15961     {
15962     case IDENTIFIER_NODE:
15963       /* A name that has not been looked up -- must be dependent.  */
15964       return true;
15965
15966     case TEMPLATE_PARM_INDEX:
15967       /* A non-type template parm.  */
15968       return true;
15969
15970     case CONST_DECL:
15971       /* A non-type template parm.  */
15972       if (DECL_TEMPLATE_PARM_P (expression))
15973         return true;
15974       return value_dependent_expression_p (DECL_INITIAL (expression));
15975
15976     case VAR_DECL:
15977        /* A constant with integral or enumeration type and is initialized
15978           with an expression that is value-dependent.  */
15979       if (DECL_INITIAL (expression)
15980           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15981           && value_dependent_expression_p (DECL_INITIAL (expression)))
15982         return true;
15983       return false;
15984
15985     case DYNAMIC_CAST_EXPR:
15986     case STATIC_CAST_EXPR:
15987     case CONST_CAST_EXPR:
15988     case REINTERPRET_CAST_EXPR:
15989     case CAST_EXPR:
15990       /* These expressions are value-dependent if the type to which
15991          the cast occurs is dependent or the expression being casted
15992          is value-dependent.  */
15993       {
15994         tree type = TREE_TYPE (expression);
15995
15996         if (dependent_type_p (type))
15997           return true;
15998
15999         /* A functional cast has a list of operands.  */
16000         expression = TREE_OPERAND (expression, 0);
16001         if (!expression)
16002           {
16003             /* If there are no operands, it must be an expression such
16004                as "int()". This should not happen for aggregate types
16005                because it would form non-constant expressions.  */
16006             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
16007
16008             return false;
16009           }
16010
16011         if (TREE_CODE (expression) == TREE_LIST)
16012           return any_value_dependent_elements_p (expression);
16013
16014         return value_dependent_expression_p (expression);
16015       }
16016
16017     case SIZEOF_EXPR:
16018     case ALIGNOF_EXPR:
16019       /* A `sizeof' expression is value-dependent if the operand is
16020          type-dependent or is a pack expansion.  */
16021       expression = TREE_OPERAND (expression, 0);
16022       if (PACK_EXPANSION_P (expression))
16023         return true;
16024       else if (TYPE_P (expression))
16025         return dependent_type_p (expression);
16026       return type_dependent_expression_p (expression);
16027
16028     case SCOPE_REF:
16029       return dependent_scope_ref_p (expression, value_dependent_expression_p);
16030
16031     case COMPONENT_REF:
16032       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
16033               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
16034
16035     case CALL_EXPR:
16036       /* A CALL_EXPR may appear in a constant expression if it is a
16037          call to a builtin function, e.g., __builtin_constant_p.  All
16038          such calls are value-dependent.  */
16039       return true;
16040
16041     case NONTYPE_ARGUMENT_PACK:
16042       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
16043          is value-dependent.  */
16044       {
16045         tree values = ARGUMENT_PACK_ARGS (expression);
16046         int i, len = TREE_VEC_LENGTH (values);
16047         
16048         for (i = 0; i < len; ++i)
16049           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
16050             return true;
16051         
16052         return false;
16053       }
16054
16055     case TRAIT_EXPR:
16056       {
16057         tree type2 = TRAIT_EXPR_TYPE2 (expression);
16058         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
16059                 || (type2 ? dependent_type_p (type2) : false));
16060       }
16061
16062     case MODOP_EXPR:
16063       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
16064               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
16065
16066     default:
16067       /* A constant expression is value-dependent if any subexpression is
16068          value-dependent.  */
16069       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
16070         {
16071         case tcc_reference:
16072         case tcc_unary:
16073           return (value_dependent_expression_p
16074                   (TREE_OPERAND (expression, 0)));
16075
16076         case tcc_comparison:
16077         case tcc_binary:
16078           return ((value_dependent_expression_p
16079                    (TREE_OPERAND (expression, 0)))
16080                   || (value_dependent_expression_p
16081                       (TREE_OPERAND (expression, 1))));
16082
16083         case tcc_expression:
16084         case tcc_vl_exp:
16085           {
16086             int i;
16087             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
16088               /* In some cases, some of the operands may be missing.
16089                  (For example, in the case of PREDECREMENT_EXPR, the
16090                  amount to increment by may be missing.)  That doesn't
16091                  make the expression dependent.  */
16092               if (TREE_OPERAND (expression, i)
16093                   && (value_dependent_expression_p
16094                       (TREE_OPERAND (expression, i))))
16095                 return true;
16096             return false;
16097           }
16098
16099         default:
16100           break;
16101         }
16102     }
16103
16104   /* The expression is not value-dependent.  */
16105   return false;
16106 }
16107
16108 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
16109    [temp.dep.expr].  */
16110
16111 bool
16112 type_dependent_expression_p (tree expression)
16113 {
16114   if (!processing_template_decl)
16115     return false;
16116
16117   if (expression == error_mark_node)
16118     return false;
16119
16120   /* An unresolved name is always dependent.  */
16121   if (TREE_CODE (expression) == IDENTIFIER_NODE
16122       || TREE_CODE (expression) == USING_DECL)
16123     return true;
16124
16125   /* Some expression forms are never type-dependent.  */
16126   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
16127       || TREE_CODE (expression) == SIZEOF_EXPR
16128       || TREE_CODE (expression) == ALIGNOF_EXPR
16129       || TREE_CODE (expression) == TRAIT_EXPR
16130       || TREE_CODE (expression) == TYPEID_EXPR
16131       || TREE_CODE (expression) == DELETE_EXPR
16132       || TREE_CODE (expression) == VEC_DELETE_EXPR
16133       || TREE_CODE (expression) == THROW_EXPR)
16134     return false;
16135
16136   /* The types of these expressions depends only on the type to which
16137      the cast occurs.  */
16138   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
16139       || TREE_CODE (expression) == STATIC_CAST_EXPR
16140       || TREE_CODE (expression) == CONST_CAST_EXPR
16141       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
16142       || TREE_CODE (expression) == CAST_EXPR)
16143     return dependent_type_p (TREE_TYPE (expression));
16144
16145   /* The types of these expressions depends only on the type created
16146      by the expression.  */
16147   if (TREE_CODE (expression) == NEW_EXPR
16148       || TREE_CODE (expression) == VEC_NEW_EXPR)
16149     {
16150       /* For NEW_EXPR tree nodes created inside a template, either
16151          the object type itself or a TREE_LIST may appear as the
16152          operand 1.  */
16153       tree type = TREE_OPERAND (expression, 1);
16154       if (TREE_CODE (type) == TREE_LIST)
16155         /* This is an array type.  We need to check array dimensions
16156            as well.  */
16157         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
16158                || value_dependent_expression_p
16159                     (TREE_OPERAND (TREE_VALUE (type), 1));
16160       else
16161         return dependent_type_p (type);
16162     }
16163
16164   if (TREE_CODE (expression) == SCOPE_REF
16165       && dependent_scope_ref_p (expression,
16166                                 type_dependent_expression_p))
16167     return true;
16168
16169   if (TREE_CODE (expression) == FUNCTION_DECL
16170       && DECL_LANG_SPECIFIC (expression)
16171       && DECL_TEMPLATE_INFO (expression)
16172       && (any_dependent_template_arguments_p
16173           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
16174     return true;
16175
16176   if (TREE_CODE (expression) == TEMPLATE_DECL
16177       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
16178     return false;
16179
16180   if (TREE_CODE (expression) == STMT_EXPR)
16181     expression = stmt_expr_value_expr (expression);
16182
16183   if (TREE_TYPE (expression) == unknown_type_node)
16184     {
16185       if (TREE_CODE (expression) == ADDR_EXPR)
16186         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
16187       if (TREE_CODE (expression) == COMPONENT_REF
16188           || TREE_CODE (expression) == OFFSET_REF)
16189         {
16190           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
16191             return true;
16192           expression = TREE_OPERAND (expression, 1);
16193           if (TREE_CODE (expression) == IDENTIFIER_NODE)
16194             return false;
16195         }
16196       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
16197       if (TREE_CODE (expression) == SCOPE_REF)
16198         return false;
16199
16200       if (TREE_CODE (expression) == BASELINK)
16201         expression = BASELINK_FUNCTIONS (expression);
16202
16203       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
16204         {
16205           if (any_dependent_template_arguments_p
16206               (TREE_OPERAND (expression, 1)))
16207             return true;
16208           expression = TREE_OPERAND (expression, 0);
16209         }
16210       gcc_assert (TREE_CODE (expression) == OVERLOAD
16211                   || TREE_CODE (expression) == FUNCTION_DECL);
16212
16213       while (expression)
16214         {
16215           if (type_dependent_expression_p (OVL_CURRENT (expression)))
16216             return true;
16217           expression = OVL_NEXT (expression);
16218         }
16219       return false;
16220     }
16221
16222   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
16223
16224   return (dependent_type_p (TREE_TYPE (expression)));
16225 }
16226
16227 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
16228    contains a type-dependent expression.  */
16229
16230 bool
16231 any_type_dependent_arguments_p (const_tree args)
16232 {
16233   while (args)
16234     {
16235       tree arg = TREE_VALUE (args);
16236
16237       if (type_dependent_expression_p (arg))
16238         return true;
16239       args = TREE_CHAIN (args);
16240     }
16241   return false;
16242 }
16243
16244 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
16245    expressions) contains any value-dependent expressions.  */
16246
16247 bool
16248 any_value_dependent_elements_p (const_tree list)
16249 {
16250   for (; list; list = TREE_CHAIN (list))
16251     if (value_dependent_expression_p (TREE_VALUE (list)))
16252       return true;
16253
16254   return false;
16255 }
16256
16257 /* Returns TRUE if the ARG (a template argument) is dependent.  */
16258
16259 bool
16260 dependent_template_arg_p (tree arg)
16261 {
16262   if (!processing_template_decl)
16263     return false;
16264
16265   if (TREE_CODE (arg) == TEMPLATE_DECL
16266       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
16267     return dependent_template_p (arg);
16268   else if (ARGUMENT_PACK_P (arg))
16269     {
16270       tree args = ARGUMENT_PACK_ARGS (arg);
16271       int i, len = TREE_VEC_LENGTH (args);
16272       for (i = 0; i < len; ++i)
16273         {
16274           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
16275             return true;
16276         }
16277
16278       return false;
16279     }
16280   else if (TYPE_P (arg))
16281     return dependent_type_p (arg);
16282   else
16283     return (type_dependent_expression_p (arg)
16284             || value_dependent_expression_p (arg));
16285 }
16286
16287 /* Returns true if ARGS (a collection of template arguments) contains
16288    any types that require structural equality testing.  */
16289
16290 bool
16291 any_template_arguments_need_structural_equality_p (tree args)
16292 {
16293   int i;
16294   int j;
16295
16296   if (!args)
16297     return false;
16298   if (args == error_mark_node)
16299     return true;
16300
16301   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16302     {
16303       tree level = TMPL_ARGS_LEVEL (args, i + 1);
16304       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16305         {
16306           tree arg = TREE_VEC_ELT (level, j);
16307           tree packed_args = NULL_TREE;
16308           int k, len = 1;
16309
16310           if (ARGUMENT_PACK_P (arg))
16311             {
16312               /* Look inside the argument pack.  */
16313               packed_args = ARGUMENT_PACK_ARGS (arg);
16314               len = TREE_VEC_LENGTH (packed_args);
16315             }
16316
16317           for (k = 0; k < len; ++k)
16318             {
16319               if (packed_args)
16320                 arg = TREE_VEC_ELT (packed_args, k);
16321
16322               if (error_operand_p (arg))
16323                 return true;
16324               else if (TREE_CODE (arg) == TEMPLATE_DECL
16325                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
16326                 continue;
16327               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
16328                 return true;
16329               else if (!TYPE_P (arg) && TREE_TYPE (arg)
16330                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
16331                 return true;
16332             }
16333         }
16334     }
16335
16336   return false;
16337 }
16338
16339 /* Returns true if ARGS (a collection of template arguments) contains
16340    any dependent arguments.  */
16341
16342 bool
16343 any_dependent_template_arguments_p (const_tree args)
16344 {
16345   int i;
16346   int j;
16347
16348   if (!args)
16349     return false;
16350   if (args == error_mark_node)
16351     return true;
16352
16353   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16354     {
16355       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
16356       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16357         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
16358           return true;
16359     }
16360
16361   return false;
16362 }
16363
16364 /* Returns TRUE if the template TMPL is dependent.  */
16365
16366 bool
16367 dependent_template_p (tree tmpl)
16368 {
16369   if (TREE_CODE (tmpl) == OVERLOAD)
16370     {
16371       while (tmpl)
16372         {
16373           if (dependent_template_p (OVL_FUNCTION (tmpl)))
16374             return true;
16375           tmpl = OVL_CHAIN (tmpl);
16376         }
16377       return false;
16378     }
16379
16380   /* Template template parameters are dependent.  */
16381   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
16382       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
16383     return true;
16384   /* So are names that have not been looked up.  */
16385   if (TREE_CODE (tmpl) == SCOPE_REF
16386       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
16387     return true;
16388   /* So are member templates of dependent classes.  */
16389   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
16390     return dependent_type_p (DECL_CONTEXT (tmpl));
16391   return false;
16392 }
16393
16394 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
16395
16396 bool
16397 dependent_template_id_p (tree tmpl, tree args)
16398 {
16399   return (dependent_template_p (tmpl)
16400           || any_dependent_template_arguments_p (args));
16401 }
16402
16403 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
16404    is dependent.  */
16405
16406 bool
16407 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
16408 {
16409   int i;
16410
16411   if (!processing_template_decl)
16412     return false;
16413
16414   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
16415     {
16416       tree decl = TREE_VEC_ELT (declv, i);
16417       tree init = TREE_VEC_ELT (initv, i);
16418       tree cond = TREE_VEC_ELT (condv, i);
16419       tree incr = TREE_VEC_ELT (incrv, i);
16420
16421       if (type_dependent_expression_p (decl))
16422         return true;
16423
16424       if (init && type_dependent_expression_p (init))
16425         return true;
16426
16427       if (type_dependent_expression_p (cond))
16428         return true;
16429
16430       if (COMPARISON_CLASS_P (cond)
16431           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
16432               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
16433         return true;
16434
16435       if (TREE_CODE (incr) == MODOP_EXPR)
16436         {
16437           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
16438               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
16439             return true;
16440         }
16441       else if (type_dependent_expression_p (incr))
16442         return true;
16443       else if (TREE_CODE (incr) == MODIFY_EXPR)
16444         {
16445           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
16446             return true;
16447           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
16448             {
16449               tree t = TREE_OPERAND (incr, 1);
16450               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
16451                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
16452                 return true;
16453             }
16454         }
16455     }
16456
16457   return false;
16458 }
16459
16460 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
16461    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
16462    no such TYPE can be found.  Note that this function peers inside
16463    uninstantiated templates and therefore should be used only in
16464    extremely limited situations.  ONLY_CURRENT_P restricts this
16465    peering to the currently open classes hierarchy (which is required
16466    when comparing types).  */
16467
16468 tree
16469 resolve_typename_type (tree type, bool only_current_p)
16470 {
16471   tree scope;
16472   tree name;
16473   tree decl;
16474   int quals;
16475   tree pushed_scope;
16476   tree result;
16477
16478   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
16479
16480   scope = TYPE_CONTEXT (type);
16481   name = TYPE_IDENTIFIER (type);
16482
16483   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
16484      it first before we can figure out what NAME refers to.  */
16485   if (TREE_CODE (scope) == TYPENAME_TYPE)
16486     scope = resolve_typename_type (scope, only_current_p);
16487   /* If we don't know what SCOPE refers to, then we cannot resolve the
16488      TYPENAME_TYPE.  */
16489   if (TREE_CODE (scope) == TYPENAME_TYPE)
16490     return type;
16491   /* If the SCOPE is a template type parameter, we have no way of
16492      resolving the name.  */
16493   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
16494     return type;
16495   /* If the SCOPE is not the current instantiation, there's no reason
16496      to look inside it.  */
16497   if (only_current_p && !currently_open_class (scope))
16498     return type;
16499   /* If SCOPE isn't the template itself, it will not have a valid
16500      TYPE_FIELDS list.  */
16501   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
16502     /* scope is either the template itself or a compatible instantiation
16503        like X<T>, so look up the name in the original template.  */
16504     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
16505   else
16506     /* scope is a partial instantiation, so we can't do the lookup or we
16507        will lose the template arguments.  */
16508     return type;
16509   /* Enter the SCOPE so that name lookup will be resolved as if we
16510      were in the class definition.  In particular, SCOPE will no
16511      longer be considered a dependent type.  */
16512   pushed_scope = push_scope (scope);
16513   /* Look up the declaration.  */
16514   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
16515
16516   result = NULL_TREE;
16517   
16518   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
16519      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
16520   if (!decl)
16521     /*nop*/;
16522   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
16523            && TREE_CODE (decl) == TYPE_DECL)
16524     {
16525       result = TREE_TYPE (decl);
16526       if (result == error_mark_node)
16527         result = NULL_TREE;
16528     }
16529   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
16530            && DECL_CLASS_TEMPLATE_P (decl))
16531     {
16532       tree tmpl;
16533       tree args;
16534       /* Obtain the template and the arguments.  */
16535       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
16536       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
16537       /* Instantiate the template.  */
16538       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
16539                                       /*entering_scope=*/0,
16540                                       tf_error | tf_user);
16541       if (result == error_mark_node)
16542         result = NULL_TREE;
16543     }
16544   
16545   /* Leave the SCOPE.  */
16546   if (pushed_scope)
16547     pop_scope (pushed_scope);
16548
16549   /* If we failed to resolve it, return the original typename.  */
16550   if (!result)
16551     return type;
16552   
16553   /* If lookup found a typename type, resolve that too.  */
16554   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
16555     {
16556       /* Ill-formed programs can cause infinite recursion here, so we
16557          must catch that.  */
16558       TYPENAME_IS_RESOLVING_P (type) = 1;
16559       result = resolve_typename_type (result, only_current_p);
16560       TYPENAME_IS_RESOLVING_P (type) = 0;
16561     }
16562   
16563   /* Qualify the resulting type.  */
16564   quals = cp_type_quals (type);
16565   if (quals)
16566     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
16567
16568   return result;
16569 }
16570
16571 /* EXPR is an expression which is not type-dependent.  Return a proxy
16572    for EXPR that can be used to compute the types of larger
16573    expressions containing EXPR.  */
16574
16575 tree
16576 build_non_dependent_expr (tree expr)
16577 {
16578   tree inner_expr;
16579
16580   /* Preserve null pointer constants so that the type of things like
16581      "p == 0" where "p" is a pointer can be determined.  */
16582   if (null_ptr_cst_p (expr))
16583     return expr;
16584   /* Preserve OVERLOADs; the functions must be available to resolve
16585      types.  */
16586   inner_expr = expr;
16587   if (TREE_CODE (inner_expr) == STMT_EXPR)
16588     inner_expr = stmt_expr_value_expr (inner_expr);
16589   if (TREE_CODE (inner_expr) == ADDR_EXPR)
16590     inner_expr = TREE_OPERAND (inner_expr, 0);
16591   if (TREE_CODE (inner_expr) == COMPONENT_REF)
16592     inner_expr = TREE_OPERAND (inner_expr, 1);
16593   if (is_overloaded_fn (inner_expr)
16594       || TREE_CODE (inner_expr) == OFFSET_REF)
16595     return expr;
16596   /* There is no need to return a proxy for a variable.  */
16597   if (TREE_CODE (expr) == VAR_DECL)
16598     return expr;
16599   /* Preserve string constants; conversions from string constants to
16600      "char *" are allowed, even though normally a "const char *"
16601      cannot be used to initialize a "char *".  */
16602   if (TREE_CODE (expr) == STRING_CST)
16603     return expr;
16604   /* Preserve arithmetic constants, as an optimization -- there is no
16605      reason to create a new node.  */
16606   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
16607     return expr;
16608   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
16609      There is at least one place where we want to know that a
16610      particular expression is a throw-expression: when checking a ?:
16611      expression, there are special rules if the second or third
16612      argument is a throw-expression.  */
16613   if (TREE_CODE (expr) == THROW_EXPR)
16614     return expr;
16615
16616   if (TREE_CODE (expr) == COND_EXPR)
16617     return build3 (COND_EXPR,
16618                    TREE_TYPE (expr),
16619                    TREE_OPERAND (expr, 0),
16620                    (TREE_OPERAND (expr, 1)
16621                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
16622                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
16623                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
16624   if (TREE_CODE (expr) == COMPOUND_EXPR
16625       && !COMPOUND_EXPR_OVERLOADED (expr))
16626     return build2 (COMPOUND_EXPR,
16627                    TREE_TYPE (expr),
16628                    TREE_OPERAND (expr, 0),
16629                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
16630
16631   /* If the type is unknown, it can't really be non-dependent */
16632   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
16633
16634   /* Otherwise, build a NON_DEPENDENT_EXPR.
16635
16636      REFERENCE_TYPEs are not stripped for expressions in templates
16637      because doing so would play havoc with mangling.  Consider, for
16638      example:
16639
16640        template <typename T> void f<T& g>() { g(); }
16641
16642      In the body of "f", the expression for "g" will have
16643      REFERENCE_TYPE, even though the standard says that it should
16644      not.  The reason is that we must preserve the syntactic form of
16645      the expression so that mangling (say) "f<g>" inside the body of
16646      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
16647      stripped here.  */
16648   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
16649 }
16650
16651 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
16652    Return a new TREE_LIST with the various arguments replaced with
16653    equivalent non-dependent expressions.  */
16654
16655 tree
16656 build_non_dependent_args (tree args)
16657 {
16658   tree a;
16659   tree new_args;
16660
16661   new_args = NULL_TREE;
16662   for (a = args; a; a = TREE_CHAIN (a))
16663     new_args = tree_cons (NULL_TREE,
16664                           build_non_dependent_expr (TREE_VALUE (a)),
16665                           new_args);
16666   return nreverse (new_args);
16667 }
16668
16669 #include "gt-cp-pt.h"